# 代码大全第二版（Steve McConnel）

这本书是我大学的一个大神同学推荐给我的，当然这个大神同学是不是写博客那个。起初听到这个书名的时候我是拒绝的，因为在我初中的时候经常看故事大全，笑话大全，在我高中的时候听郭德纲吐槽相声大全，为什么代码还会有一本大全呢？里面放着什么代码呢？然后正如书名所明示的，这本代码大全，居然几乎没有代码。。。

代码大全这本书教你如何写代码，听上去像是一本关于软件工程的书。但不同于一般的着重于需求或者架构的软件工程的书，这本书着重讲解了写的过程，也就是书中提到的“构建”。这本书事无巨细的讲解了代码风格，命名的种种，类的设计，如何和别人合作，**工作环境应该是怎么样的**。

如果你像我大学的时候那样，会觉得这些有什么好看的，我要写出最快的代码，我要写出最炫酷的代码。但随着时间的推移，我渐渐明白，~~鸽子那大是因为它离着镜头近~~，速度快的代码一定来自于易于修改的代码。因为在真正进行profiling之前，我们对性能所作的一切一切的假设都是错的（墨菲，某一年）。所以如何写出高性能的代码，那必然是写出模块化的，能一块块profile并改进的代码，而不是利用狂拽炫酷吊炸天的命令来自我安慰并祈求高性能。我仍然能记得我在大学的时候，用C++的bit操作写了一个奥赛罗的程序，最后还没有别人拿JS写的快。。。

前几天和别人讨论，大家都觉得自己写的代码太“学生气”。我认为这里的学生气其实是“学院派”的意思，真正生产的代码并不一定要多么规范，多么的严谨。但是他一定要能被其他的人读懂，一定要能被别人接手，一定要能有完整的测试来保证正确性。代码就像是皮卡车：便宜，结实，耐用，好修，好改装的就是好玩意儿。你说你有个W16的发动机，跑上三百公里就得换轮胎，那么也不见得就是好。

另外呢，这本书讲了人的品德。。。你没看错，一本技术书探讨了什么样的品德是适合写代码。如果真的要想出一个适合写代码的品德，我们会想出什么呢？是认真严谨？还是吃苦耐劳？然而在这本书里，强调了善于沟通和诚实的重要性。对于大的项目，那么不需要说，需要一个大的团队的群策群力才能完成，单丝不成线，独木不成林，浑身是铁打几根钉子。尤其是这种以智力成果为产出的项目，如果大家不能做好良好的沟通，势必会出问题。即使是对于小项目，是由一两个人完成的，那么我们也需要沟通。因为我们写代码是为了让别人用，如果不能让别人会使用我们的代码，我们就只是做了个玩具。你可能会argue说只有自己会用这段代码，但是你可以认为明天的自己就是别人，因为你根本不记得昨天写了什么东西。

这本书还介绍了好的工作环境的作用，毕竟当员工坐在公司的电脑桌前敲打着什么的时候，没有人能确定他是在贡献代码。有可能他就是像我一样在办公室工作一下午，让代码的速度整体慢了30%。。。一个好的工作环境能真实提高程序员的**真实**代码贡献率。所以我在这里向各位大佬推荐一个网站，叫chiphell，里面介绍了很多能提高生产力的东西，值得常逛。。。

最后，以书里令我感触最深的一句话结尾“ *Programs must be written for people to read, and only incidentally for machines to execute.*”。

下期预告：Effective C++ 第三版。。。
