2014年四大熱門語言的最佳實踐
原創在過去的一兩年里編程領域迎來了翻天覆地的變化,如果說C,JAVA這些在過去幾年里風靡全球,搶占Tiobe榜單,那么在如今移動領域興起的年代 ,objetive-C也給Java造成很大的沖擊。在編程領域沒有“一招鮮,吃遍天”的說法。對于開發者們來說總是在不同的領域里尋找著合適的***語言。
那么反過來說,每種編程語言在不同的場景里,開發效率和執行效率都是有著天壤之別,比如說erlang適用于并行,PHP適用于WEB,R適用于統計,C#適用于界面等等,所以術業有專攻,一個優秀的程序員不在乎languages千千萬,更關注的是編程技術發展的指向的領域。
所以本文我們來分析一下目前在各個領域比較流行的四大編程語言,在不同領域和不同場景里面的***實踐。
LUA
結合Cocos2dx游戲開發
自從Cocos2d-x團隊大力支持Lua的綁定后,備受移動開發者的關注。在游戲開發中涉及到的用戶界面交互,場景管理以及角色邏輯等等完全可以使用Lua完成。實際應用上,與Corona SDK這樣100%使用Lua進行開發的游戲引擎相比,cocos2d-x+Lua不但有著明顯的性能優勢,更是在擴展能力上也不受到任何限制。
在腳本語言的領域里,js則更是個強大的對手,很多人也會去選擇Cocos2d-x+js。那么相比之下,Cocos2d-x+Lua到底有如何的優勢呢?編者摘自知乎上面 廖宇雷 游戲開發者的精彩回答:
1. 運行效率:Lua 的性能在各種測試里比JavaScript快不少。而移動設備上存在不支持JIT 的情況(未越獄的 iOS 設備),Lua對比JavaScript的性能優勢就更明顯。
2. 安全性:現在 cocos2d-x使用LuaJIT來執行Lua,所以可以把Lua代碼編譯為字節碼再打包到游戲里。由于LuaJIT的字節碼是高度優化過的,所以目前還沒有反編譯工具。而JS雖然也可以用字節碼,但從目前的情況看還達不到LuaJIT的安全性。
3. 與C/C++的交互:Lua 原本就是作為嵌入式語言來設計的,所以天然和C/C++很容易交互。JS這方面是個劣勢。
4. 與 Java/Objective-C 的交互:不管是 quick-cocos2d-x 里提供的 luaoc/luaj 模塊,還是 wax, luajava 這些開源項目,都讓我們可以繞過 C/C++ 層實現 Lua 和 Java/Objc 的交互。這個優勢在游戲發行階段,集成各種第三方SDK時絕對會節約巨量時間!
當然,cocos2d-x 目前明顯是在主推JS的解決方案,因為JS可以跨越移動設備、桌面的界限,實現一套程序跑任意平臺。不過個人認為以當前 HTML5 的發展情況,對于要強調體驗的游戲來說,HTML5 還要一些時間。
所以,從目前的市場情況來說,Lua 明顯是更理性的選擇:成熟、安全性高、眾多大作采用。
Python
Web后端、服務器開發
python被稱作為膠水語言,可以通過編譯的C語言程序來擴展,能夠完成現實中的各種任務,包括開發者們日復一日所做的事情。作為編制其他組件、實現獨立程序的工具,它通常應用于各種領域。實際上,作為一種通用語言,Python的應用角色幾乎是無限的:你可以在任何場合應用Python, 從網站和游戲開發到機器人和航天飛機控制。
而能夠讓大多的開發者喜歡的是Python代碼的可讀性。清晰明了而簡單的編碼可以減少編程時間。無論是面向對象、命令式和函數式的應用,以及自動內存管理都是Python的特色。
在IT領域更多開發者更喜歡用它來做為WEB開發,并被列入LAMP (Linux, Apache, MySQL 以及Python/Perl/PHP)中,***動態語言。相比PHP,在知乎上一位匿名用戶就認為Python可以非常自然的擴展到隊列(RabbitMQ)、后臺處理系統(基于 Celery)、數據挖掘(SciPy、NumPy)、文本處理(NLTK)、系統部署(Fabric)、監控(Supervisord)等所有方面,而PHP只能做網頁前臺。
所以,根據Python在Web的一些優勢,總結一下幾點:
1. Python的代碼風格簡潔易懂易于維護,包括語法優勢不用寫大括號,代碼注釋風格統一,強調做一個事情只有一種方法
2. 有著豐富的Web開源框架,主流的包括Web2py,Web.py,Zope2,Pyramid,Django等。
3. 跨平臺能力,支持Mac,Linux,Windows等。
4. Python可用庫和模塊比較多,非常方便。
5. Python應用領域比較廣泛,可用后端,服務器,Web應用程序等開發。
6. Python社區非常活躍,在社區里面能夠找到一切你所需要的答案,也得到很多大牛的極力推廣。
R語言
統計分析***,沒有之一
對于R語言來說一直在小眾領域成長著,早年主要用來做統計計算。隨著時代的進步,在如今大數據爆發的年代,R終于在這一波浪潮中,越來越多的工程加入到這個圈子里來,對R計算引擎,R的性能,R的各種程序包進行改進和升級,讓R獲得了新生。不但可以給Hadoop注入統計的血脈,連Oracle都擴大對R語言的分析支持。
在知乎上chenkai的用戶就針對R語言統計分析進行了很好的解釋:
R語言主要是用于統計分析、繪圖的語言。其實對于一直以商業為驅動,原則金融行業來說從來都不缺乏實用的工具,而且據我了解有專門公司在這方面產品,也是相當之成熟。所以我的看法是對于那些固定常見的業務并不缺乏實用成熟的工具,因為市場就是一抓一大把。
就我的理解而言R這門也可以用來探索 分析現有數據并高效的成圖,讓大數據圖形化,用于統計計算和統計制圖。 但前提是如果已經其他軟件做了這件事 為何還要自己手動Coding呢? 所以是對于常規業務是不需要 因為有軟件做了況且做的還很好,如果你是精算師 或是 某個特定市場前景根據數據分析預測,這個時候可能就需要R語言的幫助了,而使用好R必然有兩個前提。
A: R語言分析需要有數據來源?
B: 如何快速熟練使用好R?
所以綜上,
觀點很簡單對于常規業務真的沒有必要大材小用。常規的軟件已經足夠好用,如果你有足夠的時間學習Coding,也覺得通過自己編寫數據模型分析預測 自己假設。這確實是一件很Cool的事情,但使用前提是需要解決我上面提到兩個問題,如果你想做的很好還需要你相當的耐心學好R自身。
其實R語言實際意義是規避了像那些商業軟件內部代碼不公開一樣,運算和分析規則只有內部人知道,而普通用戶和分析師不知情。而R的目的則是在有數據的前提下可以自由的計算任何想計算的統計量或圖形,其實它也避免了固定的商業分析中存在一些問題,無法得到取截尾均值作為統計向量,能夠很好規避統計分析方法不清的問題。
Node.js
網站前后端開發
Node.js經過了幾年的發展已經日趨成熟。在如今很多大型的高流量網站基本都采用了Node.js開發,像cnodejs的社區,雪球網,PayPal等。在知乎上 楊捷就詳細的解讀了Node.js在Web開發的一些場景應用。
首先,node新開一個http連接的開銷,相當于一個大函數調用,相比php的新開線程動輒花費2MB內存和上下文切換的漫長時間,已經很小很小了。所以,node天生就是為高并發的應用而誕生,在設計之初就承載著巨大的使命。而這種極度追求代碼效率和美感的設計,是以提升學習理解的難度,和考驗編程能力為代價。如果你像我一樣,有代碼潔癖,追求***,那么node將是不二選擇。如果你僅僅是為了完成工作,或者快速搭建項目上線運營,那么還是用php或其它什么看似方便卻一點也不“美”的語言吧。
再者,由于js的異步特征,始終有用戶代碼在執行,省去了等待查詢數據庫和文件系統的時間,相比CPU的時鐘頻率,去讀一次數據庫太久太久,久到讓CPU等得花兒都謝了。node讓CPU不在等待,node讓媽媽不用擔心我的內存。但是這種高效運用CPU的異步回調,將會帶來邏輯上的混亂,一不小心就會一團亂麻理都理不清,下文有敘。
以上兩點,導致node適合在具有大量細小的http請求環境下工作,典型的就是一個web即時聊天程序,或者一個支撐上萬人同時在線的游戲服務器。你甚至不用考慮http請求數太多的問題。
如果用node開發網站,你可以把數據請求分的很細,也就是說不必像php那樣把所有數據一次性加載到客戶端,而是加載一部分,讓瀏覽器渲染頁面的同時,再去加載另一部分。Facebook的頁面優化技術,就是這種分塊加載的模式。可以讓頁面的加載速度在用戶體驗上提升5到10倍。
node無論從代碼執行速度,還是開銷,都是最***的選擇。但是缺點在于js異步特征的難以理解和控制,如果沒有相當過硬的js開發經驗和特征理解,項目稍微大一點,代碼結構就會一片混亂。node是在考驗一個人的代碼設計和掌控能力,如同九陰真經,練的好就一身絕學獨霸武林,練的不好就走火入魔精神崩潰。動不動就長達8層的回調嵌套,可不是鬧著玩的。除了采用step同步方案解決控制流倒置和深層回調嵌套問題,把數據請求分得很細,再分多次加載,不僅在代碼流程上更美觀,也更符合node的特性。
有人說,異步代碼是反人類的。其實同步執行才是反人類。想象一下,你需要打印一疊材料:打印機開始工作后,你站在那里等著,5分鐘后打印完畢,你取走材料回到辦公室。這似乎沒什么。但是如果有100份需要打印?10000份呢?你也站在那里干等著?還是趁這個時間喝杯咖啡,或者多寫幾個if else 吧。