“卓越绝对不是意外。卓越拔群永远来自蓬勃的上进心、勤奋的努力、果断的执行力;它代表了智慧的抉择——是选择,而不是运气,决定了你的命运。”
——亚里士多德
人人都想要在自己的领域做到卓越,但是我们在现实生活中很少真正投入时间跟努力去达到卓越。无论在哪一个领域,卓越都是一个很难达到的目标。比如说,一个JavaScript开发者的卓越程度就很难度量。

一个卓越的JavaScript开发者都具备什么样的品质呢?
标准很多。代码的质量、从不拖延、迅速解决任务、团队内的互相帮助都可以成为考虑的因素之一。
但是问题在于,上面的这些标准都没办法准确地量化出来。或如果我问10个程序员一个卓越的开发者应该具有什么品质,我会得到10个不同的答案。你是不是也正在思考这个问题?一直以来,我都在琢磨这个“卓越开发者”的定义,现在终于有了眉目。
劣质代码
所有的开发者都会偶尔写出劣质代码。我们都知道有时候我们最终会写出像屎一样的代码(比如Payson在专栏丨哪些行为能够凸显你是一个有涵养的程序员?一文中提到的一样),而且我们往往习惯于为这些屎一样的代码找出一大堆不合理的借口。这些理由有哪些呢?比如说:
“时间来不及了啊!”
“没时间”是目前最常见的一个理由。对客户的保证,紧张的日程表或者一个迫在眉睫的发布都是“没时间”的帮凶。
“代码库太烂了!”
给你的代码库就是一团糟,你连试着写点好代码的欲望都没有了。你知道推倒重来也不可能拯救这个烂摊子。
“干完这事儿我就能撤了!”
作为开发者,我们有时候会在一个陌生的项目里写代码。想象一下,你需要在别人的项目里帮他写几行代码。这也不是什么大事情,还不能去麻烦别人。那个本来负责这个项目的人今天休假,但没有其他人可以去检查这些代码了。只有你能担此重任,你只好祈祷有足够的单位测试能保你度过此劫。

所以我们有时候都会写出劣质代码。但是我们都是糟糕的开发者了吗?当然不是,因为每个人偶尔都会这么干,写劣质代码这件事本身并没什么意义。然而,这些年来,我找到了一个关于开发者的特别惊人的真相。
对待劣质代码的反应是开发者能力的终极试金石。
这个说法很怪异,但是事实的确如此。能够注意到你在写的代码的问题,并且采取行动去修正,充分反映出了你写代码的方式以及你对待代码的态度。

那么劣质代码与衡量开发者的优秀程度有什么关系呢?
关系很大。我们举一个例子:
Ron今天写了段劣质代码,但是因为一个可恶的Backbone Model继承链,除非推翻重来,他也没法改。除了他自己,大家都因为Ron按时交了代码而满意。Ron跟自己的组长说了这事,他们一起想办法解决。最后,讨论的结果就是打破继承链去修改平可组合模块(也就是重构)。随后,Ron要求组长多分配一些时间给他好让他去完成重构。
Roger今天也写了段劣质代码。他告诉他的程序员朋友说,他今天写了段超级炫酷的代码(无视了5 level deep Backbone Model 继承链)他忽视了整个代码的架构,达到了目标之后就把代码交出去了。Roger对自己非常满意,根本不需要任何改动。
四种JavaScript开发者
我们可以把开发者们对于劣质代码的态度分成四种,从坏到好来排序。
Barney 差劲的开发者
Barney不在乎他在写的代码是不是一团糟,他唯一在意的是工作能不能按时完成,其他什么事儿也不算数。代码能运行,一切就都很完美。Barney写的劣质代码有时候会打乱整个项目的进程。它们运行的时候会弄坏许多东西从而拖累整个项目。但是Barney觉得自己已经精通JavaScript,并不觉得自己需要进一步学习进修。
Bill 平庸开发者
Bill没意识到自己在写劣质代码。他遵循团队的规定,觉得自己做的还不错。但是他没有花时间去理解整个项目的结构以及不同模块之间如何交互。最终结果就是一堆乱七八糟的次品。Bill在决定大方向的设计之前没有咨询任何人,唯一的参考就是一年之前他读过的3篇博文。
我常常说看Bill的代码就像走在一圈地雷之间,步步惊心,一步走错,一切就灰飞烟灭了。
Roger 优良的开发者
我们已经认识Roger了。他完全能意识到自己在写劣质代码。他知道优质的代码会是什么样。然而他只是安慰了一下自己,然后继续写劣质的代码。他主要的错误就是他没有试着去改变。他做了自己分内的工作,而且做得很好。但是与其花时间和精力追求完美,Roger宁可维持现状。
Ron 卓越的开发者
Ron 是一个卓越的程序员,虽然他有时候会写出劣质代码。让Ron能鹤立鸡群的一个特质就是——当他写出烂代码的时候,他会努力思考解决的方法,不为自己也不为其他人。Ron能想出需要什么类型的重构,如何改进或改变方法论。然后Ron就会实践自己的想法,真正把改变付诸行动。

冷冰冰的事实。
我需要忏悔。
我就是Roger
但我也是Ron
而且我确定我曾在不自知的情况下当过Bill
我不觉得我曾经像Barney一样差劲,但是谁知道呢?
我们都在卓越的范围里摇摆不定,有时候我们平庸,有时候我们可以做到优秀甚至卓越,一直努力着不要沦落到差劲的地步。
我们最常展现出的姿态决定了我们是怎样的开发者。
说实话,从平庸到优良,一个开发者需要获取更多的知识和经验。但是从优良到卓越,你只需要改变一个东西。
态度。
“记住,在你卓越不凡之前,你需要变“好”。在你迈入“好”的行列之前,你很可能会做的很“差”。在你做的很“差”之前,你至少需要先去尝试。”
——Art William
继续阅读
阅读原文