《代码大全2》阅读感想
我选择阅读的是《代码大全》第二版这本书。
第一眼看到这本书的直观感受是:这也太厚了点。不过它的厚度或许也说明了它的思想的深度和广度。我是先翻了一下前言和目录,感觉讲的东西确实挺多的,也挺细致的。
这本书我现在还在看,这么厚的一本书十天半个月自然是很难看完的,我觉得也没必要一下子看完,好书是要慢慢品的。下面,对我阅读的几章做一下总结:
1个人性格
查看目录后,我发现我对 “个人性格”(第33章)很感兴趣,然后最开始也是看的这部分。作者主要介绍了几种与编程最有关系的几种性格:谦虚、求知欲、诚实、创造性和纪律,以及高明的偷懒。我是一口气把这部分阅读完的,第一次看专业方向的书籍有种看散文杂文的感觉。
举例来说,作者在强调代码的可读性时这样写道:
”我曾见过最糟糕的代码,其作者不让任何人看懂她的程序。最后,她的上司威胁要解雇她,如果她还不合作的话。她的代码没有注释,变量名尽是些x,xx,xx1和xx2之类的东西,而且还都是全局变量。上司的老板却以为她是个高手,因为她能很快改正错误。其实正是其低劣的代码质量给了她表现纠错能力的大量机会。”
我觉得这段话简直就是一篇微小说,写的有趣又真实。作者的语言风格也是很平易近人的,所以书很好读,一点都不晦涩难懂。
“编程狂人”一节前面那段引述:
“如果你还没有对某个程序花费至少一个月的时间——一天工作16个小时,其余8小时也睡得不安稳,老是梦到它,为解决“最后错误”连熬几夜——你就算没有编过真正复杂的程序,你也不会感受到编程中最激动人心的东西。
——Edward Yourdon”
作者接着写的是这样的一句话”这种对编程的痴迷简直是胡闹”。这个和我的第一个问题有关——
编程人员是不是应当以编程为第一位,牺牲睡眠也是值得鼓励的?
我当然知道这算不上是一个问题,个人习惯,因人而异嘛,没什么好说的。我其实很尊重那些熬夜编程的人,首先这是个人的选择,其次这其中肯定是有着对编程的浓烈的兴趣的。看到作者的这段话,感觉也没必要因为没有彻夜奋战编程而质疑自己对于编程的热情。
2布局与风格
这是关于“布局与风格”(第33章)的一些总结和思考。
在“数据声明的布局”一节中,作者强调了3点:
每行只声明一个变量、变量声明应尽量接近其首次使用的位置以及合理组织声明顺序。
后两点我也十分赞同,但是对于第一点,我觉得还是有失偏颇。同样意义的变量放在一行声明也无可厚非吧,而且还节省版面。
另外,作者在第758页也提到了他关于赋值语句等号是否对齐这一问题的看法的转变,有些问题的看法是会根据实践经验的增加而发生改变的。或许我以后代码写多了看法也会变,同理,作者应该也是这样。
在“好布局有什么用”一节中提到的括号使用风格:
for (…)
{
}
以及
for (…) {
}
我之前是偏向于后一种,现在却喜欢前一种了。有的时候也会想:程序布局也需要重视吗?这是我的第2个问题,和节标题表达的意思差不多。当然,答案是是的。
特别喜欢作者在这节最后的一段话
“这件事情连同上面提到的研究,都表明结构能帮助高手去感知、理解和记住程序的重要特性。编程高手通常会恪守自己的风格,即使和其他高手的风格迥然不同。底线是前后如一地组织程序,相比而言,关于程序细节特定的方法就次要得多了。”
回答得真大气!
3一般控制问题
在“布尔表达式的常见问题”一节,作者提到”在C家族语言中,应该把常量放在比较的左端”,因为如果误把==写成=,将常量放在等号左侧,编译器会捕获这个错误。感觉这一点平常老师也提过,但是自己写程序时还是没有那样做,争取以后把这个改一下。
在“空语句”一节以及”避免使用空循环”一节中,作者提到应该为空语句创建一个DoNothing()预处理宏或者内联函数。可是我觉得没必要,一个分号我也觉得挺顺眼的。不过,也许是出于工程学的角度,作者才会这样建议吧,毕竟代码多了,分号很可能看花眼。这算是一个小问题吧:有必要避免空循环吗?
4协同构建
因为这次是首次接触到“结对编程”,所以特意把 “协同构建”(21章)这一章看了下。虽然课上老师提过结对编程的诸多好处,可是我觉得要想成功运用结对编程肯定不容易,于是第4个问题:结对编程如何成功有效地被利用?刚刚书中也有这方面的回答,作者在“成功运用结对编程的关键”一节中提出了几条准则:
用编码规范来支持结对编程
不要让结对编程变成旁观
不要强迫在简单的问题上使用结对编程
有规律地对结对人员和分配的工作进行轮换
鼓励双方跟上对方的步伐
确认两个人都能够看到显示器
不要强迫程序员与自己关系紧张的人相对
避免新手组合
指定一个组长
就我这次结对的经历来看,我觉得第二点尤为重要,不掌握键盘的人应该分析代码,这样虽然你的手没在敲代码,但是还是参与进来了,感觉在实践中参与感是很重要的。
5软件工艺
书中的侧边部分会有一些交叉参考的提示,以及一些人关于这部分的言论。我觉得这真的是很值得赞扬的地方。回正题——我在交叉参考里看到过很多次“首先为人写程序,其次才是为机器”,这正是贯穿全本书的一个主题,即强调可读性。我觉得这句话都可以作为一种准则了。
另外,之前我对于编程语言的选择有一点疑问,不清楚自己到底该不该学很多门语言,也不知道该选择哪种去学习。 “深入一门语言去编程,不浮于表面”一节给了我一点启示。我现在的看法是:可以首先多了解自己比较感兴趣的几门语言,然后选择一门深入学习。