小時候,總覺得讀書辛苦。我還記得讀國中時,一度壓力大到提筆寫信給張老師,而且還「把郵票貼成蝴蝶的樣子」(張清芳和張曼娟顯然是copy我的作法)。沒想到這封信被嗅覺敏銳的媽媽截獲,張老師自然無緣認識我這個辛苦的小孩(寫給你的信還在我媽口袋,郵差根本就不會來…)。我懷疑我媽是川島芳子的嫡傳弟子,不然怎麼會這麼厲害?
長大之後,我看看現在的小孩,我覺得他們比我當年辛苦許多,慘的是,效果更差。學的科目雖然變多,但是內容變淺,容易造成「樣樣通、樣樣鬆」的結果。有錢的小孩更努力補習,造成小孩子程度兩極化,分佈狀況呈現施振榮先生的微笑曲線。這種情況下,或者該說是苦笑曲線吧!
現在的台灣小孩很辛苦,光語言就得學好幾個,包括了:
- 方言:政治人物認為:愛台灣就是要說台語(儘管所謂的台語其實就是大陸福建的閩南語),所以特別在國小加入鄉土語言課程。台灣的小孩要在上課的時候學方言,讀一些「火金姑」之類的詩歌。常常被別人誤認為外省人的我,不禁直呼「好險,我已經小學畢業了!」
- 英語:這是通行世界的語言,現在又是國際化的時代,所以必須學習好英文,以「和國際接軌」。據說現在小孩流行用文革時代樣板戲的方式演講英文,語言雖異,做作如常。可惜我不讀國小了,不然以我做作的程度,無人能及,肯定是要常常拿英文演講冠軍了。
- 國語:時代變遷,有時候讓人哭笑不得。例如:台灣地圖躺平,上方是太平洋;國文課本不教國文,反倒要教預防風災;甚至,在台灣連國語都不流行了。但是根據某些政治人物的說法是「餘孽尚存」,所以還是要學習國語,只是腔調已經經過「改良」,不必字正腔圓,不必捲舌,也不需要使用兒化音,現在流行的是台灣腔的國語,越「聳」越道地。讓我很難理解的是,許多人國語明明講得很標準,還會刻意在某些字詞用不標準的腔調,模仿:許純美+董月花+阿扁的口音,這些「倫」「俗」在「素」「粉」奇怪!
方言、英語、國語,不只這些,我知道現在還流行學習「第二外國語」,特別是日文,這股風潮悄悄地延伸進校園,所以有些家長會送小孩去學日文。心機比較重的家長,偷偷摸摸地讓孩子學日文,秘而不宣,免得讓隔壁人家的小孩也跟進。
現在的小孩需要學這麼多語言,程式員也是。程式員已經無法靠著一個程式語言打遍天下了,只熟悉一套語言,根本不足以應付多元化的應用。多語言已經是時勢所趨,連.NET和Parrot這兩個VM平台都標榜跨語言。程式員必須要精通多種語言,互相搭配使用。對於大多數的程式員來說,最好的程式語言組合可能是:
- Java與C#:這是最重要的語言,足以應付百分之八十的需求。從PC、PDA、手機、Web Server、企業應用,不管是寫哪一類的應用程式,幾乎都用得到Java或C#。現在的客戶根據被洗腦的方式不同,分成兩派,一派會指定要用Java技術,另一派會指定要用微軟的技術,所以我的觀點是,Java和C#都要會。至於Visual Basic .NET,由於資源比C#少(大多數.NET書籍使用C#語言),而且Visual Basic .NET不會比C#更接近.NET的思維,所以只要學習C#即可,沒有必要同時會Visual Basic .NET和C#。事實上,目前就業市場上,對於Visual Basic的需求比Visual Basic .NET更大得多。
- C:這是會長期存在的語言,用來應付百分之十的需求。有時候,在系統開發的過程中,Java和C#無法完全滿足某些功能,這些部分必須用C來實現。這些部分雖然通常不多,但是往往很關鍵,還真是非用C語言不可,別無選擇。
- Perl或Python(2P)或Ruby或REBOL(2R):用來應付剩下百分之十的需求。通常用來快速地寫出工具程式。不要小看這類的語言,一旦你熟悉這類語言,許多程式的生產力會提高許多,建議你從此2P+2R語言中挑一個好好學習。我的選擇是REBOL(這真是一個好語言)。
- JavaScript:Netscape當初在設計JavaScript語言時,只是著眼於Web Browser的應用,但是經過演化,JavaScript的應用變得非常廣,特別是變成ECMA Script之後,更成為Script語言的霸主。現在許多地方都看得到JavaScript以及其衍生的語言,包括了網頁設計、Flash動畫(ActionScript)、SVG、WAP。我其實很後悔當初沒有早一點學JavaScript,導致我後來在許多地方遇到需要JavaScript時,都會心生恐懼。
- C++:C++的重要性遠不如C,因為多數平台或程式庫所提供的API都是C語言介面,而不是C++介面。C++高度的複雜性也會讓人卻步。但是不可否認的,C++還是有一部份的影響力,有些系統是以C++為標準的開發方式,所以C++的編程能力依然值得保有。
每個語言有她的最佳使用時機,互相搭配,挑正確的語言來做正確的事,才能省下許多功夫:C語言做得到的事,彙編語言都做得到,這個時候我們選擇使用C語言是因為方便;Java/C#做得到的事,C語言都做得到,這個時候我們選擇使用Java/C#是因為方便;Perl/Python/Ruby/REBOL做得到的事,Java/C#語言都做得到,這個時候我們使用Perl/Python/Ruby/REBOL是因為方便。方便與否,是選擇語言的考量。每個語言設計的宗旨不同、特性不同,都有適合使用的時機。牛刀(殺牛)、菜刀(切菜)、水果刀(削水果)、拆信刀(拆信)、武士刀(砍人),都是刀,但是使用時機和對象就是不一樣。
除了上述的語言之外,程式員也需要會下面的語言,雖然這些語言並非「程式語言」,但終究是語言,且重要性不亞於上述的諸多語言:
- SQL(結構化查詢語言):現在用來存取資料庫的API幾乎都是Call-Level Interface,需要以SQL字串當參數。我認為,這才是真正的「餘孽尚存」!
- XML(可擴式標記語言):各種新的檔案格式以及高階通訊協定都已經大量採用XML。儘管有些地方可能不見得適合用XML,但是只要用了XML,就會得到老闆的稱許。XML雖然是好東西,但是現在似乎使用過頭了,我對這一點很感冒!
- UML(統一塑模語言):利用UML來將系統設計用圖形的方法表示出來,可以讓大家更方便溝通。如果沒有用UML的notation畫上幾張圖,別人就會覺得你很遜。所以不管是有沒有實際的意義,也不管能不能實際表達出正確的系統設計,UML圖是一定要畫的啦!
下面是TIOBE Programming Community所做的2005年4月程式語言市場需求調查,提供這個排行榜供大家參考:
- C 18.630%
- Java 16.981%
- Perl 10.197%
- C++ 10.191%
- PHP 8.724%
- (Visual) Basic 6.789%
- Delphi/Kylix 3.682%
- SQL 3.491%
- C# 2.820%
- Python 2.697%
- JavaScript 1.642%
- SAS 1.354%
為了要具備足夠的生存技能,未來的程式員最好要會Java、C#、C、C++、2P2R、JavaScript、SQL、XML、UML。需要學會這麼多語言,你可能覺得很辛苦,沒關係,你還是有別的選擇。你應該讀過我寫的「程式與香雞排」三部曲吧!我一直大力地鼓吹程式員轉行去賣香雞排,至今依然不改其志。