| 探索夢想的世界--軟體程式設計 | 資料來源 | ||
| 前言 | |||
| 軟體程式設計可以說是築夢工業,相信很多人都對程式設計這玩意兒帶著些許的憧憬,還記得筆者在年少的時候,在根本還未清楚程式設計為何的情況下,就開始寫程式了,甚至以為這就是電腦的全部,對那時候的我來說『程式設計』就像是一個專屬於電腦的圖騰。慢慢地,我瞭解到,程式設計也可以是有許多不同的面貌的,它可以高深至如機器語言、組合語言;也可以平易近人如BASIC 及巨集語言。對大家來說,程式設計最吸引人之處在於那種親自創造物件的成就感,時至今日,我還深切記得我第一次用BASIC寫出小精靈遊戲以及用PASCAL 寫出俄羅斯方塊的雀躍,我不瞭解女人十月懷胎的心情,不過我想,就是這樣吧。一直到今天,程式設計一次又一次地給我雀躍的心情,這也是今天我還堅持走這條路的原因。 | |||
| 這篇文章是給想要一窺程式設計領域門徑的你(妳)而寫的。主要著重在如何選擇及善用程式語言工具,來完成您的需求。 筆者接觸電腦也有好長的一段時間了,從最早期純粹的熱愛;到進入大學資訊科系時的執著;及至現在身為一個專職軟體設計工程師的夙夜匪懈。電腦(或說是程式設計)已成為我生命中不可或缺的一部份了。在這裡,我不期望在短短的篇幅中能讓您得到些什麼,只希望能讓您感受到我對電腦一種不可抑扼的熱誠,從而讓您知道如何 Enjoy Computer Science! | |||
| 程式語言大觀 | |||
| 首先,我們為您準備了一系列的程式大餐,基本上筆者以難易程度劃分之,由淺入深,讀者可以一路看下去,對各個語言特性有一個基本的認識,也可以做為您選擇一個合適語言的參考。另外我們所討論的語言不限於狹義的程式語言,筆者準備將觸角延伸至一般較不備視為正統的資料庫語言,另外將太過學院派的人工智慧語言如 lisp 及 prolog 去除,主要是因應現今電腦界的趨勢。 | |||
| BASIC族系 | |||
| ----相關語言:BASIC,GWBASIC,QUICK BASIC,TRUE BASIC VISUAL BASIC,VBA (VISUAL BASIC FOR AP) BASIC 是最常被用來做入門使用的語言。它的全名是 Beginner's All Purpose Instruction Code,簡稱為 BASIC。顧名思義,BASIC就是一種專為初學者設計的語言,因其易學易懂,所以深受喜愛,相信很多人所學的第一種語言就是 BASIC,早期的 BASIC 都是屬於解譯式的,因此可以一行一行地執行,所以它可以立刻看到執行的結果,對初學者來說,很容易接受。不過它也因此沒有結構化的概念,初學者很容易寫出如通心麵般雜亂無章的程式。不過在後期的 BASIC 則改進了以上的缺點(如 Quick Basic),使得它也可以用來發展較大型的程式,筆者多年前認識一個朋友,即是以 QB 來發展程式,並用它來接CASE。如果您玩過 BBS,使用過快信程式,可能知道一個中文的 QWK快信程式--HKCQWK,就是他以 QB 寫作的。可見 QB 還是可以做為一個發展程式的工具。 | |||
| 另一個BASIC 的衍生性產品則是 VISUAL BASIC。熟悉微體總裁比爾蓋茲背景的讀者應該知道,比爾蓋茲的第一個商業作品就是一個 BASIC 解譯器。(不清楚的讀者可以參考『彈指乾坤』一書)。也因此,比爾蓋茲對於 BASIC 一直有一種特別的情感,似乎經常將他『關愛的眼神』落於 BASIC。也因此微軟的第一個視窗上的視覺化軟體工作平台即是架構於 BASIC 上,就是大家熟知的 VISUAL BASIC。不僅如此,由於 VISUAL BASIC 獲得空前的成功,造成後續的產品皆以 VISUAL 為名,不僅是微軟本身的產品如 VISUAL C++, VISUAL FOXPRO,就連 BORLAND 的 DBASE 也更名為 VISUAL DBASE,而IBM 也出了一套 VISUALAGE C++。 | |||
| VISUAL BASIC 的出現不僅造成視覺化程式設計的風潮,也使得當時一些以C 語言及 SDK 寫作程式的程式程計師心中老大不好受....直到 VISUAL C++ 出現。 | |||
| 因此如果您要學習 WINDOWS 程式設計而又沒有太多的基礎的話,可以選擇 VISUAL BASIC 作為您的入門程式。不過 VISUAL BASIC 較為人逅病的是它需要許多的 VBX 支援才可以達到某些特定的功能,所幸現在有許多的 3RD PARTY 廠商為它撰寫許多好用的 VBX 模組。另外新版的 VB 4.0 也已問世了,增加了許多功能。 | |||
| 使用 VISUAL BASIC 的另一個好處是:微軟將 VISUAL BASIC 的語法納入 OLE AUTOMATION 中,在各軟體中使用 VBA(VISUAL BASIC FOR APPLICATION),所以在許多微軟的軟體中都可以使用 BASIC 的語法來撰寫使用者自建功能函數(例如 OFFICE 中的 EXCEL、WORD、ACCESS等)。另外,只要程式撰寫成一個 OLE AUTOMATION SERVER 即可以利用 VISUAL BASIC 來撰寫程式控制它。微軟想用 VISUAL BASIC 來統一世界的意圖十分明顯。也因此,學習 VB 算是個不錯的投資。 | |||
| 國內由於專注BASIC者所在多有,所以相關書籍很容易覓得。讀者如果要買到合適的教材並不難,只要先決定所使用的環境為何,如果是WINDOWS的話就選擇VISUAL BASIC,DOS下則以QUICK BASIC較優秀;然後再循序漸進即可有所成。 | |||
| xBase 族系 | |||
| ----相關語言:DBASE,CLIPPER,FOXPRO 一般來說資料庫語言是不被列入正統程式語言的。但是就國內的現狀來說,資料庫語言的廣氾使用已大到不容忽視的地步,而且對初學者來說,由於資料庫語言如
DBASE、CLIPPER、FOXPRO的易學易懂,因此不失為一個好的選擇。而且就筆者看來,對許多讀者來說,也許學會 DBASE、CLIPPER
或 FOXPRO 的程式設計即夠了,因為他們也許只是需要撰寫一個資料庫程式罷了。
這三個工具讀者只要選取一個順手的使用即可,而且它們也都有 WINDOWS 的版本,所以在 DOS/WINDOWS 的解決方案不成問題。另外一個趨勢是:以往在大型電腦使用的 SQL 資料庫語言會慢慢加入 XBASE 語言中補強並取代原先的語言。這在微軟最新推出的 VISUAL FOXPRO 中已可看出端倪,而且微軟有在FOXPRO及其另一個資料庫程式ACCESS整合的趨勢,ACCESS的許多先進特性會陸續納入FOXPRO中。 對於一個對於資料庫程式需求較強的讀者來說,資料庫語言也許是您最佳的選擇,因為對於其他一般性的程式語言,要做到相同功能的程式並不容易,必定要歷經一段漫長的學習曲線也可達到一般資料庫程式的水平。 對於書籍的選擇,xBASE的書籍也如BASIC般,並不難取得,所以筆者在此並不做推介。 |
|||
| PASCAL(DELPHI)族系 | |||
| ----相關語言:PASCAL、TURBO PASCAL、 BORLAND DELPHI
對於資訊科系的學生或是對電腦有特別熱誠的讀者來說,必定對 PASCAL 不漠生,因為 PASCAL 在早期可以說是資訊科系的『官話』,大部份的資訊科系都把
PASCAL 列為計算機概論的必修語言,雖然後來的 C/C++ 掩蓋了它大部份的光芒,但是隨著 DELPHI 的推出,PASCAL 的光芒再現,學習
PASCAL 的人又多了起來。
事實上,熟悉 BORLAND 的讀者會知道,TURBO PASCAL 是 BORLAND 最早發跡的產品,所以 BORLAND 之於 PASCAL 就像 MICROSOFT 之於 BASIC,不同的是由於後來 BORLAND C++ 的成功,以及 BORLAND PASCAL 的漸漸沒落,使得 PASCAL 不受重視,甚至在 DELPHI 推出之前還數度傳出其胎死腹中的傳聞,不過後來由於 MICROSOFT VISUAL C++ 的成功,掠奪了許多 BORLAND C++ 的市場,DELHPI 的推出,可謂一砲而紅,總算替 BORLAND 出了一口怨氣。 DELPHI 由於是針對 VISUAL BASIC 及 CLIENT/SERVER 系統而寫,因此在視覺化程式設計的方便性可謂是一大革命,而且又可以方便的撰寫主從式架構的資料庫程式,因此大大受歡迎。根據統計,目前使用 DELPHI 的多為撰寫主從式架構資料庫程式的廠商、個人及個人工作室。對於有意從事 WINDOWS 程式設計又沒有太大的歷史負擔(就是沒有太多舊的、以VB或C/C++撰寫的程式)的讀者,筆者強烈推薦使用之。 DELPHI 不僅提供了比 VB 更為友善的工作環境,更提供了超過 75 個軟體元件,我們可以用這些軟體元件組合出一個程式。通常一個程式就在滑鼠的拖放之間就完成了,就筆者看過的軟體工作平台中,除了 NEXT 的 INTERFACE BUIDER 差可比擬外,其他的程式根本不能比,DELPHI 可謂為 WINDOWS 視覺化程式設計下了一個最佳註腳。 根據筆者今年七月至九月赴美期間觀察所得,目前在美國有關 DELPHI 的書籍及雜誌正如雨後春筍般地成長,氣勢直追 VISUAL C++ 及 VISUAL BASIC++,而且對於一個剛推出不到半年的產品來說,它實在是太受歡迎了。隨著 WINDOW 95 的推出,DELPHI 也將推出 WINDOW 95 的版本。 另外要說明的是,DELPHI 所使用的語言是BORLAND發展的Object Pascal,是一個物件導向的PASCAL語言,和原先的TURBO PASCAL及正統的PASCAL皆不同,不過由於其物件導向的特性,勢必會取代原先的PASCAL 語言(就像C++取代C一樣)。現在也有針對DELPHI所寫的物件導向分析及設的書籍開始出現了。 相對於BASIC及xBASE系列的籍書,目前在國內PASCAL/DELPHI的書籍不易購,為數相當少,大多還是以BORLAND附在原版產品的幾本手冊為主,這是件很可惜的事。所幸現在已有不少有心人在從事這方面的著作,相信會有一些好作品出現。 |
|||
| C/C++ 族系 | |||
| ----相關語言:VISUAL C++、BORLAND C++、SYMANTEC C++、WATCOM
C++。
C/C++ 族系的語言無礙是目前最受歡迎的語言,由於C 語言可說是 C++ 的子集合(SUBSET),因此我們在此不特別說明之,將其視為一體。 C/C++ 族系早期之所以受歡迎一方面是因為其精簡的特性,另一方面則和 UNIX有很大的關係;現在情況相仿,由於 MS-WINDOWS 是以 C 撰寫而成,因此 C/C++ 就成為最常被使用來撰寫 WINDOWS 程式的工具(在 VB還未出現以前,它幾乎可以說是唯一選擇)。 其實,最早可以在 WINDOWS 上撰寫 WINDOWS 程式的編譯器是BORLAND C++,記得當時 BORLAND 還以此大做文章攻擊 MICROSOFT 的 MSC7.0,嘲笑它必須要在 DOS 模式下撰寫 WINDOWS 程式。沒想到微軟推出 VISUAL C++ 後,率先將程式輔助工具納入整合環境中,成功地打下山頭,BORLAND C++ 從此兵敗如山倒,VISUAL C++ 還掀起了另一場 APPLICATION FRAMEWORK的大戰。 MFC VS. OWL:MFC (Microsoft Foundation Class Library) 是微軟所發展的一套應用程式框架(Application Framework,以下簡稱 AF);OWL(Object Window Library)則是Borland所發展的的AF。它們分別附於 VISUAL C++ 及 BORLAND C++ 中。它們之間最大的不同在於 MFC 探用單一繼承架構;而OWL則用多重繼承架構(這是個物件導件的觀念,讀者若不懂,請參閱相關書籍)。對於這兩個 AF 各有其擁護著,筆者在此不詳述其設計原理說明其優劣,僅就其市場接受度說明之。由於 MFC是由微軟推出的,因此挾微軟的強勢攻勢,成為市場中最受歡迎的 AF,目前像 SYMANTEC 及 WATCOM 都已支援 MFC,據消息指出 BORLAND 在其即將推出的 BORLAND C++ 5.0 中也將正式支援 MFC,MFC 看來已成為標準。另外 VISUAL C++ 的下一版本也將要推出,是為 VISUAL C++ 4.0,至於為何直接由 2.X 跳至 4.0 據稱是為了統一 MFC 及 VC 、VB的版本號碼。 對一個嚴謹的軟體程式設計師來說,C/C++ 是一個必要的選擇。(It's a "must" for a serious software engineer)。 對於C/C++來說,國內似乎還沒有什麼典型的代表著作,不過我可以列出幾本夠份量的原文著作,我對使用C/C++的讀者層次設定高一些,不過這些書中也有一些是有中文譯本的: C++ Primer, Stanley B.Lippman Addison Wesley 這是本相當優秀的 C++初學教本。其份量可比C++之父的另一本著作(下面會介紹)。 The C++ Programming Language,Bjarne Stroustrup,Addison Wesley 這是C++之父的著作。堪稱為C++語言教本的範本,不過由於作者知識太過淵博,所以對一些初學者,會造成學習障礙,讀這本書時如果能有一個好的導讀者則更佳。 當然其他還有一些很優秀的C++書,如Effective C++,ARM 等等,不過他們都不是入門書,所以在此不詳述。 |
|||
| 組合語言系列 | |||
| ----相關語言:MASM,TASM 最後我們來談談一個最為冷門也最為艱深的語言:組合語言。組合語言被公認為最難懂且不易學習。但如果您是一個資訊科系的學生或是有志於從事於系統軟體研發,則組合語言是必須要好好的研讀的。或是您有興趣探索電腦系統內部的工作情形,你也必須學習,除此之外筆者不建議您去拿組合語言砸自己的腳。
不過,就筆者觀察:目前國內許多電腦廠商都需要組合語言的人才去撰寫硬體的驅動程式或是韌體(Firmware),由於國內搞純軟體的廠商不多,大多是和硬體搭配使用,使用如果想要在國內求職的話,通曉組合語合會成為求職的利器(因為現在懂組合語言的人愈來愈少了)。 |
|||
| 程式設計方法論(Methodology) | |||
| 在介紹完了程式語言後,我們再來談談程式設計之本。PASCAL 及 MODULE 2
之父 Wirth 曾經提過一個很重要的觀念,在結構化程式設計時代被視為圭臬,奉行不悖。那就是
Algorithm + Data Structure = Program (演算法) (資料結構) (程式) 由上可知,程式之本在於演算法及資料結構。也因此演算法及資料結構成為各資訊科系的必修學分,因此欲提升電腦程式到另一境界的讀者,不可不留意此二者。資料結構和演算法其實是在學習前人之精華,而這些精華又現有的程式中使用頻率非常高,像 list、stack、queues、tree、search、hash table...等等,如果沒有學過資料結構的人碰上了,可能就無法輕易搞懂。 另外,現在熱門的物件導向技術也不脫以上的範籌,只不過表現的方法不同罷了。資料結構幾等於物件本身的定義,而演算法則幾等於物件行為的描述(Description of Behavior)。另外對於物件導向領域的物件導向分析(OOA)及物作導向設計(OOD)也必須多加涉獵。 綜合以上可知,除了撰擇適合的程式語言工具之外。讀者若想提升到另一境界,則必須再學習資料結構及演算法(或是物件導向領域的 OOA/OOD)。因為此二者才是程式之本。孔子日:『君子務本』,我們不可以執著於程式語言工具表象,而忘了程式之本,如此才可做到一法通、萬法通,許多人可以在短期間內『精通』多種語言,多半是因為他已『知其本末』,掌握了資料結構/演算法,這個可以遨遊電腦天地之本。 |
|||
| 打開資訊的一扇窗 | |||
| 許多人在學習程式設計或是在學習套裝軟體時,最為困擾的是有問題時無法找到可供資詢的對象,因此學起來格外痛苦,那麼除了看書之外,還有什麼方法可以快速增進電腦程度呢?筆者提供以下方法:
(一)電腦雜誌:閱讀電腦雜誌是迅速增進電腦知識廣度的方法。它可以讓您得到更多新的知識,使自已不致成為井底之蛙。一個更積極的方法是去搜尋雜誌的合訂本,尋找相關議題,影印保存。舉個例子來說,假如您在學習BASIC,你可以到圖書館將各雜誌合訂本歷年來有關BASIC的文章搜集起來,然後就可以抽樣選擇自己需要的影印保存。如此可以學到一些前人的精華,而且也可以學到一些較不易在一般正統教本看到的小技巧,像是破解SAVE保護、顯示圖檔等等(純粹舉例而已)。就筆者而言,我每月至少看十本以上的中外文電腦雜誌,當然,到圖書館影印過期資料的動作幾年前也常作。 (二)BBS及INTERNET:在各大BBS及INTERNET都有許多關於電腦的討論區,讀者在學會了使用BBS及INTERET的方法後,就可以到上面挖寶了(對於沒有數據機的朋友,筆者建議您去買一個,畢竟現在數據機價錢不貴,而且可以想見的是,它幾乎已成為電腦標準配備)。不過玩BBS要學會過濾資訊的本事,別將時間浪費在太多無謂的打屁聊天上。 (三)認識高手朋友:特別聲明,這裡所謂的高手是除了我以外的高手,最好是您的鄰居、同學,可以隨傳隨到的,如果你身邊有這種人,千萬別放過他,一定要發揮他的最大利用價值,如果利用得好的話,比你去看幾本書或是上幾小時課都還好,只要他可以幫助你找出盲點即可。(不過要小心別誤交匪類,找到一個『唬爛型』的高手) 最後希望您有個快樂、充滿希望的程式設計之旅! |
|||