[转]袁红岗的编程感悟(搜藏)
申明:文章来源网络,版权属于原作者。
"我自己知道,近几年也一直在用,但就是说不出来,直到最近几天才能够表达"--叫作Think in Code,也就是用代码思考,同时也把代码当成自己思想表达的方式。正如哲学家用文字设计、诠释思想,程序员'说话'用的是代码,这就是一个程序员的境 界,也只有代码是无歧义的"。
--究竟要怎样的努力才能做到像你一样?
--就是时间,我觉得任何人写十几年的程序,估计都能和我差不多。做程序员,很多人会觉得是吃青春饭的,但我要说,如果大家能静下心来做到三十几岁,一定会发觉这是十分惬意的一件事情。
袁红岗话不多,和其他同事站在一起,穿着简直可以用随便来形容。不经介绍,你一定不会想到面前这个"老袁"就是中国Java及J2EE核心技术领域公认的技术权威,金蝶中间件的首席科学家。
"那些都只是虚名而已",老袁平静地说。
36岁的老袁其实并不老,但十几年的程序员生涯却足够资深。他的"作品"包括:行业内最早基于Windows平台的财务软件;国内最早的基于三层结构技术的应用软件系统;国内首家拥有完全自主知识产权并通过国际J2EE认证的应用服务器……
"编而优则不仕",老袁的想法仍是程序员本色:"回过头来看,所做产品卖了很多,说明中国有那么多人在用我们写的程序,这才是最有成就感的。如果我做管理工作,那就默默无闻了,就算做到比较高的管理位置又能怎样?"
"那究竟要怎样的努力才能做到像你一样?""就是时间,我觉得任何人写十几年的程序,估计都能和我差不多。做程序员,很多人会觉得是吃青春饭的,但我要说,如果大家能静下心来做到三十几岁,一定会发觉这是十分惬意的一件事情"。
没有捷径,但有方法
做 一个程序员,老袁不爱谈技术,而以讲究方法著称。几年前,老袁曾在网上发了个贴子,谈《做程序员的基本原则》,结果短时间内的访问量居然达到了数十万次之 多,成为名副其实的精华贴。方法对于程序员的重要性,用那里头的一句话来说,就是"世界上并没有成为高手的捷径,但一些基本原则是可以遵循的"。
最近见到老袁,他最得意的却是自己才总结出来的"编程思想"---"我自己知道,近几年也一直在用,但就是说不出来,直到最近几天才能够表达"---叫作Think in Code。
所谓的Think in Code,也就是用代码思考,同时也把代码当成自己思想表达的方式。在老袁看来,正如哲学家用文字设计、诠释思想,程序员"说话"用的是代码,这就是一个程序员的境界。"也只有代码是无歧义的"。
如 今的老袁写起程序,一来"在设计的时候,不需要任何其他的开发工具,只需要代码,对象设计、功能设计都可以直接定义,用代码方式表达出来",二来"写到后 来不再需要另外的文档了,写的东西已经表达了我的思想"。设计或是编码,可以自顶向下,自底向上,或者两者融合,都可以自由选择。很有点随心所欲的境界。
如果选择了自顶向下的设计路径,老袁就会把最高层的这些接口设计好,下面的细节就暂时放着,留待日后细化,反之亦然。等程序的代码结构有 了,再将这尚不可交付的代码结构做一个测试、重构,找出里面的缺陷,优化里头的细节,使代码更加合理简洁,变成一个可交付的版本。每天大家都下班后,老袁 启动一个自动编译和测试的程序,第二天一来,就知道自己前一天的工作里面有没有什么错误。
同样,老袁也对一些标准化的软件开发模型很不 感冒,比如CMM认证之类。在老袁看来,过于规划化的流程把软件开发变成了一种很不自然的事情。老袁更喜欢一种循环开发的模式,写程序的时候,软件的设 计、编码、测试都融合在一起进行,而不是像传统的软件工程方法那样分阶段,一定要概要设计→详细设计→编码→测试,完全完成前一阶段才能进行下一个阶段。 "设计、编码、测试,不是阶段,而是过程,设计的时候也可以编码,编码完了就可以测试,为什么一定要所有编码完了才能测试或是所有设计完成才可以编码呢? "
找到合适自己的方法
同事说,"老袁在创新上一直是我们追赶的对象,程序员是很讲究创新的,很多程序员一开始是跟着人家走,学一些工具并满足于此,但是老袁能自创一派。"
老袁说,"其实我以前也学过很多的方法,比如UMT,CMM学了很久,但是始终用不起来,感觉这些方法还是不适合我,所以每个人都应该找到自己适合的方法。"
那怎么来找自己的方法?"不要轻易相信别人的方法。经常说如何好,我就怀疑,是不是真的用了这套东西之后开发能力就提高了呢?"
说起来轻松,但真正的寻找过程注定充满了艰辛。找到了,成为"开宗立派"的大师,找不到,则只能在模仿小空间里绕圈子。
老袁在学校里就开始编程了,"那已经是真正的项目"。这也让老袁早早地在同龄人中间开始拔尖。从那之后到1994年,在老袁看来是自己学习、摸索,模仿的阶段,看了很多书,读了很多程序,自己也写,"但现在看起来确实是非常粗浅的"。
1994年,优秀程序员老袁进入金蝶公司,推出了不少大名鼎鼎的"作品",比如金蝶财务软件等。"在外人看来,这是一个非常辉煌的时代"。但是老袁却开始越来越郁闷---不是因为别的原因,"东西在别人看来写得非常好,但是自己却总是觉得再也无法提高了"。
曾经有一年多的时间,老袁说自己一点东西也写不出来,就是感觉跨不过去了。"当时也动过这样的念头:算了,不写程序了,不写程序就搞搞管理,日子也会很好过。"
那 段时间,老袁率领当时的金蝶中央研究院开始了J2EE架构的核心---J2EE应用服务器的研究和开发,成功开发出了国内首家拥有完全自主知识产权、通过 国际J2EE认证的应用服务器,并成为国际JCP组织中国代表。2000年,金蝶中间件公司成立,发布了金蝶Apusic应用服务器1.0版本,2001 年,老袁又把所有的架构体系推倒重来了一遍,这就是2001发布的2.0版。
这个2.0版的重构成了老袁程序员生涯的一个重要转折,可 谓从优秀到卓越。"这个时候就开始意识到做软件是要有思想的,要有思想来指导你。之前之所以遇到很大障碍,就是没有一套思想、方法论。凭借着对技术的掌握 自己还是写了一些软件,但是技术掌握得再多,没有好的方法,你仍然没法写出好的程序。"
就象是捅破了一层窗户纸。从那时候起,老袁的编 程工作就有了游刃有余的感觉。去年老袁在美国遇到一位敏捷编程方法的倡导者,被外界称为“软件开发教父”的Martin .Fowler,几句一聊,让老袁立刻有了知己之感。"这才发现世界上还有这么多程序员有和我一样的想法"。
这让老袁有了进一步总结自 己的编程理念的想法。"我的编程思想和敏捷编程很像,但又不完全是敏捷编程"。老袁希望自己在40岁之前,把Thinking in code说得更清楚些,更具可操作性,比如:如何用代码而不是用建模工具来设计,如何在设计的时候让代码来表现流程。如今老袁平时也带学生,但是只教方 法,不教技术,"有很多技术,他们比我还懂得多"。