随笔-341  评论-2670  文章-0  trackbacks-0

距离元旦也就十几天了,2010就要过去了。从第一行Hello World到现在,已经有10年了,所幸从未中断,因此从某种意义上来讲,我已经写了10年的程序了。每个人回顾以往走过的路的时候,往往会发现今天的结果来源于之前的一些“关键步骤”。显然我也是一样的,所以这次的总结跟以往不同,就不列出之前做过的种种程序,而是聊一聊这些关键步骤和影响我的人给我带来的影响。当然算得上关键步骤的,只能是那些能够左右人生轨迹的事情。

老爸、外婆和爷爷
这倒不是说老爸老妈把我生下来了怎么样怎么样。老爸在我幼小的时候教我一些简单的数学,给了我很多书,还有外婆教我识字,结果就是我从大概二年级开始就能够阅读老爸留给我的一些科普读物了。这些科普读物是他小的时候看的,上面还有语录,每一篇的几位都是伟大的思想指引我们前进云云。当然这并不妨碍书本的内容的质量。老爸的书也都一直保存得很好,后来我爷爷也给我弄了一套科普的启蒙读物,现在还保留着,只不过很多翻烂了。这套书是翻译的,小日本写的,不过内容却十分丰富。里面包含了数学、物理、生物、手工和一些其他的很多东西,甚至连汽车和飞机的结构都有。加上外婆也十分赞成并且指引我看这些书,其结果就是从小就对一些科学的事情感兴趣——当然也包括数学。从三年级开始到中学,老爸就给我买一些数学奥林匹克的书。当然这并不是让我去参加竞赛用的,只是他觉得既然他小时候也喜欢搞数学那我也应该继承这个优点,从而就让我去弄那些东西了。在五年级的时候,那次全市的数学竞赛老爸也帮了我很多,我也拿了很好的成绩。维持了那么多年从不间断的强大的自信心和信念就是从这个时候开始的。人喜欢搞一些事情很大程度上都是因为那些事情曾经被搞得很好,因此我也就喜欢上数学了,后来有机会体验到了数学的定理和公式的美妙之处,让我一发不可收拾。

汕头市华侨中学的领导们
这是个好学校。我整个读书的生涯,唯一一次体验到什么是素质教育就是在这里。可是后来由于各种微妙的问题导致这所学校的竞争力下降,这从某种程度上来说算是悲哀吧。我第一次接触到编程就是在这里。初中二年级的时候,学校开Basic的课,但是并没有试图让我们参加竞赛——其实连提都没提,只是就这么当成正常的课来上。把编程学得好,满足下面两个条件的话基本上可以说就是在走捷径,第一个是会从心底里对公式和定理产生美的感觉,第二个就是要持续不断地在编程上体会到成就感。这也是我为什么在一篇写给师弟师妹的文章里面提到刚开始的时候学习制作软件界面也是十分重要的,因为这会让你产生源源不断的动力,好让你给以后学习算法打下精神基础。QBasic教完自然就教Visual Basic了,当然都是很浅的内容。不过我由于受到吸引,从那以后就一直往书店里面跑,去扫荡各种跟Visual Basic有关的书,后来学到了不少。我初二在新华书店很偶然的发现了那本《Visual Basic高级图形程序设计教程》,不过坦白说我其实是被插图吸引的。那个时候发现Visual Basic竟然可以仅凭代码绘制出那么漂亮的图形,从而兴趣提高了不少。不过学习这个也是很辛苦的,这导致我不得不在初三的时候就去寻找并学习立体解析几何,高中的时候提前学习数学分析,都是为了看懂这本书啊。这本书我从初二一直看到上了大学,还带去宿舍看,看了好多年才把它每一页都琢磨透。这从某种程度上来说也算是缘分吧。

英语补习老师李培涛
初中的英语被我一不小心搞的一塌糊涂,甚至到了快不及格的地步了,所幸当时我妈(特别感谢)非得让我找一个英语的补习老师,所以就遇到了李老师了。虽然说补习课是要交钱的,不过李老师人倒是很好,不是为了收钱而收钱,还是花了很大精力实践了因材施教的。我的英语就被他给搞好了。我们知道英语对于编程来说是不可或缺的一个重要条件,因为中文的资料从数量或者质量上来说,都远远比不上英文的资料。如果英语不好,这除了阻止知识到达你的大脑里面以外,没有好处。

汕头市第一中学的张朝阳老师
高一的时候是张老师给我们上的计算机课,这个时候他告诉我们有NOI这种东西,不过我着实对算法没什么兴趣,因为那个时候我对图形更感兴趣,而且绝大多数图形的算法都不是搜索算法,而是跟数学知识有着更直接的联系。因此我就没有花多少时间在算法上面了。不过其实什么时候学习算法并不重要,只要你在工作之前学了就好了。原本那个时候也想靠NOI看看能不能混个保送什么的,由于我其实也不太认真做这个,因此只好亲自高考了。但是在这里我并不是说张老师教给了我什么知识,其实那段时间我都是靠自学。只不过因为我在非NOI的编程竞赛里面的成绩很好,所以他给我大开方便之门,让我可以利用学校的各种资源。我们都知道万恶的学校经常会不知不觉做出一些扼制青少年素质全面发展的事情,因此张老师给我的方便是十分重要的,包括我可以拥有机房的钥匙以便我在任何时候可以进去使用计算机写程序。课还是要上的,但是由于我每一年都参加NOI,所以自习课我就可以跑去机房了,写代码的时间也就大大增加了,这着实是十分有好处。

CSTC的同僚们
CSTC我现在也搞不清楚究竟他们的使命是干啥,不过印象里面就是北京工业大学的几个写代码比较厉害的人搞起来的。我有幸在上高中的时候接触到了他们,其中曾毅和唐良两个人对我的帮助很大。曾毅告诉我为了将来的前途也好,为了自己编程能力的发展也好,搞一个好学校总是必须的。唐良是在我上了大学之后告诉我这个世界上还有《算法导论》这本书,让我的数据结构和算法知识有了十分稳固的基础。当然其实不会数据结构和算法并不是说你就写不了什么复杂的程序,而只是导致你写出来的复杂的程序质量很差性能比较低而已。在高中的时候我已经做出了一个pascal的无指针版本的解释程序了,不过在这个时候我说实话除了链表以外,什么都不知道,编译原理也不知道,所有的东西都是硬凑出来的。当然程序还是能运行的,就是写好之后就无法再修改了,实在改不下去。

华南理工大学的陈健老师
高三的时候写出来的pascal解释器实在是让我十分兴奋,所以在刚入学不久听说我们的班主任陈建老师教编译原理的,我就跟她说我对这方面有兴趣了,而且当时还为我的下一个解释器写了一个很长的设计文档。这份文档一开始只是写给我自己的,后来顺便就给她看了。陈老师倒是没说什么,过了许久,给了我一本《编译原理》。当然这不是龙书,说实话那本课本也非常糟糕,只是这让我知道这个世界上还有这种东西,也就足够了。大一的时候迅速看完了这本书,觉得很不爽,就把龙书搞到手,然后看了一部分。大一结束的时候就做出一个面向对象带模板和垃圾收集的静态类型脚本语言了,陈老师实在是功不可没。作为老师,能教你什么是不重要的,告诉你你还有什么不会才是最重要而且最有用的。

华南理工大学的陈天老师
这位老师给我们上了大一的C++课,不仅功底扎实,而且可以课也讲得很好,无奈在我大三的时候说是实在不行了,跑去做程序员了。我就不对这件事情作评论了。陈天老师不仅告诉了我《设计模式》是十分重要的,而且也经常鼓励我进行更加深入的学习,对我帮助很大。

g9yuayon
这是个人才啊,而且编程水平也十分地令人叹为观止。不过他对我帮助最大的莫过于告诉我这个世界上还存在着《Parsing Techniques》了。这是世界上最好的描述语法分析的书,连龙书的前几个章节都不如这本书讲得好。当然龙书还是包含了后端的,而《Parsing Techniques》是只有前端的。不仅如此,他还给了我不少论文看。其实如果看得下去的话,论文带来的帮助远比算法要大得多。因为数据结构和算法真正普遍实用的也就那么几种,其实知识量是十分少的,还比不上数学分析。既然数学分析一年就可以上完,那实用数据结构和算法其实是不需要花那么久的。不过那些更加深刻的数据结构和算法当然不在此列了——还是很多的。但是论文,是方向性十分强,而且解决的问题其实范围更狭窄的东西。只不过如果认真研读论文的话,可以学到很多知识以外的东西,譬如说作者是如何整理他们的结果的。遇到好心的作者的话你连他们怎么发现这个事情都可以知道。由于从小就喜欢数学,所以看论文的时候看得十分入迷,也就看得更加认真仔细了。g9yuayon介绍给我的论文的确都是十分漂亮的,在我掌握了知识的同时,又让我的基础变得更扎实,并且对编程也更加喜爱了。

龚敏敏一伙
这倒是一个共同作用的结果,也是我第一个联系比较紧密的圈子。群里面的人都分布在各大公司,而且水平都不错,并且都是在研究图形学的。至于说为什么会跟他们接触,当然是因为高中的时候对图形学特别热衷的关系了。虽然后来转去做编译器了,不过学习图形学并不是一个浪费,因为这个漫长的过程让我的数学知识变的扎实,而且也产生了很多题目让我练习编写一些至少有点小规模的程序。实践是检验真理的唯一标准,这话是不错的。

我还要提一下LYT同学。LYT并没有在编程上帮助我,其实是我在教LYT写代码,只是LYT肯让我教那么久着实也不容易。为了教LYT学会写简单的编译器,让我不得不将我学过的知识从头到尾整理了一遍,而且还让我思考如何使得一个人在学会编程的同时可以保持乐趣、自信心和良好的习惯。这个过程十分有意义,不仅让我有一个机会可以从头整理我学会的知识,思考一些更加深刻的东西,让自己对知识的掌握更加深刻和牢固,而且其实对被教也是有帮助的。利己利人,何乐不为。LYT经过了我三年的精心指导,从对编程什么都不知道开始,最终顺利拿到了网易的offer,而且工资也没比我低多少,实在是让我感到十分高兴。

在我2009年7月份毕业之后就去了Microsoft而且尚未跳槽。从毕业后开始到现在这段时间现任女朋友2A同学给了我很大的支持,并没有觉得整天宅在电脑前写代码看动画片很没前途,而且还帮忙寻找各种书带我去书店鼓励我等等,对此十分感谢。

当然这并不是说其他人就对我没有帮助,而只是没有满足文章一开始提出来的“左右人生轨迹”的条件而已。因为对我有帮助的人其实非常多,志同道合的朋友也不少,在这里我就不一一列举了。

祝各位读者们也能够对编程感兴趣而且在这个道路上不断坚持越走越远。

<><><><><><><><><><>
后记。突然想起来我忘记写上,其实小日本的动画片都是一些非常具有教育意义的东西,这让我学会了很多黑暗的社会没有任何机会让我知道的人生的道理。大家一定要看啊。

<><><><><><><><><><>
后记2。今天空明流产说他是搞图形那一群人里面为数不多的还做做shader前端的,所以我再提一下,啊哈哈哈。

posted on 2010-12-18 09:17 陈梓瀚(vczh) 阅读(10588) 评论(33)  编辑 收藏 引用 所属分类: 启示

评论:
# re: 10年编程之路(2010年度总结) 2010-12-18 09:37 | Binger
注意身体  回复  更多评论
  
# re: 10年编程之路(2010年度总结)[未登录] 2010-12-18 09:40 | DJ
哎,师兄真是好,能遇到指导你入门的人.以前小时候就对电脑很有兴趣,初一自己跑去买过vb的书,可是那时候就自己看实在是艰难,然后就不了了之,就大一才开始认真学了.
其实我一直想知道,有没有量化一点的指标说明要进网易腾讯这类公司,编程水平要怎样才行?现在就是自己写自己感兴趣的东西,目前多是些桌面程序,写过半个游戏,搞过一个模拟3D水面的东西,代码量大概只有3-4w...没有参加老师的项目,没有参加过什么比赛,现在还真是略有些担心就业的问题...  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2010-12-18 09:44 | 陈梓瀚(vczh)
@DJ
网易疼讯哪有指标,不过既然你说你搞定了那些东西,一般没什么问题的吧……  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2010-12-18 09:50 | egmkang
g9yuayon确是是猛男啊  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2010-12-18 15:32 | 农夫山城
我也想学编程,我想写软件。高中没毕业哦。  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2010-12-18 18:52 | flagman
看来QBasic对为数众多的人影响很大,属于平时用得极少但绝对是启蒙好材料的那类;这QBasic在一本构建基于.net平台的compiler的书《Build your own .net language and compiler》里是作为目标语言来搭建对其的前端parser以及后端的code generation(.net的CLR环境里生成的是MSIL),不过这书对于实用级/工业级compiler极为重要的一个议题:优化,基本没涉及。  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2010-12-18 18:57 | 陈梓瀚(vczh)
@flagman
前端的事情比优化复杂多了,如果真想把一些真正方便程序员的语法实现出来的话。  回复  更多评论
  
# re: 10年编程之路(2010年度总结)[未登录] 2010-12-18 19:54 | Jcily
都是年少接触计算机比较早的人啊,不过楼主一路走来很执着也很顺利,首先前提是楼主本人对编程的执着,又有好的家庭支持气氛支持,能遇到志同道合的人。
自叹不如啊,跟着楼主一路回忆相对比,我自己却一直飘忽着浅显着,小学时有幸接触到386,486,玩过简单DOS,WIN16操作,初中阶段玩过一点VB,后来和伙伴迷上古惑仔,拜过把子谈过恋爱,打过群架砍过人(现在想来十分幼稚也后悔给家里添乱),思想整顿后,又迷上红警星际接着CS,高中迷上网络游戏,后来随便上了个学校,亡羊补牢编程之路还算顺利。  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2010-12-18 21:04 | Easonhou
大一的时候看水王的『手把手教你写脚本引擎』系列,只看懂了第一篇;大二看懂了两篇;大三学完编译原理才能完全看懂。
今天看到『大一结束的时候就做出一个面向对象带模板和垃圾收集的静态类型脚本语言』我泪流满面地把自己大三写的那个还停留在面向过程的编译器delete了。。  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2010-12-18 22:25 | iloveprogramme
同样是10年左右的编程之路。
水平差距真不是一般的大啊!
一个为生活一个为兴趣,唉...  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2010-12-18 23:08 | 陈昱(CY)
太多的人在现实面前,为了生活,失去自己的兴趣,我好像快到失去的边缘了,要怎么回来啊  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2010-12-18 23:37 | 溪流
洋洋洒洒,令人羡慕嫉妒恨呐
读过的第一篇跨度十年的文章是林锐的《大学十年》,第二篇就是LZ的这篇《10年编程之路》
从写第一行C代码起,自己也算有快5年了吧,希望再过5年能有LZ一半水平~  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2010-12-19 04:12 | 空明流转
我也得写一篇十年了。  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2010-12-19 04:20 | 陈梓瀚(vczh)
@陈昱(CY)
没事自己折腾点好玩的东西嗯嗯  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2010-12-19 07:59 | 空明流转
啊哈哈,老子写完了。。。  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2010-12-19 09:12 | 琉森
搞得我都想写一篇摄影两年了~  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2010-12-21 23:43 | mm
LZ,其实你还有个好妈妈,从小学到大学,她从未要求你埋头应试。。。嘿嘿  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2010-12-22 07:25 | Koma
保重身体,致敬!  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2010-12-22 08:59 |
动漫动漫我最爱,哦耶哦耶我最爱  回复  更多评论
  
# re: 10年编程之路(2010年度总结)[未登录] 2010-12-25 06:01 | by
动漫好!~~  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2011-01-06 22:41 | tears
大哭,师兄有女朋友了啊!!!  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2011-01-08 04:23 | 陈梓瀚(vczh)
@tears
你是谁啊  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2011-01-11 00:39 | tears
@陈梓瀚(vczh)
我已经不知道我是谁了  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2011-01-11 19:32 | mm
楼上。。。  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2011-01-25 05:24 | cherryunix
CTSC记得是国家队组队选拔赛。。。。。  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2011-02-10 16:08 | 呵呵
@陈梓瀚(vczh)
老弟跟你说一句,你虽然年纪比我小好多,而且好孩子当得相对比我早,我说你将来编程包括编译器的水平很可能比不上我。

比如你说前端比后端复杂,这真的是一个笑话。很可能是因为你擅长前端不擅长算法和数据结构的问题。

别误会,我恰恰也是擅长前端,而且我比你更不擅长数学。我要说的是,读你的文章一个最明显的感受是,我是自己擅长什么就看不上什么,而这点上你却不具备,这会是你最大的障碍。

要知道,做一个soso的后端是毫无价值的,在后端,一切都是以绝对标准衡量的,谁做得好谁做的坏。我喜欢这个领域,因为这才是真正的竞争;虽然我现在没有时间和机会去参与。

更何况至于前端,你所谓的语法就算是上下文相关的,也不见得就是什么难事。同时,若是挑战可计算性的语法,就是再美妙你也得屈服。

前端真正精妙的地方,是那些落入CS类中,却可以多项式甚至O(n)解决的子类别;同时,如何用一个通用的算法去解决其中的问题,再各种情况下都能有比较好的时间复杂度,是最有意思的地方,也是一个真正的竞争。

而这个竞争却恰恰是纯算法、创意、脑力的比拼。基础的算法知识根本毫无内容,这是你我这样的人都明白的;实现点已经有的算法,比如你做的那些图形上的,对咱们个人有时候是个挑战,但客观地说什么也不是。

东西越少,其实并不说这一块没什么难度、没什么可关注的,恰恰相反,说明这一块很难。大家都知道Quick Sort,这么简单一个东西,在第一次公开发表前,多少程序员不能自己想出来?没什么可学的,这正是最好的地方。

我不是像你炫耀我的想法,作为一个大你几岁的人,知道你也不是第一天了,我希望你好,所以说说自己的看法。我也不拿年龄压你,我不保证我说的是对的,但我觉得不同的看法总是有益的。

看你博客几次了,很多地方你知道的比我多多了,但是却没有让我学到真正东西的感觉。我甚至在javaeye上那个小屁孩的炫耀贴里都能偶尔看到些什么。这是我个人、作为一个希望中国多几个真正的“程序员”的人,替古人担忧的地方,也是我为什么要说这些煞风景的话。

看到很多比你更年轻的人,都在讨论进网易、进微软,这让我非常失望。我想说一句,大家更多的应该是看到你为什么比他们更会编程、知道的更多,而不是拿你的社会一般评分来当作榜样。有了价值,至少像样的工作是不愁的。

至于你,我不知道你发现没有,中文网络上基本上除了菜鸟就是菜鸟,不是菜鸟懂很多的也不过是一潭死水。千万别因为菜鸟的高山仰止和几个你的价值观认同的老家伙的评价,就停止了脚步。

算了不多说了,认真,我就输了。  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2011-02-10 16:21 | 呵呵
另外,Parsing Techniques这书我也看了,不错,我觉得更多的应该当一个速查,还有就是对历史发展、大家公认的一些知识如分类、普遍方法什么的有一个认识。

面积大了细节自然就会差,这书在具体的内容上是有一些错误的,需要防着点。另外就是千万不要试图也变得和作者那样知道的那么多,那样的人会失去在细分中创造的机会,时间是有限的。

还有就是论文中的很多观点也不见得是对的,论文实际上有些时候是功利主义的产物。要毕业、要抬高自己的社会评分。很多时候事情如果真掌握了,回头再去看论文,就会觉得一些作者很多结论下的非常草率、甚至是为了解决问题而给出一个不是问题的问题。

比如一些编译器算法的论文,提到某某算法不需要lookahead,我的解决方案如何如何,实际上背后的事情原本是一清二楚,为什么需要为什么不需要、他的方案本质是什么,但这些都被搅浑了,最终我们学他一点东西,却可能在没意识到的情况下,就捎带着有了很多先入为主的印象。

当然,熟悉别人、圈子的语言和说话方式,并借鉴别人这都是必要的。我的意思是,如果不是就图混个人五人六,最终我们的价值来自于显性、隐性的、硬碰硬的竞争,千万不要潜意识里避开它。

人不能以学到多少为荣,应该以做了多少为荣。  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2011-02-10 19:04 | 陈梓瀚(vczh)
@呵呵
嘛,那个“擅长什么就看不上什么”的观点其实我是跟你一样的。只不过博客是个做广告的地方,自然不能什么想法都写。当然我的博客还有另一个作用就是鼓励别人编程,只不过我比较不喜欢把整个东西做成一个guide,所以高手们自然不能从博客上面看到一些什么太过于高深的知识了,得去广告的代码里面看才行,灭哈哈。

至于前端跟后端的问题,虽然这只是个人看法罢了,不过在我看来,程序语言的研究是属于前段的,编译原理是属于后端的。比较一下就知道哪个比较复杂了。你知道一个正常人是不可能说语法分析比后端复杂的吧。

自我的修行肯定是不会停止的,共勉。  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2011-04-30 23:54 | 幻の上帝
@呵呵
实现一个前端往往是没后端复杂,但设计一个让大多数人满意的前端接口(i.e.语言之类)几乎总是比后端复杂(尽管实际上是不同的工作,这里直接比较可能不太恰当)。因为这里结果的评价体系更多地涉及到人而不是机器,这是数学或者工程方法都不擅长的领域。
  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2011-07-15 19:13 | 咖灰小王煮
你好,我想问下你所提到的英语补习老师李培涛是不是86年出生?  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2011-07-15 19:20 | 陈梓瀚(vczh)
@咖灰小王煮
怎么可能,我是87年出生的。  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2012-03-26 22:26 | Ben Lee
敢不敢让我拜你为师  回复  更多评论
  
# re: 10年编程之路(2010年度总结) 2014-05-15 19:14 | lanisle
LYT同学会不会写了篇《3年的不离不弃》  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理