程序员修炼

“而立”,“不惑”和“知天命”--程序员的三个层次

 

 

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

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

1.而立

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

 

2.不惑

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

 

3.知天命

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

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

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

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

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

 

 

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

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

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

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

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

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

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

 

从我做小程序员开始,就从未间断的在论坛看到有人在问程序员的出路在哪里,其实我很能理解这些人的想法,在行业做了几年,有些感想跟大家随便聊聊。

俗话说,365行,行行出状元,此话也适用于IT行业,尤其是程序员。

当你迷茫找不到出路,又想快速成长和提高的时候,有两种方案可以供你参考:
1、努力成为你工作环境中最优秀的人(技术最好的人);
2、跳槽,去另外一家公司做比你能力要高的工作。

针对工作环境的不同,分为大环境和小环境(人多和人少):
1、小环境,寻找技术最好的人,努力不断向他接近,当你通过努力觉得超过他的时候,我相信你就不会再来问“出路在哪里”的问题了。
2、大环境,人多优秀的人也多,想短时间超越所有人是有相当难度的,能与每个优秀人都交流的概率低,所以你可以选择跳槽。

跳槽,在我看来是程序员成功的必经之路。跳槽是有技巧的,同时也需要一定的运气,如果想跳槽就要果断。当你觉得不如意时,当你觉得没有出路时,当你觉得待遇不满意时,当你觉得成长不够快时。。。都可以考虑跳槽。

跳槽有利有弊,对企业来说,跳槽是不好的;对于打工者来说,跳槽是很完美的。企业培养一个程序员不容易,辛苦的带起来一个人,熟悉了业务,掌握了技术,这时候走人,损失最大的当然是企业,花时间培养人和熟悉业务也是需要成本的。对程序员来说,跳槽几乎是利大于弊,首先待遇上肯定立竿见影的体现,如果没体现出来那就是跳的失败,除非有其他想法和目标。

不要误会我的意图,跳槽对于技术人员来说并不是坏事:
1、一般的IT公司都有自己的常用的模式,该模式经过一个项目之后,就可以基本掌握,相关覆盖的知识、架构等大概也可以了解,此时可以换个环境寻找更高的发展;
2、跳槽相当于变向的升职,这个可以从你的简历中体现出来。

假如你是一个初级程序员。当你做完一个项目的时候,你会了解这个项目的整个流程,此时可以在简历中填写中级程序员的角色,把很多中级程序员做的事情写到你的履历里(前提是你要了解这些),跳槽的时候,你的目标自然就是中级程序员,而招聘公司看到你的情况也会觉得合适。

假如你是一个中级程序员。你需要在项目中了解高级程序员的工作范围,并不要求你全部掌握,但需要你能表达出来,这个很重要。比如后台的设计模式、软件架构、接口设计等,把这些写到你的履历中,给自己定位成高级程序员,自然的,高级程序员的职位会找到你。

假如你是一个高级程序员。你所需要了解的就不仅仅是程序设计,而是整个项目的运作和管理流程。包括项目管理、系统架构(软硬件)、系统集成等,整个环节不一定都要会,但需要知道是什么,比如,什么是交换机,什么是硬件负载均衡设备,什么是反向代理,什么是缓存服务器,什么是WEB服务器,什么是集群、负载均衡、分布式、数据库优化、大数据存储、高并发访问等等,都是你需要了解的,面试的时候能表达出来,那么你就成功了。同样的把这些写到你的履历中,给自己定位架构师或项目经理,更新简历后,猎头会来找你。

假如你是系统架构师。既然选择了架构师的角色,那么肯定是向技术方向发展了。技术总监、研发总监甚至CTO就是你的目标。想知道技术总监、CTO都在做什么吗,看看丁磊在做什么,你就要去模仿去做。想成为一个角色人物,首先要从身体力行上模仿的像这个角色,时间长了那么你就是这样的人。技术总监需要负责整个公司的技术部运作,包括对人员的管理、绩效考核、各语言组之间的协调、各项目间的协调,各部门间的协调,除此之外,你还需要考虑所运营的项目如何发展的更好,网站如何才能更加优化,产品如何能更上一个层次,公司的技术发展如何规划,各种方案如何快速的编写和实施,如何与老板打交道等,都是你需要掌握的。

假如你是项目经理。在中国,项目经理分两种,一种是TEAM LEADER的角色,需要很强的技术;一种是负责招标、流程控制的偏商务角色,要懂技术。发展到这个层次的,我想应该不用我来告诉他们出路在哪里了,这样的人一般都有自己的规划,但凡事都有例外,如果没有规划或发展迷茫的,TEAM LEADER角色可以重点把项目管理、人力资源、系统架构等环节再强化一下,紧跟当前发展形势学习新知识;偏商务角色的,可以考虑往总经理、CIO、CEO等方向努力,到这个层次的,需要的不仅仅是知识,更多的是一种理念和个人魅力。

大概聊了聊上述这些,我想每个层次的人可以大概了解自己该做什么了。一定要有计划、有目标高效的做事情,有效的管理分配好自己的时间,只有这样你才可以成为一个优秀的人才。不要总让别人告诉你该做什么,而是自己不断推动手里的任务去更好的完成,处处体现出“我做的东西就比别人做的好”的信念,那我想,成功离你就不远了。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值