简单滴说, 实现模式和设计模式这样的书就是教你积木应该怎么摆 才能堆起一个又坚固又可以随便扩建, 看起来也不至于太怪异房子, 而不是教你每块积木应该是用沙子还是水来做, 也不告诉你堆积木应该是用钉子把积木订起来, 还是用浆糊粘起来。
这本书是基于java语言讲的~ 个人觉得可以跟 http://book.douban.com/subject/2866799/ 这本书一起读, 作为打造编码, 或者堆砌程序的功力的必经之路~ 走上工作岗位以后越发觉得类似设计模式 实现模式这些东西才是项目中应用最广的技能, 不论你换的岗位 跳的槽主要使用的技术是java好 php好 python好 C++好…… 编程风格良好 架构良好的代码在两种类型的项目中的重要性尤其明显。 一种是在巨头里做底层API, 除了必要的API设计方面的原则需要遵守以外, 可扩展性和可自定性决定了其他领域的开发人员加入到这个领域, 迁移他们在其他领域的经验上手这套API的容易程度, 决定了这套API能有多火~ 比如android 很多库直接拿成熟而且现成的java实现, 比如UI framwork, 比如 各种util 比如XML/jason那些的, 稍有java经验的人要进入android开发这个行业基本一个月内可以上手了~ 但是在初期他们的设计并不好, 并不像原来sun的那群大牛设计java一般, 具有良好的forward-compatibility。 比如我进入android的时候刚刚是2.1 在盛行, 然后看一些tutorial对1.5 1.6的, 包括map service, 从1.5进入到2.1的需要重新熟悉一下相关的类 函数神马的。虽然对有经验的程序员 这工作并不花多少时间但如果有人想当然滴觉得之前的代码可以沿用, 或者要修改代码让自己之前的产品继续运行在现有系统上, 都是很不方便的。 主要从另一方面说明当初并没有设计好, 使得在需求扩展的时候发现不得不重新进行class hierarchy的排布, 重新设计接口。 另外一种就是contract based的项目。 代码是你写, 但是最后发布的时候打的不是你的名字。 源代码? 到项目后期还是要给客户的, 客户可以自己根据需求来修改, 也可以拿去找其他公司帮忙做升级的事情…… 反正公司里contract的项目代码都高度工整 并且没有注释 一看就知道是用formatter梳理过的~
其实在走出学校以前, 我相信大部分计算机系的学生都不会刻意来关注这个话题。 学生们关注更多的是功能实现, 能把结果显示在屏幕上然后跟老师demo一下拿分了事。 然后在中国还强调数学, 强调算法, 比如ACM比赛神马的~ 以我本人为例, 读书期间专门挑那些自己不会做的项目做, 挑师兄师姐口里最难的课选, 增益己所不能~ 所以每个项目都做得超级吃力的, 想着写出能推进项目进展的代码就可以了 根本不去考虑具体这行代码要放在什么地方, 以什么方式让它去执行, 反正就是保证那么一串跟特定功能有关的代码在party和人民需要他们的时候都能找到就行了~ academic project就这样, 一堆demo数据, 不会真有海量能看出你算法性能差异的数据集来运行你程序的, 一两个学期一个人课余独立完成的项目, 功能要求一开始就定好了并且多少届都不会变的所以也不需要什么快速响应需求变化这种事情。 其实要深究下来, 实现同一种功能可以有很多种方式, 每种方式需要的代码又可以有不同的方式进行组合, 其实当你在工作场合突然意识到这些的时候 , 具体该怎么做真的会有迷惑, 会有踟蹰不前, 尤其你之前并不知道原来答案可以这么丰富多彩, 原来针对特定情形选一种合适的解决方案这么重要…… 另外这本书还对java中的collection做了性能测试, 以statistics来给出建议, 给人在作出选择的时候更明确目标, 更有自信^_^