【為什麼我們要挑選這篇文章】程式語言不斷演進,從先前的 Java 到近年的 Python,再加上因應 AI 需求而浮出的 Tensorflow、Pytorch。這麼多種語法,工程師該怎麼學習最有效率?下文為你統整資深工程師的觀點。(責任編輯:郭家宏)
當你搬到一個新城市,不知道最近的便利商店在哪。你不會因此自責,畢竟這很正常。你只要打開手機地圖就能找到它。等你去過幾次以後,很可能就不用借助地圖了。
其他地方也是一樣,比如最近的餐廳或者健身房,剛開始你可能要用地圖導航,等你熟悉了它們的位置就不需要導航了。
你知道怎麼找到它們,但你並沒有刻意去記每一條馬路、每一條可行的路線。還有些地方你去了一次就沒再去了。
當你使用一門程式語言調用各種語法時也是一樣的。
學習新程式語言,要多久才能掌握它的語法?
新的工程師 / 軟體工程師 / 開發者可能因為沒記住足夠的語法而感覺很糟。他們發現自己仍要參考文檔,於是覺得自己不是一個好的開發者。
以下是他們開始編程之旅時可能有的幾個常見問題:
▌我如何才能學會所有這些語法?
▌我要多久能掌握這門語言,然後就不用參考文檔來寫程式?
當能記住一些常用語法時,他們可能覺得自己已經成了寫程式高手。在他們的印象裡,能記住多少語法,或者能掌握多少不同的程式語言和框架,就是真正重要的事。
為了說明問題,我們來比較一下不同的程式語言是怎麼獲取字元串長度的:
▌seq.length — JavaScript lists, Java arrays.
▌seq.size() — Java sequences,jQuery expressions (deprecated).
▌len(seq) — Python.
▌seq.count() — Django querysets.
▌SeqType’Length — Ada arrays.
▌length seq — Haskell.
▌(count seq) — Clojure.
▌sizeof(seq)/sizeof(seq[0]) – C,statically allocated.
▌strlen(seq) –C, null-terminated.
如你所見,為了獲取字元串長度,每一種語言或技術都有自己的語法。這說明,同時記住某個函數的 12 種版本真的很難。
一個使用過多種編程語言的開發者,不太可能把過去用過的所有語法都背下來。他們甚至可能根本懶得去學。
語法有那麼重要,以至於我必須記住嗎?
為了回答這個問題,我們來看看一些資深工程師是怎麼說的。
很多資深工程師不會記程式碼的細節
「我是 Google 的團隊主管,有超過 30 年的寫程式經驗,但是我仍然需要去查怎麼得到一個 Python 字元串的長度。」——Tim Dierks
「我寫了將近 8 年的 Objective-C,仍然需要用 Google 去查 objc 的 block 語法。」——Lukas
「我是將 Node.js 部署在商用飛機上的人。然而我現在還是不懂 .substr() 和 .substring() 的區別。甚至寫這句話的時候我還得查一下 ‘substring’ 的大小寫規範是啥樣。」——JP
「我是 Phunware 的 Android 主管。不借助 StackOverflow 我就沒法去讀一個輸入流。」——Jon
「我是紐約時報的 GDE 工程師,也是主管,我不懂什麼是 np。我應該懂嗎?」——Mike
「在 12 年的 JavaScript 開發中,我總是被 substr() 和 substring() 弄糊塗,總是需要到網上來確認。」——Faisal
「我寫了 6 年 JS,我仍然需要去查不用 fetch 或者 jQuery 的話怎麼做 AJAX 請求。」——Dominik
「我從 1979 年就開始寫程式了,我仍然得查 java.lang.String 的用法,一直如此!」——Tim Bray
「我寫了 255 行程式碼,其中包括一個可以運行的伺服器和一個客戶端。我在 Google 上查詢了 23 次,大多數時候被引到 StackOverflow、Netty 4 網站、GitHub 和 JavaDocs 上。你算一下,平均每 10 行程式碼就有 1 次查詢!」——Umer Mansoor
「假如我告訴你我用 Google 查什麼,你一定會把這當成『證據』,證明我不是『真正的』工程師。」——Erica
「我經常把 O(n) 以及諸如此類的東西混在一起。儘管我能寫出一個 for 循環,Google 也用得很溜。」——Scott
這些坦誠的話應該能給你勇氣——你不必為記不住每一個語法細節而感到羞愧。
可能很多初級開發者都擔心這點。但事實是,你真的不需要記住所有的東西。
甚至技術招聘人員也不關心這些。下面是 Google 的那位工程師主管對此的回應:
問:「假如我又要被 Google 面試一次,我能要求程式面試用開書考的形式,好讓我通過嗎?」答:「我經常告訴應徵者們,我並不在乎任何 IDE 可以幫助你完成的事情。」
工程師沒必要記語法,但要有 Google 與邊做邊學的能力
下面的引述來自 Hacker News 網站,是對「有經驗的工程師會經常用 Google 嗎?」話題的評論:
我不光經常用 Google,我甚至用它來搜我自己過去寫的東西。好多次我搜一個程式時遇到的問題,結果在 Stack Overflow 上找到了我自己寫的回答。如果這個回答特別古老,以至於我已經完全忘記了,我甚至會想,「哇,這個天才講起話來跟我很像!」又或者「這個笨蛋根本不知道他在說什麼!」
幾個月前,我在 Facebook 的一個群裡看到一個資深開發者的文章,裡面提到當招募人員問他有沒有某項技術的經驗,而他並沒有時,他回應道:「那不過是又一種工具。」
意思是說,我過去可能沒有機會用到它,但我有信心能學會。我不需要花上幾個月才能用它工作。我可能只需要幾個小時來讀文檔,然後邊做邊學更多,而不是先把所有的東西背下來。
這就好像當你啟程前往目的地時,你不會指望一路綠燈。你會通過當前的綠燈,然後在碰到紅燈時停下來,等到綠燈亮了再繼續行駛。
今天,我們不斷有新的程式語言、新的框架,已有的語言和框架也會有相當大的改動,這樣一來,記住語法不但是困難的,而且也沒那麼重要了。正如一位評論者在這篇文章下方精闢地指出的:
「傑出的工程師懂得如何提出好的 Queries。然而,面試官們期待的卻是行走的活字典。」
原文 傳送門
(本文經合作夥伴 大數據文摘 授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈想成为杰出的软件工程师?别再只纠结于语法了!〉。首圖來源:Piqsels CC Licensed)
更多關於寫程式的知識
從新創企業到大公司,各種工程師會用到的數據分析工具統統整理給你!
【工程師隱身術】200 行 TensorFlow.js 程式碼,讓你從視訊會議的畫面中「消失」
用這 6 種方式優化程式碼,讓你的 Python 速度提升 30%!