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