随笔-2  评论-83  文章-0  trackbacks-1

编了12年的程序,国内国外四处奔波,从“三五个人,十来条枪”的小公司里的程序员一直做到500强企业的系统架构设计师、部门负责人,真是很多感慨。看到院子里大家热火朝天地讨论程序员的年龄和职业通道问题,终于也忍不住想和大家分享下我的一些体会,顺带为我的开发团队打打小广告。

我把我接触过的有经验的程序员分为三个层次,借用夫子的话来形容这三个层次就是:“而立”,“不惑”和“知天命”。

1.而立

   这个层次的程序员,对技术的理解大多停留在技术的应用层面上。只重视去学习新的技术,不知道关注自己的代码和设计的质量。把技术的成长单纯的理解为知识的积累,而不是技能的成长。停留在这个层次的程序员往往感觉在从业两三年后技术就没有什么大的进步,甚至有人干了七、八年十年后居然会发出“编程不外乎拖拖控件,设置下框架,再写点逻辑”的感慨。这种程序员真是吃“青春饭”的,干到30来岁还是立不起来,丧失了对技术的热情,到了有家庭的负担,不能再和后生比体力的时候,就只能转行做所谓的“管理”,凭经验和人际关系混日子。要不就转去做点技术支持销售什么的。很不幸,我接触到的多数中国程序员都停滞在这个层次,分析起来,可能和中国社会的浮躁有很大关系。


2.不惑

   这个层次的程序员,会自然的将面向对象、设计模式等设计技术应用于自己的代码中,认真考虑并重视设计与代码的质量问题,明白真正的“好程序”大概是怎么样的一个样子。这个阶段的程序员在每个项目都会有一些收获,技能会随着时间不断成长。 对于各种层出不穷的技术,他们不只知其然,还知其所以然,因而可以毫不吃力地掌握新的技术。处于不惑阶段的程序员不吃青春饭,他们价值会随着时间的增长而增长。 达到这个阶段的程序员要少很多,但我认为只要有适当的环境,或者能对技术保持一颗好奇和热情的心,勤于思考,踏踏实实地下功夫,任何人都能走到这个阶段。然而达到下一个阶段就要难得多了,光是努力是不行的,还需天分和积极的思考。


3.知天命

   这个阶段的程序员,有丰富的设计经验。面向对象,设计模式等设计技术早已不是问题,达到“得模式而忘模式”的境界。他们所做的设计自然优雅,简洁流畅。编写的代码干净利落,表达力强,往往不需在代码行间写注释即可让人一看即懂。他们已经彻底理解了程序和程序所反映的客观世界之间的关系,总能找到适当的角度后用恰到好处的简洁设计将客观世界计算机化。掌握新技术对于达到“知天命”层次的程序员而言,就像呼吸般自然。他们不只理解新技术的原理,而且对一项技术出现的动机--也就是这项技术企图去解决的问题有深刻的理解,所以往往能够仅凭对新技术简单了解,就能正确决定在什么时候、怎么样去利用这个技术。达到“不惑”阶段的程序员在设计时会把重心放到怎么样完成目标上,而这达到“知天命”层次的程序员会去重点关注过度设计问题。简单来说,“不惑”基本的程序员主要精力放在“加法”上,而“知天命”级别的程序员主要精力会放在“减法”上。他们明白,设计的关键就在“取舍”二字上。到目前为止,我接触过的达到这个层次的程序员屈指可数,每一个都一定是他所在的团队的核心人物,而且如果他沟通能力足够,往往会自然成为团队中系统架构师的角色。知天命的程序员就像陈年普洱茶,越老越香,他们对设计中度的把握会越来越精准,越来越能够做到举重若轻。在大型项目或高难度项目中,他们能发挥普通程序员十几倍甚至几十倍价值。

“而立”,“不惑”和“知天命”这三个阶段虽然是夫子拿来形容年龄的,但在我这里和年龄完全没有关系。我见过很多都接近不惑之年还停留在“而立”阶段的程序员,也见过以仅仅弱冠之年便“知天命”的宝贵人才。

很不幸,目前国内的IT环境,注定在中国“知天命”的程序员就是凤毛麟角。要想达到“知天命”的境界,程序员除了一定的天赋之外,还必须有非常主动积极的态度和热情。这样的人在其它方面肯定也不会差到哪里。国内的很多公司依靠的是关系资源生存,技术的好坏作用不是很大;又或是软件开发理念落后,不给程序员充足的发展空间。所以这些程序员在达到“知天命”的境界之前很多都转去做管理或其它待遇更好的工作去了。

作为一个过来人,我一直希望为改变这种状态做些什么。目前我加入了一家有雄厚资金支持的创业公司,计划建立一个小而精的产品研发团队。如果你自认已经达到“不惑”的境界,而又不知道该如何在技术上取得突破的话,可以考虑下加入我的团队。我们公司目前还在昆明办公,在不久的将来会搬到发达地区。

我的招聘广告:http://www.cnblogs.com/woodhead/archive/2008/09/22/1295697.html

BTW:如果想要见识“知天命”级别的程序员的功力,可以仔细研究下例如log4net之类的成熟开源框架


 

------------------

有朋友在下面的留言中提到我过于局限到面向对象和设计模式等特定技术中,忽略了程序员还有分工的区别。我简单说明下我的观点:

我感觉软件技术可以分解为“知识性技术”和“技能性技术”两个层面(自己取得名字,可能不是很贴切)。例如驱动开发程序员对操作系统底层的了解、计算机图形开发人员对图形学的了解都算是“知识性技术”。而面向对象,设计模式之类的都算是“技能性技术”。每个程序员肯定是同时具备了上述两种技术才能编出实用的程序。

不同的开发方向,会对“知识性技术”有不同的要求;但无论什么开发方向,都必然对“技能性技术”有要求,系统越大越复杂、需求变化越快,对“技能性技术”的要求就越高。

我在上面讨论的对象是“技能性技术”,我认为不管你做的是什么方向,都必然要涉及到这方面的问题。

目前的软件开发工具绝大多数都是面向对象的,因而我把面向对象技术的修养作为评价的一个重要参考。如果你是做C或者汇编的程序员,大可不必在意我的标准。

另外我讨论的范围也不涉及开发管理,所以需求,过程控制等关键的开发因素不在我的范围内,我只是针对单纯的设计技术进行讨论。

 


 

posted on 2008-10-10 13:54 woodhead 阅读(2845) 评论(34)  编辑 收藏 网摘

评论:
#1楼 2008-10-10 14:10 | kkun      
听楼主这么一说,我得去看看LOG4NET的源码
  回复  引用  查看    
#2楼 2008-10-10 14:45 | 小兽      
身处而立,煎熬啊!
  回复  引用  查看    
#3楼 2008-10-10 14:48 | LanceZhang      
说得好!不过我还觉得心态的层次并不一定要用现有的技术水平来衡量
  回复  引用  查看    
#4楼 2008-10-10 15:40 | Eric FOo[未注册用户]
自我感觉未立也......
  回复  引用    
#5楼 2008-10-10 15:42 | 怪怪      
@LanceZhang
赞同。

感觉LZ文章中自己的经验多些。如果都按照自己的经验来说的话,别人也可以认为LZ还没有真正的把模式、面向对象看透,所以连不惑也没有到 :P

我觉得探讨这个问题,最好完全脱离任何技术词汇了。

  回复  引用  查看    
#6楼 2008-10-10 15:58 | xiao_p      
貌似 好像区分 而立 不惑 知天命 就是看程序员写的程序是否面向对象,是否应用了设计模式,还是从代码角度看代码。

我倒是感觉好的程序员不仅仅是从代码角度看代码,而应该从更高的角度看代码,代码写的多了就感觉代码不仅仅是代码,和项目,和需求,和设计,和所有的一切都紧紧相关。好的代码更应该是顾全大局的,过了很久之后,回头看一个项目,往往最关注的还是这个项目解决问题的思路和项目的实用性!

一点简单的看法,请指教!


  回复  引用  查看    
#7楼 2008-10-10 15:59 | xiao_p      
@怪怪
哦,没有看到怪怪的回复,偶和怪怪的感觉有点一致,单纯从技术的角度探讨这个问题感觉有点 “薄”,想看到楼主从更多的角度去探讨这个问题!

  回复  引用  查看    
#8楼 2008-10-10 16:25 | ccccccccccc[未注册用户]
与七楼和九楼有同感!程序员不是简单地用层次能够论好坏的。社会分工越来越细,是社会进步的结果,软件这种发展如此之快的行业,新技术日新月异,如果要求程序员完全掌握这些不断出现的新技术,是不太现实的,不能把程序员这个职业笼统的理解为编程,个人觉得程序员应该是向领域发展,程序员也会有越来越细的分工(如网络通信程序员、驱动开发程序员、php网站程序员),这种细分的职业会让程序员在某一领域成为大师,而不是成为掌握某种语言或设计模式的专家,脱离具体应用学院派 。因此在某一领域做深入地研究,才能随着经验增长而提升个人价值,新技术都是在原有技术上的一点点进步而已,很多时候只是换个名词和叫法,根本的东西不变,如果不断地追新求异,跟风,追求那些学院派的纯理论的东西,恐怕永远只能是初学者、小学生,什么都懂,又什么都不精,连所谓的“而立”都达不到。
  回复  引用    
#9楼 2008-10-10 16:26 | Mainz      
我们的程序员往往是数据结构,算法基础还没打好,就直奔设计模式,架构师


  回复  引用  查看    
#10楼 2008-10-10 16:46 | 小猪凯      
做个记号.这个讨论可能有点意义.
  回复  引用  查看    
#11楼 2008-10-10 17:00 | qscms.cn[未注册用户]
颠趴
  回复  引用    
#12楼 2008-10-10 17:03 | zhaixd[未注册用户]
自认处于而立阶段,log4net 太小意思了,Castle 可轻易通读,不知楼主能开出什么价钱?
  回复  引用    
#13楼 2008-10-10 17:07 | 雪涛      
得好好反省了。。
  回复  引用  查看    
#14楼 2008-10-10 17:08 | 金色海洋(jyk)      
我是经历过了“而立”,
一半的“不惑”,(我对新技术不大感兴趣)
和“知天命”擦了一点边。

“总能找到适当的角度后用恰到好处的简洁设计将客观世界计算机化”这一点好像做到了,也是一直在做减法,我写的代码很少很少。

  回复  引用  查看    
#15楼 2008-10-10 17:20 | 阿不      
强就一个字
崇拜一下作者 目前还远没有到“知天命”阶段,多努力,多思考,多经验。

  回复  引用  查看    
#16楼 2008-10-10 17:20 | wav[未注册用户]
都“不惑”的境界了,到你这才5-12万年薪。这样的程序工作,不干也罢。
  回复  引用    
#17楼 2008-10-10 18:19 | C+++[未注册用户]
而立:初级程序员
不惑:有经验的高级程序员和架构师之流
知天命的在现实中是什么人呢?
如果拿文学方面来对比,那么知天命就是出口成章,李白大哥尚且只能在嗑药(喝酒)以后才能来个百年绝句,那达到这个境界的哥们还是人吗?十有八九就是编程机器了

  回复  引用    
#18楼[楼主] 2008-10-10 18:49 | woodhead      
@wav
这个薪水在昆明算是相当不错的了。 如果你已经接近了我所谓的“知天命”的境界,更高的薪水也很好商量,我目前的团队中就有这样的先例。 等公司搬迁后,自然会根据当地的待遇水平调整薪酬

@zhaixd
写得好的程序就是容易懂。像log4net这样的系统,只要对面向对象设计有差不多的了解,当然很容易就看懂了。 问题是你做的设计接近log4net的水平了没有呢?

@怪怪
@xiao_p
请参看我在帖子末尾的补充

@C+++
达到或接近“知天命”的人,从表面看来最大的特点,就是“举重若轻”。

  回复  引用  查看    
#19楼 2008-10-10 22:14 | 曲滨*銘龘鶽      
博主,所言不就是

人生四字真言:取舍有道 吗?
呵呵;

重点在后两个字“有道”而不是“取舍”
不过这个“有道”太难了
所谓,理好讲、道难悟啊
讲都好讲能够真正运用灵活的我看不多(起码在全领域达到这个境界的基本不存在的、也是不太现实的)

往往最高境界和最低境界在,不懂行的人看来视乎很类似!

  回复  引用  查看    
#20楼 2008-10-11 02:10 | 大城小 格[未注册用户]
我是知天命拉 哈哈 花最少的时间创造最多的成就是最难的
  回复  引用    
#21楼 2008-10-11 06:53 | hoodlum1980      
Price Wang's programmer was coding software. His fingers danced upon the keyboard. The program compiled without an error message, and the program ran like a gentle wind.
###编程大师编写软件时,手指在键盘上快速飞舞。程序编译时没有一条错误信息,程序运行起来就象一阵微风吹过。
Excellent!" the Price exclaimed, "Your technique is faultless!"
太精彩了!你的技巧已经无可挑剔了。

"Technique?" said the programmer, turning from his terminal, "What I follow is the Tao -- beyond all technique. When I first began to program I would see before me the whole program in one mass. After three years I no longer saw this mass. Instead, I used subroutines. But now I see nothing. My whole being exists in a formless void. My senses are idle. My spirit, free to work without a plan, follows its own instinct. In short, my program writes itself. True, sometimes there are difficult problems. I see them coming, I slow down, I watch silently. Then I change a single line of code and the difficulties vanish like puffs of idle smoke. I then compile the program. I sit still and let the joy of the work fill my being. I close my eyes for a moment and then log off."
“技巧?”,大师转过身说,“我所遵循的是道--它超乎所有的技巧。当我开始编程时我看到的是整个一大块的程序,三年后我看到的是子过程。现在我什么也看不到了。我的整个存在是没有任何形式的虚无。我感觉很悠闲,总之,事实上是我的程序自己在写,有时我看到一些问题,我看到它们,就停下来静静地观察它们,然后我改变了一行代码,难题就象一阵轻烟一样化为乌有。然后我编译程序。坐在那里享受工作的喜悦。闭了一会眼睛然后退出系统。

  回复  引用  查看    
#22楼 2008-10-11 08:57 | 长河落日      
而立,追
  回复  引用  查看    
#23楼 2008-10-11 10:16 | 子逸      
岁月~
  回复  引用  查看    
#24楼 2008-10-11 10:25 | S.Sams      
技术只是一种工具, 你的资本之一, 他永远跟着市场走, 去最最需要他的地方, 这是我对技术的总结.
  回复  引用  查看    
#25楼 2008-10-11 10:43 | 飘过[未注册用户]
貌似我也“知天命”了,这命就是:早日改行!
  回复  引用    
#26楼 2008-10-11 11:27 | QingQing123[未注册用户]
@曲滨*銘龘鶽
取舍有道,取舍是动词,有道是修饰取舍的。
肯定是取舍是核心三。
现在国内基本是web和mis系统,遇到高数的概率比平时沟通小很多。其次在系统设计中UML的沟通不够的时候,必须依靠文字,这个时候文字的功底很重要。要知道软件开发式团队运作,协调很重要。单纯的强调算法、数据结构还停留在比较低的层次。
所以,我觉得还要加一条,好好学好语文,比学好高等数学还要重要。
PS:不要举什么Google的例子,你在学校学的一箩筐教条还够不上。

  回复  引用    
#27楼 2008-10-11 12:28 | 爱在戏院前      
感觉像软文,然后重点是招聘....
  回复  引用  查看    
#28楼 2008-10-12 08:52 | DreamsHunter      
“而立”,“不惑”和“知天命” 深刻! 精辟!! 自感身处 "而立","不惑"间的我正迷茫中.
  回复  引用  查看    
#29楼 2008-10-12 09:41 | mikelij      
这种分级并不好,此是以面象对象为领域的,IT才是我们在社会上所处的位置.作为一个IT人(而非程序员)保持开阔的视野,养成深入思考的习惯,比较好. 算法和思想为王!实践为王!
  回复  引用  查看    
#30楼 2008-10-12 17:02 | SvnHost[未注册用户]
--引用--------------------------------------------------
kkun: 听楼主这么一说,我得去看看LOG4NET的源码
--------------------------------------------------------

  回复  引用    
#31楼 2008-10-13 10:46 | 夜‰叛逆      
拜读,留名!
  回复  引用  查看    
#32楼 2008-10-13 11:45 | 昊子      
--引用--------------------------------------------------
mikelij: 这种分级并不好,此是以面象对象为领域的,IT才是我们在社会上所处的位置.作为一个IT人(而非程序员)保持开阔的视野,养成深入思考的习惯,比较好. 算法和思想为王!实践为王!
--------------------------------------------------------
深入不只是習慣,是種專業態度。
實際上那兩個“王”不應該同時存在,做IT又覺得自己知識已經積累差不多了還是以實踐為主

--引用--------------------------------------------------
hoodlum1980: Price Wang's programmer was coding software. His fingers danced upon the keyboard. The program compiled without an error message, and the program ran like a gentle wind.
###编程大师编写软件时,手指在键盘上快速飞舞。程序编译时没有一条错误信息,程序运行起来就象一阵微风吹过。
Excellent!" the Price exclaimed, "Your technique is faultless!"
太精彩了!你的技巧已经无可挑剔了。

"Technique?" said the programmer, turning from his terminal, "What I follow is the Tao -- beyond all technique. When I first began to program I would see before me the whole program in one mass. After three years I no longer saw this mass. Instead, I used subroutines. But now I see nothing. My whole being exists in a formless void. My senses are idle. My spirit, free to work without a plan, follows its own instinct. In short, my program writes itself. True, sometimes there are difficult problems. I see them coming, I slow down, I watch silently. Then I change a single line of code and the difficulties vanish like puffs of idle smoke. I then compile the program. I sit still and let the joy of the work fill my being. I close my eyes for a moment and then log off."
“技巧?”,大师转过身说,“我所遵循的是道--它超乎所有的技巧。当我开始编程时我看到的是整个一大块的程序,三年后我看到的是子过程。现在我什么也看不到了。我的整个存在是没有任何形式的虚无。我感觉很悠闲,总之,事实上是我的程序自己在写,有时我看到一些问题,我看到它们,就停下来静静地观察它们,然后我改变了一行代码,难题就象一阵轻烟一样化为乌有。然后我编译程序。坐在那里享受工作的喜悦。闭了一会眼睛然后退出系统。

--------------------------------------------------------
所謂“道可道非常道”

  回复  引用  查看    
#33楼 2008-10-14 17:08 | 小猴子      
很不幸,目前国内的IT环境,注定在中国“知天命”的程序员就是凤毛麟角。要想达到“知天命”的境界,程序员除了一定的天赋之外,还必须有非常主动积极的态度和热情。这样的人在其它方面肯定也不会差到哪里。国内的很多公司依靠的是关系资源生存,技术的好坏作用不是很大;又或是软件开发理念落后,不给程序员充足的发展空间。所以这些程序员在达到“知天命”的境界之前很多都转去做管理或其它待遇更好的工作去了。

非常赞同这点,我个人也认为我们之所以出了非常出名的CODER或者专家(顶级的),就是因为功利主义!在我们的心理总觉得当官才是王道.
想静下心来好好学习,但社会也许不容许我这样做.
30而后,家庭压力很大,很可能逼着我转行或者转做管理.

  回复  引用  查看    
#34楼 2008-10-24 12:55 | 坏人      
显然看得出LZ在这里无意谈论技术点,一些技术词汇,只是希望将自己对于程序人生的一些见解更贴近的表达。

技能技能,乃技与能的综合。

而技乃何物?如OO中的继承、多态等实用的形而下的知识。

能又为何物?本是自身对世事的理解、见解,回归至编程中的一种感悟,非实用主意的形而上学。

两学相辅相成,缺一不可,光有技者,乃工匠,乃专家;光有能者,乃幻想之人;两者皆有之人,方可为理想者,为大师者。

  回复  引用  查看    
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1307824




相关文章:

相关链接: