(注:这里是第二稿,不知道为什么英雄会册子上印刷的是第一稿,他们都让我修改了,结果出来还是第一稿,汗。)
1996年毕业于中国科学技术大学,在华为工作8年,后创业进入互联网服务领域。回首自己的成长历程,竟然发现自己走过的道路非常曲折可笑。
父亲从文,尤其对古汉语研究颇深,在家乡应该算小有名气,在众人的眼里,我应该是理所当然的接班人。可惜的是本人愚钝,对语言文学丝毫进不了状态,但对自然科学倒是有无比的兴趣,曾经从学校偷了一点钠带回家给看门老头表演把水点燃的魔术。碰上高中文理分班,毫不犹豫地抛弃了父亲的期待,义无反顾地选择了理科。好在本人学习还算刻苦,虽然因奥数竞赛一等奖获得了大学保送资格,但我放弃了保送机会,通过高考顺利进入了心目中的大学。
稍有常识的人都知道本人所在的大学是什么类型的学校,没错,理工科。但就在此时,本人做出了一个令所有人吃惊的决定——学文。别说那些同样等待答案的惊诧的眼睛们,连我自己至今都想不起来当初是什么原因做出这个决定的,但我确实选择了。临毕业前,学校最终给我们确立了名分,还是理工科文凭,估计是担心非理工科文凭难以就业吧,感谢校长的一片苦心啊。
事实上大学5年基本被我荒废了,成绩总在中游徘徊,唯一一次值得骄傲的记忆就是某次高数考试,3小时的内容,40分钟就交卷了,最后还是满分,想着交卷时班主任一副不相信的眼神,到现在我都在得意。看来我的兴趣还是在理科上,计算机基础理论也是在这段时间打下的,真正的编程工作还不是太多。
应该说C/C++语言的熟练掌握还是在工作以后。我认为自己最大的优点就是肯学肯练,这点相信多数程序员都能做到,但我还有另一个“天赋”,就是对学习方法的敏感。我认为我总能比别人更快地掌握一门技术,因为我总能最快地找到最佳的学习方式,遇到开发问题也能最快找到原因。之所以说是天赋,是因为我自己也不能解释为何比别人快,这个能力恐怕不是肯学肯练就能获得的,不过我相信跟学好理论基础关系极大。通过在CSDN社区一年半的观察,我发现程序员提的大部分问题的症结都不在代码本身,而在于学习方法或者意识不对,如果能够突破这一层,我相信他们的问题都能自己解决,不需要依赖他人帮助。
工作后接触了很多系统方法论,这些理论会被多数人形而上学地引用,最终效果并不佳。我觉得这些方法论的真正作用在于培养自己的意识和习惯,而不是用嘴巴说出来或者写在纸上钉在墙上。一个最简单的例子——5W2H,这套术语至今都在我的脑海中起作用,当我设计一套软件或者软件模块之前,我一定会把框架完全构思好,并用5W2H来扫描,直到整个架构在脑海中定型才开始真正动手。记得一次项目经理让我临时写一个用在UNIX上的小函数,功能其实很简单,但出错条件非常多,需要过硬的C语言功底。我的意识帮了大忙,不到一天就提交了代码,在提交前仅仅编译了一次,当然编译是成功的,但没有测试过。项目经理试用后看了一下我的源码,笑嘻嘻地对我说:“一次性通过,代码无错,本来想给你至少3天时间来完成的。”希望这个案例不要影响其他人,事实上这种一次性通过的情况对我来说也是唯一的一次,但就是这次给了我无比的信心,让我以后更注重方法和意识。
学习任何一种新技术,我喜欢从根源开始,掌握最基础的理论,通过不断练习加深对基础理论的理解,在这个过程中自己不知不觉就成了领域专家。越是看似简单的理论,掌握起来越困难,因为基础理论之上一定会延伸出更多的应用理论,所以需要更多的时间来练习,这也是我编程20年还在练习的缘故。但人的精力总是有限的,从高中时期编的第一个BASIC代码开始,涉及过太多的领域,不同的操作系统,不同的数据库,不同的语言,不同的开发工具……太多真的不好,该忘的都忘了,就像汇编我现在根本不敢摸,想捡回来恐怕并不容易,曾经背得滚瓜烂熟的C语言标准库函数,到现在不知道是否还能记得十个。
再谈谈对CSDN的看法。事实上我上CSDN的时间不长,早期在网上搜索资料时访问过CSDN,但并没有进入社区,真正进入社区应该是2007年底,因为空闲时间相对多了,所以才抽空回答一些技术问题。在信息提供方式上,我认为CSDN还应该向国外的知名网站学习,对我帮助最多的网站是CodeProject和CodeGuru,提供了很多源代码和原理介绍,尤其是原理介绍,让你不用下载源码就能理解大概思路。在用户体验上,CSDN还是做了很多有益的工作,例如在调动提问者和被提问者积极性上就一直在改进,但我还有两个方面的体验不太满意,一个是页面加载性能不高,另一个是很多花哨的功能被强行加载,大部分功能我是从来不用的。
最后给所有程序员一个最大的忠告:操作系统可以丢,数据库可以丢,语言可以丢,开发工具可以丢,千万不要丢了基础理论!!这是成为技术英雄的根本。