自從上次看了業界大神阮一峰發的那篇文章之後,給我的印象非常的深刻,一直想寫文章跟大家交流和探讨一下,那就是:軟體開發到底算不算知識呢?
在探讨這個話題之前,我們先看看大神阮一峰是怎麼說的,大緻内容如下:
在軟體開發中,技術變化如此之快,你花費了大量時間學習技術和工具,一旦這些技術被取代,你的知識将變得毫無價值,因為它們大部分都是實施的細節。
我最近總是在想這段話,軟體開發算不算是真正的知識?
如果它是一種真正的知識,那麼理論上,我們學到的東西大部分應該不會過時,就好像微積分不會過時一樣。可是實際上,我們都知道,軟體開發技能有時效性,十年前學習的程式設計知識,十年後幾乎肯定不能用于生産。那樣的話,軟體開發就不能算真正的知識,隻是一種實施的細節。
公司旁邊有一家稅務所,每天都有很多人排隊交稅。如果你是第一次來交稅,肯定搞不清楚怎麼交,交稅是一門學問,必須有人教你,要帶哪些證件,要填哪些表,去哪些視窗排隊等等。
我現在認為,學習程式設計跟學習交稅是一樣的,都是學習實施的細節。一旦外部環境變了,原來的實施細節就沒用了。 當代程式設計由于層層的抽象和封裝,我們已經不必接觸底層真正具有通用性的知識了。大部分時候,所謂程式設計就是在寫某個抽象層的配置。比如,網頁樣式就是在寫 CSS 配置,你很難說這到底是真正的知識,還是像《辦稅指南》那樣的實施細節。
實施細節并不是知識,而是操作步驟。如果技術棧發生變更,實施細節就會毫無用處。但是,你又不能不學習它,不知道實施細節,就沒法做出項目。我覺得,程式員應該要警惕,不要落入實施細節的陷阱,不要把全部精力花在實施細節上面,然後以為自己學到了真正的知識。對待各種語言和工具,正确的态度應該是“進得去,出得來”,既要了解足夠的細節,也要能夠站在宏觀的角度看待它,探尋底層到底是怎麼實作的。
看到這段話的時候,其實自己對于軟體開發技術的更新疊代速度快,并不感到震驚,也不感到吃驚。畢竟,我們作為程式員對于技術發展的速度,更新換代的時間已經司空見慣,習以為常了。
但是,正式因為我們的司空見慣和習以為常導緻我們對這樣的問題就缺少了思考。
我比較震驚的是知識的概念。
如果說我們的軟體開發和程式設計經驗不屬于知識,那它們屬于什麼呢?對,它們屬于技術。但是,我們再思考一下,技術和知識又有什麼關系呢?
知識應該是技術的基礎,知識是根,技術是術。舉個例子的話就是:知識就是交通規則,技術就是駕駛技術,有了技術你就能開車上路,但是要想安全行車,就必須還得懂交通規則。
知識是懂的原理,技術是知道怎麼做。如果不懂知識,死記硬背,熟練練習技術,你能幹活嗎?能幹,但是要想幹好,那就必須得懂。就像開車一樣,光學會了駕駛技術,但是要想安全行車,必須懂得交通規則。
那在深一層次的問,既然知識是技術的基礎,我們程式設計,軟體開發的根是什麼呢?對,就是那些原理性的東西。比如,計算機系統原理,編譯原理,算法等。
其實,知識這個概念到現在也沒有一個明确的概念。知識是符合文明方向的,人類對物質世界以及精神世界探索的結果總和。知識,至今也沒有一個統一而明确的界定。
就比如阮老師在上面說的微積分,微積分在現階段我們的認知下,是正确的,但是在未來就不一定對了,也不一定能夠滿足和使用了。是以,它終究也可能會被淘汰。隻不過這個科學基礎性的知識的生命周期可能比較長,不容易更新換代一樣。
就像我們現在的技術更新疊代快一樣。軟體開發的技術一直在更新疊代,但是計算機系統原理,編譯原理更新的周期快嗎?生命周期長嗎?對,這些科學基礎性的東西就如同微積分一樣,不是它不會被淘汰,隻不過是在現階段的文明和人類的認知前提下,很難有進一步的突破,一旦有突破,也會淘汰。
不知道說了這麼多,大家看懂了沒有?其實讨論完這個話題之後,我們應該認識到,現階段大部分的程式員都是忽視原理和基礎的,都是在死記硬背軟體的開發技術和流程,而很少去懂原理性的東西,這就是為什麼很多人說我們程式員是吃青春飯的原因。因為熟練使用一種技能很容易被淘汰,而甚至原理性的東西,确實很難過時。
不知道看完這些,你們對這個話題有什麼想法呢?你們認為軟體開發屬于知識嗎?歡迎大家留言一起交流探讨一下。
原文釋出時間為:2018-11-06
本文作者: loonggg
本文來自雲栖社群合作夥伴“
非著名程式員”,了解相關資訊可以關注“
”。