作者:Grey Zeng
微博:@Grey_Zeng
豆瓣:@Grey927
博客:http://www.cnblogs.com/greyzeng/
2014年读过的最有收获的一本书,同时也很荣幸接到《构建之法》的策划编辑周筠老师的邀请来写一篇对这本书的书评。
如果要我用一句话来描述这本书的话,我会觉得:《构建之法》是迷你版的《代码大全》。举个简单的例子,在《代码大全》里面,关于编码方面的东西就写了好几章,这几章的描述更像一本代码规范手册,所以我对待《代码大全》用做参考手册,只是用到的时候翻到响应的地方去参考,但是《构建之法》里面对于代码规范的描述非常简明扼要,一两章的内容就说明了,实践性很强,只是不理解的是书中描述断行与空白的{}行,我觉得D没有明显的优势,在做Java开发两年多的时间中,用的和看到的基本都是格式C,而且我觉得格式D在debug的时候需要多按两次健 :)。
整本书对软件构建的方方面面写的很清楚,包括需求,设计,开发,测试,项目管理......实在无法一时消化,而且国内很多公司是无法做到像书中说的流程那么地全面和到位,可能也有各个公司特色的管理和开发方法。不过还是有很大的参考价值,至少对于我目前这样的状态的程序员来说,了解自己要怎么做,做的方向比要做什么更重要,本书提供了很多建议和方法,比如PSP(Person Software Process,没看这本书之前,真的没有听过PSP这个东西,惭愧),也由此了解到作为一个软件工程师,任务清单里面不仅只有要编好程这一项而已,还有计划,需求,测试,评估工作量等能力需要刻意培养。
书中让我最有收获的地方在两章:第二章的个人技术和流程 以及第三章的软件工程师的成长,改变了我长期以来对我的一个职业困惑和误解,我一直觉得作为一个程序员只要学如何写代码就可以了,其他的能不了解就不用了解,算法之类的,是需要掌握的,但是实际工作中到底要怎么用上,不明白。对于职业规划一直还停留在学好算法计算机基础进谷歌微软这样大公司的naive想法层面上,虽然我一直在努力实现这一目标,但是读完以后更有针对性和方法来实现自己的目标,开始关注踏实的学习和提升自己,也提示我这样的初级软件工程师要如何让自己成长起来:
技术技能(Java语言,开发平台等)的相关知识积累。
问题领域的知识积累。
软件思想(设计模式,软件工程等)的熟悉。
职业技能(区别技术技能的沟通管理方面的能力)。
实际成果(最重要的标准,如果可以量化尽量用量化的东西来说明)。
所以我就知道,以后工作的过程中,要注意积累这些方面的知识,最重要的是量化自己做的东西。而且除了纯写代码的学习以外,还要关注软件工程相关的东西,同时要学会和同事上下级之间进行良好沟通的方法。
同时,书中给出了职业成长的几个版本,我关注的大公司成长可能一时半会还达不到,但是,对于像我这样的一般工程师,书里也给出了一个扩展知识的进阶学习,例如:
基本要求:有网页满足一般用户的查询需求
基本技术:网页服务技术(ASP,PHP等)
扩展技术:用户界面的设计,浏览器兼容
进一步扩展:用户心理,用户交互的原则在不同设备的和不同场景下的应用。
由于项目经验匮乏的关系,自己还是需要在基本要求和基本技术这里挣扎。不过相信随着项目经验不断增加,我关注的层面会慢慢高一点,到用户心理这个层面去分析。
书中通过技能的反面来说明怎么样才是精通,所谓技能反面,书中说到的是解决底层次的问题。举了一个面试的例子,大学生在被要求用VIsual Studio IDE写一个程序的时候,考虑的都是“如何开始C#命令行”,“如何定义数组”这样低层次的问题,这就是不精通,同时告诉我们如何提高自己的技能:不断练习,低层次问题变成自动操作,用时间和脑力考虑高层次问题。回到现实中来说就是:多刻意练习,夯实基础,不要让一些基础的东西绊脚石。
本书一直强调做中学(Learning by Doing),看过两遍这本书,遗憾是没有完成后面的练习,下一步准备抽空把后面的练习也认真练习一下,真的需要多多的实践,才能总结出自己的东西,也才能真正理解什么是软件工程的最佳实践。
作为读者对本书的一点建议:如果每章后面的链接是二维码会更好一点,这样就不用照着书来输入链接了。直接扫一扫就好。