|
英文原文:Lessons Learned while Introducing a New Programming Language
引言:這些年我(在工作中)使用過很多編程語言:(馬上能夠想到的有)Cold Fusion、HTML、Javascript、php、 SQL、 CSS,、ASP(經典 ASP 和 ASP.NET)、C#、Ruby、Flex、Java 以及 Clojure。每個語言都有自身的優缺點。作為一名程序員,你可以很容易地指出這些缺點——概括起來就是一句話:
我痛恨所有的編程語言 —— Matt Foemmel
我認為一開始就考慮到這個問題很重要。在某些時候,你會對現在提倡的東西開始厭惡,所以請想象一下別人對它的感受。
在 2008 年,我在 DRW 的一個代碼庫中引入 Clojure 語言。這篇博客討論了過去幾年中,我在引入新語言的過程中得到的經驗和教訓。
選擇語言
在組織里引入一門新的語言并非易事。如果你想要成功,你需要選擇一門編程語言,它不但能夠滿足廣泛的技術要求同時還要得到大家的認可。在加入 DRW 的時候,我 100% 用 Java 編程,盡管事實上我編寫的大部分代碼只需要在眨眼之間運行完成(250毫秒)。我們編寫代碼要求運行時間比眨眼還要短,Java 是絕對正確的選擇,但使用 Java 編寫其他代碼讓我感覺 Java 成為了一種負擔。
偶爾我會抱怨這種負擔,我的老板開始對 JRuby 發生了興趣。我認為選擇 JRuby 對我們已經是一個勝利,但就我個人而言更想聽到支持非 Java 語言的呼聲。如果考慮 JRuby,那么我認為任何高級的動態類型語言都可以勝任。
然而,在我對 JRuby 生成好奇心之前,我已經開始學習 Haskell 了。總的說來,在貿易公司使用的軟件要求運行“快速”。如果我要成功地引入一門新語言,它必須運行得“幾乎和 Java 一樣快”。Haskell 執行速度很快我已有所耳聞,它同時也滿足了我的另一個選擇條件:
一門編程語言,如果不能對你思考編程的方式產生影響,就不值得去學習。—— Alan Perlis
我認為,如果我發現一門編程語言“性能足夠好”,發布程序速度更快,并且能夠提高我們的編程水平,那么在它上面花時間就是值得的。
我玩過一點 Haskell,但是學習曲線似乎太陡峭。學習 Haskell 需要一些時間,但更重要的是:我們的產品已經運行在 JVM 上。如果我需要得到任何幫助,應該能夠輕易地融入現有的基礎設施。想想 Clojure,它的性能足夠好,比 Java 更簡潔,并且比我之前用過的其他語言更加有效。 Clojure 同時也是動態類型的高級語言(像 Ruby 一樣),所以我希望能夠得到老板的支持。
讓同事們盡可能地減少學習的痛苦是一個很大的要求——我認為這是接受新語言的關鍵。Clojure 看上去是最佳的選擇,因為我們現在已經在工作中已經使用下列工具:
整天使用 IntelliJ
使用 JUnit 運行所有測試
使用 TeamCity 創建 CI 和 artifact
在服務器上運行 JVM
使用 Yourkit 進行動態分析
Clojure 能夠滿足我的所有條件,其他同事接受起來也會更容易。
作為學習,我更推薦 Haskell 或者 OCaml,但他們并不適合在實際中選用——我懷疑是否能夠成功地將他們應用到開發中。當我需要在 Clojure 方面給與專業指導時,我會依賴其他人認可的“最佳”JVM 服務器設置。如果一旦選擇了 Haskell 或者 OCaml,我將需要在更多方面成為專家(例如部署、內存模型、函數庫、新開發工具等等)。
不論是當時還是現在,我都認為 Clojure 是在技術要求和公司環境下的最佳選擇。
Hello World
引入一門新的語言是一個微妙的行為。你需要兼顧很多的相關內容。我不確定同事們會對使用 Clojure 作何反應,所以我在家里預先寫好了代碼。雖然大家都需要集成測試,然而沒有人積極行動。于是我開始用 Java 編寫集成測試,然后寫出了 Clojure 的版本。我非常了解 Clojure 并能夠向其他人展示它的簡潔——這是團隊在集成測試中最看重的東西。除此之外,因為測試并不是實際產品運行的代碼,因而并不真正需要考慮實際執行速度。
集成測試是一個引入新語言的好地方,其實任何非產品代碼都是好的選擇。例如,你也可以選擇數據庫遷移腳本、日志文件解析器、第三方軟件模擬器或者軟件部署。只要你的選擇不會馬上帶來痛苦,你應該能夠很容易地從任何遷移到新語言的失敗中恢復過來。
當我完成了 Java 和 Clojure 版本的測試以后,我給開發組里的其他人展示了這兩個版本。我告訴他們為什么我推薦 Clojure 版本,并詢問他們能不能用 Clojure 做一次嘗試。我也做出承諾,讓他們很難拒絕做這樣的實驗。
( Credit: Windell Oskay)
你的使命
it知識庫:引入新編程語言的經驗教訓,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。