在整个为期一年的专栏内容中,我会逐步向你推荐一些有价值的内容,供你参考,这些内容有中文,有英文,也有视频,它们都是我认为对我非常有价值的信息,我也希望它们对你能有同样的帮助和启发。 今天,我为你推荐的5篇文章,它们分别是: - Stack Overflow上推荐的一个经典书单; - 美国某大学教授给计算机专业学生的一些建议,其中有很多的学习资源; - LinkedIn的高效代码复查实践,很不错的方法,值得你一读; - 一份关于程序语言和bug数相关的有趣的报告,可以让你对各种语言有所了解; - 最后是一本关于C++性能优化的电子书。 #### 每个程序员都应该要读的书 在Stack Overflow上有用户问了一个[问题](https://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read),大意是想让大家推荐一些每个程序员都应该阅读的最有影响力的图书。 虽然这个问题已经被关闭了,但这真是一个非常热门的话题。排在第一位的用户给出了一大串图书的列表,看上去着实吓人,不过都是一些相当经典相当有影响力的书,在这里我重新罗列一些我觉得你必须要看的。
然后,他们还对编程语言做了一个分类,想找到不同类型的编程语言的bug问题。如下图所示:
以及,他们还对这众多的开源软件做了个聚类,如下图:
对bug的类型也做了一个聚类,如下图:
其中分析的方法我不多说了。我们来看一下相关的结果。
首先,他们得出来的第一个结果是,从查看 bug fix的commits的次数情况来看,C、C++、Objective-C、PHP和Python中有很多很多的commits都是和bug fix相关的,而Clojure、Haskell、Ruby、Scala在bug fix的commits的数上明显要少很多。
下图是各个编程语言的bug情况。如果你看到是正数,说明高于平均水平,如果你看到是负数,则是低于平均水平。
第二个结论是,函数式编程语言的bug明显比大多数其它语言要好很多。有隐式类型转换的语言明显产生的bug数要比强类型的语言要少很多。函数式的静态类型的语言要比函数式的动态类型语言的程序出bug的可能性要小很多。
第三,研究者想搞清是否bug数会和软件的领域相关。比如,业务型、中间件型、框架、lib,或是数据库。研究表明,并没有什么相关性。下面这个图是各个语言在不同领域的bug率。
第四,研究人员想搞清楚bug的类型是否会和语言有关系。的确如此,bug的类型和语言是强相关性的。下图是各个语言在不同的bug类型的情况。如果你看到的是正数,说明高于平均水平,如果你看到的是负数,则是低于平均水平。
也许,这份报告可以在你评估编程语言时有一定的借鉴作用。
# 电子书:《C++软件性能优化》
**[Optimizing Software in C++ - Agner Fog](http://agner.org/optimize/optimizing_cpp.pdf)** - PDF,C++软件性能优化。
这本书是所有C++程序员都应该要读的一本书,它从事无巨细地从语言层面、编译器层面、内存访问层面、多线程层面、CPU层面讲述了如何对软件性能调优。实在是一本经典的电子书。
Agner Fog还写了其它几本和性能调优相关的书,你可以到这个网址[下载](http://www.agner.org/optimize/)。
- Optimizing subroutines in assembly language: An optimization guide for x86 platforms
- The microarchitecture of Intel, AMD and VIA CPUs: An optimization guide for assembly programmers and compiler makers
- Instruction tables: Lists of instruction latencies, throughputs and micro-operation breakdowns for Intel, AMD and VIA CPUs
- Calling conventions for different C++ compilers and operating systems
我今天推荐的内容比较干,都需要慢慢吸收体会,当然最好是能到实践中用用,相信这样你会有更多的感悟和收获。另外,不知道你还对哪些方面的内容感兴趣,欢迎留言给我。我后面收集推荐内容的时候,会有意识地关注整理。