哪些能力是一位优秀的开发人员在技术上应该具备的?这是一个老生常谈的问题。就像很多人简历里所描述的,“解决问题能力强”、”善于学习“、”积极思考“,以及各种“精通某某某”等。毋庸置疑,能做到这些的人的确可以称得上“优秀”。但我总感觉它们就像散落一地的珍珠,缺少那么一根线来串起来。我想要一个具有提纲掣领的评判依据,甚至在这个纲领下,能够从一种更高的高度去引导我们开发人员的发展方向,更好地帮助他们进行技能学习。在这些年的研发、面试、技术管理工作中,我更倾向于从以下三个角度去认识一位开发人员:工具、编码、设计。
工具
所谓工具,就是指开发人员对他们用以编程的各种软件、系统,高效率使用、定制化扩展的能力,甚至还包括创造这些辅助软件的能力。马克思曾说,人与动物的区别是制造和使用工具。孔子也有言,工欲善其事,必先利其器。我们不光要使用工具,还要去改进工具,甚至通过工具去制造更加高级的工具。大部分情况下,我们能够做到使用工具,使用一些大众知晓、团队统一的工具。但很多时候,我们对这些工具的使用方式容易形成惯性,对一些没有效率的细节习以为常。即便某些时候,感觉到某些不方便,还是不以为意,不去想是否可以改进。甚至在目前的工具下无法很好、很快地完成某项任务时,我们还会在心里抱怨那些提出这个任务的人。
为什么会有这些问题存在呢?我想,可能是我们自己都忽视了,软件开发这项工作,可以说是世界上最具灵活性、扩展性的工作了。它可以以成本非常低廉的方式进行自我进化!在我们开发软件的过程中,可以先开发出额外的软件用以帮助我们的开发工作。如此往复,递归推进,没有哪一个行业具备这样的发展方式。身处其中的我们,很有必要认识到这一点。
所以这里把工具放到第一位,是因为它所表现出来的能力水平,往往可以作为一个开发人员是否”觉醒着“的标记。一个对工具没有认识的人,更可能是一个在开发工作中因循守旧、缺乏生机的人。天花板不高,发展潜力有限。而一个能把工具更高效地利用好的人,相信在接下来的编码、设计方面,也能有更好地表现。
工具不仅包括跟开发直接相关的部分,如操作系统、IDE、浏览器、命令行、需求管理、版本管理等,还包括日常生活中会使用到的各种软件或服务,如即时通讯、日程管理、邮箱、文件管理、翻译等。除了这些已有的软件或服务外,对一些通用的功能概念也要烂熟于心,如正则表达式、通用文本编辑快捷键等。再者就是对于需要再造工具的场景,要会使用一些脚本语言自行编写,如 Bash、Python、JavaScript。这些脚本语言的运用,自然也需要在编码上下一番功夫。
编码
编码,这大概是开发人员觉得自己最有把握的事情了。编码不就是把功能需求用一门高级语言实现出来嘛!实现的细节不就是各种 if、for、赋值等语句的组装嘛!而且,最终用户可能只关心整个系统的功能是否正常,他们不会关心内部是怎样去实现的。“功能正常”,这既是最高的要求,却往往也是最低的要求。作为开发者,要认识到仅仅让功能正常也许比较简单,但实现时粗糙的编码可能会藏有各种难以发现的问题。这样在某一时刻或情景下,“功能正常”也就无法保证。就像《The Art of Computer Programming》这本书名所表示的那样,如果我们把编程当做一门艺术,抱着雕琢自己作品的态度去面对代码,就不会仅仅只局限于它的外在,而不在乎其内在了。
然而在编码这件事上,很多人又容易走极端,极尽所能地去研究那些奇技淫巧,甚至以此作为炫耀的资本。比如利用运算符优先级编写极其复杂的计算表达式、利用语言特性实现极其难以理解的逻辑。每一门语言都有一些犄角旮旯的特性,甚至有所不足或缺陷。但在我们正常的开发工作中,应该尽量去避免触碰这些陷阱。把那些绕脑的、存在歧义的语法与写法通通扔掉。多去研究那些更加现代、安全、人性化的表达方式。
好的编码,首先风格就很不一样。一个具有良好目录组织结构的工程、一段具有良好命名的代码,都会让人看起来赏心悦目、心旷神怡。然后就是对语言层面各种语法要运用自如。对各种高级语法的底层实现要抱有一颗求索的心,甚至由此追溯到汇编、机器码乃至计算机硬件。还有安全性、性能、扩展性等各个方面。而后面这些,其实就已经上升到设计层面了。
设计
那什么是设计呢?如果把编码看做”行(xíng)“,那么设计就是”思“。行成于思毁于随,还要三思而后行。”思“,首先要从业务、产品的高度上进行求证:这个功能它的目的是什么?它的工作场景是什么?它有无存在的必要或者改善的可能?其次就是从使用者的角度换位思考:如果我是用户,我需要的是什么?我会如何去做某件事?我完成的效率能否提升?最后就是我们的技术上考量:数据结构该如何去设计?如何应对可能的修改?如何保证程序的健壮性?如何应对高并发的场景?等等,不一而足。良好的设计能够让我们规避代码修改的泥淖、跳过未知缺陷的深渊。
希望通过工具、编码、设计这么一根准绳,穿入我们日常的开发工作中,能够让我们时刻保持清醒、明确的研究思路,握紧发展的方向舵。祝愿大家!