冒號(hào)和他的學(xué)生們
——程序員提高班紀(jì)事
- 教學(xué)計(jì)劃
褚小者不可以懷大,綆短者不可以汲深 ——《莊子·至樂(lè)》
一陣商討之后,眾人似乎未能達(dá)成共識(shí)。冒號(hào)見(jiàn)狀,便讓他們一一道來(lái)。
問(wèn)號(hào)再次充當(dāng)急先鋒:“能不能比較一些當(dāng)今主流語(yǔ)言各自的優(yōu)缺點(diǎn)?”
冒號(hào)笑言:“我怎么恍惚間又回到了第一堂課?你的潛臺(tái)詞還是那句話:到底學(xué)哪種語(yǔ)言好?”
問(wèn)號(hào)被窺破心事,微露窘色。
“不過(guò)我非常理解你們的想法。”冒號(hào)體諒道,“雖然這是編程中最易提出卻又最難回答的問(wèn)題,但考慮到大家對(duì)它如此興致盎然,我決定不顧引火燒身之危,鋌而走險(xiǎn)一回。”
眾人鼓掌。
冒號(hào)故作疑惑:“你們這是對(duì)答案表示期待呢,還是對(duì)我的勇氣表示贊賞?”
眾皆笑曰:“兼而有之,兼而有之!”
嘆號(hào)提出:“近來(lái)動(dòng)態(tài)語(yǔ)言非常流行,能說(shuō)說(shuō)它與靜態(tài)語(yǔ)言到底有何不同,是否會(huì)取而代之?”
“嗯,這個(gè)問(wèn)題總算簡(jiǎn)單了些。”冒號(hào)如釋重負(fù)。
逗號(hào)堅(jiān)持道:“我還是那個(gè)建議,希望學(xué)些具體的編程知識(shí)和技巧,比如將最流行的Java語(yǔ)言中的一些重點(diǎn)和難點(diǎn)分幾個(gè)專題來(lái)討論。”
冒號(hào)頷許:“這是個(gè)很好的建議,可以采納。”
引號(hào)有不同意見(jiàn):“Java沒(méi)有C++來(lái)勁:要說(shuō)難點(diǎn),C++多得多;要說(shuō)流行度,按照TIOBE的數(shù)據(jù),C與C++之和還超過(guò)Java五個(gè)百分點(diǎn)呢。”
逗號(hào)不服:“你沒(méi)看到C和C++正在逐漸沒(méi)落嗎?”
引號(hào)冷哼一聲:“開(kāi)玩笑,什么時(shí)候操作系統(tǒng)、數(shù)據(jù)庫(kù)、游戲軟件和嵌入式系統(tǒng)都改用Java了再說(shuō)這話。別忘了,Java的虛擬機(jī)都還是C或C++寫(xiě)成的呢。”
冒號(hào)忙止住干戈:“我還沒(méi)來(lái)得及成為眾矢之的呢,你們二位倒先掐上了。”
句號(hào)提議:“最好找一個(gè)項(xiàng)目實(shí)例,從頭至尾演練一次,既能貫穿各個(gè)知識(shí)點(diǎn),又能讓我們對(duì)軟件開(kāi)發(fā)有個(gè)整體認(rèn)識(shí)。”
“這個(gè)想法聽(tīng)起來(lái)非常不錯(cuò)。”冒號(hào)沉吟了一會(huì)又道,“只是一個(gè)真正企業(yè)級(jí)的項(xiàng)目,涉及面太廣。比如一個(gè)完整的web應(yīng)用,不論是采用重量級(jí)的J2EE或.NET技術(shù),還是采用輕量級(jí)的Perl、PHP、Ruby、Python等動(dòng)態(tài)語(yǔ)言技術(shù),除了要掌握各自的主體語(yǔ)言外,還涉及到相應(yīng)的框架、集成環(huán)境和各種工具,以及Javascript、CSS、HTML和XML等技術(shù),同時(shí)數(shù)據(jù)庫(kù)的知識(shí)也是不可或缺的。”
問(wèn)號(hào)奇道:“javascript、CSS和HTML這些不主要是網(wǎng)頁(yè)設(shè)計(jì)人員的語(yǔ)言嗎?”
冒號(hào)解釋:“網(wǎng)頁(yè)設(shè)計(jì)人員大多用Dreamweaver之類的工具來(lái)設(shè)計(jì)HTML頁(yè)面,開(kāi)發(fā)一般網(wǎng)站尚可勉力而為,若開(kāi)發(fā)企業(yè)級(jí)軟件則有些力不從心了。更何況web應(yīng)用的趨勢(shì)是具有更豐富用戶體驗(yàn)的Rich Internet
application (RIA),采用大量的AJAX、FLEX等技術(shù),需要熟悉Javascript或Actionscript之類的語(yǔ)言,這些就更非一般網(wǎng)頁(yè)設(shè)計(jì)人員所能勝任。”
引號(hào)插言:“據(jù)我所知,許多公司都是請(qǐng)網(wǎng)頁(yè)設(shè)計(jì)師來(lái)編寫(xiě)HTML和Javascript等代碼的。”
冒號(hào)指出:“網(wǎng)頁(yè)的迷人之處就在于,能夠用精美的畫(huà)皮來(lái)包裹冗長(zhǎng)低效的代碼。出于軟件開(kāi)發(fā)的時(shí)間和成本的考慮,公司的選擇無(wú)可非議,但如果要提高軟件競(jìng)爭(zhēng)力,這些代碼至少要經(jīng)過(guò)程序員的加工處理。”
逗號(hào)復(fù)言:“那數(shù)據(jù)庫(kù)總該是數(shù)據(jù)庫(kù)管理員的事吧?程序員至多用到hibernate之類的ORM框架。”
冒號(hào)斷然否定:“數(shù)據(jù)庫(kù)絕不只是DBA的事,ORM也不能取代數(shù)據(jù)庫(kù)的設(shè)計(jì)和SQL的使用。另外,復(fù)雜的應(yīng)用需要編寫(xiě)大量的存儲(chǔ)過(guò)程(stored
procedure),故還應(yīng)掌握PL/SQL或Transact-SQL等擴(kuò)展數(shù)據(jù)庫(kù)語(yǔ)言。換句話說(shuō),從web開(kāi)發(fā)最前端的網(wǎng)頁(yè)到最后端的數(shù)據(jù)庫(kù),都應(yīng)該有程序員的身影。”
句號(hào)聯(lián)想到:“借用前面餐館的例子,不妨把接待員看作客戶層(client tier),把服務(wù)員看作表現(xiàn)層(presentation tier),把廚師看作業(yè)務(wù)層(business tier),把收銀員看作數(shù)據(jù)層(data tier),把廚工看作常用的輔助類(helper class)。”
冒號(hào)微微點(diǎn)頭:“比較靠譜。要說(shuō)不當(dāng)之處,就是服務(wù)器端的表現(xiàn)層不會(huì)如服務(wù)員那樣直接與客戶打交道,此外業(yè)務(wù)層常與數(shù)據(jù)層打交道,但廚師好像不會(huì)與收銀員有什么瓜葛。”
嘆號(hào)夸張地捂住臉:“天哪,程序員竟然身兼五職,太慘了吧?”
“當(dāng)然程序員會(huì)各有分工,不過(guò)如果你總局限某一層的應(yīng)用開(kāi)發(fā),今后憑什么謀取更高的職位?”冒號(hào)苦口婆心,“無(wú)論干哪一行,要?jiǎng)偃斡淇欤x不開(kāi)四樣?xùn)|西:才能、興趣、方法和努力。沒(méi)有才能則難以勝任;沒(méi)有興趣則難以愉快;沒(méi)有方法則事倍功半;沒(méi)有努力則一事無(wú)成。我相信好的方法最終能激發(fā)人的才能、興趣和努力,這也是本班的一個(gè)理念。希望大家能通過(guò)各種問(wèn)題的討論,獲得一些方法上的啟示。”
問(wèn)號(hào)急切地詢問(wèn):“那么我們的下一步是什么?”
“綜合各位的意見(jiàn),我們從簡(jiǎn)到繁。”冒號(hào)公布計(jì)劃,“先簡(jiǎn)單談?wù)剟?dòng)態(tài)語(yǔ)言;再對(duì)主流語(yǔ)言作簡(jiǎn)評(píng);然后以Java為主、C++與C#為輔,對(duì)語(yǔ)言中的一些要點(diǎn)作專題討論;最后如果時(shí)間允許,找一個(gè)項(xiàng)目來(lái)實(shí)踐一番。”
“嘔耶!”眾人皆大歡喜。