1. 程式人生 > >3.4 學程式設計不拘於語言,學語言不限於平臺——《逆襲大學》連載

3.4 學程式設計不拘於語言,學語言不限於平臺——《逆襲大學》連載

返回到【全文目錄

目錄

3.4 學程式設計不拘於語言,學語言不限於平臺

程式語言

軟體和硬體——計算機要作為一個整體看待

語言的江湖

語言不是回事

多平臺上的精彩


3.4 學程式設計不拘於語言,學語言不限於平臺

學習程式設計,我們總是從一門語言學起。學什麼語言,學了幾門語言,這常常成為初學者最關心和最在意的一個問題。稍一開啟視野就會發現,程式設計語言之多,令人咋舌。將來要從事的工作中,到底要用哪一種語言?如果工作中用B語言,我現在學的是A語言,這豈不是白學了?可惡的學校,居然就是在教A語言!再進一步,這個平臺,那個框架,究竟哪個屬於我,或者說,我應該屬於哪一個?

學計算機,就要學語言。學哪個語言,如何去學,還真是個問題。

程式語言

按語言的一般分類,程式語言有機器語言、組合語言和高階語言三類。

機器語言直接用0、1表示的程式碼程式設計序。如同剛剛誕生的嬰兒只有能力消化乳汁一般,那時個頭挺大的傢伙,也只能“吃”得下0、1直接寫就的程式。只苦了那一代的電腦科學家,用手撥弄著開關,那是在輸入程式,把打了孔的紙帶上的輸出轉抄出來,由此讀出了計算的結果。前人就是這樣栽樹的,我們在輕鬆輸出“Hello World”的時候,不知是否能感覺到陰涼?

後來有了組合語言。指定讓兩個數加起來,不再是0110之類的一連串的二進位制,指令寫成了ADD,只是指令中要牽涉到暫存器、地址、埠,和具體的機器還是走得很近。但是組合語言不得了,有了ADD之類的助記詞,寫程式的難度已經降低了很多。這種伴隨年幼的計算機一起成長起來的語言,在今天仍然獨佔一方,要提到底層開發,需要超高的效率,必須想到它。

後來有了高階語言,其他的不消說,要將兩個數加起來,也終於能寫成人類熟悉的a+b了。使人變得輕鬆的背後,編譯程式(或解釋程式)在默默地奉獻著,幫助人檢查著詞法和語法錯誤,將人能讀懂的程式翻譯成機器能懂的二進位制指令序列。同樣奉獻的還有連線程式,幫忙將七零八腦的二進位制檔案連線成一個整體,成為一個可以執行的檔案。

高階語言形成了一個熱鬧的大家庭。老大是Fortran,一幫子小兄弟COBOL、Algol帶來了新風,BASIC乘著微型機的大船遊遍天下,多能的Pascal結構嚴謹成了教學的首選,千年不遇的C語言精靈剛一出世就震驚天下,老牌的LISP把守著高階,自從Smalltalk找了物件,從C中長出了C++,Java挾著網際網路之風呼嘯而來,水果幫的Objective-C得了新寵,直譯式的Python冷眼觀瞧。這一大家子就這樣熱鬧著,各自有自己的粉絲,相互之間的不服氣、互相之間的看不慣成了一道風景,任憑TIOBE世界程式語言排行榜排來排去,粉絲們卻也沒有什麼脾氣。

表3–2中列出了TIOBE在2013年4月公佈的近25年來名列前茅的語言1。嘆新“人”輩出的背後,看到的是順應發展趨勢而生的新語言的強大沖擊力——1995年誕生的Java語言適應的是網際網路中跨平臺的需求,Objective-C火爆完全是因為蘋果Mac OS X平臺和iPhone平臺移動開發的熱度升高,2000年誕生的C#強勢而來,代表了微軟從Java中搶得網際網路份額的決心。

1 http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html 

表3–2 近25年來名列前茅的語言(2013年4月公佈)

語言

2013年4月

2008年4月

1998年4月

1988年4月

C

1

2

1

1

Java

2

1

3

C++

3

3

2

5

Objective-C

4

42

C#

5

8

PHP

6

4

(Visual)Basic

7

5

4

8

Python

8

7

28

Perl

9

6

6

21

Ruby

10

10

LISP

13

16

12

2

Ada

21

17

14

3

注:劃“—”的語言在排名時還沒有正式面世。

軟體和硬體——計算機要作為一個整體看待

程式設計語言是用來開發軟體的。軟體已經成為我們這個時代耳熟能詳的一個詞彙。我那三歲半的小外甥拿起我的智慧手機,笑嘻嘻地使壞:“我要解除安裝你的軟體。”

軟體是用來指揮計算機執行的各種程式的總和,再加上開發、使用和維護這些程式需要的各種技術資料。軟體與語言密切相關,軟體開發、軟體維護,離不了計算機語言的支援。

和軟體相對應,硬體是在計算機系統中能夠用眼睛看得見的那些裝置,晶片、電路板、連線線,排列整齊,卻讓人感覺目眩。計算機硬體建立了計算機應用的物質基礎,而軟體則是提供了發揮硬體功能的方法和手段。軟體能擴大計算機的應用範圍,並能改善計算機的操作介面,方便使用者使用。形象地,我們可以認為硬體就是計算機的“軀體”,而軟體是計算機的“靈魂”。沒有軟體的硬體被稱為“裸機”,猶如殭屍一般沒有多少實用價值;沒有硬體的軟體,無從附著,好像就是幽靈。

從計算機體系結構的角度,有一個硬體和軟體等效定律:任何可以利用軟體實現的事情可以利用硬體來實現,反之,任何可以利用硬體來實現的事情也可以利用軟體來實現。不同的方案之間在效能、價格以及實現的難易程度上不同,因而實際的計算機產品常常是軟硬體結合完成。

我在買第一臺486計算機的時候,專門多花了2000元,配了一塊視訊解壓卡,解壓多媒體資料,必須用“硬解壓”的方法。那時候計算機的速度聽起來已經夠快的了,但要處理多媒體資料,用軟體的方式根本無法正常播放視訊。如今播音樂、放視訊,沒有見還需要增加什麼裝置,一個播放器軟體解決問題。20多年前計算機要處理漢字,需要專門買一塊“漢卡”插到計算機的擴充套件槽,而現在更多語言的處理工作也完全由軟體完成。可以發現,軟體的便宜、方便、靈活佔盡了優勢,也越來越受到重視。但也並不意味著硬體的市場就被剝去。新的結構、需求仍然不斷地產生,有一些在品質上有特殊要求的裝置,比如遊戲玩家需要的高效能顯示卡,音樂發燒友需要高品質的音效卡,工業控制中需要的專門功能模組等,仍然要靠著硬體支撐。除了通用計算機的外圍裝置,專用的新產品需要不斷開發出來,這都大量需要能在硬體層面上工作的人才。

軟體和硬體之間,於是形成了一個明顯的互動:軟體實際能實現的功能受制於硬體,硬體效能的提高,可以為軟體創造出更好的開發環境,並在此基礎上可以開發出功能更強的軟體。比如微型計算機的市場上,CPU的每一次升級,產生了微型機的新產品,作業系統軟體的版本也隨之提高,併產生出一系列新版的應用軟體。反過來,軟體的發展對硬體提出更高的要求,促使硬體效能的提高,甚至產生新的硬體。在軟體和硬體共同的推動下,新產品不斷推出,當然,使用者需要不斷地花錢購買新的軟體和硬體,形成了經久不衰的IT行業和市場。

將計算機分成軟體、硬體兩個部分是必要的,但不可以將兩者獨立開來去看。一說起搞軟體的就是程式設計序、敲程式碼;而搞硬體的,就是設計電路圖,或者就是電烙鐵、螺絲刀上陣比劃。實際上軟體和硬體之間的聯絡密不可分,唯有合二為一才能看清計算機的本來面貌。在計算機的學習路線上,可以有所側重軟體或者硬體,但不可以走向學軟體就不要硬體,學硬體就不要軟體的極端。對於關注軟體的,理解了硬體系統,會幫助你理解保證計算效率的程式設計技術,寫出優質的軟體。而對於偏重於學習硬體的,並不是成天就是和各種晶片、電路板打交道,合適的工作要讓軟體去做,更方便、更靈活、更廉價,何樂而不為?況且,開發底層驅動程式,在作業系統的層面上做工作,這需要軟硬體都過關的技術人員。具備這樣能力的人,也自然是行業中能夠穩固立足的人。

在大學階段不可以過早地將自己歸到了軟體或者硬體的陣營。大學階段的學習只是一個很基礎的階段,培養方案中的軟、硬體技術都只是基本的知識,過早的“歸口”,對大學階段的學習非常有害,縮小了未來的發展空間,更使自己的知識結構限制在一個個的“知識孤島”上。而有些軟體工程專業的學生動輒就說“我是學Java的”,“我是學.NET的”,這更是一個更窄化的認識了。一個人的職業生涯會有幾十年,要去穿越不同的時代,更需要對硬體和軟體都熟悉的複合型人才。在大學中接受計算機類專業學習的同學,將計算機作為一個整體進行理解,不必要厚此薄彼地對待軟體、硬體的問題。

語言的江湖

語言,是用於交流思想、傳達資訊的工具。人類社會的發展,產生了眾多的自然語言,漢語、英語、德語、法語……語言是各民族優秀文化的代表。隨著人類文明的發展和科學的進步,也誕生了數不清的人工語言。例如,阿拉伯數字是數學語言中的最基本最簡單的部分;H2O代表著我們時刻都離不開的那種物質,分子式、反應方程式是化學的語言。依此展開,五線譜是音樂語言,圖紙是工程語言,幾乎所有的學科在發展過程中都提煉出了需要的一組符號,以及使用這些符號的語法規則,人們可以利用這些符號表述學科中特有的規律和規則。

計算機語言是人與計算機之間通訊的人工語言。為了讓計算機能進行工作,採用一套數字、字元和語法規範,組成了各種指令(或語句),編寫成程式由計算機去執行。有趣的是,舊時土匪、幫會、祕密組織使用的黑話也可以稱為人工語言,在不少對計算機保持神祕的人士看來,計算機專業人員用來和計算機對話的語言,大致也與我們聽不懂的江湖黑話一樣不可捉摸呢。

據統計,目前已有的計算機語言已經達到了一千多種。主流的語言在不斷變化,新語言產生的浪潮還將繼續下去。對於一名優秀的程式設計師,精通幾門,熟悉十幾門語言,實在不是一件稀罕的事。這也引發了一些初學者的恐慌:如此多的語言何時才能學完?豈不是要學死人了?這種擔心大可不必,這麼多人也都還在好好活著。

有人在吐槽這個行業為何總要出現新的語言,成天變來變去,為什麼就不能有一種語言一統天下?而事實上,人們曾經試圖發明集所有語言之優點的語言,但這種努力已經停止。我們看到的,是隨著新需求的提出和技術的發展,老英雄依然橫刀立馬,新俊傑精彩不斷。“古老”的語言中,沙子已經被強力洗去,留下的金子在適應其產生背景的領域裡依然熠熠生輝。“中年”的語言是中流砥柱,用他們的成熟支撐著整個的產業,成為目前廣大初學者競逐的目標。而世界是年輕人的,年輕的語言也在開拓新的疆域中不斷嶄露頭角,引領著未來的世界,也接受著該有的考驗。

FORTRAN是第一門高階程式設計語言,廣泛應用於科學和工程計算領域,其最大特性是接近數學公式的自然描述,這與計算機發展初期主要用於科學計算的背景相關。當今流行的MATLAB是商業數學軟體,是用於演算法開發、資料視覺化、資料分析以及數值計算的高階計算語言和互動式環境。COBOL也是最早的高階程式設計語言之一,是世界上第一個面向商業的語言,代表了計算機由科學計算到事務管理的轉變,直至現在還廣泛用於資料處理領域。LISP是一種函數語言程式設計語言,Prolog是一種邏輯程式語言,它們被廣泛地應用在人工智慧的研究中,可以用於專家系統建造、自然語言理解、智慧知識庫的建設等。Pascal是第一個結構化的程式語言,是一種計算機通用的高階程式設計語言,語法嚴謹,層次分明,程式易寫,具有很強的可讀性,產生於軟體工程誕生初期。BASIC是設計給初學者使用的程式設計語言,隨著微型計算機的興起而普及,承載著比爾•蓋茨“讓每個人桌子上都有一臺電腦”的夢想。C語言是世界上最流行、使用最廣泛的高階程式設計語言之一,在作業系統等系統軟體的開發,以及需要和硬體打交道的場合,C語言相對其他高階語言有明顯優勢。當面向物件程式設計技術興起的時候,各門傳統語言紛紛增加了面向物件的機制,由C有了C++,在需要效能保證的場合仍挑大樑,Pascal生出Delphi,曾經在資料庫應用系統開發中風光無限,VB(Visual Basic)源於Basic,讓應用開發的門檻降了下來。

桌面計算的時代讓位給了網際網路。Java是網際網路時代的英雄,拿手好戲是編寫跨平臺應用軟體。通用、高效、可移植、安全等諸多特性,使Java迅速擁有了全球最大的開發者專業群體,足跡踩遍個人計算機、資料中心、遊戲控制檯、超級計算機、行動電話和網際網路各大領域。藍色巨人Microsoft向來行動緩慢但從來不吃素,踏入網際網路領域佩帶的屠龍刀是C#(讀作C Sharp),繼承了C和C++強大功能,綜合了VB簡單的視覺化操作和C++的高執行效率,以強大的操作能力、優雅的語法風格、創新的語言特性和便捷的面向元件程式設計的支援成為.NET開發的首選語言。基於瀏覽器的web應用是一塊巨大的蛋糕,立住腳跟的是JSP和PHP。JSP出身名門,由Sun公司倡導,是由許多公司參與一起建立的一種跨平臺的動態網頁技術標準。相對而言,PHP更像是草莽英雄,高舉開源的大旗,和同樣開源的作業系統Linux、web伺服器Apache、資料庫MySQL並肩組成LAMP組合,佔領了web開發的大半江山。此界的後起之秀是Python和Ruby,志在通用語言,志在簡化程式設計難度、提高人的效率,雖然年歲不大,但為計算機語言世界帶來了新的思路,成了最受歡迎的新型程式設計語言。在網際網路中,還有一大幫子的語言默默無聞地支撐著資訊描述、資訊表達和資訊顯現的重任,然而有時人們更願意把它們只當作標準而非語言,它們中的代表是超文字標記語言HTML、可擴充套件標記語言XML、層疊樣式表CSS,還顯稚嫩的HTML5華麗而來,指令碼語言中的傑出代表JavaScript藉此更加風采動人。

移動計算、雲端計算是業界新的熱點。沉寂多年有Objective-C年歲已是不小,幫助蘋果再次崛起,也讓自己成了近年來風頭最勁的語言,以坐著火箭的速度強勢殺入了程式語言排行榜前三甲。生於谷歌的Go語言被寄予厚望,這個志在通吃伺服器端和使用者裝置端的少俠還沒有在江湖走動,重速度、重安全,想在多核處理器的並行處理上所作為,我們等著看這門新語言交出的答卷。

天下大勢,就在這些新、老語言的爭相鬥豔中變來變去。新生的語言,再不是全靠自身魅力立足,一個好爸爸為其劃好地盤也是少不了的條件。正當大家追捧新星之際,聞聽某老將卻配備了新裝備再次殺回。洗牌之後的局面一時難辨,卻發現某爺爺級語言的地盤仍然穩如磐石。這就是語言的江湖。各種語言的粉絲奮起而互掐,各種語言的變遷及恩怨是業界老人的談資,唬得小輩們只能是瞪著眼睛不住點頭。

於是,很多的初學者,弱弱地問出了一個不能迴避的問題:我該學哪門語言?

語言不是回事

我該學哪門語言?這是一個沒有辦法直接給出答案的問題。

沒有一門語言能夠一直實用下去,沒有一門語言能夠滿足一個人整個職業生涯的需要。更嚴重的是,在實際工作中,甚至一個專案都可能會用到不止一門語言。

所以,一個可以讓人悲觀事實是:學語言是一個沒有完的事情。另一個讓人能有些信心的事實是:IT技術人員,一人精通幾門語言,熟悉十幾門語言,這種情況並不罕見。這也是一個能讓人興奮和自豪的事。我們所處的行業的確是個常變常新的行業,終身學習,對IT人更現實,我們在引領著世界發展的潮流。熟悉多門語言其實算不得多大的挑戰,語言無非是上陣時要用雙節棍還是柳葉刀的問題,內功高深的人方為俊傑。IT人更需要堅決地打破舊有的學習觀念,樹立新的學習品格,而在此過程中獲得的戰鬥力,將使我們有能力應對一切的變化。

然而,這些事實,也的確給很多的初學者帶來壓力。事實上,計算機語言之間有差異,但共同的成分更多一些。基本的無非是三種控制結構、有限的幾種語句、輸入輸出,再加上子程式(有些語言稱為函式、過程)機制,支援一些資料結構,有些語言加入了面向物件的機制。僅此而已。學過了一門語言,再學第二門時,都能體會到這一特點。計算機語言的學習,某種程度上講,一通百通。如果第一門語言需要投入100小時,第二門語言只需50小時,再往後學其他語言,所需要的投入將會快速下降。

如果將學程式設計看作學開車,語言就是那車。學車時在駕校開捷達,學會了開自家的比亞迪,很自然的事。開車的方法會了,開車中需要的對速度和空間的感知有了,開什麼車都一樣。學會的一門語言沒有市場了,是否會面臨淘汰?我們要知道,“開了五年比亞迪,現在改開奧迪了,哥還是老司機!”

既然第一門語言無所謂,最現實的一種選擇是,你所在的學校給你開哪一門語言,你就將這種語言學好。縱觀國內的高校,第一門程式設計語言一般選擇C、C++或者Java,都有其道理,也有極少數引入國外部分高校的模式,從Python學起。

學習第一門語言時,初學者往往會覺得有些困難。這個困難其實並不全是來自於語言,而是受限於程式設計序的概念正在建立,程式設計的方法、除錯的手段也是從無到有,這中間需要的突破遠遠多於學語言本身。很多的教材名稱叫做“×語言程式設計”,從中可以看到,學習的首先是程式設計,其次是用某一門語言作為表達方式的程式設計。作為初學者,是將所有問題混在一起看待,學程式設計起步中的所有問題,也就歸到了語言的身上。

在學好第一門語言的基礎上,我建議同學們可以自學,或者通過選修課的方式學習第二門語言。這是體驗程式設計語言“一通百通”的機會,除了掌握語言本身,對程式設計的體會也將加深。同時學習幾門語言對老手來講很正常,但正在學習第一門語言的同學,不建議同時學第二門語言。程式設計的基本過程、基本概念尚未建立,其間帶來的迷惑,以及可能存在的概念衝突,都可能會妨礙學習的效果和感受,使學習熱情和興趣受到打壓。

建議在學好第一門語言的基礎上再學習第二門語言,用第一門語言中習得的程式設計方法支援用第二門語言的程式設計。需要忌諱的學法是一門語言學個半截就又轉而去學另一門語言。這種學法將使人永遠處在只知道一點點的狀態,久久不能得門而入,甚至最終打了退堂鼓。更糟糕的是,老師在教著A語言,聽某人說B語言流行,放下A語言去獨自攻打B語言,如此沒有幾天必去轉學Q語言。最大的收穫是,短短一年,能用多種語言輸出hello world,用浮在表面的話題能吹牛唬唬外行而已。對於計算機語言,只要先將一門學精了,學會了解決問題的一般方法,就像學會了開車一樣,上其他車稍加熟悉也就能上路了。

大學四年的時光,光兩門語言,也真是不夠,需要逐步地拓展,再學到其他語言,體驗用其他語言的程式設計,學會做出一些“專案”來。大學四年中,在學習語言上的節奏,我建議前兩年,目標定為只會用兩種語言即可,一門精通,另一門瞭解。第三門語言完全可以按“因為用到所以要學”的思路去選擇。進入到了大三,程式設計方法有了基礎,眼界也拓寬了,選擇一個自己感興趣的方向,學習這個方向上慣用的語言,以做出一個小專案當就業敲門磚為目標,藉此樹立自己的特色。對語言的興趣可能會在學習過程中換一換,但是不要換得太勤。一個方向,僅靠一門語言可能不夠,而是需要學習相關的一組語言,用著什麼學什麼,不必猶豫太多。對於一些簡單的,但應該是常識性的語言的學習,如HTML等,可以在四年當中隨時啟動。有些語言,在培養方案中會安排老師授課,你的計劃可以與培養方案接軌,也可以自主安排。

在程式設計學習中常見的哀嘆是:好好學了兩年C++,最後做Java了,白學了,可惜了,我好杯具。對此要反問的是,如果真是這樣,有哪一天Java的工作機會也不再有了,是否自己也跟著進到博物館?還是前面所講的道理,不管用什麼語言,學的是程式設計。練出的功夫不只是體現在拳腳上,而是無論哪裡發力,使什麼樣的兵器,丹田之氣都能隨之跟進。當需要換語言之時,用豐富的程式設計經歷與體驗迎接新語言的到來,無論何時需要新語言加入到你的知識體系中,坦然接受即可。這樣的焦慮,只對學了一兩門語言的初學者存在,對於已經窺到門徑的人來說已經不是問題。初學者也倒是可以放心地投入進去,不要被這種階段性的顧慮束住了手腳。

初學程式設計,常常關注的是C++、Java這樣的通用程式語言。實際上,在計算機類專業的培養方案中,還會有不少的語言不會單獨設課,而是包含在某門課程中。例如計算機組成原理、微機原理等課程中要涉及指令系統、組合語言。目前,即使進行電路設計這樣的純硬體工作,也通過高階語言實現,常用的是硬體描述語言VHDL。在資料庫中離不開SQL語言,這是所有關係型資料庫操縱的通用標準語言,在資料庫原理課中學習。學習有關作業系統、計算機網路時,不可避免地要使用命令列,需要用指令碼語言寫一些批處理。語言不僅指程式設計時用的語言,還有在設計階段用到的語言,比如面向物件分析與設計中使用的統一建模語言UML,並不是要用它編出程式來,卻是在編出程式之前描述設計方案的。諸如程式流程圖、資料流圖之類的圖形工具,也屬於設計語言的範疇,是軟體工程中離不開的工具。再拓展開來,理論計算機中用到的形式語言,包括用於表示程式設計語言這樣的上下文相關語言,也包括用來描述自然語言這樣的上下文無關語言,這些都是語言。學習了計算機,將語言的概念拓展開來,才能深深地體會到語言就是用於交流思想、傳達資訊的工具這一本質。

回到程式設計語言上來。其實還有不少語言,是可以用來學著玩的。眾所周知的Logo語言,用簡單的指令,指使著一隻小海龜行走,畫出不同的圖案來,這一直是幼兒學習程式設計的啟蒙語言。我前幾年科研中用過的NetLogo,廣泛用於多智慧體系統的模擬,其主要的陣地卻在中小學教育中,方便地模擬各學科中涉及的自然、社會現象,用於輔助教學。RoboMind是一個簡單的教育性質的程式設計環境,能讓初學者對機器人程式設計。這些語言語法簡單、資源豐富,有閒時可以搜尋並下載來玩一玩,定給你帶來意外的享受,豐富程式設計的體驗。

在大學階段對語言的學習,注重對程式設計的理解。起步學的第一門語言,是為了學會程式設計;而確定專業方向後學習的一組語言,是為了能夠在一段時期內從事實際工作所用。在進入工作階段後,語言的學習不會停下,要根據工作的實際需求選擇語言。有了大學中所學的專業基礎和理論,這樣的自學能力可以有,這也是大學的價值所在。對於一個計算機類專業的大學生而言,老師教過的語言課就是那麼兩三門,學生是否學會取決於他自己在學習中的投入和表現。大學中的專業核心課程,無論其表現形式是什麼,都是圍繞對計算機的理解而開設,能夠落實和體現到程式設計能力上來,使學生能夠理解語言的原理,學會設計,學會解決問題的方法。一名真正合格的畢業生,已然是具備了自學語言的基礎,能夠充分、從容地面對語言的變化。

這麼說來,語言是個事,但也真不用把語言太當回事。

多平臺上的精彩

就在“寫出程式”的層面,語言也僅僅是其中的一個方面。選定了語言,開發和執行都需要有平臺的支援。這些與語言有關,事關程式設計的質量和效率,會給程式設計者帶來不同的感受。

程式是計算機執行的指令序列。早年用機器碼寫程式時,每臺機器上執行的程式,編寫方式都不一樣,程式完全受執行程式的硬體平臺的限制。有了高階語言,用高階語言寫出程式的過程中,一般不用考慮執行在什麼硬體平臺、軟體環境中。高階語言程式通過編譯程式“翻譯成”的機器程式碼,在各種作業系統(如Linux和Windows)上有差異,但這可以由各作業系統使用不同的編譯程式來保證。對於同一種高階語言,比如C語言,在不同作業系統中使用的編譯程式會不同,於是在不同作業系統下,生成的目的碼不同,適合各自的要求。不過,這樣的差別在初學者剛學程式設計的角度看,可以暫時不必過分關注。主要是在產品開發時,尤其是開發跨平臺的軟體時,對這種問題才需要給予足夠的重視。

除了程式的執行平臺,程式設計初學者更關心程式的開發平臺。我們在程式設計時,常常使用整合開發環境(Integrated Development Environment,IDE),這是開發平臺中初學者能夠直接感知到的部分。IDE是用於提供程式開發環境的應用程式,一般包括程式碼編輯器、編譯器、偵錯程式和圖形使用者介面工具,是集成了程式碼編寫功能、分析功能、編譯功能、除錯功能等一體化的開發軟體服務套件。學習C和C++的同學用VC++6.0、C++Builder,學習Java的同學用Eclipse、NetBeans,設計網站時使用的HomeSite、DreamWeaver等,這些都是IDE。其實,支援C++的還有DEV C++、CodeBlocks、Qt,Eclipse加上外掛也能支援C++。所以一種語言可以用多種IDE程式設計,一種IDE也可能支援多種語言。IDE視覺化的操作介面、漂亮的語法著色、所見即所得的設計過程、語法錯誤的隨時反饋、單步執行等除錯工具,這給程式設計者帶來了好的感受,很多IDE還提供了協作開發等功能,極大地提高了生產效率,甚至自動處理各種執行平臺的差異。各種IDE也有自己的粉絲,照樣諸多互相看不慣:Qt的小資,CodeBlocks的洋氣,讓用老舊VC++6.0的不敢多說話。

實際上,很多初學者不知道,任何語言的程式都可以只用記事本之類的簡單編輯器就可以進行編輯,用命令列,可以完成程式的編譯、連線和執行。至今,還有不少高手在安心地利用vi一類的老式行編輯器工作,而對介面友好的新式IDE中繁雜的選單選項頻頻吐槽。事實上,新加入到行業中的新人,實在用不著玩酷回到那個年代的方式中去了,用好方便的IDE即可。

初學者最關心開發平臺選擇的問題。學C語言的說,老師要我們用VC,但有人說該用CodeBlocks;學Java的說,配置Eclipse很麻煩,某高手就是記事本加命令列。那究竟應該怎麼辦?

前面我們談過“語言不是回事”。初學程式,不限於用哪一種語言。涉及開發平臺,也自然沒有那麼多的約束,哪個方便用哪個即可。進一步的建議是,在學習一門語言的過程中,可以體驗不同的開發環境,讓自己會用多種開發平臺,具備適應不同開發環境的能力。學會靈活使用開發平臺,最後做到駕馭自如,不要讓不同IDE中選單和快捷鍵上的差異,成為束縛程式設計思維和程式設計過程提高的障礙。做這件事,其實並不難,只要去嘗試,就會有結果。從中得到的,就是那種很寶貴的“感覺”。

會開比亞迪,就能開奧迪;走過了國道,咱也能上高速。此所謂“學程式設計不拘於語言,學語言不限於平臺。

返回到【全文目錄