The Practice of Programming

Brian W. Kernighan, Rob Pike

出版时间

1999-02-14

ISBN

9780201615869

评分

★★★★★
书籍介绍
这不是一本教你语法或框架的书,而是一本关于'如何写出经得起回看的程序'的手册。两位作者把几十年写代码、教书、和别人一起改 bug 攒下的经验,浓缩成一条条朴素却不易恪守的原则:全局变量用长名字、局部变量可短、函数名要带动作、布尔函数要自解释、释放资源要与分配同层。它最打动人的地方,恰恰是这些'简单的事实'——比如 scanf 参数在调用前已全部求值这类容易踩中的陷阱。读者反馈两极:有人称其'金玉良言永不过时'、面试时直接受益,也有人觉得对工作几年者'作用不大'。正因如此,它更适合入门到中级、愿意打磨代码风格的写码者;资深者或许会觉得平淡。它的独特之处在于不追逐技术潮流,而是守住编程里不变的东西。
AI导读
核心看点
  • 涵盖命名、调试、测试等全生命周期实践
  • 强调代码简洁与一致性,遵循KISS原则
  • 提供C/C++/Java等多语言实战经验
读者共识
  • 短小精悍,充满不过时的编程金玉良言
  • 经典之作,对改善代码风格有显著帮助
  • 理念超前,虽部分技术老旧但思想永存
精彩摘录
  • "全局变量、全局函数、类和结构体都应该有说明性的名字,以表明它们在程序里扮演的角色。 相反,对局部变量使用短名字就够了。按常规方式使用的局部联邦可以采用极短的名字,比如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]);)"
  • "含有否定运算的条件表达式比较难理解。"
  • "如果你工作在一个不是自己写的程序上,请注意保留程序原有的风格。当你需要做修改时,不要使用你自己的风格,即使你特别喜欢它。程序的一致性比你本人的习惯更重要,因为这将使随你之后的其他人生活得更容易些。"
用户评论
传统要保持
经典之作。大部分内容范围和《编程珠玑》有重合。
很实用,很幽默。
这本书应该是我目前唯一个给五星的书。粗读了一遍,利用周末两天时间读完了,发现这里面涉及到的章节知识是一个合格程序员都需要掌握的内容。以后要把后面涉及工程类的细读,希望能把每章节后面的supplementary reading都拜读一遍,虽然这不是一件容易的事情。
这本书读过,今天再读一遍,获益匪浅。好书就是应该经常读
推荐给新手看。
读的中文版翻译不太行
比较实用的经验.
还行
下载
收藏