好Programmer是怎樣煉成的?

 Gordon Lau 劉偉中

Gordon Lau 劉偉中

2018-12-20

有一個大部份僱主都面對的難題,在芸芸履歷之中,如何萬中挑一,找到好programmer呢?聘請程式設計師很難,不像其他行業,打開 履歷就一目了然:有時履歷上滿滿証書的,其實連FizzBuzz也寫不了;有時看起來像個fresh graduate的,卻又有無限潛力。 如果你是一個要聘請程式設計師的僱主,你應該如何是好呢?

好程式設計師的特質

要理解此困境,首先要解答一個更困難的問題:就是好程式設計師有何特質?以筆者個人聘請經驗,加上與其他同行交流所得,歸結出以下六點,有些是性格 特質,有些是行為表現,現列舉如下:

思維清晰有條理

程式設計是一個將想法化為代碼的過程,要不想一忘二,一個好的程式設計師必然思維慎密,思維有清晰條理。優秀程式設計師可以理解複雜問題,並得出合 乎邏輯的結論。思維清晰一事上,不限於程式設計,好程式設計師在其他事情,也擅於運用同樣的邏輯思維去解決問題。所以,如果你有一個面試 者在程式設計上看來不錯,但是生活上其他方面好像迷迷糊糊一樣,就要小心一點。也許他真是一個還好的程式設計師,但斷斷不會是優秀的一員。

分辨此項特質的面試問題: 可以解釋一下井字過三關規則是怎樣嗎?一個HTTP請求由瀏覽器到伺服器中間過程是怎樣的?

觀察點:是否能夠清晰解說每一條規則、每一個步驟。

有强烈好奇心

科技日新月移,資訊科技變化的速度更快得驚人,優秀程式設計師通常有著强烈的好奇心,不會抗拒學習新事物。在程式設計一門學問上,每年每月每星期 都有新的框架、新的程式庫、新的想法誕生。不熱愛學習,欠缺好奇心的人,會覺得很難適應。因為剛剛習慣的做法,可能又有其他新的可能性。好程式設計 師通常會定時學習新知識,更新自己的理解,亦會希望以新學成的東西應用在新專案之上。不會因為過去一直的做法,而毫無理由的選擇因循守舊。

分辨此項特質的面試問題: 你有學過(一種新科技)嗎?你對這種科技有何看法? 下一個專案你會運用(這種科技)嗎?原因為何?

觀察點:有否學習新科技及思考過其優劣之處。

性格不固執

普遍程式設計師都對軟件工具有自己見解及喜好,但優秀的不會固執於自己喜好的程式語言、框架、程式庫。如上一點所言,好程式設計師經 常有學習新事物的渴望,如果他看到有合理原因要使用其他工具,不會因為個人喜好,而堅持己見,也就是使用適當工具,解決適當事情(Use the right tools for the right thing)。於他而言,使用其他工具亦是一個學習的過程,不會因此而覺得自尊受損。不固執的性格亦令好程式設計師可以與他人磋 商最佳解決方案。

分辨此特質的面試問題:可以解釋一下(一種新科技)與(另一種對立的新科技)有何異同?你會在那個情況使用各自工具呢?

觀察點:有否對科技有强烈的喜好及見解。

習慣三思而後行

優秀程式設計師由於思維比較慎密的原因,所以行事通常都會三思而後行。解決問題最痛苦的莫過於,花了很多時間,卻發現徒勞無功。因此好程式設計師明 白Solve the right problem,比solve the problem right 更重要。因而會花一定時間在詳細計劃之上,待理解整個問題後,才開始着手解決。

分辨此特質的面試問題: 請分享一個開發新專案的故事。

觀察點:是否習慣做事有計劃,及是否會跟隨自己制定的計劃。

熱愛編程

這一點大概是最重要的一點,好程式設計師一定會熱愛編程,正是由於熱愛,才會孜孜不倦改善自己。也正是由於熱愛編程,才有足夠熱情一直進步。熱愛編 程令程式設計師在工餘時間或學習之外,會再花時間學習新科技,這些額外努力正是令好程式設計師更加優秀的原因。如果面試者是一個朝九晚六式程式設計 師(9-6 programmers),也就是工作時間以外完全不碰編程,基本上不可能是一個優秀程式設計師。

分辨此特質的面試問題: 你工餘時間外有其他專案正進行中嗎?新近有學習其他框架/程式庫?

觀察點: 是否熱愛編程本身。

溝通能力强

有一個常見的誤解,就是程式設計師都是不善辭令。然而優秀程式設計師通常是溝通能力很强,因為大部份程式設計是都需要多人合作,只能一個人工作的程 式設計師不論寫的代碼多好,都不及善於與他人合作的程式設計師。好程式設計師能夠清晰解釋事情,並能協助他人解決問題。因為程式設計不只與懂編程的 人溝涌,亦要與許多如專案管理(Project Management)、質素鑑定(Quality Assurance)等部門的同事合作。

分辨此特質的面試問題:請分享一個與非技術的同事合作的故事。

觀察點: 是否有良好溝通能力。

如何使用本文所談的技巧

以上是一些在優秀程式設計師身上常見特質,要如何使用本文所談的技巧,取決於你:

  • 如果你正在聘請程式設計師,又不知如何入手,以上一些技巧應該能夠幫助你;
  • 如果你本身是初出茅蘆的程式設計師,可以對照自己,看看如何繼續努力下去;
  • 如果你想學習編程,但不知自己是否適合,可以看看自己是否適合寫程式一行啊!

留言

延伸閱讀

專家級新手

平常人都能掌握的Programming 原則

Dart vs JavaScript vs TypeScript

四個原因令Linux更適合作Server

到底React Hooks有何特別(二)?淺談useEffect及useReducer

到底React Hooks 有何特別?