迟来的书评和感想──给喜爱编程的朋友
这本书我读了两遍,分別是两个印次。读第一遍是这书刚出版的时候买的第一版,读第二遍是因为最近认识了本书作者及编辑,我说以前看到本书的一些小错处,出版社就寄了第7次印刷本给我。在新年前花了一个星期把书尽量仔细地看了一遍,发现这印次仍有一些小问题及程序的bugs,已连同其他意见回馈给作者。
我其实不太喜欢这书的书名《编程之美──微软技术面试心得》,因为本书和面试直接有关的文章其实只有开头的8页,本书的内容其实是一些编程题目集锦。或许潜书名是《算法及数据结构的有趣题目集锦──附详细分析及解法》,不过我也明白这样的书名可能会影响销路。
说一个故事,四五年前我为面试出了一条笔试题目,恰巧和本书的题目2.1很相似,计算一个无号整数(我要求32-bit,书中的是8-bit)在二进制中1的个数。当时心想这个题目很简单吧,谁知有些应征者在这题上交白卷,更难找到一些能写到更优化答案的人了,并以为自己做出的解法已经是最优。不过,几年后,我才知道原来这个问题是有正式的学名,叫Hamming Weight (http://en.wikipedia.org/wiki/Hamming_weight),除了有更快的算法外,在SIMD 4.2 也有指令去计算。当时就为自己的无知感到惭愧。
本科学习和社会工作,在性质上是有很大的分别。在学习算法和资料结构时,通常都是一个一个单元去学习。但在工作上,一个程序员必须把知识融汇贯通,解决一些没有标准答案的问题。这需要程序员有解难能力、足够知识和熟练技能等等。这本书可以作为这方面的测试。
本书的题目中,除了1.1和1.10和操作系统相关,其他题目都是纯算法/数据结构的问题,不涉及其他计算机领域(例如程序语言/范式、计算机架构、软件工程、数据库等等),可以考虑加入纯算法和资料结构以外的有趣题目,使内容更贴近书名。对我而言,本书大部份的题目是有趣的,而且当中可以学到一些新知识,训练头脑,甚至引起兴趣去进一步研究。
本书除了适合学生去阅读,也适合喜欢编程的人。如果是喜欢编程的人,可能会觉得这本书就是一本有趣的IQ 题目书籍,会去用来挑战自己的能力。
本书也有些美中不足,列举如下:
- 阅读第一遍时,找到错误但找不到联系方法(如e-mail),这在新印次改善了。但可能因为某些原因,现时的网站并没有勘误表。
- 阅读第二遍时,仍然发现内文的错处和程序的bug。有些程序中变量名前后不一,较大的bug是4.7的程序有错误理解题目。
- 可能是因为多个作者的原因,文中有些程序的编程风格有点差异(例如单行的if/for/while 是否用{} ),建议尽量统一。另外我提了一些改善程序「美」的意见,不在此详述了。
- 内文有些数学算式混合了C/C++/C#的写法(如<=、!=),建议用正式的数学符号。如果数学算式能排版成LaTex 质素就更好。
- 一些问题或解答中用到的方法是经典的,建议最少提及它们的中英文名字,如能提供一些参考文献就更好。
虽然这本书已经是国内原创书籍的一个很好的例子,但我对这本书的期望很高,所以请作者们不要怪我只给4星,我希望它能更加进步。
希望作者们和编辑能继续改善这本书(续版或在网上提供资源),并且能够继续出版这种有创新意念的书籍。
我其实不太喜欢这书的书名《编程之美──微软技术面试心得》,因为本书和面试直接有关的文章其实只有开头的8页,本书的内容其实是一些编程题目集锦。或许潜书名是《算法及数据结构的有趣题目集锦──附详细分析及解法》,不过我也明白这样的书名可能会影响销路。
说一个故事,四五年前我为面试出了一条笔试题目,恰巧和本书的题目2.1很相似,计算一个无号整数(我要求32-bit,书中的是8-bit)在二进制中1的个数。当时心想这个题目很简单吧,谁知有些应征者在这题上交白卷,更难找到一些能写到更优化答案的人了,并以为自己做出的解法已经是最优。不过,几年后,我才知道原来这个问题是有正式的学名,叫Hamming Weight (http://en.wikipedia.org/wiki/Hamming_weight),除了有更快的算法外,在SIMD 4.2 也有指令去计算。当时就为自己的无知感到惭愧。
本科学习和社会工作,在性质上是有很大的分别。在学习算法和资料结构时,通常都是一个一个单元去学习。但在工作上,一个程序员必须把知识融汇贯通,解决一些没有标准答案的问题。这需要程序员有解难能力、足够知识和熟练技能等等。这本书可以作为这方面的测试。
本书的题目中,除了1.1和1.10和操作系统相关,其他题目都是纯算法/数据结构的问题,不涉及其他计算机领域(例如程序语言/范式、计算机架构、软件工程、数据库等等),可以考虑加入纯算法和资料结构以外的有趣题目,使内容更贴近书名。对我而言,本书大部份的题目是有趣的,而且当中可以学到一些新知识,训练头脑,甚至引起兴趣去进一步研究。
本书除了适合学生去阅读,也适合喜欢编程的人。如果是喜欢编程的人,可能会觉得这本书就是一本有趣的IQ 题目书籍,会去用来挑战自己的能力。
本书也有些美中不足,列举如下:
- 阅读第一遍时,找到错误但找不到联系方法(如e-mail),这在新印次改善了。但可能因为某些原因,现时的网站并没有勘误表。
- 阅读第二遍时,仍然发现内文的错处和程序的bug。有些程序中变量名前后不一,较大的bug是4.7的程序有错误理解题目。
- 可能是因为多个作者的原因,文中有些程序的编程风格有点差异(例如单行的if/for/while 是否用{} ),建议尽量统一。另外我提了一些改善程序「美」的意见,不在此详述了。
- 内文有些数学算式混合了C/C++/C#的写法(如<=、!=),建议用正式的数学符号。如果数学算式能排版成LaTex 质素就更好。
- 一些问题或解答中用到的方法是经典的,建议最少提及它们的中英文名字,如能提供一些参考文献就更好。
虽然这本书已经是国内原创书籍的一个很好的例子,但我对这本书的期望很高,所以请作者们不要怪我只给4星,我希望它能更加进步。
希望作者们和编辑能继续改善这本书(续版或在网上提供资源),并且能够继续出版这种有创新意念的书籍。
有关键情节透露