語言選擇
尺有所短,寸有所長 ——《楚辭》
問號覺得自己的問題並未解決,追問:“這麼多種語言,僅憑流行度就能分出主次優劣嗎?”
“流行度當然不是唯一的指標。”冒號答道,“語言的主次優劣因人而異,答案在你們自己身上。還是剛才那句話,唯一的老師是你自己。”
期待的目光如風中之燭般開始黯淡。
冒號接著說:“評書裡名師授藝時,常常要徒弟自己挑選稱手的兵器。威武的刀,靈活的槍,飄逸的劍,渾厚的棍,粗犷的斧,霸道的錘,詭異的鞭,無不谙合武者的個性。評判語言優劣,如同爭論兵器高下,倘若撇開使用的主體和對象,皆為空泛之談。”
句號若有所悟:“所以好的語言就是適合編程者和解決對象的語言。”
“非常正確!”冒號贊許道:“這就是問號同學要的答案。”
引號並不滿足:“可我記得評書裡經常描述高手的一句話-:十八般兵器樣樣精通。”
冒號一笑:“兵器雖多,其理相通,高手精通多種兵器何足為奇?但如果讓趙雲使錘,李元霸使槍,武力恐怕還是要大打折扣吧?”
逗號依然困惑:“我們如何判斷一種語言是否適合自己,是否適合解決對象呢?”
冒號看出大家共同的疑惑,不緊不慢地說:“要想從中選擇,自然先得了解,不然怎知兵器稱不稱手,合不合用?現在進入正題,我們先對計算機語言作個簡要的回顧。”
大伙均想,總算要撓著癢處了。
“計算機語言是人用來指揮計算機的語言,按其發展歷程通常分為五代。”冒號說完在黑板上寫下——
第一代語言(1GL):機器語言
第二代語言(2GL):匯編語言——IA-32 Assembly,SPARC Assembly等
第三代語言(3GL):高級語言——Fortran,Pascal,C,Java,VB等
第四代語言(4GL):面向問題語言-——SQL,SAS,SPSS等
第五代語言(5GL):人工智能語言——Prolog,Mercury,OPS5等
冒號補充道:“也可簡單地將前兩代統稱為低級語言,其他的統稱為高級語言。語言從低級到高級,離機器語言更遠,離人類語言更近,因而更易讀寫、調試和維護,安全性、通用性和可移植性更強,開發效率更高,更加抽象和宏觀;但同時運行速度和效率下降,用法和功能上局限性更大。如果拿兵器作比,高級語言好比長兵器,威力強大卻難免滯重,長於大型應用,可謂‘一寸長,一寸強’;低級語言好比短兵器,輕便靈活卻難免風險,長於底層應用,可謂‘一寸短,一寸險’。”
大伙心裡話,敢情來這兒不是學編程,是學武術的。
歎號說道:“我看還是高級語言好,現在誰還學低級語言啊?”
冒號糾正道:“低級語言並不低級,只是隨著高級語言的出現,計算機硬件性能的提高,漸漸有些邊緣化了。雖然幾乎沒有人用機器語言編程了,匯編語言仍有其用武之地。常見的有:包括嵌入式系統在內的系統開發,如操作系統、編譯器、驅動程序、無線通訊、DSP、PDA、GPS等;其他對資源、性能、速度和效率極為敏感的軟件開發;以信息安全、軟件維護與破解等為目的的逆向工程等等。即使你不打算從事系統開發,也不想作紅客、黑客或駭客,掌握匯編語言對你深入了解計算機內部運行機制、調試軟件和改進程序中某些關鍵代碼的算法也是有幫助的。”
引號提出:“好像有些書上把C語言稱為中級語言。”
冒號答道:“這是因為C兼具高級語言和低級語言的特征。一方面它提供了高層抽象和可移植性,使程序員更多地專注問題邏輯而不是機器邏輯;另一方面它也提供諸如指針、位字段(bitfield)等工具進行底層操作,甚至可直接內嵌匯編代碼。C語言既簡潔靈活又高效強大,是迄今為止最具影響力的語言。幾乎所有的操作系統和大多數高級語言都用它來實現,C家族的語言C、C++、Java、C#、D、Objective C等占據主流語言的半壁江山。如果再拿兵器作比,C語言就是一把劍,輕靈飄逸、銳利快捷。一名武將無論擅用什麼兵器,往往都會腰懸寶劍。不會C的程序員正如不會使劍的武將,無論如何都是一種缺憾。相比之下,匯編語言就像小刀匕首,而機器語言則近乎赤手空拳了。”
句號靈光一閃:“我明白了——西門吹雪的西來一劍,那是C語言;李尋歡的小李飛刀,那是匯編語言;陸小鳳的靈犀一指,那是機器語言。”
大家會心地笑了。
引號冷不防冒出一句:“我會跆拳道哦!”
句號一樂:“哈哈,等你打贏了陸小鳳,就封你為機器語言。”
冒號也笑言:“這位是古龍的粉絲吧?武俠小說裡的俠客多輕功高絕且喜單打獨斗,故使用輕、短兵器居多;而歷史小說裡的戰將多騎馬進行大規模作戰,故除了佩劍外,使用重、長兵器居多。這就是前面提到的,中低級語言更適合中小型或底層應用,高級語言更適合大型應用。”
眾人活躍起來,開始議論紛紛。冒號放耳聽去,淨是些古龍金庸、三國水浒裡的人物,暗想:通俗小說到底比編程吸引人啊。