敢為你最寵愛的編程語言賭100000000美元嗎?
我的命題是這樣的:我需要開發一個應用程序,如果你能按時交付,那么我會支付給你一億美元。并且此程序不涉及一些不可能解決的問題,當然各種困難和亂七八糟的問題那是一定的。
至于你想用什么編程語言來寫,毫無限制,這一點我完全沒有要求。關鍵是你得完成這個程序,并且使之能順利工作。
任何一個大項目在開發過程中,需求說明總是會有所變化。我可以保證不會胡亂提一些會混淆你工作方向的要求。例如,你能添加一個擁有 Photoshop所有功能的圖像編輯器,甚至是增強版的嗎?你能實現韓語和波蘭語之間的自動轉換嗎?如果網絡尚在加載中,界面上能不能出來一頭可以操縱 著到處轉悠的3D立體模糊狀的羊駝?這些要求我統統不會提。但是我可以預見以下這些情況的發生:
- 需要處理的數據比你預期的大5倍。
- 因為還需要在一些基于ARM的自定義硬件上運行,所以必須得是可移植的。
- 由于英特爾發布了20核心芯片,所以代碼需要擴展到相應級別的處理能力水平。
以及還可以……接電話。
但是遺憾的是,我發現谷歌不想買我的博客了,所以我只能銷掉這個一億美元的報價。唉……真心無奈。
但是,假設這個報價是真的呢?你敢就此任務為你喜歡的編程語言賭上一億美元嗎?這將如何影響你對編程語言的判斷標準呢?下面是我的觀點:
類庫的重要性遠遠超過核心編程語言的功能特征。
盡管Cayenne有許多相關的類型(很酷),但是它有創建Flash文件的功能和本地化外觀的交互界面嗎?D語言有富文本的轉化類庫嗎?如何通過fpt從Mercury中獲取文件?你真的想自己純手工編寫一個SVG解碼器嗎?
成熟和可靠的工具,甚至比類庫更重要。
有沒有人曾用Dolphin Smalltalk,或Chicken Scheme,或Wallaby Haskell等等試圖解決過某個類似的問題?有沒有人曾用某種編程語言試著解決此規模下的所有問題?你是否知道編譯器碰到大型程序其速度不會成倍降低? 分析器又能否處理這些大型程序?你知道怎么追查一個小小的變化是如何影響函數編寫,從而導致內存出現離奇峰值的嗎?有沒有核心開發人員使用Windows 版本工具,或者這工具被認為是二流平臺?某個大型項目中的本地編譯能否會嚴重影響大部分代碼而導致全局性速度減慢(例如,90年代中期將Erlang轉換 為C語言就會發生這種情況)?
你的決定比你自己想象的更為依賴語言實施者。
一些基礎類教科書上面的問題和實例教程,我們運行的時候總是特別美好。但是漸漸地,你會發現自己非常依賴于編譯器,或者在系統運行時,會產生一些奇怪的情況,雖然這對于該編程語言創建的問題域毫無關系,但是會大大影響你下一個行為目標。
假設你有一個程序,可以操作一個大型的浮點值集合——浮點數量高達數以百計的兆字節。然而有一天,你的對象羊駝程序OCaml內存溢出,死掉了。當 然你是很聰明的,知道大多數時間應該封裝好程序中的浮點數量,等到需要的時候再取出來用。但是浮點數組卻大多是不封裝的,所以你用在了大型數據結構中。但 是這樣做內存依然不足。問題就在于“float”在羊駝程序中意味著“double”。C語言允許我們快速地從64位double類型切換為32位 float類型,立馬能節省成百上千兆空間。但是不幸的是,羊駝程序OCaml的實施者從未考慮過這件事,所以你不得不自己去使用編譯器來做這個切換。 ps,在這里我不是說在指責OCaml,此浮點類型問題在很多編程語言中都有。
與此類似,但同樣難以解決的事情還有很多,例如,如果你發現在某一個數據集合中,垃圾收集器跨越了從“只有關注的時候才可見”到“幾秒鐘就能產生 bug報告”的界限。話說,垃圾收集器已經經過了我們的精心優化,并且衍生多代,但是到現在最老的一代依然需要等待清理,等待它檢查過上G字節的復雜結構 并且做好備份之后,而與此同時,你就只能眼巴巴地等著。你能解決這個問題嗎?當然紙上談兵的那種就不要丟人現眼了。
這種有形的物質獎勵法,然而,實實在在地影響了我的行為方式。因為有這么個一億美元的胡蘿卜掛在我的面前,我非常愿意獨自去研究各種涉及實際的問 題。純粹的學術研究項目,其實是非常可笑的。我會用C語言寫好應用程序的關鍵部分,這樣一來,最后結果就又能回到我的掌控中,也就不至于之后突然發現語言 系統設計者有關于標注、排列和垃圾收集器的選擇有悖于我的最終目標。 Python和Erlang在大型的商業項目中廣受歡迎,雖然它們也有各自不同的長 處和短處,但是如果我需要支持一些非UNIX的嵌入式硬件,那么恐怕這兩者都不足以勝任。
看到這里你有何感想呢?話說如果,假設,真的有這么多錢——一億美元——讓你改變完成任務的方法,轉而用一種可靠又快速的標準方式,何樂而不為呢?
譯文鏈接:http://原網站已經失效/article/pet-language-100000000-usd.html
英文原文:Would You Bet $100,000,000 on Your Pet Programming Language?
翻譯作者:碼農網 – 小峰