专栏名称: Cocoa开发者社区
CocoaChina苹果开发中文社区官方微信,提供教程资源、app推广营销、招聘、外包及培训信息、各类沙龙交流活动以及更多开发者服务。
目录
相关文章推荐
51好读  ›  专栏  ›  Cocoa开发者社区

Redis之父:10x程序员应该具备哪些素质?

Cocoa开发者社区  · 公众号  · ios  · 2017-03-14 17:22

正文

编者按:在开发界有一个长期引起争议的说法,那就是所谓的10x程序员是否存在?这个说法是Brooks, F. P在《没有银弹》中首次提出的,他认为在普通设计师(程序员)和优秀设计师(程序员)之间,有着 10 倍多的差异。对于10x程序员是否存在这个问题,开源键值存储数据库系统Redis的开发者antirez(Salvatore Sanfilippo)认为,如果把编程工作看作是一门“非线性”学科的话,那么不仅存在10x程序员,甚至连100x程序员这种异兽都有,同时他还 列出 了自己认为的10x程序员必备的一些素质,可供各位开发者对照一下。


10x程序员,是指在编程方法论中,所做的工作10倍于普通程序员的程序员。而所谓的普通程序员是指擅长所做工作,但却没有10x程序员魔力的程序员。实际上“普通程序员”这么归纳也许更好:普通程序员是指在专业的程序员当中有着平均编程产出的人。


对于这样一种异兽是否存在,编程社区有着两级分化的观点:有人说所谓的10x程序员并不存在,而有人则说10x程序员不仅存在,而且甚至100x程序员都有,如果你知道去哪里找的话。


如果你把编程看作是“线性”的学科,那么显然10x程序员存在的可能性是不合逻辑的。一名跑步运动员怎么可能比另一名快10倍?或者一名建筑工人在相同时间内建造的东西怎么可能比另一名多10倍?然而,编程是一门设计学科,属于一种特殊的设计。即便程序员并未参与到程序实际的架构设计当中,但实现本身仍然需要对实现策略的子设计。


那么,在我看来,如果程序的设计和实现不是一种线性能力的话,像经验、编码能力、知识、对无用部分的识别等这些就不仅仅是线性优势,而且凑到一起会对程序的编制产生倍增效应。当然,如果程序员能够同时处理程序的设计和实现时,这种现象会出现得多很多。任务越是“目标导向”,10x程序员以事半功倍的方式发挥能力的潜能就越大。如果手头的任务比较僵化,对于应该使用什么工具以及应该如何实现东西等方面有着具体指南的话,10x程序员以更少时间完成更多事情的能力就会变弱:虽然仍然可以通过挖掘“本地”设计的可能性来把工作做得更好,但却不能以更加深远的方式(这种方式包括甚至连项目的部分规范都彻底去掉,从而仍然能够以几乎相同的效果实现目标,同时实现所需的付出却要少了一大截)去改变目标的实现路径了。


在20年程序员的生涯当中,我观察了跟我一起工作的程序员同事,他们在我的指导下实现给定目标,为Redis等项目打补丁等。与此同时,许多人告诉我说他们认为我是一个非常快的程序员。考虑到我远不是个工作狂,我也把我自己作为是编码非常快(效率高)的人的参考。


以下所列我认为是最能拉开程序员生产力差异的一些素质。


1
裸编程能力:完成子任务

程序员最大的限制或者说优势之一,就是处理程序实际实现部分的子任务,也就是实现函数或者算法之类的能力。令人吃惊的是,就我的经验来看,非常有效地利用必要的基本编程结构去实现东西并不是一种普遍具备的能力。在一个团队中我有时候观察到有的程序员看似非常的不胜任,因为他们甚至连一个简单的排序算法都没有意识到,但是所完成的工作却要比那些理论上极其胜任、但在实现解决方案的实践方面却非常糟糕的已经毕业的程序员还要多。


2
经验:模式匹配

所谓经验是指一组已经过探索的、针对若干周期性任务的解决方案。有经验的程序员最终会知道如何处理各种子任务。这既避免了大量的设计工作,但尤其重要的是它还是一项针对设计错误的强大武器,而后者是简洁性的最大敌人之一。


3
专注:实际时间 vs 假设时间

如果不看时间质量的话编写代码花费的小时数无关紧要。缺乏专注往往有来自于内外部因素的影响。内部因素是拖延症,对手头项目缺乏兴趣(不热爱的事情是做不好的),缺乏练习/快乐,睡眠不足或很少等。外部因素包括频繁开会,工作环境没有真正的办公室,同事经常打断自己等等。试图改善专注和减少中断会对编程生产力产生非边际效应,这是很自然的。有时候为了获得专注,需要极端的手段。比方说我只会时不时读读邮件,但是大部分都不会去回复。


4
设计牺牲:干掉5%得到90%







请到「今天看啥」查看全文


推荐文章
利维坦  ·  一颗人头值几钱
7 年前
VC/PE/MA金融圈  ·  你的精力分配决定了你的层次
7 年前