我认为一名高效程序员可以扮演5种基本角色来高效地完成他/她的工作,这些角色以某种方式组合后更符合开发团队中的某些“人物”。你是其中的哪个(或哪些)角色?
当我们在低层次积极参与编写代码并解决问题时,我们所担任的就是这样一种角色。编码者在编程同时致力于其他小问题,但通常专注于某一项特定任务而非整体架构。如果一个非IT人员询问你工作,你告诉他们你是一名程序员,这就是他们想象中你整天所做的事。
我们想要理解一个系统需要如何工作时,我们就会担负起这种角色。调查者不会让事情有任何不明之处;她/他对事物的工作原理以及事物固定的行为方式的理解有着与生俱来的渴望。这种对代码工作原理理解的内在意愿使得调研者成为优秀的捉虫者。
在思考并解决抽象问题时,我们扮演这种角色。理论家善于将抽象问题分解成具体方案,并且善于构建系统架构,即使她/他不是非常善于实际用代码来实现这些方案和架构。
该角色允许我们有批判性和逻辑性地思考问题。逻辑者是这些角色中最善于分析的,他们会思考这段代码为何以某种方式运行,而不仅仅是代码如何运行。她/他能够以同等权重来考虑所有可能的情况,并做出无偏见的决定,而不允许他/她的未经证实的观点来影响他们的判断。
该角色允许我们与其他人交流并解释复杂问题。沟通者能够理解深奥的技术思想和策略,并向技术和非技术人员解释清楚。她/他善于以多种方式沟通,无论是书写(例如评论或文档),还是口头表达(例如他/她的经理提出“这个按钮是干什么的?”)。
在任何特定时间,所有的程序员都担任过这五种角色,并且能够按照意愿在这些角色之间转换。然而,在我看来能够最大程度利用这五种角色的人非常少,实际上我们中大多数人会发现只有一种或两种固有角色最适合我们。
例如,你可能是一位优秀的逻辑者但却不善沟通,正因为如此你也许能够确定一段代码如何进行优化却可能无法向你的老板解释为何这样做很重要。同样地,你也许是 一位一流的编码者但是一位糟糕的理论家,因此你在开始编写代码解决问题前需要获取该问题的详细解释。这里有许多可能的组合,其中一些更为高效。