文章转自51cto。原文地址:http://developer.51cto.com/art/201008/222070.htm
差距在哪里,你与开发高手的距离有多远?
为什么只有少数人能成为开发高手和专家级程序员?一般程序员与开发高手的差距在哪里?在我们的调查中,入门级程序员与开发高手给出了不同的答案。
最近,51CTO又有一篇与此相关的文章受到网友们的广泛关注——《如何成为一个专家级的开发者》 。文中虽然界定了专家的概念和开发者成长为专家级的一般路径,但却忽视了一个问题:为什么只有少数人能成长为开发高手和专家级程序员?一般程序员与开发高手的差距在哪里?
事实上,我们一直在关注这一问题,并就此进行了数月的调查走访,受访的十几位技术专家对此问题的回答有些出乎我们的意料,也与众多入门级开发者所想象的“差距”大不相同。
入门者 说
我们在开发频道QQ群(50677317)和身边的一些具有1-2年开发经验的程序员就“你与开发高手的差距在哪里”的问题进行调查,得到的答案大致可以归纳为以下几种:
1)项目经验。多数入门级程序员认为,大量的项目经验是提高自身技术水平的关键;高手们往往具有更多的项目经验,解决问题有更广泛的思路和方法。
2)对语言和平台的理解掌握。有相当一部分人觉得自己的技术积累还不够,很多语法和API并不熟悉,甚至有人还要翻看语法手册才能完成一段代码的编写。而高手们对语言和平台早已烂熟于心,很多东西都到了“信手拈来”的境界。
3)良师高徒。少数开发者抱怨没有高手和主程序员代领,无法获得好的项目实操技能和指导。而高手们往往一开始就有好的机遇得到更好的经验传授。
4)努力程度。一些开发者觉得自己不够努力,很多知识没有深入学,很多项目没有用心做。他们认为,高手们的技术水平与勤奋刻苦的技术积累有必然的关系。
这些差距的确存在,且带有一定的普遍性。但仔细想来,却多少有些主观:同样的项目,同一个团队,为什么有人可以获得更多的经验并逐渐成长;同一个 SDK同样的IDE,为什么高手就可以“信手拈来”;一个主程代领3-5名程序员,为什么有人会脱颖而出?这也从另一个角度印证了新浪微博技术经理杨卫华所提到的:为什么5%的技术人员开发效率是其他95%的20倍?
“差距在哪里”的问题在受访的专家级开发高手看来有不一样的答案。这些答案多是指向技术内涵和开发者本身。
1)代码的“斟”与“酌”
高手在编程效率方面可能并不比普通程序员快多少,因为他们会吝啬自己敲下的每一行代码。这种“吝啬”有两方面的含义,一是项目的架构性和整体性考量,二是从性能和优化的角度进行Coding。其实,这里所映射的是一个开发者的技术视野。
有多位技术专家强调项目执行时的全局观。面对一个项目,即使是团队中的普通一员,也要力求从项目整体架构的角度审视开发需求,对各个模块、接口和通信做最优化的预想和配置。这样可以从全局审视整个项目的技术布局,预判可能出现的问题。
在确定了整体之后,落实到具体的模块实现,每一行代码不但有上下文的考量与规划,还要具备模块间的整体布局。这是模块内的技术视野,比如接口的定义、注释的可读性、代码的执行效率等。当你写下一行代码前,要考虑它是否会对整个系统造成影响,是否方便其他接口进行调用,这些都是一个开发高手的“技术潜意识”。
据一些经常带领入门级开发者的技术经理介绍,多数人只考虑自己所负责的模块进行开发,缺乏一个全局性的技术视野和对代码性能苛刻的态度,这样虽然能按交付日期完成项目,却对项目质量和开发者的自我提高有很大阻碍。
2)喜欢大麻烦
一般开发者对工作中的一些技术问题相当排斥,每个人都希望手里的项目可以顺利进行,一旦遇到问题就会有负面情绪。而我们所看到的一些开发高手对待技术问题则是一种非常积极的态度。
问题、难点是提高的机会。解决一个问题,能力就提升一点;解决一个大问题,能力就提升一大截。很多技术高手喜欢大麻烦,如果开发工作可以顺利进行当然是好事,但没有难度就没有高度;高手们会认为没有技术挑战性,很难让高手们在项目中发挥应有的激情。
同样有技术经理反映,用一个开放的态度迎接问题、解决问题,这是目前入门级程序员所缺乏的心态。“喜欢大麻烦”的态度也是程序员向开发高手进阶的必备心里素质。
3)代码阅读者
开发高手是代码阅读者。大多数技术专家的代码阅读量是普通程序员的百倍,代码阅读的时间比写代码的时间要长得多。《Java编程思想》的作者Bruce Eckel对阅读代码的好处做出两种说明:
代码被阅读的时间比写代码的时间要长,这有助于你的代码被人理解,并改善或者修改其中的Bug。
Code Review是最有成效的改善软件缺陷的方法,但在我们却经常“没有时间来考虑它”。
关注代码的可读性有助于团队的其他同事帮助你修正技术问题,而技术问题的修正可以使你不再犯同样的错误。Code Review可以让你有更高的视角来审视已完成的项目,这样做,往往能有意外的收获——你发现同样一个项目,你可以做的更好。
除了自己和团队中的代码,高手们还愿意花大量的时间研究“代码大全”,从别人的代码中吸收不同的技术思想并与自己的技术风格融汇贯通。而普通程序员多数只阅读与自己项目相关的程序代码,很少分配精力阅读优秀代码。
4)其他“差距”
参与开源项目。高手们往往都会参加2-3个开源项目,从头到尾完成一个项目的实现和后期升级。开源项目可以与世界各地的优秀程序员接触,协同完成工作,学习和应用最前沿的技术;并得到更多人对你的技术反馈。
技术探索者。专家级开发者往往是技术探索者和新技术的布道者。高手们往往对现有技术并不满足(而且经常抱怨这些技术的不足之处),能清晰看到现有技术的缺陷。与开源社区的结合让高手们有更多机会接触到最前沿的技术和应用理念,这些技术往往是解决现有技术缺陷的最佳方案。高手们还会把新发现的技术带到国内加以推广和应用,成为这门新技术的专家。
与之前入门者的答案想对比,你是否想到了什么?
5)技术与梦想
事实上,在“高手 说”的部分我们还有一个答案没有列出——技术热情。虽然受访的几位开发高手给出的答案虽各有侧重,但却几乎同时提到了这一点,“要有足够的技术热情”。
多数程序员只把程序开发当成一份工作,他们在乎平台的前景、语言的优劣、报酬的高低;他们不愿为一个技术点反复钻研,不愿为一个bug精心测试,不愿为自身技术水平的提高多花时间。而开发高手往往具有单纯的技术梦想,愿意为技术付出自己全部的时间。
归根结底,这还是技术与梦想的话题:你想用技术成就怎样的梦想?在你的梦想中,技术占到几分?
这个比例,才是你与开发高手的真正“差距”,也是你与开发高手的最大“距离”。