乱砍设计模式之零——序
作者[junguo](#)
有时候想知道偶然会为人生带来什么样的意义?作为一个怀疑论者,我对人生充满了疑虑,对于偶然所起的作用也不是那么确定。但还是可以总结一些自己并不确定的结论。大学期间,成天旷课的我,那天偶然上了一堂软件工程课(我不是计算机专业的,我们开这堂课本身就有些古怪)。那天老师不知道是一时兴起,还是早有准备,在下课前他在黑板上画了一个图,标注了学习计算机的进阶图。这堂偶然的课,给我带来了后来的失落和彷徨。
一个编程工具(VC,Delphi)
一门编程语言(C,Pascal)
常用软件的熟练使用
计算机硬件(说白了就是装机的水平)
他提供的进阶图如上所示,他似乎没有说C和Pascal应该学到什么样子。而当时的我每天泡在图书馆或者宿舍里,看的是数据结构,编译原理一类的书。我为自己绘制的进阶曲线是学习计算机系得所有基础课程,然后考高级程序员。那时候对VC等工具并不感兴趣,我觉得还是打好基础容易进阶。但听完这堂课后,我的思路被打断了,放弃了自己原有的理念,跑到书店买了一本VC基础的书,那是我学生时代买的最贵的书(70多或者80多块,书借人了),书上都是一个一个的例子,其实学完后我都没弄明白MFC是怎么回事。只是学会了拖动不同的控件,在界面上做出不同的效果。凭良心说,那本书译文的文笔不错,也挺适合入门的,但它确实是本不折不扣的破书(国外图书也不都是精品,垃圾也不少),在不懂C++的情况下,它可以教会你在界面上拖拉的本事,屏蔽了你学习的路线。而我们老师的进阶图无疑也是一张误导图,编程还是以数据结构等内容为基础的,没有了基础,你也就没有了前进的依仗。经过多年的失落彷徨,终于感觉找到了入门的通道。我也想总结一幅进阶图,但我发现自己总结不出来。庞庞杂杂接触了太多的东西:汇编,破解,操作系统,C++,ASP,MFC,COM,ATL,VB,STL,数据库;但接触的东西都没有到精通的地步,只是感觉现在理解东西没有以前那么复杂了,但为什么会这样,我自己也说不清楚。只是隐隐约约感觉理解这些东西和汇编有些关系,但这些都是在我单纯学习汇编时候并没有感觉到的。我如今也只是处于从初级向中级攀升的阶段,真要搞出一个进阶路线,可能效果就和我们老师的进阶图一样只能误人子弟了。所以如今放弃了这方面的努力,也许将来有一天我会去做。如今我想做的就是提供给那些和我一样在从初级向中级攀升的人们一些共同感兴趣的话题。而设计模式绝对是这样一个话题,设计模式是帮助你真正理解OO设计的一把钥匙,也许只有它能帮助你真正进入OO设计之门。在没接触设计模式之前,对于OO只知其形,不知其意。很多OO设计的原则,不知道我买的那本巨著《C++ Primer》中有没有,反正我是一条也没记住。如果你觉得你懂了面向对象的基本原理,懂得了虚函数,需要继续紧阶,那么我们可以一起探讨这里谈到的设计模式。
GOF出的《设计模式》买了很长时间了,翻看了也不下三篇,但每次总感觉收获不大。虽被众人奉为经典,但那本书不适合我,写的太过抽象,没有完整的例子,每次看过都没留下多少印象。又是一个偶然,给我带来了惊喜。我在网上找到了一份电子版的《Head First Design Patterns》,尽管只有第三章,但我发现这本书文笔清新,事例翔实,以前看多次没记住的东西,这儿看一次就留下了深刻的印象,实是一本入门的好书。所以豪不犹豫买了本纸版的,不过如今该书只有影印版,但并不影响阅读。以我大学英语四级没过的水平都可以基本看懂这本书,我想搞计算机的应该都不成问题。
刚看到这本书的时候,第一个想法是自己能不能把它翻译一下。与大家共享,但后来想想版权什么的东西,自己并不清楚。加之文笔拙劣,怕毁了原文的意境,所以放弃了这个念头(毕竟我不是人民教师)。但总感觉有些失落,那就自己写吧,把我能理解的总结出来,配以我想到例子。经过这么一番折腾,也帮助自己加深理解,因为看书的时候,还是会忽略太多的细节,只有经过了自己的手,才会抠出很多容易忽略的东西。这就是我写这个系列的原因了。但也希望有同样兴趣的同仁共同讨论了。
冠以乱砍的名字,是因为我不想把技术的东西搞得太枯燥。尽量加一些自己感兴趣的内容进去,呵呵,有同样爱好的同仁,我们也可以一起讨论。但对于技术的内容,我还是尽最大的努力做到正确表述。
好了,要说的说完了。但声明一下,今天看到自己以前写的一篇文章被转载,但被斩头去尾,还删除了署名。虽然不是太在意,但还是感觉不舒服。所以希望有仁兄要转载的话,请保留署名;不要删除任何内容,如果你不喜欢我的废话,那就不要转了。