面對新語言和跳槽,程序員如何保持技術優勢?
英文原文:Programmer Knowledge
程序員知識的半衰期有多長?通常人們經常說是 5 年。換句話說,你所知道編程知識的一半將會在 5 年內被淘汰。類似的觀點是,“編程很糟糕,因為你幾年前知道的東西現在都用不上了”。
咋一看,這似乎合情合理。畢竟,總有新的編程語言和技術源源不斷地冒出來。不過,我卻認為上面的觀點是不正確的。編程知識比一些人所意識到的有更長的實用期。
語法并不難
著手學習一門新的編程語言。對非程序員來說,當你知道 Java 的時候學習 Python 就好像在你知道英語的前提下去學習法語一樣。當然,但編程學習也并不是完全這個樣子的,會有新的語法要學習,但這僅僅是表面上看起來有點難,所有編程語言 的核心概念都是相同的。
使用任何一門語言編寫一個程序,你會使用到像類型、數據結構和邏輯這樣的基礎知識。如果你已經了解了布爾函數、整型、浮點數和字符串,這些類型 在新語言里也是類似的用法。當然像列表、集、字典和目錄樹這樣的數據結構也是一樣的,并且你使用的邏輯也將是算數運算、if 語句、循環以及函數調用等等。
此外,像該使用哪一種算法、如何分解問題以及變量和函數的命名等關鍵技巧都能在新語言里面直接套用。這些都是在各種編程語言之中通用的編程知識。借用“沒有銀彈”里的術語:“語言的語法是偶然的知識,但如何編程才是至關重要的知識。”
庫和工具也是這樣。即使你一點也不明白新語言里的正則表達式應該怎么用,你也知道它們最可能都支持什么。找到關于怎么使用它們的知識并不難,難 的是怎么使用它們,這才是有價值的知識。對于像 IDE 這樣的工具也是這樣的道理,你可能并不知道細節,但你就是知道它們能夠做什么。
所以學習一門新語言并不是什么了不起的事情,但如果你跳槽了,可能仍有很多知識需要學習。我把知識分為以下 3 個維度:
3 個維度的知識
編程:這個層次的知識是編程語言、范式、技術和工具。就像我上面所說的,即使像語法這樣的細節可能完全不同,但各種編程語言中的很多核心概念是相同的。
域:這就是你知道的編程里用到關于環境的知識。例如,如果你在電信工作,就是關于各種協議如何工作、如何處理短信、如何計費和監控等之類的知識。你在某個部門工作的時間越長,你對這塊了解的就越多,你對工作的貢獻可能就越大。
代碼庫:這個是要看公司的。當你已經在某個公司工作了很長時間時,你就會明白你的編程方式:你明白哪些事情做完了,哪些部分是棘手和無法憑直覺做出判斷的,為什么某件事情要用某種方式來做的整個過程等等。
活到老,學到老作為一個程序員,當你在以上 3 個維度的知識都很健全時,你才是最有價值的。如果你這時候跳槽,不可避免的是你一開始將會對新的代碼庫一無所知,你就不得不開始認真工作和學習。
然而,即使你跳槽后,你學到的編程和域的知識還是有用的。掌握幾門編程語言會給你更多的參考意見,讓你明白事情是怎么用不同的方式來完成的(即使基本原理一樣)。通常來說多讀點軟件開發的好書也是不錯的。
最后,我認為能讓軟件開發變得有意思和讓人興奮的部分原因是總能學到新的東西。你永遠都不會厭煩,所以保持學習的狀態吧。你學到的大部分只是都會讓你變成一個更優秀的程序員,即使每年都有新的編程語言不斷被發明出來。
譯文:http://www.php100.com/html/it/focus/2014/1217/8080.html