Reading "The Practice of Programming" by Kernighan and Pike. (chinese)

当时是2008年. 我到学院的图书馆向图书管理员借《资本论》,马克思和恩格斯的那一本。 图书管理员困惑的看我,然后慎重地问我:“为什么?”
有时候,我的性格是在遇到这种现象的时候:我已经提前准备好了简单的、容易理解的、合理的、无聊的答案,敷衍过度好奇的人,但是被问到这个问题的时刻,灵光一现,脱口而出某些似乎有理的但是完全不可信的答案。 “什么为什么?”我回答,“党历史课有期中考试,需要准备好”。 图书管理员们的眼睛变得比茶托还大,她们都呆住不动,甚至不关注我那位。 几秒钟的停顿之后接待我的员工再次谨慎地问我:“恢复了吗?” 捉弄已经开始了,没办法撤退,但是我不需要撤退,我已经知道怎么回答:“是选修课,可能选的人不多”。 图书馆员工回神了一点,然后告诉我她需要去储存室找一找,因为好久没人申请借这种书,但是储存室是在楼下不远的地方,只需要等十分钟。
在这十分钟当中,我在图书馆站着看其他学生借阅什么书。 我旁边站着一个小伙,应该也是第一年或者第二年的。 他在咨询他的管理员:“请给我那本编程书… Kernighan和另一个人一起写的,我有点忘记了他的名字”。 图书管理员立刻理解他的意思,但是为了以防万一,她确认了一遍:”Kernighan和Ritchie,对吧?” “不是”同学讲,“肯定不是Ritchie,这个我记得很清楚”。 “哦!我记起来了,Kernighan和Pike.” “Kernighan和Pike?”员工再一次怀疑地问他? “你肯定不是Ritchie吗?” 但是同学坚定他的选择,因此她也离开去储存室寻找未知的书。
总之,过了很长时间,现在我在我的博客上发表我的书评:Kernighan和Pike的《编程实践》。
1. 书评
1.1. 这是什么样的书以及我为什么决定阅读它?
呃,肯定我决定阅读“不那么有名的Kernighan”不是因为我好奇我的老同学到底要借阅什么书。
我着手阅读“编程实践”是因为我听过很多说它好的评论。 此评论强调这本书能介绍“编程职业性”的技巧,以避免聚焦在任何具体的语言或者算法。 也有很多评论一起提到《编程实践》和《实用者程序员》(已经在我的网站被评论)。
总而言之,我在我的第一个工作单位刚刚开始工作在那时,读过《The Rules of Work》。 那本书给我介绍了很多工作成功的秘密,然后《实用者程序员》成为它的续编,适合具体职业后来的经验。
《编程实践》又更具体的深入程序员的职业,所以其实它的几个方面过时了,因为职业本身变了。 确实它介绍的很多话题今天也值得学习,但是他们在例子里面使用的C语言风格,今天令人困惑。 平心而言,这本书不只使用纯C,它也用C++、Java、AWK、Perl以及汇编语言,就是说所有值得注意的语言。 但是作者很明显的还没有感受到我们当代程序员感到的痛苦。
即便如此,《实用者程序员》只触及到一点点的话题,《编程实践》分析得更深,而且如果我不理解它们的大部分,就会感觉到更好奇。
1.2. 书籍介绍什么主题?
让我简洁的介绍每个程序员必须理解的主题,值得在大学一年跟计算机结构和初级程序语言一起学习:
- 风格、美貌、注释和尊敬代码
- 基础数据结构和算法:链表、数组、树、词典、排序和搜索
- 系统设计:模块、组件、责任划分原理、资源管理
- 程序员工具:编译器、解释器、高层辅助性程序语言
- 测试
- 调试
- 性能分析
- 移植
- 文本处理和文本编辑器
《编程实践》包含这个列表的每个主题部分内容,除了最后一项,提供足够探索该方向的知识,但是不把读者埋葬在不需要的细节。 从另一个角度来看,它说的多个事实今天听起来有点幼稚。
这本书比较少触及团队工作,除了论设计系统的责任划分原理之外。
1.3. 我喜欢和不喜欢什么?
几个被提到的主题,尤其是编译器和解释器都介绍的不够详细,因此更会迷惑新手读者而不会启发。 即便如此,其它的主题都介绍的比较好。
这本书不提到代码和文本的编辑器是有点可惜。 我感觉如果熟练的掌握它们,就可以很大的提高效率。
我特别喜欢使用不同的语言解决同样的问题和对比速度和结果的那一章。 我那么喜欢它,甚至解决了它附属的几个练习题,不是心算,而是用另外一个我喜欢的程序语言。
总而言之,叙述的风格类似于《C程序设计语言》。 就是说:代码里有错别字、艰难的主题被介绍地过度简单以及很多重要的细节被忽略;结果书籍不那么长,而且每一章有一尝试就可以读和理解的内容。 这本书的语言比较灵活和容易理解,不令人产生立刻关闭书和睡觉的欲望。
非常好的是,每一章有附属的练习题。 我推荐所有有探索欲的一二年学生做它,因为它们助长正确的思想。
我能不能把这本书推荐给所有人? 呵,熟悉的程序员应该不太需要阅读它,因为他们已经知道它的内容。 对编程什么都不知道的人应该不会理解它。 但是对大学一二年级的学生它可以作为简洁的职业介绍。
谢谢大家阅读!