转载于:http://blog.csdn.net/cheny_com/article/details/7717787
专家与杂家之争由来已久。
挺专家者说:只有专一,才能学透学精;那些泛泛之辈,只能学到些皮毛,终究不能有所成就。
挺杂家者说:只有广泛,才能目光开阔;某些人天天钻牛角尖,最后学成榆木疙瘩。
招聘的时候也是。
有人号称精通七八种语言,参与过76个项目(在一个真实简历中看到的,不过不是来我们这应聘的;按当时的速度估计,他现在应该写参与150~200多个项目左右了),相信大家一定看了直摇头。
但如果又有人十年如一日,只是在一个文档转换器上钻研,恐怕也够呛能有什么成就(这是当年叫做“在微软工作十年的笨蛋”的故事,说有一个人在MS工作了10年,除了Office所有文档之间的类型转换之外,什么也不会,现在居然搜都搜不到了)。
那么,到底哪个好呢?其实哪个都不好,或者说很多人把杂与专当作互斥的知识体系了。
如何成为一个好程序员
在10年多以前,我的师傅,一个非常厉害的程序员,有一天和我们讨论问题的时候(可能是在讨论最近的一些招聘心得)突然说:“我发现,厉害的程序员都喜欢说话。”
我脑海中迅速过了一下部门的20个程序员,果然不差。但是,背后的原理是什么呢?
沟通,学习。
如果一个程序员要经常和新手沟通,他就得尝试把代码写得很干净明了,新手能看懂。
如果一个程序员要经常和高手沟通,他又要把代码写得很精妙,不能一看就拖沓冗长。
最开始只是技术沟通,但最终会出现业务上的沟通,进而是知识上的沟通,所知道的范围就越来越广,逐渐变成杂家。
“变成杂家会不会水平下降?”
如果担心这个,那就自己分析一个问题:我们团队假设有10个人,10件事情,如果大家有只有1个月度过初期的壁垒,那么谁最适合哪项工作?
分析的结果,往往不是一个萝卜一个坑,而是某人或某两三个人垄断了所有最佳选择。也就是,总有那么几个人,干什么都最拿手;还总有几个人,干什么都不太行(而不是只能干一件事情!)
这时候,这些高手们就变成了“既是杂家,又是专家”,怪哉。
原因就是程序员总会用自己学到的最高水平,解决所有事情;而见到的事情越多,可以学到,乃至只是偶然获得更佳灵感的机会也越多。
所以,程序员不能偏安一隅,要多去从事不同的事情,理解不同环境中处理事情的方法;并把它们中的精华,互相借鉴。
典型的必须跨越的鸿沟,包括这样几个:
1. 前端与后端
很多人居然只从事其中一个,而对另外一个置之不理。
由于这两个内容交互非常多,只有了解对方的工作方式,才能做好自己的工作。
本人在这一点上感受颇深,在火星人的开发过程中,我其实自己一个人前后都跑,从设计CSS风格到数据库的应用缓存,有什么干什么。
这些内容常常相互依存,功能并不会很干净地 在前后台拆开,经常其中一个做好了,另外一个就省事多了(尤其是我们采用了MVC的框架的情况下)。
2. 开发与测试
一个人很难直接从事这两个职业,但是可以做这样几个事情:多关注出现的缺陷,目的是在开发过程就提前避免;多为测试人员编写自动测试代码,目的是学习产品的整体功能;多看测试人员的测试用例,目的是学习用户的业务逻辑……
如何防止失去专业性
人很容易失去专业性。
英国有一位物理学家,曾经在25个诺贝尔奖项上做过研究,但每个都浅尝则止,被当作反面典型。
那么,编程过程,怎么防止这种现象呢?跟牛顿学习就知道了。
牛顿发明/发现过很多东西,物理三定律(总结前人),光谱,反射望远镜,微积分,万有引力……他怎么没没落成杂家呢?
因为他所研究的东西,都是互相支撑的。
光谱发现后,牛顿预言折射望远镜一定有色差(不同光线的焦点距离不同),所以他研究发明了反射望远镜;由于他喜爱天文,所以开始关注多普勒三定律,并从中推出了类似天体这样的两个质点,之间引力是2GMm/r^2这样的关系(这个不是他第一个推出来的),还首次给出了反向公式的证明;不过这还不能算是“万有”,因为苹果距离地面太近,地球不是一个质点,至少不应该这样计算苹果受到的引力;这个问题直到20年后他发明微积分,才得以解决:按照球体的积分公式,整个地球吸引力等同于地心的质点……
总之,牛顿不是一个“兴趣广泛”的人,而是一个“刨根问底”的人,不会在一个事情没完的时候,就转向到另外一件事情。而相反地,他之所以转向另外一件事情,是因为当前这件事情遇到了瓶颈,需要其他知识的补充。
结果就是他同时在诸多相关领域工作,成果互相支撑,最后终于达到了一定的高度。
IT人员如何防止失去专业性
对IT人员尤其是程序员而言,如何决策呢?跟着需求走,不要跟着兴趣走。
很多人学习一个新语言,“想借鉴一下”,不是因为业务的需求,而是因为听说这个语言不错,这是比较危险的。
人在没有实际动机的情况下去学习一个语言,想达跨过学习曲线而有所收获,是非常困难的(想想自己在大学度过的“学习”时光,就知道了)。
与其去“了解”远在天边的一种新语言,不如在自己正在开发的项目中,扩展自己的知识面,比如:
1. 尝试跨越前端/后端/开发/测试的壁垒。
2. 尝试使用某些新技术解决以往困扰已久的问题。
3. 在任何重构的机会,尝试新技术(用老旧技术进行重构,是一种原地踏步的行为)。
技术,管理,业务?
这在中等IT人员面前,算是最后一个问题了。很多人都问:“我是应该发展技术,还是学习管理,或者业务呢?很犹豫”
正确的答案是:全面,随缘。
什么是全面?
仔细想想自己身边那些只懂讨好客户不懂技术的销售,再看看空话连篇的领导(多数咨询师更甚!呵呵),又看看埋头编程最后不符合用户需求的程序员们……显然我们明天不能做一个让今天的自己郁闷的人,那么唯有这些方面都做到一定程度,才是一个全面人才。
什么是随缘?
假设“全面发展”已经有一段日子了,领导突然过来说:“小张,我们最近想招募一些内部的产品经理,你既懂业务又懂开发还挺喜欢管理,想不想试试?”
这时候脑海中千万不要想:“哎呀,天天外面跑,业务是熟悉了,技术和管理咋办?”这个缘分,可能就错过了。
产品经理有不同的做法。
不要独断专行,而是拉着销售、研发一起参与进来,分析市场、用户群、用户体验这些内容,这就是管理。
不要说完需求就撒手不管,而是陪同开发人员做出一些业务架构设计(一千零一问系列中曾提到:技术架构设计依托于业务架构设计),这样做出来的东西不走样,还有前瞻性,又能换来开发人员积极参与需求描述作为回报,这就是技术。
所以,就算成了“全职”产品经理,仍然可以业务/管理/技术三不误。
随缘,不是随波逐流无所作为,而是要与外界环境共振,积攒力量把握机会,而不是总干些“逆天”的事情。
金字塔形知识体系
专家与杂家的结合点,是金字塔形知识体系。
金字塔之所以历经五千年屹立不倒,归功于其特殊的外形。
其他的世界奇迹,多半都是“很细”的,所以很容易倒。而选择“很细”是希望能节省材料,就像很多程序员埋头一个小模块一样,省材料自然才能有积累嘛。
其实不然,狭隘的目光,很难支撑一个足够的积累。尤其是IT页,不等积累到什么高度,可能这个技术本身都过时了。
选择上下一般粗好不好?也不好。如果要把金字塔弄成一个巨大的立方体Cube,估计也倒了。因为没有人能在那样的高度上堆砌这么多的“顶级知识”,这个时候,就要回到一个或几个小的“顶尖”的状态了。
后来施密特、卡塞格林、马克苏托夫他们发展了新的反射望远镜,而莱布尼兹也有额外的微积分发明,万有引力也被爱因斯坦证明是物质存在所产生的一种场……所以即使是牛顿,也没有把世界上所有事情都垄断了,而只能“站在巨人的肩膀上”(坚实的底座),且“偶然捡到一个美丽的贝壳”(个别塔尖)而已。
附:最后引号里边的两句话,都是牛顿的原话。
第一句原文是:如果说我比别人看的远些 那是因为我站在巨人的肩膀上
第二句原文是:我不知道在别人看来,我是什么样的人;但在我自己看来,我不过就象是一个在海滨玩耍的小孩,为不时发现比寻常更为光滑的一块卵石或比寻常更为美丽的一片贝壳而沾沾自喜,而对于展现在我面前的浩瀚的真理的海洋,却全然没有发现。