來源:《程序員》雜誌第11期
連接:http://www.programmer.com.cn/14092/程序員
有人把開發語言比喻成武俠中的門派:少林、武當、峨眉、崆峒等,每一個門派武功的招式、修煉方法和宗旨都不相同,所以新人投奔某個門派後再改投新門派的門檻很高,而各個門派之間也是三六九等。也有人把開發語言比喻成各類工具:錘子、鉗子、螺絲刀、小刀、大棒等,各個工具沒有強弱之分。瀏覽器
對於通常程序員來講,切換語言的門檻是存在的,由於開發語言不只包括語法,還包括開發語言和框架等整套技術堆棧。從公司角度來看,肯定公司內部的主流開發語言也有利於人才培養和招聘,可以促進企業的健康發展。安全
本文將分享一下 UC 在選擇開發語言方面的一些經驗和思考。服務器
UC的業務定位網絡
選擇開發語言時首先要考慮的就是它要和整個公司的業務定位相契合。
UC 是作瀏覽器起家的,瀏覽器就是全部研發的核心。
同時咱們也會圍繞瀏覽器拓展一些附屬業務,如資訊頻道、軟件下載頻道、遊戲下載頻道等。架構
2004 年咱們剛開始創業時,使用了服務器客戶端混合運算架構去解決使用手機瀏覽器瀏覽 Web 網頁的問題。
這種架構將大部分複雜的運算工做放在服務器上完成。
用戶在使用 UC 瀏覽器瀏覽 Web 網頁時,「服務器」會先將頁面內容進行預處理。
例如,當頁面出現 JavaScript、CSS 等手機端沒法很好處理的元素時,服務器會採用高容錯策略進行自動過濾。
當頁面須要顯示圖片時,服務器會根據終端返回的屏幕參數對圖片進行匹配壓縮。
考慮到上網瀏覽頁面的特性,全部服務器處理工做基本都是實時進行的。併發
而隨着終端性能的提高、網絡環境變好,咱們發現,客戶端支持的事情變得更多了。
因而咱們從 2008 年起組織了一個單獨的團隊,開始打造新一代的手機瀏覽器內核。
U3 內核將原先主要放在「雲」的頁面解析功能,向本地客戶端作了相應的遷移。
如今,U3 內核已經能夠很好地符合 HTML5 的相關標準。
而瀏覽器內核對跨平臺、性能要求都是很高的。框架
UC 的客戶端開發語言函數
2004 年剛開始作 UC 瀏覽器時,用戶手機基本都只能支持 Java,因而 UC 的客戶端開發語言就選擇了 Java。
2007 年先後,咱們看到基於 Symbian 60 的智能機開始興起,操做系統也開始支持性能更好的 C/C++,所以,咱們開始跟進使用 C/C++ 進行 Symbian 客戶端的改造和開發。
咱們應該是最先一批進行原生開發的手機軟件研發團隊,UC 在 Symbian 上佔有很高的市場份額也正是得益於此。
2010 年以後,iOS 和 Android 等智能平臺開始出現,UC 也快速跟進,開發了原生產品。工具
目前,UC 已經覆蓋了國內全部主流手機平臺,下面是開發語言的的列表。
值得一提的是,咱們的 U3 內核主要採用 C/C++ 進行開發,這樣作的好處是,能夠作到很好的跨平臺。
目前U3內核已經在 Android 和 iPad 上上線。
咱們計劃用一年時間使之支持 iPhone、Android 平板還有 Windows Phone。
此外,因爲 MTK 的平臺也是可使用 C/C++ 開發的,因此,將來咱們也但願 U3 內核能夠登錄諸如 MTK 這樣的平臺,服務更廣大的用戶羣。
UC 的服務器端開發語言
服務器端開發一直是 UC 業務的核心之一。
在初創階段,UC 的服務器端只是 UC 瀏覽器的雲端,僅僅是爲了實現網頁壓縮和加速,提升渲染的效果。
服務器端開發團隊的開發語言採用的是 C/C++(核心模塊)和 Python(業務邏輯),比較統一。
2007 年左右,咱們開始圍繞瀏覽器發展了不少周邊業務,算上後臺的統計分析等項目,能夠說是五花八門。
當時,各個項目分屬不一樣團隊,通常來說,團隊 Leader 熟悉什麼語言,團隊就使用什麼開發語言,涉及 PHP、C/C++、C#、Boo、Python、Java 等。
同種開發語言中使用的框架、庫也都各自爲政,由各團隊本身克服困難和積累技術。
在 2011 年末到 2012 年第一季度,咱們在公司範圍內進行了一次集中討論,最終肯定以 PHP、C/C++、Java 做爲 UC 服務器端的主流語言。
在如下場景建議使用 PHP:
「頁面展現」:帶有 Web 頁面的產品和項目,用PHP方便結合前臺其餘開發技術,如 HTML/XHTML、CSS、JavaScript、JSON 等,不需編譯,可快速調整頁面;
「模塊粘合」:將一個大項目分解出多個邏輯相對固定且獨立的模塊,採用 C/C++、PHP 等作成獨立模塊提供服務,用 PHP 調用這類服務後,結合其餘靈活多變的業務邏輯組裝起來。
在如下場景建議使用 C/C++:
「高性能、大併發、高實時」:性能高是 C/C++ 的優勢,相對於 PHP 或 Java,用戶量大、併發訪問的程序使用 C/C++ 能節省大量機器;
「耗 CPU、管理大量內存、高磁盤 I/O 或者網絡 I/O」:對物理資源的管理以及靈活方便的操做是 C/C++ 的天生優點,但缺點要求開發人員有着豐富的開發經驗。
在如下場景建議使用 Java:
「兼顧業務靈活性、規範性、性能和安全」:Java 類被組織成等級層次,純粹面向對象、規範、類庫多、業務抽象較好、跨平臺、業務邏輯變動方便,並且性能相對較高;
不少銀行系統、銀行網站、製造企業的系統都是基於 Java 平臺,所以,互聯網企業跟其餘企業有交互接口的項目經常使用 Java。
要求掌握 2 種開發語言
UC 如今要求每一個開發人員應該熟練使用至少 2 種開發語言。
一種是目前工做時主要使用的「母語」,另外一種是根據興趣或工做須要選擇的「外語」。
在學習「外語」時,通常是要求快速掌握其語法,而後瞭解相關函數列表和庫,知道用的時候在哪兒查,瞭解項目文件如何組裝以及開發框架、開發規範。
從公司的角度看,由於互聯網企業節奏快,咱們常常從各個團隊抽調人員快速組建新的團隊,因此開發人員熟悉2種語言可讓公司的運轉更爲流暢,咱們在人員調動時也會徵詢各自的意願和了解其對語言的掌握狀況。
從團隊內看,須要有一部分人能夠工做在幾個領域,例如使用 PHP 的人中有一部分還須要會用 C/C++ 寫 PHP 擴展;或者在用 Java 爲主的團隊裏,須要有一部分人能用 C/C++ 開發底層服務。
另外,部分項目還需一些輔助的後臺腳本,咱們要求開發者會用 Linux Shell 寫簡單腳本,部分開發還會用 Python 寫複雜的腳本。
從人才培養的角度看,選擇這些開發語言,主要是考慮到移動互聯網和互聯網行業的現狀。
這有利於開發人員複用之前的技術積累,也有利於開發人員長期的職業發展。
經過內部討論,讓你們意識到幾種開發語言的優缺點,能在更高的視角選擇合適的開發語言。
最後,適合的開發語言有利於團隊的技術儲備、提高工做效率和跨團隊的人員調動。