• 程序员的三个层次和三种思维
  • 发布于 2个月前
  • 174 热度
    0 评论
从小时候开始,工程师在我心目中就不是一份特别高尚的职业。工程师必须使用没人听得懂(也没有人感兴趣)的语言,去构建可以使用的东西。这些东西可能是建筑物、汽车、机器、电路板、软件等等。一般大众往往会把产品的功劳归功于 “策划者”(比如 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 的工程师们。

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

如上面所说,工程师分成三种。而所谓的 “工程师思维”,充其量只能描述第一种人(Coder)的行为。

Coder 类工程师思维
因为 Coder 只想完成任务,所以他们每天的工作就是完成规定的任务,不多做一分,也不少做一分。因此,如果管理者、产品经理在说明书、功能中没有把整个使用流程、步骤、使用情景完全拆解成任务,这些 Coder 是不会主动优化用户体验的。当他们发现系统使用起来会有问题时,也不会发声,因为提出一个好的意见,只意味着自己的工作量会增加 —— 这是让 Coder 最痛恨的事情。

在充满 Coder 的工作环境中,做出来的东西很可能充满了 “工程师思维”(不易用、用户体验差),因为这些只是一堆功能(编码任务)的组合。要运营这样的公司必须要有强大的产品经理和设计师,能够有效管理员工、定义产品,才能使功能拼凑出好的产品。

Hacker 类工程师思维
而第二种人(Hacker)最讨厌别人说他们有 “工程师思维”,因为他们实际上是普通人和第三种人(Architect)的混合体。Hacker 知道怎么完成事情,但技术没有那么高超。他们重视目标和用户体验,因为他们喜欢使用自己做的东西。

当公司要规划一个新产品时,他们不会因为这个新产品简单、容易、工作负担轻而高兴(Coder 会),相反,他们会因为这些产品易用、有创新而兴奋。当有任务下来时,Hacker 不会让使用细节从眼前溜走,他们会默默地补充设计不完整的地方。有时,他们甚至会和管理者争论,这个功能到底该不该有,因为他们认为用户不会喜欢。

如果在公司没有权力,Hacker 实际上是最尴尬的角色。至于尴尬在哪里…… 我想这个秘密就留给 Hacker 们了。

Architect 类工程师思维
而第三种人(Architect)确实有工程师思维,但 “工程师思维” 对他们来说应该是一种称赞。Architect 类工程师思维来源于两个方面,第一个是他们喜欢有秩序、可以永久保存、可以重复使用的东西;第二个是他们无私地想要贡献自己做出的东西给这个世界。

当公司或团队在讨论进度时,Architect 会希望大家不要随意提出点子,因为他们知道这些点子拼凑起来,程序或产品架构会变得混乱(但这时候产品经理会说:“那是因为你从工程的角度去想,但用户使用起来不会这样觉得,你这是工程师思维”)。但实际上,一个好的产品设计,在工程上看应该也是有规律、优雅且深入的。如果工程设计本身有规则,用户在使用时可以感受到背后的舒适逻辑。因此,我认为 Architect 们喜欢秩序的工程师思维是很好的。

Architect 的第二种思维 —— 对整个世界的贡献,有时候对于终端用户(也就是我们所称的 “大众”)来说,可能是一场小灾难。Architect 们希望把一个东西做得具有很大的扩展性和很多功能,这样任何人都可以根据自己的需求来变化使用这个东西。

这种想法最著名的例子就是苹果电脑的发明人沃兹尼亚克,他曾与 Steve Jobs 争论,认为电脑上应该有很多可扩展的插槽,这样各类技术人员才能根据自己的需求改装电脑。(后来 Steve Jobs 没有让他这样做,沃兹尼亚克还小生气了一阵子)。

但是,Architect 们的这种思维常常是他们做出来的东西能影响整个世界的关键。互联网、Linux、Python、Ruby、C 语言……Architect 们创造出来的东西,无私地奉献给这个世界,成为科技发展的基石,因此普通大众才有机会使用简单易懂的科技产品。

我们身边有很多程序员,也有许多从程序员转变成的黑客(他们的区别仅在于有无目标,以及是否有实现目标的毅力),但真正愿意奉献、热爱编程的 Architect 很少。

至于我呢?目前还只是一个有目标的黑客,距离成为真正厉害的工程师还有很长的路要走。但是我自诩为一个黑客,还是希望自己能够继续做出对世界有贡献的东西。

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

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

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