伍迷家园

让编程融入生活
随笔 - 92, 文章 - 0, 评论 - 2192, 引用 - 172
数据加载中……

量变到质变的飞跃——一封初为程序员的大学毕业生三个月后的再次来信

     首先这篇文章的背景是2009年1月14日我发布的一篇博文《想要,不一定得到,一定要,则必成功——一封初为程序员充满困惑的大学毕业生的来信以及本人回复》,当时引来了很多朋友的热议。没想到三个月后,小封再次给我来信,谈了这三个月他的一些学习经历和感受。我觉得可以给大家一些启示,所以就放在首页。
     再次需要强调,小封在信中多次提到了本人所写的《大话设计模式》,只是因为他是看我的书入门的,所以提到的比较多,加之是给我写信,所以……。因此本文虽有广告之嫌却无广告之意(事实上,《大话》出版一年多,想买的人早已经买了,已经不需要再做什么广告,反而小封要反复阅读才能理解说明《大话》还有很大的改进余地)。请对广告反感的朋友,多从小封的学习态度角度去感受一个初学者的心路旅程,应该会有更多的收获。更何况,我觉得,值得反复阅读的好书很多,无论哪一本,像小封那样的学法,都可以获得长足的进步。

     学习成功也许有捷径,比如好的方法,有好的老师,有好的环境,但学习成功更多的是勤奋,而且是超出常人的勤奋(其实是常人目前太不勤奋),只要你每天付出比别人多一些的打游戏、泡吧时间,用不了多久,你的付出就会有量变到质变的飞跃和回报。

小封来信(未做任何修改)
 
程老师:您好!
 
还记得我吗?3个月前的小封。
 
自从那次我看你将我写给你的信放到你的博客中,我看了那么多人的建议和指导后,便下定决心沉下心来好好学习设计模式。
 
于是在接下来的两个月中,我每天都花至少4个小时看您写的《大话》,看完一个就模仿着自己写代码演练。
23个模式加上4个原则,我是每两天啃一个。并且刚开始根本就不懂,只能是照着原书将代码“复制”一遍并调试通过。
 
这个过程是那样的漫长和痛苦。
 
在看到第10个模式的时候,我便想放弃。
 
可是我又不甘心,成功的希望强烈地支使着我坚定这样一个信念——必须看,必须看完,一定要看完,必须全部看完!
 
于是我又接着看,可是每一个模式都很精炼,毕竟那是多少个前辈和高手们的经验之精髓啊!我依然无法明白每一个新看的模式。
 
每一个模式都让我十分痛苦!
 
但我一直这样坚持着,晚上8点回去,看到12点,第二天早上6点起床继续看2小时,然后上班。
 
就这样在痛苦的深渊中前行。
终于在某一天一个阳光灿烂的下午,终于全部看完了!
 
心中窃喜,但又很迷茫。因为23个模式中我只能理解或者记得其中的不到5个。记忆最深的当数单例模式了,因为它最简单。
于是我又想放弃。但是我还是继续回过头来看了第二遍。看第二遍的过程依然是那样痛苦。
因为我还必须重新去理解每一个模式!我重新将23个模式全部敲了一遍代码,并做了笔记。
 
又一个痛苦的月份在设计模式的苦海中缓慢流逝着!
 
但是这一次我努力地去理解每一个模式,尽量将每一个模式都理解透彻。
于是我又度过了痛苦难熬的20多天!
 
当第二个月静悄悄地离我而去的时候,我也终于“大功告成”了,终于将这23个设计模式全部又看了一遍,并且全部理解了。
 
紧接着,我牺牲了周六和周日这2天的休息时间一气呵成地将这23个设计模式全部自己敲了一遍,这一回我没有照着书本复制,
而是全部靠自己的理解去写。我写了每一个设计模式的原代码,画出其UML类图,同时又将你为每一个模式所精心设计的例子
全部敲了一遍。
当最后那个男人和女人的例子的最后一个代码敲完时,全世界都亮了,都寂静了,一切是那么自然,我看到了大海和蓝天,而
此时它们不再广阔不再高深,我一眼就能射穿宇宙!
接下来,正好我的实习期已过,开始正式参与项目开发。框架是经理打好的,我把框架拿过来一瞧,没想到经理运用了好几个模式,
比如单例,比如模板。而我们要做的就是将那个框架中的核心算法中的一部分细节在子系统中实现即可。
经理的框架中全部是面向接口的,但此时我已不再迷惑为什么要面向接口编程,同时看了经理的框架,我也明白了该如何面向接口
编程。
 
然后公司有一个项目正好比较急,公司人手不够,于是让我这个C#出身的也加入到那个用JAVA编写代码的项目中去。
我花了一天的时间看了一遍JAVA基础,由于C#与它很像,因此没什么难的。
然后花了两天的时间学习了一下jsp,struts,spring,hibernate,所谓的struts和spring框架也不过如此!
所谓的控制反转,所谓的依赖接口注入,一切只不过在解耦!
 
如今我感觉自己对面向对象编程的思想已经了解的比较深刻了,剩下的事就是多看看微软的MSDN,多做做项目,努力精通C#。或者
JAVA的WEB部分。
 
以上是我前3个月的经历,虽然很痛苦,但最后的收获却很丰硕,果实很甜蜜!
但是这很大一部分要归功于程老师您,以及那些给我鼓励给我指导的热心人!
在此我向大家说声“谢谢!”
真的很感谢您!很感谢大家!
以后我会再接再厉,争取先做一名熟练的程序员!
 
                                                                                    真诚的
                                                                                          小封
                                                                                     09-4-7下午于公司偷偷地写^-^
 
0
0
(请您对文章做出评价)
« 上一篇:《大话设计模式》繁体版正式发行

posted on 2009-04-08 09:56 伍迷 阅读(4419) 评论(42)  编辑 收藏 所属分类: 软件工程

评论

#1楼   回复  引用    

争取先做一名熟练的程序员!

恩 恭喜把自己定位在一个op的程度 痛苦 我靠 痛苦就不要学了撒 这东西是要有兴趣的好伐
2009-04-08 10:21 | xmq[未注册用户]

#2楼   回复  引用    

不要告诉我你是大学毕业生也知道你是初手
给点有意义的放在首页
2009-04-08 10:29 | 哎[未注册用户]

#3楼   回复  引用  查看    

恭喜,恭喜,最近我也在研究设计模式
2009-04-08 10:30 | 小伦      

#4楼   回复  引用  查看    

佩服~
潜水n年,回复一个~
大话这本书,我早你一年接触,断断续续看了一年才看完.差不多也是看这本书才了解了一点继承,接口,oo这些东西吧~
还有那本国外的童话书也很不错~
不过我现在对设计模式的东西不怎么感冒了,基本上看到这样的标题直接绕过.
我对程序不怎么感兴趣,只是混口饭吃了~也很菜,毕业n年还被刚毕业的学生教育~
兄弟若对这个很有兴趣,好好走下去吧~
希望能看到,外国人看咱们同胞写的书的那一天~
2009-04-08 10:35 | 廉价饭盒      

#5楼   回复  引用  查看    

模式本身没有错,但可惜学模式的人没有几个能真正领悟GOF精髓的。模式的精髓在于处理变化,但系统的变化,可不是能准确预料的!!!
作为程序员,学习模式是对的,但作为工程师,更要懂得软件工程。在进度很紧的情况下,多写几个if else,比增加几个类要容易的多;多写几个Helper方法,比运用XX模式来的方便。
大多数情况下,变化是不确定的,未来的需求是无法估计的。你不知道哪些会变化,哪些不会变化,如果此时你还自以为牛B的运用XX模式,那是画蛇添足,自讨没趣。少部分情况下,对未来的扩展是可以估计的,比如支持的数据库变化等,此时才应该使用设计模式来封装变化。
某些初学者花了2天看看Struts, Spring,Hibernate,就大言不惭说,这些框架也不过如此。天啊,难道他是下一个比尔盖茨?如果不是,其浮躁可见一斑……

模式本身在于处理问题,处理可预见的未来变化的问题,可如果你无法预料未来的变化,还要捧着一本模式书,一个个模式去套么?
2009-04-08 10:52 | 非主流程序员      

#6楼   回复  引用  查看    

--引用--------------------------------------------------
小封: 记忆最深的当数单例模式了
--------------------------------------------------------
呵呵 这个有同感
2009-04-08 10:52 | 小龟爬爬      

#7楼   回复  引用  查看    

--引用--------------------------------------------------
廉价饭盒: 佩服~
潜水n年,回复一个~
大话这本书,我早你一年接触,断断续续看了一年才看完.差不多也是看这本书才了解了一点继承,接口,oo这些东西吧~
还有那本国外的童话书也很不错~
不过我现在对设计模式的东西不怎么感冒了,基本上看到这样的标题直接绕过.
我对程序不怎么感兴趣,只是混口饭吃了~也很菜,毕业n年还被刚毕业的学生教育~
兄弟若对这个很有兴趣,好好走下去吧~
希望能看到,外国人看咱们同胞写的书的那一天~
--------------------------------------------------------
正在看那本童话书 很不错 大话 只是看过早先在博客上 放的几篇 朋友有本 但一直没翻
2009-04-08 10:55 | 小龟爬爬      

#8楼[楼主]   回复  引用  查看    

@非主流程序员
其实小封的确也夸张了些,Struts, Spring,Hibernate不是一两天就可以完全理解的,他的意思可能更多的是已经不再害怕这些用面向对象技术实现的开源框架,因为自己已经理解了面向对象的精神而已。

看书只能说可以从无知渐渐到了解,再到理解的程度,但真正掌握并能灵活应用还是有很长的路要走。

我看中了小封的勤奋精神,但也要冷静地告诉他,技术无止境,学海苦作舟。
2009-04-08 11:21 | 伍迷      

#9楼   回复  引用  查看    

@非主流程序员
看到现在情况很无奈啊,要学好编程时非常不容易,有些东西学了,项目不需要,人家还以为你在白混。时势造人啊,都是什么需要,什么流行,什么领导喜欢,就琢磨什么。
2009-04-08 11:22 | 冰の酷龙      

#10楼   回复  引用  查看    

五迷老师的书我没有看,以我现在的水品来说,根本不能理解设计模式的精髓,学也只能学到其表而已。
2009-04-08 11:24 | 冰の酷龙      

#11楼[楼主]   回复  引用  查看    

@冰の酷龙
看不看不重要,重要的是你如果想从事软件编程工作,应该要不断的学习。这是这个行业的特点决定的。另外设计模式也不是什么神秘的玩意,任何层次的程序员都可以有所收获的。
2009-04-08 11:27 | 伍迷      

#12楼   回复  引用  查看    

@小龟爬爬
很高兴你给我回复阿~呵呵,我基本看贴不回贴
个人认为,不看下设计模式,怕对继承,多态,接口这些东西很难理解~
不过话说回来,童话书就当童话看看就好了~
我看了下你的博客,以你现在水平,没必要研究啥模式~
模式都是忽悠人的,你若有心,研究下工厂,单列,策略,观察等常见的就好~
当然,我是菜鸟,且悟性极低,也不准备走程序这条路了~
随便说说了~
2009-04-08 11:44 | 廉价饭盒      

#13楼   回复  引用    

1、话说大话我也翻过
这种说明问题滴方式很好,作者肯定也是多年前线教学/带新人的经验之谈。因为不了解所以惧怕,揭开一些所谓神秘面纱也就那么回事,当然要真正熟练绝不是一本两本书能解决的问题。
2、小锋童鞋
练过武术的人都晓得:拳打百变、身法自现。读书/学习也是这样,只要您不是天生缺陷,花时间磨肯定是能磨出个东西来的,至于是极品裁决还是垃圾法杖,就得看悟性了。
3、模式有用/无用之争
模式本身不是什么宝典,也不是什么律法条例,只是前人的一些经验总结,既然是经验,就总有不适用的地方。有句广告词不是说:不买贵的,只选对的吗。有用无用不如像前几天那个哥们发的那个IOC的帖子一样(找不到连接了),从头到尾说说为什么人会总结出来这个IOC来的好,如何一步一步思考解决问题然后出来了这个IOC了。
2009-04-08 12:51 | 入门级[未注册用户]

#14楼   回复  引用  查看    

我一年前看过《大话》,写的非常生动。
我也看过《HeadFirst》《设计模式 - 可复用xx》等书,《大话》算是非常轻松的一类了,闲暇之余便拿来阅读几段,不亦乐乎。当然,《HeadFirst》也不错。
祝小封更上一层楼吧!
2009-04-08 12:56 | CoderZh      

#15楼   回复  引用    

说的我也想买本大话看看了
2009-04-08 13:07 | 双击2[未注册用户]

#16楼   回复  引用    

又一个被练费了的人
2009-04-08 13:20 | wwwww[未注册用户]

#17楼   回复  引用  查看    

设计模式不是这样学的,我看了那个同学的回信,我感觉很可怕,每天花6个小时的时间去专研设计模式?

这位同学一定是当年考大学、四、六级之类的用这种填鸭式教育的方法尝到了甜头,也将之套用到了程序编写上,但是这样的坏处也是显而易见的,这不是答题,也没有固定的套路,这样学习的结果那就真是为了模式而模式了。
2009-04-08 13:21 | xiao_p      

#18楼   回复  引用  查看    

我感觉这样的学习是不太切合实际的,而且我也不太同意程老师的观点,我感觉对于很初级的程序员来说,最重要的还是要打好基础,而不应该把最基本的东西扔在一边,花费所有的时间学习设计模式。
很多OO的思想和原则,甚至于设计模式在现在的很多变成语言中都有体现,所以学习编程的过程中,不知不觉就会学到不少知识,所以我本人认为,对于初学者,学好基础最重要,对设计模式不一定要深入研究,有所了解即可。

#19楼[楼主]   回复  引用  查看    

@xiao_p
学习方法每个人都可能不一样,小封的作法的确有些极端,但也许这是他最习惯的作法,事实上,他学明白了后,也的确体会到了设计模式的好处。我不认为这有什么问题,反而对于很多朋友因为没有找到好方法于是就不学习不作为要好得多。

@上不了岸的鱼{ttzhang}
也许你把设计模式想得太深奥了,它也是编程的基础呀,至少在面向对象上,如果没有学过设计模式,而只是学了类、接口、抽象类、继承、多态这些基础知识,我想他是很难真正理解这些概念的意义的。所以我觉得只要懂得一些面向对象语言的语法,就可以开始学习设计模式,当然学到什么程度,是否有必要全部学习,这就未必了。我个人觉得至少工厂、单例、策略、模板方法、外观等模式要深入了解的。
2009-04-08 14:04 | 伍迷      

#20楼   回复  引用  查看    

冒昧问下,这本书在网上能下到电子书不。刚接触C#,也想看看这书学习下
2009-04-08 14:20 | *风ル      

#21楼   回复  引用  查看    

--引用--------------------------------------------------
xmq: 争取先做一名熟练的程序员!

恩 恭喜把自己定位在一个op的程度 痛苦 我靠 痛苦就不要学了撒 这东西是要有兴趣的好伐
--------------------------------------------------------
fdsaf
2009-04-08 14:20 | Theo      

#22楼   回复  引用    

大哥们说的太深奥了,看来我得多多学习啊
2009-04-08 14:27 | tianya_

#23楼   回复  引用  查看    

@伍迷
楼主你真的认为这样就出成果了吗?
或者说他通过三个月的设计模式的学习就能达到一个很高的面向对象的高度,或者说是有点自欺欺人?

引用下原话
"我花了一天的时间看了一遍JAVA基础,由于C#与它很像,因此没什么难的。
然后花了两天的时间学习了一下jsp,struts,spring,hibernate,所谓的struts和spring框架也不过如此!
所谓的控制反转,所谓的依赖接口注入,一切只不过在解耦!"

设计模式的学习能达到这个高度吗?我没有质疑楼主的意思,也没有说大话不是一本好书,而且我就曾经推荐过我的同事买过,但是,这样的一段话,会给很多人带来困扰,至少是很多徘徊在OO门外的朋友。

最后,如果这位同学成功了,那么我想说这也只是一个个例,这种学习的方式绝对不值得推广和借鉴。本回复不针对楼主和大话这本书,只是感慨下这位同学的学习方式。
2009-04-08 14:32 | xiao_p      

#24楼[楼主]   回复  引用  查看    

@xiao_p
你说得没错,他的那段话有些误导。我也没有说三个月学习就可以达到一个很高的高度。

我只是想说,他为了想学好,于是行动了,当中也付出了很大的努力,三个月的时间,让自己在编程思想上,有了很大的提高,换句话说,就是入门了,也对自己学好编程有信心,接下来只不过是继续努力而已。

要知道小封不是学计算机的,他通过努力,能在软件公司立足,我觉得对一些找不到工作的朋友很有教育意义。这就是这篇文章我想表达的想法。
2009-04-08 14:41 | 伍迷      

#25楼   回复  引用  查看    

@*风ル
可以的,不过还是书看得舒服~~
2009-04-08 15:32 | 小伦      

#26楼   回复  引用  查看    

@廉价饭盒
博客 颓废了很久 主要是大四以后 迷茫了 不知道干什么好了 编程细分的太多了 下不了手了
唉 被人歧视了 呵呵
对于 设计模式 个人感觉 就是一些常见问题的常用解决办法 了解一些 才会对类的三大特性有更深的理解
我只是看了比较常用的几个 卡通书还没翻完 以前在学校 跟老师做项目 主要是些小网站 小系统 现在跑到伟大的首都实习 体验体验做C/S项目的感觉 呵呵
2009-04-08 16:40 | 小龟爬爬      

#27楼   回复  引用  查看    

要练神功,必先自宫!!!

楼主似乎神功已练成!!!
2009-04-08 17:27 | 沉默杨仔      

#28楼   回复  引用  查看    

过度设计与设计不足一样可恶。

2009-04-08 17:41 | zeus2      

#29楼   回复  引用  查看    

自愧不如。。。。

革命尚未成功,仍在继续努力,

只大约掌握那么几个而已,因为到现在也就那几个场景要用到。。。

加油。。。。
2009-04-08 18:41 | yellowyu      

#30楼   回复  引用  查看    

大话也看过,写的挺好的,适合新手读啊。。
不过可能在用到的时候印象会更深一些。。我一般都是用到什么的时候再去细看。。
等自己设计的时候想想自己常用的那几个模式。。
积少成多嘛,,慢慢的23个都成你的常用模式了!
支持小封,很刻苦。以后你一定会尝到甜处的。
2009-04-08 21:29 | zhenqiyi      

#31楼   回复  引用    

争取先做一名熟练的程序员!
2009-04-09 08:16 | aierong

#32楼   回复  引用    

争取先做一名熟练的程序员!
2009-04-09 08:17 | aierong

#33楼   回复  引用  查看    

真的好佩服“小封”,可以再那么短的时间里看完一本书,研究完一门技术。
2009-04-09 10:22 | 鹏鹏_Lovely      

#34楼   回复  引用    

建议您走出.NET与java 去看看RUBY与PYTHON 和AJAX你的研究会更开阔
2009-04-09 10:30 | gakaki[未注册用户]

#35楼   回复  引用    

我去年毕业。。现在发现自己不适合搞,转行做网站了
软件男 www.softnan.cn
2009-04-09 10:59 | 软件男[未注册用户]

#36楼   回复  引用  查看    

加油吧 小封同学!
希望你有短期目标的时候也有长远打算。

2009-04-09 12:01 | 阿水      

#37楼   回复  引用    

我刚毕业做软件开发,也许和小封差不多,但我在学校的时候就接触了设计模式,并且在第一时间内发现了 小菜学编程系列 ,后来也买了<设计模式>.我的理解是,初学程序的人最好不好过多的去接触设计模式,多花点时间写点代码,最好是写出的代码让自己在后期维护的时候吃尽苦头,这个时候,我要恭喜你,你真正提高的时候到了,也许你思考所的东西并不叫设计模式,但思想绝对是一致的.
2009-04-10 19:17 | dai[未注册用户]

#38楼   回复  引用    

@dai
这个就有点意思了,同感,呵呵。
补充:设计模式只是一种行事的方式,而我们需要做的是无招胜有招
2009-04-11 17:17 | 布鱼[未注册用户]

#39楼   回复  引用    

然后花了两天的时间学习了一下jsp,struts,spring,hibernate,所谓的struts和spring框架也不过如此!


人才啊。我佩服...

只知道了个表面而已,真是不知道天高地厚。。。
2009-04-12 00:06 | gfgfgfghfhfh[未注册用户]

#40楼   回复  引用    

文章的意义在于肯定软件行业的这种学习态度,弄懂一些东西后自然感觉会不错的,当然往后也会越来越好。
当一个人学的越多的时候才会发现还有很多欠缺,但是每个人在初期都不可能全面的评估自己或者自己从事的行业。
绝对要肯定的是这种学习态度,至于文中的轻浮部分大可忽略,这位小封几年之后或者说一年之后都会自我总结出来的
2009-04-13 16:11 | elevenbus[未注册用户]

#41楼   回复  引用    

致小封

书海无涯 良师堪为舟楫;

学无止境 自学胜似风帆.
2009-04-16 10:01 | xing guang[未注册用户]

#42楼   回复  引用  查看    

@伍迷
--引用--------------------------------------------------
伍迷: @冰の酷龙
看不看不重要,重要的是你如果想从事软件编程工作,应该要不断的学习。这是这个行业的特点决定的。另外设计模式也不是什么神秘的玩意,任何层次的程序员都可以有所收获的。
--------------------------------------------------------
正在不断地补习数据结构和算法中,我想设计模式还是先放一下,我一个朋友很喜欢大话设计模式,正在研究中。
现在自己做过的也就简单的c/s项目,唯一会用的是抽象工厂模式,现在也没做项目了,我的基础还是太次了,呵呵。
2009-04-21 21:31 | 冰の酷龙      

#43楼   回复  引用  查看    

《大话》我也在看,很佩服小封的这股劲头
2009-07-24 16:42 | tim.h      

#44楼   回复  引用  查看    

能给个 小封的联系方式 吗?
想加他好友一起 学习
谢谢
2009-11-04 13:54 | 彭成隆      

#45楼   回复  引用    

看没了??没文章了?额。。就到4月诶?怎么不写了呢?哈哈哈,所有文章都看完咯。。
2009-12-07 15:53 | 额额额[未注册用户]