说实话这本书感觉对自己帮助不是很大,没有太多的收获,也许是看的快的原因,这本书讲的那些东西,早就接触过了。原因是上次在图书馆翻看《高级unix编程》(Advanced UNIX Programming, Marc J.Rochkind)时,里面提到了这本书,建议读者先看一下Brian W.Kernighan这本书,所以还是觉得有必要再看一下。其实还有一本史蒂文斯的《UNIX环境高级编程》,据说是网络编程的“圣经”,在外文阅览室看到过,翻了一下,看不下去,打算下次去借来看看。

也许是K&R C的原因,凡是看到Brian W.Kernighan写的书都忍不住想借来看看。就这样粗略的过了一遍,重点挑使用标准I/O编程还有UNIX系统调用看了一下,感觉对以前的一些知识点认识更深了。这也许就是大师的功力吧,一个复杂的问题,总能娓娓道来,什么控制进程、信号和中断啊。其实里面的好多东西都有点老了,不过我倒是很喜欢每章后面的有关文献介绍。总是引出什么什么论文,出处那里,是谁编写的,产生什么影响之类的,像awk,sed之类的,其实也是可编程的,介绍了好多小工具语言的来源,看起来有点八卦,但我就是喜欢。就像看C专家编程一样,也有好多八卦,具体到某一个符号的来源,这点我比较好奇。

第八章有这么一段我觉得很好。摘录如下:

   “语言”并不局限于传统的编程语言——它还包括eqn、pic、yacc、lex和make.当有多于一个的文件必须使用数据定义时,头文件是管理它们的一个好办法。把消息集中到一起,消除了不同版本造成的错误,尤其是和make 相关时,把数据和程序放到文件中是很重要的,必要时可以实现信息隐藏。这些都是典型的unxi设计思想的体现。

在unix或类unix下,典型的程序开发风格是:大量的小工具;单独或联合使用;完成机械性的工作以节省人力。eg:变量在什么地方定义?用grep;新版本中有什么变化?用diff;怎样将不同版本通用?用idiff;文件有多大?用wc;该做备份吗?用cp;如何之备份上次备份以来改动过的文件?用make.等等之类的小工具,对于编程效率而言无疑是瑞士军刀。