2018年10月27日星期六

阮一峰:軟件開發是知識嗎

http://www.ruanyifeng.com/blog/2018/10/weekly-issue-28.html

第24期時,我引用了一個開發者對年輕程序員的告誡。

> 在軟件開發中,技術變化如此之快,你花費了大量時間學習技術和工具,一旦這些技術被取代,你的知識將變得毫無價值,因為它們大部分都是實施的細節。


我最近總是在想這段話,軟件開發算不算是真正的知識?

如果它是一種真正的知識,那麼理論上,我們學到的東西大部分應該不會過時,就好像微積分不會過時一樣。可是實際上,我們都知道,軟件開發技能有時效性,十年前學習的編程知識,十年後幾乎肯定不能用於生產。那樣的話,軟件開發就不能算真正的知識,只是一種實施的細節。

公司旁邊有一家稅務所,每天都有很多人排隊交稅。如果你是第一次來交稅,肯定搞不清楚怎麼交,交稅是一門學問,必須有人教你,要帶哪些證件,要填哪些表,去哪些窗口排隊等等。

我現在認為,學習編程跟學習交稅是一樣的,都是學習實施的細節。一旦外部環境變了,原來的實施細節就沒用了。當代編程由於層層的抽象和封裝,我們已經不必接觸底層真正具有通用性的知識了。大部分時候,所謂編程就是在寫某個抽象層的配置。比如,網頁樣式就是在寫 CSS 配置,你很難說這到底是真正的知識,還是像《辦稅指南》那樣的實施細節。

實施細節並不是知識,而是操作步驟。如果技術棧發生變更,實施細節就會毫無用處。但是,你又不能不學習它,不知道實施細節,就沒法做出項目。我覺得,程序員應該要警惕,不要落入實施細節的陷阱,不要把全部精力花在實施細節上面,然後以為自己學到了真正的知識。對待各種語言和工具,正確的態度應該是"進得去,出得來",既要瞭解足夠的細節,也要能夠站在宏觀的角度看待它,探尋底層到底是怎麼實現的。

沒有留言:

發佈留言