從小時候開始,工程師在我的心目中就不是一份太高尚的職業。工程師必須要用沒人聽得懂(也沒人有興趣)的語言,去架構出能被使用的東西。這些東西可能是建築物、車子、機器、電路板、軟體等等⋯

一般大眾會將一樣產品的功勞歸給「計畫者」(如Steve Jobs)以及設計、行銷、管理者,而工程師似乎就是一些可以被替換的零件,沒有人會記得他們的名字,而他們所做的事情也可以被其他人所取代。後來我自己加入了軟體工程師的行業,對於工程師的想法也有所改變,在這邊跟大家分享一下我對於「工程師」的看法。

雖然在中文裡,大家都叫做工程師,但其實根據工程師喜歡做的事情、心中對於程式的想法,可以分成幾種類別的人。這邊簡單的以我的認知,把寫程式的工程師分成三類。

 

第一,寫程式的人(Coder、Employee、Worker)

這種類型的人單純的只是為了工作、功課、任務而寫程式,雖然職務名稱叫做工程師,但是寫程式對他們來說只是獲取成績、金錢的工具,寫程式對他們來說枯燥無味,但為了生活,他們繼續產出他們的程式碼。他們喜歡簡單的任務,最好是一看到就知道要怎麼做,最好有別人的程式碼可以直接套用。而當他們的程式可以過關,他們就開心回家睡覺去,連一秒都不想看到程式碼。

 

第二,有目標而寫程式的人(Hacker、Doer、Entrepreneur)

這種類型的人並不是因為熱愛「程式」本身而開始寫程式,他們寫程式是為了要達成某些目的。這些人雖然不是天生的程式高手,但是很會用別人寫好的套件去兜出一些應用,當有一個好的點子時,他們第一件事不是去想:「我本身不是學這個的,我要怎麼樣才能找到別人來幫我做⋯」他們會去找既有的資源架構,嘗試做出原型(Prototype),有時候雖然做出來雖然有點破(像是下圖右方的機器人),但他們樂在其中,並且常常不眠不休地寫程式。我自己會將Mark Zuckerberg(Facebook)、Drew HoustonDropbox)、David Karptumblr)這些創辦人歸在這類。

工程師 程式設計 code 駭客
Image source

 

第三,熱愛程式本身的人(Architect、Theorists、Change Maker、Geek)

這類工程師喜歡程式本身,他們欣賞程式設計的架構、可擴充性、可被測試性。他們喜歡最新的科技,並且會主動去接觸、試用它們。他們喜歡寫有架構、能夠被別人重複使用的套件(Library)。他們樂於貢獻自己所知所學到這個世界,並且常常在想有沒有什麼最新科技、理論能夠套用到某個工具或服務上,讓這個服務更快、更大、更好。他們是三種類型的工程師中技術最高超的一群(如上圖左方的人),也常常是能夠改變整個程式世界遊戲規則的人。如 jQuery 的發明者John Resig、Linux發明人Linus Torvalds、個人電腦發明者Stephen Gary Wozniak,還有許許多多的Google工程師們。

工程師 程式設計 code 駭客

(Steve Jobs & Stephen Wozniak) image source

寫到這裡,我忽然想要澄清一個大眾對於工程師的誤解。當大家看到一個東西、軟體不好用,或是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的工程師思維源自於兩個面相,第一個是他們喜歡有秩序、可以永久保存、重複使用的東西,第二個是他們無私地想要貢獻自己做出的東西給這個世界。當公司或團隊在討論時程時,Architect的第一個思維會讓他想要阻止大家天馬行空的亂提點子,因為他知道這些點子拼湊在一起,程式或產品架構會是個一團亂(但這時候PM會說:「那是因為你從工程的角度去想,但使用者使用起來不會這樣覺得,你這是工程師思維」)。但實際上,一個好的產品設計,從工程上面來看應該也要是規律、優雅而有深度的。若工程設計本身具有規則,使用者在使用時是可以隱約感受到其背後令人舒適的邏輯的。因此我認為Architect喜歡秩序的工程師思維是好的。

而Architect的第二種思維 -- 貢獻於整個世界,有時候對於末端使用者(也就是我們所稱的大眾)來說,會是一個小災難。Architect會希望把一個東西做到擁有很大的擴充性、以及很多的功能,如此一來任何一種人都可以視自己的需求,去變化使用這個東西。而這種想法最知名的例子,就是蘋果電腦的發明人沃茲尼克,曾和Steve Jobs爭論,它希望電腦上面要有很多可擴充的插槽,如此一來各類的科技人才能視自己所需去改裝電腦。(後來Steve Jobs沒讓他這樣做,沃茲尼克還小生氣了一陣)。

但Architect的第二種思維,常常是他們做出來的東西能影響這整個世界的關鍵。Internet、Linux、python、ruby、C語言⋯Architect創造出來的東西,無私奉獻給這個世界,成為科技發展的基石,因此一般大眾才有機會使用簡單易懂的科技產品。

3-types-of-engineers-coder-hacker-architect-3

Image source

在我們的環境中,有太多的Coder、也有許多從Coder變成的Hacker(他們的差別只在有沒有目標,還有去實作的毅力),但比較少真正願意奉獻、熱愛程式的Architect。

至於我呢?目前還只是個有目標的Hacker而已,距離真正厲害的工程師還有很長的一段距離。但自詡為一個Hacker,還是希望自己能夠繼續做出對世界有貢獻的東西

當你有一個想法,並用自己的雙手實現出來,然後按下一個按鈕,讓幾百萬人都能分享你的成果。我想我們是世界上第一代能夠有此經歷的人。 — Drew Houston in “What most school don’t teach

後記:

話說這次之所以會寫這篇文章,是因為昨天想要在iPad上看第一銀行的電子書,但很不幸的,它是Flash,iPad無法觀看。而使用Puffin它竟然說網頁記憶體用量太大不讓我開,這時我想起自己是個工程師,於是就用Dropbox的公開資料夾當做伺服器,自己寫的幾行程式碼當做載具,簡單的做了一個iPad觀看版本。做完後覺得,嗯,當工程師還是有一些特殊的地方的。晚上心血來潮,就寫了這篇文章。

我想人們之所以會走向不同的工程師類型,和工作環境、投入的Project也有很大的關係,即使在Google,也有很多聰明的人因為一些因素成為單純生產Code的Coder。

希望每個工程師都能選擇自己想走的路,生活、創業、貢獻⋯一切都是自己的選擇。

也推薦你看看

《【專訪Tu】只跟「過去的自己」比!台灣才女工程師,美國微軟生存日記》

《小女孩一定要當公主嗎?成為女工程師怎麼樣》

《Airbnb設計副總怎麼看:設計、產品、工程師的糾葛關係》

獨家精選只在LINE裡頭,現在先▸▸ 好友人數 接著回傳「career/有興趣的職務(例如行銷、數據分析、PM)」讓我們遞給妳最相關的第一手消息!