第8周读书笔记-读《编程珠玑》有感

读《编程珠玑》有感

《编程珠玑》(后文简称《珠玑》)在序章中就开宗明义地提出了两个问题:一个是如何对实际问题进行抽象,找出问题的独特性质。二是一个富有意思的小题目:“如何在1MB内存内对0~10^7内若干元素组成的集合内的整数进行排序(10s内)”。一开始我想到的是归并排序,但是书中提出可以利用位图的位向量,不用考虑任何排序算法,只需要遍历两次即可,忽然就有茅塞顿开之感,从这个简单的例子中就可以对一些思想窥见一斑:位图数据结构、简单的设计、时间-空间的折中……整本书其实都是围绕这两点展开,让我大感裨益。

整本书涉及了很多东西,让我在意的首先是算法。也许是上学期“数据结构与算法”上机的后遗症,现在对于算法比较敏感。算法与其他思想地位相同,但是我认为在一般的编程层面上它具有更重要的影响。例如书中举出的例子:“给定一个英语词典,找出其中所有的变位词集合,例如pots,stop,tops互为变位词。”直接处理的话比较复杂,需要大量的计算和比较。由于我们只要找到同位词,其实只要使同位词编码相同就可以。我认为算法首先是一种有序的思想(当然需要严谨的数理逻辑证明),然而仅仅是一种思想还不够,它还需要能够高效正确地解决问题。作为一个学习算法的人,我们不应该认为算法有着标准答案。事实上,不同的问题常常有着不同适合的算法。我们所要做的不单单是简单地从已有的算法中“找”一种最佳的,还应该有着自己的想法。

那么实际问题的情况非常复杂,我们应该如何结合实际选择合适的解决方案呢?《珠玑》告诉我们:要多想。书中有很多这方面的技巧,例如粗略估算中Brooklyn Bridge的设计强度估算,代码调优等等。然而纸上谈兵是不行的,还是得依靠实践出真知。就像以前软工群里几位同学讨论的那样。让我印象深刻的是群里一位比较牛的同学的阐述,他说他时常重构自己所写的代码,因为有时他的选型有更好的选择。而同时他认为代码重构是提升自己能力的一个良好途径,我深以为然。我偶尔也重构自己的代码,然后就会发现以前的自己代码中的毛病是有多……了,也能够认识到自己应当注重的点在哪里。并且写新代码的过程也是一个锻炼自己的过程,有些东西不是说写过一遍就能保证下次就bug free的(事实上一般不能)。长此以往,不能说保证能成为牛人,但起码能在用一个还行的速度敲完代码之后说一句:“无他,唯手熟尔。”

总的体会是这样子,当中的题目我只是看了几题,并没有时间细做,也算一个小小的遗憾吧。暑假里争取能够做一做,在深刻体味一下。

原文地址:https://www.cnblogs.com/redlogic/p/8955816.html

时间: 2024-08-03 07:00:21

第8周读书笔记-读《编程珠玑》有感的相关文章

第九次读书笔记——读《代码整洁之道》有感

第九次读书笔记--读<代码整洁之道>有感 "相对于任何宏伟景愿,对细节的关注甚至是更为关键的专业的基础.首先,开发者通过小型实践获得可用于大型实践的技能和信用度.其次,宏伟建筑中最细小的部分,比如关不紧的门,有点没有铺平的地板,甚至是凌乱的桌面,都会将整个大局的魅力毁灭殆尽."看完了这本书,感觉书中的这句话是整本书的核心.个人感觉这本书给我带来的更多的不是能力上的提升,而是思想上对代码整洁有了整体的把握. 首先,这本书让我们在思想层面上认识到了代码整洁的必要性,只有思想有了

第二周读书笔记《构建之法》

构建之法读书笔记 #wmd-preview h1 { color: #0077bb } 构建之法读书笔记 沈三景 PB15061249 软件工程 读书笔记 前言 本周阅读了构建之法的四.五两个个章节.这三个章节主要讲述了代码规范.结对编程.团队模式.开发流程. 第四章 两人合作 首先提到的是代码规范,程序员写的代码不仅要给机器看,还要给人看.好的代码规范能事半功倍.代码规范有分为代码风格规范和代码设计规范.代码风格规范是指让代码保持简明,让代码更易读.书中给出的规范是Tab键为4个空格,行宽为1

第一周读书笔记《构建之法》

构建之法读书笔记 #wmd-preview h1 { color: #0077bb } 构建之法读书笔记 沈三景 PB15061249 软件工程 读书笔记 前言 开学前两周,杂事颇多,没有充足的时间阅读<构建之法>,只能每天在睡前阅读约半小时,故只看了前三章.虽如此,但仍收获很多,下面就是我对前四章内容的一些看法和理解,如有理解偏颇之处,望见谅. 第一章 概论 本章主要介绍了软件工程是什么?软件工程的目标是什么?为了解决前一个问题,作者首先提出了两个等式: 程序 = 数据结构 + 算法 软件

第三周读书笔记

<程序员的职业修养>读书笔记 本书一直围绕着"专业"二字展开,以作者的观点阐述了何为"专业的程序员":专业的程序员是如何思考,如何解决问题,如何承担责任. 所有软件项目的知道原则是,软件要易于修改.如果你希望自己的软件灵活可变,那就应该市场修改它!要证明软件易于修改,唯一的办法就是做些实际的修改.如果你发现这些改动并不像你预想的那样简单,你就应该改进设计,使后续修改改变简单.有时开发期已过进入测试阶段,可能还会加一点需求,如果是影响到逻辑上的改动会比较麻

第六周读书笔记《极客与团队》

<极客与团队>读书笔记 做程序员这个职业,就意味着与别人在工作上会有不少沟通与交流,处于一个团队中,如何能更好地编写代码,在团队中如鱼得水,过得更加开心,<极客与团队>这本书就给了我一些启迪. 这本书其实针对的是极客们,希望他们能够认识到团队的重要性.书中提到程序员要建立可以理解的代码,要注意与人的沟通,而不是只顾着自己.这一点我深表赞同.邓老师也在一直强调,写的代码要注意注释,要跟别人进行交流,注意书写格式以使得代码阅读性更强.这是因为个人的工作只是团队工作的一部分,要想整个团队

第五周读书笔记

<c++应用程序性能优化>读书笔记(part3) 应用程序的启动性能是应用程序给最终用户的第一印象,是衡量一个程序易用性的重要指标.书的第三部分介绍了启动性能优化的一些方法,第七章介绍了应用程序的物理布局,第八章介绍了应用程序在windows和linux平台上的编译到启动的过程,第九章介绍了优化启动项的一些方法. 本章从动态链接库开始讲起,简单的介绍了一下DLL.这里其实我看的有点晕的,大概就是说DLL可以看成一个一个函数的集合,我们可以编写代码来调用.然后讲了一些类似微机原理课本上的知识,我

第二周读书笔记

本周我读的书是Frederick P.Brooks所著的<人月神话>这一十分著名的书籍.这是一本非常典型的外国科技作品:富含了幽默感和形象生动的比喻:"焦油坑"."人月神话"."外科手术队伍",看到这些词,你会很快在脑海中建立起一个很清晰的画面,同时也会产生很多疑问:这个东西,这幅画面的特点是什么?为什么要提起它?作者又想让我关注什么?而当我们仔细阅读其中的内容,很快就会发现,怀揣着这些问题的我们,可以迅速的感知到作者想要表达的重点是

第八周读书笔记《黑客与画家》

这周我阅读的书目是<黑客与画家>,感觉这本书是一本极其有趣味并值得我们深思的书,它主要介绍了现在社会一个特别但又重要的群体--黑客,讲述了他们的特点,以及他们的能力和这份能力为社会为自己带来了什么. 黑客的创造力:从书的标题可以看出,作者将黑客与画家相比拟,重点突出的应该是他们在创造力上的共同点,也说明,黑客从事的也是一门艺术创作,编程和其他艺术创作比如绘画.音乐是一样的.黑客和其他艺术家一样有着自己的执着和追求,他们丰富的思想世界,也往往是极度聪明的一类人,但却不被人理解,被看作是怪异的群体

第九周读书笔记

软件工程师的成长-构建之法 这两周算是比较忙了,抽空读了一下<构建之法>中的软件工程师的成长这章,颇有感悟. 团队项目也是以个人为单位的,所以软件工程师的能力直接影响到团队项目的质量.这是我以前没有意识到的,以前我只是想团队项目嘛,不就人多力量大,但是作者说团队项目也是由个人流程拼接起来的,这给我提了个醒,团队项目不是大锅饭,而是一条条流水线,每位工程师就像是一条流水线,只有每条流水线正常工作,衔接得很好,最后的项目才能做得好. 既然软件工程师的能力很重要,接下来作者自然讲述了软件工程师如何成