三种软件工程师——编码员、程序师和架构师【0218】

>>>  創業先鋒 眾人拾柴火焰高  >>> 簡體     傳統

从小时候开始,工程师在我的心目中就不是一份高尚伟大的职业。


工程师必须要用没人听得懂 (也没人有兴趣) 的语言,去架构出能被使用的东西。这些东西可能是建筑物、车子、机器、电路板、软件等等??


人们总是会将产品的功劳归给「计划者」(如 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 工程师们。



Steve Jobs & Stephen Wozniak


写到这里,我忽然想要澄清一个大众对于工程师的误解。当大家看到一个东西、软件不好用,或是 UI、UX 设计上有问题时,常常会说制作这个东西的人用「工程师思维」在设计。又或是团队在讨论一样东西时,PM(Product Manager) 或管理者常会对工程师说:「你那是『工程师思维』,站在『使用者』的角度来说??」工程师常因为大众对自己身份的刻板印象,被弄到连发言权都没有,或是提出的意见不被重视,但事实是怎样呢?


如上面所说,工程师分成三种。而所谓的「工程师思维」,充其量只能形容第一种人 (Coder) 的所作所为。


Coder 的工程师思维


Coder 因为只想把事情做到交差了事,因此他们每天的任务就是把上面说要做的事情完成,一分不多、一分不少。因此,假设管理者、PM 在 Spec、Feature 中没有把整个使用流程、步骤、使用情境全部拆解成任务,这些 Coder 是不会自动帮忙把 UX 做好的,当他们发现这个系统使用起来会有问题,他们会选择默不吭声,因为提出一个好的意见,只代表自己的工作会增加 —— 而这是让 Coder 最不开心的事情。


在充满 Coder 的工作环境,做出来的东西就有机会充满「工程师思维」(不好用、UX 烂),因为这些东西只是一堆 Feature(Coding 任务) 的结合。要营运这样的公司必须要有很强的 PM 和设计者,能够有效管理员工、定义产品,才能让 Feature 拼凑出好的产品。


Hacker 的工程师思维


而第二种人 (Hacker) 是最讨厌别人说他们有「工程师思维」的人,因为他们其实是普通人和第三种人 (Architect) 的混种。Hacker 知道怎么完成一样事情,但技术没有这么高超。他们重视目的和 UX,因为他们喜欢使用自己做的东西。当公司要规划一项新产品时,他们不会因为这项新产品做起来简单、轻松,工作负担轻而开心 (Coder 会)。相反,他们会因为这些东西好用、创新而兴奋不已。当有任务下来,Hacker 不会让使用的细节从眼前溜过,他们会默默的将设计不完整的地方补完。有时候他们甚至会和管理者争论,这个 Feature 到底该不该有,因为他们认为使用者不会喜欢。


假如在公司没有权力,Hacker 其实是角色最尴尬的人。至于尴尬在哪??,我想这个秘密就留给 Hacker 们了。


架构师的工程师思维


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


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


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




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


至于我呢? 目前还只是个有目标的 Hacker 而已,距离真正厉害的工程师还有很长的一段距离。但自诩为一个 Hacker,还是希望自己能够继续做出对世界有贡献的东西 ( 之前做的 Timego 也该继续更新了 )。




当你有一个想法,并用自己的双手实现出来,然后按下一个按钮,让几百万人都能分享你的成果。我想我们是世界上第一代能够有此经历的人。

—— Drew Houston in “What most school don’t teach”


后记:


话说这次之所以会写这篇文章,是因为昨天想要在 iPad 上看第一银行的电子书,但很不幸的,它是 Flash,iPad 无法观看。而使用 Puffin 它竟然说网页记忆体用量太大不让我开,这时我想起自己是个工程师,于是就用 Dropbox 的公开资料夹当做服务器,自己写的几行程序码当做载具,简单的做了一个 iPad 观看版本。做完后觉得,嗯,当工程师还是有一些特殊的地方的。晚上心血来潮,就写了这篇文章。


我想人们之所以会走向不同的工程师类型,和工作环境、投入的 Project 也有很大的关系,即使在 Google,也有很多聪明的人因为一些因素成为单纯生产 Code 的 Coder。


希望每个工程师都能选择自己想走的路,生活、创业、贡献?? 一切都是自己的选择。



CocoaChina 2015-08-23 08:45:30

[新一篇] 心中永不磨滅的英雄史詩手游:《魔法門之英雄無敵3》

[舊一篇] 開羅再出像素風模擬經營手游《雜志大亨》:主編真心不好當
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表