通曉多種編程語言的程序員,真香?

通曉多種編程語言的程序員,真香?

你是否遇到過自稱 " 多語種程序員 "(polyglot programmer)的人?他們能夠掌握多種編程語言。

在程序員的世界裡,很多編程高手會被冠以各類稱呼,有些稱呼聽起來很“狗血”,比如:

  • “Code Ninja”(編程小忍者)
  • “Rock Star developer”(搖滾巨星開發者)
  • “Power Programmer”(編程高手)
  • “Open Source Pundits”(開源專家)
  • “Multiprocessing Moguls”(多處理大亨)
  • “Server Monks”(服務器大師)等等……

相比之下,多語種程序員這個稱呼還挺正常的。

Merriam-Webster 將“多語種”定義為編程語言或術語的一種混合或融合。

一般認為多語種編程這一術語是 Neal Ford 在 2006 年的一篇博客文章中創造出來的。Dean Wampler 在 2010 年的演講中進一步補充豐富了 Neal 的觀點,他重申不同的編程語言在不同領域有各自的優勢,且程序員應該使用最好的工具來完成工作。

不一定精通每種語言,但要掌握方法論

多語言編程的思想源於 2000 年代中期,是在身處 Java 生態系統的程序員群體中萌發的。那時 Java 語言的發展停滯了,但 JVM 是蓬勃發展的“非 Java”語言社區的基礎。2003 年的 Groovy、2004 年的 Scala 和 2007 年的 Clojure 都是很好的例子。所有這些語言都提供了 Java 所沒有的功能,高階函數是其中最明顯的例子之一。有了這些新能力的幫助,程序員顯然很容易採用它們:使用 Groovy 處理 XML,或使用 Scala 處理嵌套結構,等等。

從那時起已經過了這麼多年,多語種程序員的理念依舊方興未艾。

具體來說,一位通曉多種編程語言的程序員至少要能夠熟練掌握三種不同的語言。理想情況下,他們對這些語言的能力、深度和多樣性都駕馭得很好。

舉個例子大家就明白了:從技術上來說,通曉 Java、C++ 和 ABAP 的開發者可能會被視為多語種程序員,但由於這三種語言都具有相似的面向對象的概念和結構,因此就算學了這三種語言,也沒啥用。

正如加州大學歐文分校信息學高級講師 Richard Pattis 告訴我們的那樣:

編程語言不僅是工具,它們還是塑造你的編程觀念的技術。如果只是沉迷於學習很多類似的語言,可能不會為你的思維帶來多大貢獻。

為了拓寬編程思路,Pattis 建議想要掌握多種編程語言的程序員從不同的語言範式中學習,具體來說可以是面向對象的語言(例如 C++ 和 Java)、函數式語言(例如 ML 和 Haskell)、腳本語言(例如 Lisp 和 Python))、基於邏輯的語言(例如 Prolog)或底層語言(例如 C、Java 虛擬機或某種機器語言)。

關鍵不一定是要精通每種語言,而是要掌握方法論,以新的方法解決問題。優秀的程序員不僅會編寫代碼,而且還會不斷學習和摸索,進而幫助他們用新的方式解決問題,並找到最有效的解決方案。

多語種程序員的優勢

不過在我看來,成為一名多語種程序員,或者至少向這個方向去努力,肯定會收穫良多。

讓你在職場更加搶手 精通多種編程語言,不僅能讓你的履歷表增光添彩,而且還能向僱主表明你很靈活、適應能力強,並且能夠使用最合適的工具來完成工作。

它為你提供了許多工作機會,至少也會讓你從容面對行業衰退。因為你有能力探索多種編程範例,所以你會感到快樂,充滿活力,這也會反映在你的編程風格中。你可以用更好的方法來編寫代碼,以充分利用業內的所有最佳方案。多語種程序員可以嘗試不同的語法、瞭解不同的社區,而這種持續不斷的探索是程序員們能經歷的最美妙體驗之一。

另一個激動人心的時刻就是,當客戶找到你,需要你的專業知識來解決他們的問題時,你的武器庫中會有更多工具可選,你可以為他們帶來最大的價值。

成為最會解決問題的人 如果我用一句話來定義程序員的工作,那就是“解決問題”。優秀的程序員不一定要編寫出色的代碼。他需要使用手上的最佳工具來解決業務問題。

這裡你可能會爭辯說:”嘿,我是 Java 語言的高手,我知道如何使用 Java 來解決所有問題。" 如果你是這樣想的,那麼你已經患上了“錘子和釘子”綜合症。這種綜合症的表現是,如果你有一把錘子,那麼每個問題對你來說都像是一顆釘子。在這個例子中,你只有一把錘子(也就是 Java),你的思維到頭來會變成,不管是什麼問題都要找出用 Java 解決它的最佳方法。這種說法其實已經很客氣了。不客氣地講,如果 Java 無法解決你的問題,你可能會陷入不知所措的困境。

儘管這種糟糕的局面不見得會天天遇到,但現實生活中你的確會遇到這種情況,那就是你要處理的問題與你以前要對付的那些是不一樣的。你可能會想出一個效率低下的解決方案,因為這種語言是你唯一瞭解的語言。

所以學習新的語言可以擴展你解決問題的能力。你的思維將擺脫特定語言的限制,你開始能夠從不同的角度看問題。這種觀念上的差異將顯著提高你使用當前語言的能力,並且你可能會發現自己對如何更有效地解決問題有了新的想法。

學習能力增強 當你開始學習一種新的編程語言時會發生什麼?

你會瀏覽書籍;你會琢磨一段段示例代碼;你會嘗試很多實例;你會在社區發現很多志同道合者。

簡而言之,你會立刻進入學習模式。這就像在健身房鍛鍊一樣,最初你的肌肉在痛苦中尖叫,但是過了一段時間後,它們會根據你的日程安排自我調整,因此你不會再像一開始那樣痛苦萬分了。肌肉開始生長,進而增強了你的耐力和力量。

學習對你的大腦也有同樣的作用。一旦你的大腦適應了像新的編程語言這樣新穎概念的學習曲線,最後它會變得更加敏捷,適應能力更強。這意味著你的大腦將幫助你提高日常工作中的生產力,並更輕鬆地適應你日常使用的各種技術之間的細微差別。例如,一位通曉像 ABAP 這類業務語言的 Java 開發人員,可以很輕鬆地將共享庫的概念與業務術語建立聯繫併發揮用途。

最後的結果就是你的學習能力增強了。隨著時間的流逝,你學習新事物將變得越來越容易、越來越快。

多語言能力也可能成為致命弱點

雖然學習多種編程語言有很多好處,但是這種不斷的學習也面臨著一系列挑戰。

Douglas Crockford 在他的《JavaScript:好的部分》一書中談到了 JavaScript 的優缺點。同樣,每種語言都有其自身要面對的挑戰。如果你經常切換編程語言而又沒有花足夠的時間來深入研究它們,那麼你最後可能會成為“萬事通,萬事松”。如果你不具備新語言所需的能力,那麼你瞭解多種語言的能力可能反過來會成為你的致命弱點。

不斷學習和適應新的語言和技術也可能讓開發人員疲於奔命。你很難與所有技術保持同步,還可能會發現自己四處奔波,結果一無所獲。關鍵是要專注於自己可以順利消化的東西,並在達到自己的極限後及時收手。為工作選出最佳工具並獲得最佳表現後,請停下來並專心鞏固已有的收益。凡事不要做過頭。

請記住,一定要權衡付出和收穫是否成正比。我們從多語種編程中獲得的收益應該始終超過為其付出的代價。

正如 Alan Perlis 給出的評論:

如果一種語言沒有影響到你對編程的思考方式,你就用不著學它了。

作者介紹:Ravi Rajan 是位於印度孟買一家公司的全球 IT 計劃經理。他還是一位狂熱的博客作者、俳句詩作家、考古愛好者和歷史狂人。


分享到:


相關文章: