Are you a Programmer?

Matthias Endler

你是程式設計師嗎?

原文由 Matthias Endler 發布,訂閱此部落格

我的地理老師曾經分享過她大學第一堂課的經歷。作為開場,教授要求全班在沒有任何輔助的情況下,盡可能準確地畫出一張德國地圖。令她驚訝的是,她幾乎無法在地圖上填入什麼細節,就連國家的輪廓都有點模糊。

她看過成千上萬張德國——她祖國——的地圖,卻無法憑著模糊的記憶重現出來。她得去查資料才行。

這聽起來是不是很熟悉?我們依賴機器來管理很大一部分的知識。要把某件事真正記熟,可是得下苦功的。

這裡有一個給程式設計師的類似測驗:

請用你自選的程式語言,在一張紙上、不借助任何外部工具,寫出一個正確且平均時間複雜度為 O(n*log n) 的排序演算法(堆積排序、快速排序、桶排序,隨便哪一種都可以)。

而我所說的正確,是指你把它輸入電腦時,不需要做任何修改就完全沒有錯誤、可以正確執行。

你可能會很驚訝,有很大比例的專業軟體工程師都做不到這件事

有些人可能會爭辯說,程式語言的語法細節並不重要:「既然會用搜尋引擎,為什麼還要去學那些吹毛求疵的小細節?既然可以輕鬆從教學範例複製、貼上再修改,為什麼還要從零開始?反正每隔幾年、甚至幾個月,我就得為另一種語言重新學一次語法。」

但那是個迷思。如果你真的精通哪怕只有一種程式語言——即使是像 Fortran 或 COBOL 這種過時的語言——光靠這個知識就能讓你輕鬆賺大錢。假設你從 1975 年就開始寫 C,直到今天——將近四十年後——你依然可以使用同樣的語法。文字編輯器也是如此。Emacs 和 Vim 都已經有數十年的歷史,久經考驗。我不在乎你偏好哪一個,但你將有很長一段人生要與你的工具為伍,所以值得花時間好好精通它們。

順帶一提,似乎很少有人在做任何事時追求完美。他們很樂意停留在「夠好就好」。這背後可能有很多不同的原因,我並不是要責怪任何人沒有做好功課,但或許有這種觀察的不只我一個。

如果你不看說明書就不會使用自己的工具,那你就是個蹩腳的工匠。如果你寫一封簡單的信都要查字典,那你很難成為作家,因為光是要寫出優雅、流暢的句子對你來說就已經是個挑戰——更別說引人入勝、獨具原創的故事了。我可不想讀那種書。

什麼樣的人才算是程式設計師?

  • 她至少精通一種程式語言,到了透徹了解的程度。
  • 她能夠隨手實作出穩健且速度合理的標準演算法(例如排序、搜尋)和資料結構(例如樹、鏈結串列)。
  • 她至少對複雜度理論以及遞迴、指標這類程式設計概念有基本的理解。

但要成為優秀的程式設計師,你應該

  • 能夠運用至少兩種截然不同的程式設計範式來寫程式(例如宣告式、函數式)。
  • 具備大型軟體架構的經驗。
  • 熟悉自己的程式開發環境,例如作業系統以及你所選擇的一套功能強大的文字編輯器。最好是那種容易擴充的編輯器。

而這還只是冰山一角。「要學的東西太多了!」我聽到你們有些人這麼說。慢慢來就好。剛開始學 Vim,你只需要三個指令:iESC:wq。這樣就足夠應付第一天了。

我知道這些基本功大多不會在課堂上教。你得靠自己去學很大一部分。但面對現實吧:如果你不懂這些東西,你還稱不上是程式設計師,你只是個新手。

本文章由 muse-spark-1.2-contributor 進行翻譯

留言