程序设计实践

Brian W. Kernighan

出版时间

2015-12-31

ISBN

9787115407863

评分

★★★★★

标签

编程

书籍介绍
这不本教人写出能跑代码的书,而是一本教人写出「让人看得懂的代码」的书。作者把目光投向了程序员最常忽视、却最影响协作质量的地带:变量该叫什么名字、函数名该如何暗示真假、资源分配与释放是否对称、全局与局部变量该用多长的标识符。这些看似琐碎的「风格」问题,恰恰是区分「写完程序」与「写好程序」的分水岭。书中所举的马尔可夫链、散列表、快速排序等实例,价值不在算法本身,而在展示如何为同一目标在多种数据结构间权衡取舍。它适合那些已能独立写代码、却希望自己的程序经得起他人审阅的开发者;也适合愿意在动手前先想清楚「数据如何组织」的初学者。当然,它的观点带着C时代的烙印,部分读者会觉得它过于简略——但正因如此,它更像一张指引方向的地图,而非包罗万象的字典。
作者简介
作者:[美] 布莱恩 W. 克尼汉(Brian W. Kernighan)罗勃·派克(Rob Pike) 译者:无 Brain Kernighan计算机科学家,曾与UNIX的缔造者Ken Thompson和Dennis Ritchie一起在贝尔实验室工作。他也是AWK和AMPL程序设计语言的共同作者。“K&R C”和“AWK”中的“K”都是指“Kernighan”。2000年起,他在普林斯顿大学计算机科学系任教授,并任本科部代表。 Rob Pike 软件工程师。他在贝尔实验室任职期间,作为UNIX小组成员参与开发了Plan 9和Inferno操作系统以及Limbo程序设计语言。目前他在Google公司工作,参与了Go和Sawzall程序设计语言的开发。
AI导读
核心看点
  • 编程风格与命名规范
  • 算法与数据结构选择
  • 性能测试与可移植性
读者共识
  • 经典实用的编程指南
  • 适合各阶段程序员参考
  • 部分观点略显陈旧
精彩摘录
  • "全局变量、全局函数、类和结构体都应该有说明性的名字,以表明它们在程序里扮演的角色。 相反,对局部变量使用短名字就够了。按常规方式使用的局部联邦可以采用极短的名字,比如i、j作为循环变量;p、q作为指针;s、t表示指针等。 函数应该采用动作性的名字。函数名应当用动作性的动词,后面可以跟着名词: now = date.getTime(); putchar('\n');"
  • "对返回布尔类型值(或真/假)的函数命名时,应该清楚地反映其返回值情况。比如下面的命名就不是很好了: if (checkoctal(c)) ... 因为这里函数名字就没有指明什么时候返回真,什么时候返回假。而下面这种写法就挺好: if (isoctal(c)) ... 这样就把返回真假的情况指明了。"
  • "一个变量的作用域越大,它的名字所携带的信息就应该越多。 全局变量使用具有说明性的名字,局部变量用短名字。根据定义,全局变量可以出现在整个程序中的任何地方,因此它们的名字应该足够长,具有足够的说明性,以便使读者能够记得它们是干什么用的。"
  • "释放资源与分配资源应该在同一个层次进行。 这种处理原则的另一种说法是:资源的分配状态在跨过界面时不应该改变。"
  • "当系统内部提供的代码太多时,人们将无法知道程序在其表面下到底做了什么。我们应该如何评价这种对控制和洞察力的丧失,这是更不清楚的事情。这也就是STL版本中遇到的情况,它的性能无法预料,也没有很容易的办法去解决问题。 目前存在着一种对软件的广泛的不断增长的关注:当程序库、界面和工具变得越来越复杂时,它们也变得更难以理解和控制了。当所有东西都正常运转时,功能丰富的程序设计环境可以是非常有生产效率的,但是如果它们出了毛病,那就没什么东西可以依靠了。如果问题牵涉到的是性能或者某些难于捉摸的逻辑错误时,我们很可能根本没有意识到有什么东西出了毛病。"
  • "scanf的所有参数都在函数被真正调用前已经求好值了,所以&profit[yr]实际使用的总是yr原来的值 (PS:scanf("%d %d", &yr, &profit[yr]);)"
  • "含有否定运算的条件表达式比较难理解。"
  • "如果你工作在一个不是自己写的程序上,请注意保留程序原有的风格。当你需要做修改时,不要使用你自己的风格,即使你特别喜欢它。程序的一致性比你本人的习惯更重要,因为这将使随你之后的其他人生活得更容易些。"
目录
目录
Chapter 1: Style / 风格 1
1.1 Names / 名字 3
1.2 Expressions and Statements / 表达式和语句6
1.3 Consistency and Idioms / 一致性和习惯用语10

显示全部
用户评论
养成良好的编程习惯, 学习优秀的编程手法. 本书可以说是涉及编程各阶段的技术与思路的引子, 可以按图索骥找具体的技术进行研究.
这本书或许会成为今年学过的最棒的CS书籍了(第二或许是SCIP)。全书虽然不厚 但包含了programming的方方面面。其中C2的Data Structure and Algorithm简洁明晰 C3和C4的Markov Chain和CSV值得反复琢磨。不同层册的prgrammer可以领悟到不同内容。期待《All of Programming》
Simplicity & Clarity; Generality; Evolution; Interface; Automation; Notation;
思想不多,读不进去。
一般
偏范式,一般
这本书是作者多年编程经历总结出来的很多经验。涉及编程的很多方面,比如编程风格,数据结构,性能调优,debug等等。虽然涉及了这么多方面,但是每一方面都写得很到位,不会让人觉得浅尝辄止。这个也推荐作为编程的入门读物。
还好
求书
收藏