原創(chuàng): 劉欣 碼農翻身 2016-09-26
本文應讀者邀請所寫,講一下各種編程語言的適用范圍。 古老的C 王國從1972誕生以后, 一直都非常強大, 這里的臣民對它又愛又恨, 因為它的法律允許它的臣民直接操作內存,執(zhí)行效率極高, 但是又對內存分配回收不管不顧,全部扔給子民們去處理。其實純粹的C語言還是比較簡單的, 只要你能真正的搞懂指針是怎么回事 , C++誕生以后,在C的基礎上又加入了面向對象, 泛型編程等“時髦”概念, 讓帝國的法律制度變的復雜無比, 外邊的人都戲稱”只有成為律師才能在 C++ 王國生存”。但是這個世界所有人都離不開它, C/C++ 王國所生產的操作系統(tǒng)(Windows,Linux,Unix ),網(wǎng)絡協(xié)議棧(TCP/IP) , 編譯器, 數(shù)據(jù)庫(Oracle, MySQL, SQL Server , Db2),構建了計算機世界賴以生存的最底層基礎。由于貼近機器運行, C/C++在嵌入式開發(fā)以及驅動開發(fā)領域根本就沒有對手。 由于運行效率高, 它很適合去生產那些要求高性能的, 最好是沒有圖形界面的, 在服務器端運行的系統(tǒng)級軟件, 比如說Web服務器(apache, nginx, IIS ), 緩存(redis, memcached) , 版本控制(git,svn), 郵件服務器 等等。當然C/C++在圖形界面方面也非常強悍, 推出了像QT這樣的GUI框架, OpenGL, DirectX 這樣的圖形API, 以及Windows上的GUI, Linux上的KDE, Gnome等。 在這些圖形框架和類庫的推動下, C/C++王國幾乎霸占了關鍵的桌面應用, 例如辦公(Office), 上網(wǎng)(IE, Firefox, Chrome...) , 圖像處理(Photoshop), 聊天(QQ), 視頻(暴風影音,迅雷)...... 還有哪些數(shù)不清的游戲以及背后的游戲引擎。 C王國的疆域之廣闊, 可以說是前無古人, 如果計算機世界一直停留在桌面應用時代, 估計就沒有別人什么事了, 除非出現(xiàn)一個新的語言, 具備C/C++的性能, 又簡單易學。 互聯(lián)網(wǎng)時代給后來者帶來了機會,整個世界開始往互聯(lián)網(wǎng)上轉移, 剛開始的時候是靜態(tài)網(wǎng)頁,沒有什么交互, C/C++王國生產的Web服務器像Apache 還能夠輕松應對,可隨后就進入了動態(tài)頁面時代, C/C++尷尬的發(fā)現(xiàn), 自己并不適合“快速的”去生產這些需要和瀏覽器打交道的, 后端有復雜多變業(yè)務的系統(tǒng), 例如電子商務網(wǎng)站,社交網(wǎng)站 , 他們發(fā)現(xiàn)自己在處理Web請求和響應的時候顯得異常笨拙。 這個巨大的市場空白被Java 率先抓住, 成功建立了Java 帝國。 (參見Java : 一個帝國的崛起)Java 用jsp, servlet, EJB, Spring, Hibernate, Struts, myBatis , Ant, Maven,Velocity , Freemaker, Ehcache 等數(shù)不清的工具和框架成功的占據(jù)了Web編程領域, 不僅如此, 他還成功的侵蝕了C/C++帝國的地盤。 原來那些高性能的服務器端軟件都是由C/C++ 帝國生產的, 隨著Java 虛擬機不斷的優(yōu)化提升, 特別是網(wǎng)絡應用是很多處理時間花在IO上, 對速度和性能要求不是非常高, Java也適合來做服務器端軟件了, 例如應用服務器(Tomcat, JBoss, Websphere, Weblogic) , 網(wǎng)絡應用框架Netty, 服務框架Dubbo, 搜索Elastic Search, 消息隊列ActiveMQ等等。機器性能的提高, 甚至讓Java涉足桌面領域, 雖然沒有C++那么成功, 至少捕獲了碼農的心, 很多開發(fā)工具都是Java 寫的: IntelliJ IDEA, Eclipse , HBuilder 等等。
微軟帝國的.NET和C#也不得不提,雖然不如Java生態(tài)圈這么成熟和強大, 但是在Windows領域絕對是站主導地位, C#可以開發(fā)Web系統(tǒng)和桌面系統(tǒng), Visual Studio 是個非常強大的開發(fā)工具,很多開發(fā)靠拖拖拉拉就能搞定。 只是這個圈子有些封閉,無法吸引更多的人尤其是大牛的加入, 比較可惜。 但是我們得知道, Java和.Net 他們的底層Java 虛擬機和.NET虛擬機, 也是由C/C++帝國生產的, 雖然老帝國的疆域大大縮小, 但在系統(tǒng)級軟件的地位依然無可撼動!互聯(lián)網(wǎng)時代的應用基本是B/S結構, 即瀏覽器/服務器, 服務器端Java當仁不讓, 但是在瀏覽器端, Java虛擬機就沒有任何優(yōu)勢了, 這里是Javascript的天下, 從前的VBScript, JScript早就被碼農拋棄。 Javascript 一家獨大, 這里充斥著令人眼花繚亂的框架和庫 Dojo, JQuery, Prototype, ExtJS, AngularJS , React , Backbone ...... , 碼農們在這里能深深的體會到選擇太多的幸福煩惱。 單單是Javascript還不夠, 還需要HTML 和 CSS才能構建起完整得瀏覽器端頁面,于是Javascript+HTML +CSS , 這三兄弟聯(lián)手把瀏覽器端給統(tǒng)治了, 現(xiàn)在的統(tǒng)治異常穩(wěn)固, 短期內還看不到可以任何被推翻的跡象。 在原來Javascript/HTML/CSS 還得寄人籬下, 主要是通過JSP, Veclocity ,Freemaker等視圖技術生成Web界面, 現(xiàn)在前后端分離, javascript 通過AJAX的方式只調用服務器端的接口,界面的生成完全放在瀏覽器端, 他們徹底獨立了。 Javascript 不僅僅貪戀瀏覽器這一畝三分地, 它的攻勢咄咄逼人, 還在不斷的攻城掠地, 在Chrome的javascript 引擎V8的協(xié)助下, Javascript 用Node.js 成功進駐了服務器端編程, 在React Native 的支持下, 竟然殺入了在手機端開發(fā)領域 ! 這個最初看起來不怎么樣的語言風頭一時無兩, 一個帝國開始隱隱成型。 Web編程領域實在是太大, 強如Java, .NET 也無法通吃,特別有很多碼農批評Java 笨拙,臃腫,發(fā)展慢, 不靈活, 這就導致了很多小王國的蓬勃發(fā)展, 最具代表性的是PHP, Python和Ruby。 這三位都是腳本語言,由解釋器解釋執(zhí)行(解釋器自然也是C/C++帝國生產) , 他們對Java Web編程領域的進攻極為猛烈。 PHP專門做Web編程, 它快速靈活,和Linux,Mysql 堪稱絕配, 很多論壇(Discuz), 內容管理系統(tǒng)(WordPress), 網(wǎng)店(Magento),還有很多大型網(wǎng)站(例如Facekbook, Yahoo,Wikipedia,新浪微博等) 都是用PHP搞定, PHP是很多碼農的最愛。Ruby 漂亮的語法和強大的元編程能力對碼農們有著巨大的吸引力, Ruby on rails 這個Web編程框架是很多人的摯愛, 像Twitter(現(xiàn)已轉向Scala), Hulu (在線視頻租賃), AirBnb(房屋分享租賃), GitHub等都是構建于Ruby on rails之上。 Python 做Web編程也是一大利器, 但絕不僅僅是Web編程, 它簡直就是個萬能工具,啥都能做,爬蟲,桌面程序,科學計算,數(shù)據(jù)挖掘 樣樣都行。 Python 和Ruby 都簡單易學, 并且表達能力強, 隨手寫幾行代碼就能完成很多功能,所以非常適合做運維, 有很多自動化運維工具, 像Ruby 的Chef , Puppet , Python 的Saltstack。 移動互聯(lián)網(wǎng)/大數(shù)據(jù)/云計算時代Java帝國在Web編程領域受到了PHP, Python, Ruby 持續(xù)攻擊, 被搞的灰頭土臉, 但是帝國的基因和運氣實在是好, 竟然又搭上了手機開發(fā)和大數(shù)據(jù)快班車, 成功開辟了新戰(zhàn)場。
在手機領域, Android 選擇了Java 作為開發(fā)語言, 用來對抗蘋果iOS的Objective-C和Swift , 占據(jù)了手機開發(fā)的大部分江山。 大數(shù)據(jù)領域, Java和Java 虛擬機更是笑傲群雄, Hadoop 是Java 開發(fā)的, Spark 是Scala開發(fā)的, Storm則由Java和Clojure共同組成。Scala和Clojure都運行在JVM之上, 可是說是函數(shù)式編程的語言在JVM上的新生, 估計漸漸老去的LISP會很欣慰的。 在云計算領域,Ruby 和Python 令人吃驚的滲透了進來, 成功的擴大了自己的領地, IAAS 平臺 Openstack是 Python寫的, PAAS平臺Cloudfoundry 是Ruby寫的, 這再次證明了Python/Ruby 適合對性能要求不高的管理,監(jiān)控等領域。
Google推出的Go語言也要進來分一杯羹, 它號稱是云計算時代的C語言, 能達到C的運行效率和Python 的開發(fā)效率。 只是還很年輕,用Go語言開發(fā)的系統(tǒng)知名的有Docker, 七牛云存儲, 容器集群管理系統(tǒng)Kubernetes等等, 至于能不能建立一個像C,Java 那樣的帝國, 就看它的造化了。