Are you a Programmer?

Matthias Endler

你是程式設計師嗎?

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

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

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

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

請使用你自選的程式語言,在一張紙上,不借助任何外部工具,寫出一個平均時間複雜度為 O(n*log n) 的正確排序演算法(Heapsort、Quicksort、Bucketsort,任舉一例皆可)。

而我所謂的正確的,是指當你將它輸入電腦時,必須完全沒有錯誤,不需任何修改就能正確運作。

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

有些人可能會辯稱,關於程式語言語法細節的知識並不重要:「既然懂得使用搜尋引擎,為什麼還要學那些瑣碎的細節?既然可以輕易地從教學範例中複製、貼上再修改,為什麼還要從零開始?反正每隔幾年/幾個月,我就得為另一種語言完全重新學習語法。」

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

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

如果你不看手冊就不懂得如何使用自己的工具,你就是個拙劣的工匠。如果你寫一封簡單的信就需要查字典,你將很難成為作家,因為光是要寫出優雅、流暢的句子對你來說就已經是挑戰了——更別說引人入勝且原創的故事。我可不想讀那樣的書。

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

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

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

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

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

我明白,這些基本功大多不會在課堂上教。你必須靠自己學習其中很大的一部分。但面對現實吧:如果你不懂這些東西,你就不是程式設計師,你只是個新手。

原文由 Matthias Endler 發布

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