代码大全第二版(Steve McConnel)

如果一定要让我给大学刚毕业的CS学生推荐两本书,那么第一本肯定是代码大全第二版,第二本才是代码大全第一版。

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

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

如果你像我大学的时候那样,会觉得这些有什么好看的,我要写出最快的代码,我要写出最炫酷的代码。但随着时间的推移,我渐渐明白,鸽子那大是因为它离着镜头近,速度快的代码一定来自于易于修改的代码。因为在真正进行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++ 第三版。。。