刚在TopLanguage上发的一帖,回顾自己的编程之路。所有人的贴在这里,推荐大家看看。

我学程序的路也走得比较诡异,不是那种扎扎实实一步一步往上走的。高中毕业到大一,开始淘腾程序,基本觉得好玩的都去学学,主要是VB,混着还有Html,ASP,ActionScript等等之类。总之是杂七杂八,每样沾点皮毛。这算是第一个开头阶段。
由于本科学的是飞行器动力(研究×××发动机...),只能自己选一些计算机方面的选修课满足欲望。于是碰到了对我影响极大的金旭亮老师。金老师是那种超负 责超有激情的人,从他身上你可以看到那种对技术的渴望和对学生的负责。我想无论他的学生资质如何,大部分都可以成为一个合格的软件工程师的。我上了他一年 的课,从VB学到了VB.net。这时候就基本进入第二个阶段,属于蒙头猛做期,这个阶段最大的特点就是实践脱离理论,快乐高于一切。那时候做东西没什么 目标、技术方向、设计之类的,也无所谓什么技术含量,只是想到做什么软件好玩,就写代码实现。那时候自己一个人写了很多的小软件玩,印象最深的有两个。一 个是GDI/GDI+做的游戏(这东西做游戏还真是够烂...),将三国无双的必杀技系统和俄罗斯方块做在了一起,算起来也是火拼俄罗斯的前辈了,只是个 人感觉比火拼要有意思些^_^(一共写过两版,VB版和VB.Net版,本来想做成一个传统小游戏+三国人物+人物必杀系统+故事模式的系列,只是代码写 太烂带最后完全无法维护...);还一个就比较猥琐了,大学我考分最低的课是那该死的物理实验,在上完那学期课后,我做了一个工具,不仅能帮你快速计算出 实验结果,甚至可以自动生成所有实验数据,对错误的实验数据进行校正,保证每一份报告都正确且独一无二,免去copy被发现之苦,用此来发泄我心中的不满 (我承认,我渎职了,我利用我物理课代表的职务之便黑下来大量的正确的实验报告,在它们帮助下我成功的助纣为虐...)。那时候写代码真是很开心,没有所 谓的项目,完全是为了自己的乐趣。
但蒙头写多了,人总是会疲惫的,特别是在那种代码质量下。那时候我很少看编程方面的书,看起来也就是示例比较多的入门级书,导致的结果就是代码Bug狂 多,到最后维护至吐血。仔细回想一下,什么垃圾代码我都生产过,总结一下,绝对可以拼成一本《代码大全(错误版)》了。于是痛定思痛,开始提高阅读质量, 狂啃书。系统自学了一下计算机系的大部分课程,读了一些设计模式方面的书。空闲之余,随手写些小东东练手。那时候的coding乐趣明显有所下降,很多代 码都是为了学习而演练的。coding的效率也明显降低,很多时候写了就得不够优雅,就不停的推倒重写,到最后也没有写出一个我觉得有意思的东西来。这时 候就来到了第三个阶段,蒙头苦读期,其特点是理论没学到精髓,引导了错误的实践...。
再接着,就是考研。由于本科不是学计算机,考得又是THU,惨烈程度可见一斑。那时候除了啃书就是啃书,偶尔从书堆里爬出来敲两行代码也都是书中的示例, 混得和刚学程序的小孩似的。这勉强算是第四阶段吧。在这个阶段,我获得的东西都不是技术上的,而是心理和学习能力上的,虽然整个考研过程搞得跌宕起伏,但 我想这份付出也算是有所回报的。
再后来,就是实习和毕设。我同学的大四下都过得悠然自得,只有我自己把自己忙得很鬼似的。起早坐一小时车摸到公司coding外包项目一天,晚上摸黑爬回 宿舍继续coding毕设项目。好不容易做完了毕设,又被老师抓着去做别的项目,顺带着还帮兄弟姐妹做了几个毕设。导致的结果就是我出色的不睡觉能力在那 个阶段有了进一步提升...。算一下,这是第五个阶段了。在这阶段最重要的有两点,一个是我扒开门缝窥看了一眼中国外包行业和大学做软件的现状,帮助我找 到了我的发展方向;还有一个是我总与开始正二八经做C++了,并从此觉得喜欢上了这家伙,纯正的.net血统开始分崩离析,我的coding生涯终于开始 从空中楼阁回归地面...。
再再后来,就是现在,算第六个阶段。开始一边读书一边做项目,感觉在经过理论脱离实际,实际脱离理论后,总算开始找到节奏,对技术的理解也开始有所提高。 科研项目是C++/MFC的,虽然建立在一片狼藉的千年老妖精项目基础上,但是相对还是比较独立,我也可以尝试一些自己的想法,找到了久违的乐趣。业余做 Android,蛮好玩的一个东西。看书基本是跟着当下需求走,有时间就看自己储备的东西。现在再让我说什么叫做技术,我会觉得做技术就是要做好两头,再 来做中间。一个是基础的模块,包括纯数学知识和计算机相关的算法,数据结构之类的,这是构架大厦的砖块,不搞扎实了,大厦摇摇欲坠;另一头是程序设计的理 念,架构抉择的思想,设计能力,对程序理解力之类的抽象的东西,只有具备这些素质,才不会一叶障目,不说做大师级的东西,至少不会一看自己明明想做住宅怎 么做成了猪圈。做好了这些,再往中间走,这就包括语言细节的理解,工具的使用,调试测试等实际工程能力的培养之类的,想成为扎扎实实的实干者,这些硬条件 时必须努力提升的,而且这些东西都是可以融汇贯通的,不同平台不同语言之间都有着相似的分析方法,不能说是一通百通,至少也是可以举一反三的。
回顾那么多年(其实和很多前辈比,着实算不上什么长...),我觉得,无论你起点如何,经过什么样的曲折,只要多学,多想,多练,总归会殊途同归(一个收敛的函数^_^...)。