程序员

工程师必须要用没人听得懂 (也没人有兴趣) 的语言,去架构出能被使用的东西。这些东西可能是建筑物、车子、机器、电路板、软件等等⋯⋯人们总是会将产品的功劳归给「计划者」(如 Steve Jobs) 以及设计、行销、管理者。而我们的工程师似乎就像是一些可以被替换的零件,没有人会记得他们的名字。他们所做的事情也可以被其他人取代。

虽然在中文里,大家都叫做工程师,但其实根据工程师喜欢做的事情、心中对于程序的想法,可以分成几种类别的人。这边简单的以我的认知,把写程序的工程师分成三类。

第一,写程序的人 (Coder、Employee、Worker)

这种类型的人单纯的只是为了工作、功课、任务而写程序,虽然职务名称叫做工程师,但是写程序对他们来说只是获取成绩、金钱的工具,写程序对他们来说枯燥无味,但为了生活,他们继续产出他们的程序码。他们喜欢简单的任务,最好是一看到就知道要怎么做,最好有开源的程序码可以直接套用。只要他们的程序可以过关,他们就开心的回家睡觉去了,一秒钟都不想再看代码。

第二,有目标而写程序的人 (Hacker、Doer、Entrepreneur)

这种类型的人并不是因为热爱「程序」本身而开始写程序,他们写程序是为了要达成某些目的。这些人虽然不是天生的程序高手,但是很会用别人写好的套件去兜出一些应用,当有一个好的点子时,他们第一件事不是去想:「我本身不是学这个的,我要怎么样才能找到别人来帮我做⋯⋯」他们会去找既有的资源架构,尝试做出原型 (Prototype),有时候虽然做出来虽然有点破 (像是下图右方的机器人),但他们乐在其中,并且常常不眠不休的写程序。我自己会将 Mark Zuckerberg(Facebook)、Drew Houston(Dropbox)、David Karp(tumblr) 这些创办人归在这类。

第三,热爱程序本身的人 (Architect、Theorists、Change Maker、Geek)

这类工程师喜欢程序本身,他们欣赏程序设计的架构、可扩充性、可被测试性。他们喜欢最新的科技,并且会主动的去接触、试用它们。他们喜欢写有架构、能够被别人重复使用的套件 (Library)。他们乐于贡献自己所知所学到这个世界,并且常常在想有没有什么最新科技、理论能够套用到某个工具或服务上,让这个服务更快、更大、更好。他们是三种类型的工程师中技术最高超的一群 (如上图左方的人),也常常是能够改变整个程序世界游戏规则的人。如 jQuery 的发明者 John Resig、Linux 发明人 Linus Torvalds、个人电脑发明者 Stephen Gary Wozniak,还有许许多多的 Google 工程师们。

Architect 的工程师思维源自于两个面相,第一个是他们喜欢有秩序、可以永久保存、重复使用的东西,第二个是他们无私的想要贡献自己做出的东西给这个世界。当公司或团队在讨论时程时,Architect 的第一个思维会让他想要阻止大家天马行空的乱提点子,因为他知道这些点子拼凑在一起,程序或产品架构会是个一团乱 (但这时候 PM 会说:「那是因为你从工程的角度去想,但使用者使用起来不会这样觉得,你这是工程师思维」)。但实际上,一个好的产品设计,从工程上面来看应该也要是规律、优雅而有深度的。若工程设计本身具有规则,使用者在使用时是可以隐约感受到其背后令人舒适的逻辑的。因此我认为 Architect 喜欢秩序的工程师思维是好的。

而 Architect 的第二种思维——贡献于整个世界,有时候对于末端使用者 (也就是我们所称的「大众」) 来说,会是一个小灾难。Architect 会希望把一个东西做到拥有很大的扩充性、以及很多的功能,如此一来任何一种人都可以视自己的需求,去变化使用这个东西。而这种想法最知名的例子,就是苹果电脑的发明人沃兹·尼克,曾和 Steve Jobs 争论,它希望电脑上面要有很多可扩充的插槽,如此一来各类的科技人才能视自己所需去改装电脑。(后来 Steve Jobs 没让他这样做,沃兹尼克还小生气了一阵)。

但 Architect 的第二种思维,常常是他们做出来的东西能影响这整个世界的关键。Internet、Linux、python、ruby、C 语言⋯⋯Architect 创造出来的东西,无私的奉献给这个世界,成为科技发展的基石,因此一般大众才有机会使用简单易懂的科技产品。

photo credit: Xiqiao

在我们的环境中,有太多的 Coder、也有许多从 Coder 变成的 Hacker(他们的差别只在有没有目标,还有去实作的毅力),但比较少真正愿意奉献、热爱程序的 Architect。

via: blogspot.tw