這是一個爭論不休的話題,不同人總會有不同的見解。傳統(tǒng)的說法是從Pascal開始,而較為新點的是C開始,這幾年以來,也有提出直接從C++或者C#/Java開始學(xué)起。
本人是本科出身的,對于??苹蛘卟蛔x書的初學(xué)者來說,他們的環(huán)境也許跟我的不同,不過我的觀點可以作為參考。
首先,我先來介紹一下各種編程語言的來源、特點。
Pascal語言:
Pascal是一種計算機(jī)通用的高級程序設(shè)計語言,由瑞士Niklaus Wirth教授六十年代末設(shè)計并創(chuàng)立的。
Pascal的主要特點有:嚴(yán)格的結(jié)構(gòu)化形式、豐富完備的數(shù)據(jù)類型、運行效率高、查錯能力強(qiáng)等特點。
由于上述特點,Pascal可以方便用于描述各種算法和數(shù)據(jù)結(jié)構(gòu)。對于程序設(shè)計的初學(xué)者,Pascal語言有益于培養(yǎng)良好的程序設(shè)計風(fēng)格和習(xí)慣。IOI(國際奧林匹克信息學(xué)競賽)把Pascal語言作為三種程序設(shè)計語言之一。NOI(全國奧林匹克信息學(xué)競賽)把Pascal語言定為唯一提倡的程序設(shè)計語言,在大學(xué)中Pascal語言也常常被用作學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法的數(shù)學(xué)語言。
C語言:
C語言是介于匯編語言和高級語言之間的語言,屬于高級語言,也稱為中級語言,是集匯編和高級語言優(yōu)點于一身的程序設(shè)計語言。于1972年在美國貝爾實驗室里問世。早期的C語言主要用于UNIX系統(tǒng)。由于C語言的強(qiáng)大功能和各方面的優(yōu)點逐漸為人們認(rèn)識,到了九十年代,C語言開始進(jìn)入其他操作系統(tǒng),并很快在各類大、中、小和微型計算機(jī)上得到廣泛的應(yīng)用。成為當(dāng)代最優(yōu)秀的程序設(shè)計語言之一。
C的特點
1. 是一種結(jié)構(gòu)化語言。層次清晰,便于按模塊化方式組織程序,易于調(diào)試和維護(hù)。
2. C語言的表現(xiàn)能力和處理能力極強(qiáng)。不僅具有豐富的運算符和數(shù)據(jù)類型,便于實現(xiàn)各類復(fù)雜的數(shù)據(jù)結(jié)構(gòu),它還可以直接訪問內(nèi)存的物理地址,進(jìn)行位級別的操作。
3. 由于C語言實現(xiàn)對硬件的編程操作,所以既可用于系統(tǒng)軟件的開發(fā),也適合于應(yīng)用軟件的開發(fā)。C語言還具有效率高,可移植性強(qiáng)等特點。因此廣泛地移植到了各類計算機(jī)上,從而形成了多種版本的C語言。
4. 由于C語言允許直接對位、字節(jié)和地址進(jìn)行操作,能實現(xiàn)匯編語言的大部分功能。
5. 目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。
總體上來說,C語言的優(yōu)點是簡潔、緊湊、使用方便、靈活、易于學(xué)習(xí)和應(yīng)用。僅有32個關(guān)鍵字。9種控制語句,程序的書寫形式也很自由。
C語言的弱點:非強(qiáng)類型;語法限制不嚴(yán)格,使得編程者無法過多地依賴C編譯程序去查錯;缺少實時檢查,如數(shù)組越界等。
從嚴(yán)格上來說,C語言是塊結(jié)構(gòu)語言,這是因為它在結(jié)構(gòu)上類似于ALGOL、Pascal和Modula-2。從技術(shù)上講,塊結(jié)構(gòu)語言允許在過程和函數(shù)中定義過程和函數(shù)。因為C語言不允許在函數(shù)中定義函數(shù),所以不能稱為通常意義上的塊結(jié)構(gòu)語言。
C語言作為一門面向過程的計算機(jī)語言,至今已有三十多年歷史,應(yīng)用廣泛,無論是Windows還是Linux,你所看到的底層都是用C寫的。大部分的網(wǎng)絡(luò)協(xié)議也都是用C實現(xiàn)的。你看到的最漂亮的游戲畫面也是用C實現(xiàn)的,工業(yè)控制程序也是用C實現(xiàn)的。不過C不是萬能,只是某些方面它適用而已。
C++語言
C++是于1986年由AT&T貝爾實驗室開發(fā)的,語言開發(fā)的目的在于通過數(shù)據(jù)封裝減少程序變量的副作用,從而降低程序的復(fù)雜性并提高程序的可靠性。(筆者曾經(jīng)聽到的開發(fā)C++的目的是由于懂得C語言的人越來越多,所以需要再出一門更難的、比C語言強(qiáng)大的語言,才能保住飯碗,so。C++出世啦)C++是C語言的直接擴(kuò)展,C++的多繼承機(jī)制能更好地描述對象的屬性和行為。
C++是C的擴(kuò)展,但C++可以作為一種全新的語言來看。
C++的特點:面向?qū)ο?、繼承、封裝、多態(tài)性。
由于C++是C的擴(kuò)展,所以也具有C的特點。
C++在C的基礎(chǔ)上,加入了面向?qū)ο缶幊趟枷?,也就決定了C++的效率在某一方面是不如C的。比如定義一種類型,C++用類(Class)來封裝,而C可能就直接幾個變量的組合就成了一個結(jié)構(gòu)體(Struct),類不僅具有成員變量,還具有成員函數(shù)等,在精細(xì)的比較其效率時,C會比C++的效率要高。但由于時代的發(fā)展,項目或工程的龐大化,基于面向?qū)ο蟮乃枷腼@然更能適應(yīng)。即C++在這方面能比C要做得更漂亮?,F(xiàn)在不少系統(tǒng)級編程都是用C++實現(xiàn),許多應(yīng)用級別的軟件也是用C++實現(xiàn)。
這里要注意一點,就是C++并不是完全的面向?qū)ο笳Z言。它是提供了面向?qū)ο蟮哪P鸵约八悸?,但是同時兼容了面向過程的模型。
Java語言
Java語言來自于Sun公司的一個叫Green的項目,其原先的目的是為家用消費電子產(chǎn)品開發(fā)一個分布式代碼系統(tǒng),這樣我們就可以把email發(fā)給電冰箱、電視機(jī)等家用電器。對他們進(jìn)行控制和信息交流。開始,準(zhǔn)備用C++,但C++太復(fù)雜,安全性差,最后用一種新的語言O(shè)ak(Java的前身),Oak是一種用于網(wǎng)絡(luò)的精巧而安全的語言,Sun公司曾依此投標(biāo)一個交互式電視項目,但被SGI打敗??蓱z的Oak幾乎無家可歸,恰巧這時Mark Ardreesen開發(fā)的Mosaic和Netscape啟發(fā)了Oak項目組成員,他們用(Java)編制了HotJava瀏覽器,得到了Sun首席執(zhí)行官Scott McNealy的支持,觸發(fā)了Java進(jìn)軍Internet。Java的取名有一段趣聞:有一天,幾位Java成員組的會員正在討論給這個新的語言取什么名字,當(dāng)時他們正在咖啡館喝著Java(爪哇)咖啡,有一個人靈機(jī)一動說就叫Java怎樣,得到了其他人的贊賞,于是,Java這個名字就這樣傳開了。
Java的特點:
1. 簡單性:風(fēng)格類似于C++,Java摒棄了C++中容易引發(fā)程序錯誤的地方,如指針和內(nèi)存管理。
2. 面向?qū)ο螅篔ava是一種完全面向?qū)ο笳Z言。從這點來看,Java類似于SmallTalk,但其特性、尤其是適用于分布式計算環(huán)境的特性遠(yuǎn)遠(yuǎn)超越了SmallTalk。
3. 分布式:Java包括一個支持HTTP和FTP等基于TCP/IP協(xié)議的子庫。因此,Java應(yīng)用程序可憑借URL打開并訪問網(wǎng)絡(luò)上的對象,其訪問方式與訪問本地文件系統(tǒng)幾乎完全相同。
4. 健壯:Java致力于檢查程序在編譯和運行時的錯誤。類型檢查幫助檢查出許多開發(fā)早期出現(xiàn)的錯誤。Java自己操縱內(nèi)存減少了內(nèi)存出錯的可能性。
5. 結(jié)構(gòu)中立:Java將程序編譯成一種結(jié)構(gòu)中立的中間文件格式。只要有Java運行系統(tǒng)的機(jī)器都執(zhí)行這種中間代碼。這種中間語言被設(shè)計在虛擬機(jī)上運行,由機(jī)器相關(guān)的運行調(diào)試器實現(xiàn)執(zhí)行。
6. 安全:
1)刪除了香指針和手動釋放內(nèi)存等功能,避免了非法內(nèi)存操作。 2)當(dāng)Java用來創(chuàng)建瀏覽器時,語言功能和瀏覽器本身提供的功能結(jié)合起來。 Java在機(jī)器上執(zhí)行前,要經(jīng)過很多測試,它經(jīng)過代碼校驗,檢查代碼段的格式,檢測指針操作,對象操作是否過分以及試圖改變一個對象的類型。 7. 可移植的:同體系結(jié)構(gòu)無關(guān)的特性使得Java應(yīng)用程序可以在配備Java解釋器和運行環(huán)境的任何計算機(jī)系統(tǒng)上運行。任何Java代碼會被解釋成一種中間語言,然后通過不同機(jī)子的特定環(huán)境(如機(jī)器指令)運行程序。實現(xiàn)方便移植的特點。
8. 解釋性。Java解釋器能直接運行目標(biāo)代碼指令。鏈接程序通常比編譯程序所需資源少。
9. 高性能。如果解釋器速度不慢,Java可以在運行時直接將目標(biāo)代碼翻譯成機(jī)器指令。Sun用直接解釋器一秒鐘內(nèi)可調(diào)用300,000個過程。
10. 多線程:Java提供的多線程功能使得在一個程序里可同時執(zhí)行多個小任務(wù)。多線程帶來的更大好處是更好的交互性能和實時控制性能。
11. 動態(tài):動態(tài)特性允許程序動態(tài)地裝入運行過程中所需要的類。在運行時確定引用的好處是可以使用已被更新的類,而不必?fù)?dān)心會影響原有的代碼。如果程序連接了網(wǎng)絡(luò)中另一系統(tǒng)中的某一類,該類的所有者也可以自由地對該類進(jìn)行更新,而不會使任何引用該類的程序崩潰。
Java在誕生之后不久,便受到廣大群眾的歡迎,甚至有人說出有了Java,可以不要C/C++了。一度把Java提到了很高的地位。這當(dāng)然是對Java的一種贊賞,只是有點過了。到今天,Java依然不能取代C,C++,而且還出現(xiàn)了新的對手――.Net(后面將會介紹)。
Java目前主要應(yīng)用:Web瀏覽器、網(wǎng)絡(luò)應(yīng)用系統(tǒng)。
C#語言。
C#是一種精確、簡單、類型安全、面向?qū)ο蟮恼Z言。說到C#,就不得不先簡單介紹一下.net。到底什么是.net呢,按照微軟總裁兼首席執(zhí)行官Steve Ballrner把它定義為:.Net代表一個集合,一個環(huán)境,它可以作為平臺支持下一代Internet的可編程結(jié)構(gòu)。C#是.net的代表語言。
C#的特點:
1. 完全面向?qū)ο蟆?
2. 支持分布式,之所以有C#,是因為微軟相信分布式應(yīng)用程序是未來的趨勢,即處理過程分布在客戶機(jī)和服務(wù)器上。所以C#一出生就注定了能很好解決分布式問題。
3. 跟Java類似,C#代碼經(jīng)過編譯后,成為了一種IL(中間語言)。在運行時,再把IL編譯為平臺專用的代碼。
4. 健壯,C#在檢查程序錯誤和編譯與運行時錯誤一點也不遜于Java,C#也用了自動管理內(nèi)存機(jī)制。
5. C#不像Java那樣完全摒棄了指針和手動內(nèi)存管理。C#默認(rèn)情況下是不能使用指針的,程序員在有必要時可以打開指針來使用。這樣可以保證編程的靈活性。
6. 安全性:C#的安全性是有.net平臺來提供的。C#代碼編譯后成為IL語言。是一種受控代碼,.net提供類型安全檢查等機(jī)制保證代碼是安全的。
7. 可移植性:由于C#使用類似Java的中間語言機(jī)制。使得C#也跟Java類似,可以很方便的移植到其他系統(tǒng)。在運行時,再把中間代碼編譯為適合特定機(jī)器的代碼。
8. 解釋性:C#也是一種特殊的解釋性語言。
9. 高性能:C#把代碼編譯成中間語言后,可以高效的執(zhí)行程序。
10. 多線程:與Java類似,可以由一個主進(jìn)程分出多個執(zhí)行小任務(wù)的多線程。
11. 組件模式:C#很適合組件開發(fā)。各個組件可以由其他語言實現(xiàn)的,然后集成在.net中。
C#是在Java流行起來后所誕生的一種新的語言。由于微軟在操作系統(tǒng)上占有很大的優(yōu)勢。在以往的開發(fā)中累積了不少經(jīng)驗,所形成的.net平臺,所以C#在Windows方面可以說比Java具有更大的優(yōu)勢。如果單純從技術(shù)上來講,C#在網(wǎng)絡(luò)編程上可以與Java匹敵。C#還在Windows Forms也有一定的優(yōu)勢。
C#是一種非常類似于C++的語言,風(fēng)格是更接近于Java,不管是C++程序員還是Java程序員,都可以很方便的轉(zhuǎn)到C#上來。
C#的強(qiáng)大是依賴于.net的發(fā)展,而.net的發(fā)展是看微軟在.net上的決心和投入有多少。從Windows 2003和Vista系統(tǒng)可以看出(前者內(nèi)置.net1.1,后者內(nèi)置.net2.0。).Net在Windows編程中具有重要的戰(zhàn)略意義。
C#目前主要是應(yīng)用在網(wǎng)絡(luò)編程上,其他領(lǐng)域比如數(shù)據(jù)庫、窗體編程,都逐漸在增大。
終于寫完了各種語言的特點。如果讀者對以上觀點不同意,請留言。別BS我就對了。好了。繼續(xù),我該講主題了!
其次,我們現(xiàn)在假定一個初學(xué)者沒有任何程序設(shè)計語言的基礎(chǔ)。先來比較一下各種語言:
Pascal PK C
現(xiàn)在,看我們學(xué)習(xí)Pascal和C的過程:學(xué)Hello world,然后知道怎么編譯,運行。然后學(xué)習(xí)基本數(shù)據(jù)類型,然后輸入輸出。不管學(xué)校希望學(xué)生能學(xué)多好,實際來看,學(xué)生學(xué)Pascal跟學(xué)C是沒什么區(qū)別的。不同的只是語言風(fēng)格。有人也許會說,學(xué)C的精華在于指針。學(xué)C的人會比Pascal強(qiáng)很多。沒錯,指針是學(xué)C的一個重點。但是就按我學(xué)C的課本來看,用到的指針只是很簡單的。理解了*p和p有什么不同,就夠了。然后會編個簡單的幾行代碼,就自認(rèn)為會C了。C庫中有很多函數(shù),教師在課堂上幾乎沒講。比如memset,qsort等,少了這些。你學(xué)Pascal和C沒什么不同,只是作為了學(xué)習(xí)其他語言的鋪墊而已。而新生由于沒有語言根基,有不少好學(xué)生由于教師在課堂上沒講,就以為學(xué)完教師所教的了。這正是好學(xué)生的弱點所在。如果是“壞”學(xué)生,不聽課堂的。倒還可能發(fā)現(xiàn)課堂所學(xué)的C是多么膚淺。還有,我至今沒見過有學(xué)校會教C的圖形開發(fā)的。雖然圖形開發(fā)不是語言基礎(chǔ)。不過對于擴(kuò)展新生的編程視野是一個不錯的選擇?,F(xiàn)代程序軟件支持圖形窗口的太豐富了,幾乎不會太多的學(xué)生去在意窗體的設(shè)置,定位等功能。圖形編程還能激起學(xué)生的編程欲望。筆者曾經(jīng)實現(xiàn)過C的動畫演示,當(dāng)里面的所有圖形都按預(yù)期的運動起來的時候,那種興奮感猶如你在冰天雪地的情況下忽然淋你一盤冰水所感到的那種感覺。
C PK C++
C++是在C的基礎(chǔ)上發(fā)展起來的??雌饋硭坪踹@兩個pk,贏者肯定C++。其實未必。C至今還有生存的空間,而沒有被C++全盤代替。說明了C還是具有不可替代的作用。C目前主要應(yīng)用在于硬件底層的部分,以及對于性能要求較高的應(yīng)用程序中。但是對于復(fù)雜的系統(tǒng)級的開發(fā),顯然C++顯得從容自在。聯(lián)系實際,不少人學(xué)C++的時候,就已經(jīng)有C 的基礎(chǔ)了。有C的基礎(chǔ),學(xué)C++的基本類型的時候可以快速渡過,然后學(xué)類,繼承,多態(tài)等概念。還是從我的經(jīng)歷說起,我選了C++,然后幾乎沒怎上課,因為實在聽了想睡覺,期末前用C++做了一個大作業(yè)后,就叫懂C++了哈,然后考試當(dāng)然輕松過了。其實我那時還是沒學(xué)到C++,本質(zhì)點說,我只是還是在會點C的基礎(chǔ)上。多了一個結(jié)構(gòu)類型:類,而已。后來使用了1年的C++后,才恍然察覺到當(dāng)年的無知。才明白C++是什么。我相信已經(jīng)學(xué)過C++的同學(xué)估計現(xiàn)在連IO流的概念還沒搞清楚的人很多。造成這種現(xiàn)象的原因在于:1. 學(xué)生本身沒有認(rèn)真去編程實現(xiàn)。2. 教師只是重復(fù)的講課本而已。最終判定學(xué)生是否會C++的標(biāo)準(zhǔn)也只是考試為主。關(guān)于高校的考試制度在計算機(jī)系中的效用,筆者將在未來幾天內(nèi)出一篇個人觀點文章。
Java PK C#
目前不少人對這兩種語言議論紛紛。筆者在開始學(xué)C#的時候,曾經(jīng)看過Java程序員對于C#的觀點。把C#貶得一文不值。忽然發(fā)現(xiàn),似乎很多Java的程序員對C#懷有天生的敵意。筆者目前自認(rèn)為精通的是C#(別BS我)。以往學(xué)過Java,在此我寫一下我所感觸到的。雖然微軟一直稱C#是繼承于C/C++,但是不論從代碼結(jié)構(gòu),還是內(nèi)置的支持類,都跟Java有驚人的相似之處。我感覺C#就是在Java之上,針對Java的優(yōu)點和缺點來設(shè)計的。我用過C、C++、Java,感覺還是C#最好,這只是筆者的個人感受。由于C#還保留著指針,當(dāng)要實現(xiàn)一下比較底層的,性能要求高的時候,解決辦法之一是C#可以打開指針,而Java是做不到的,Java只能通過其他途徑,比如優(yōu)化算法來解決。
Java在非windows下獲得了很大的成功:某調(diào)查公司曾經(jīng)使用Google搜索引擎來統(tǒng)計以下指標(biāo):熟練使用某種語言的工程師數(shù)量、某種語言課程教學(xué)的可用性、有多少公司在出售用某種語言編寫的軟件。最后綜合得分情況是:Java以45.2分排名第一;第二名是C,得分是32.2;C++是以24.6分排名第三;C#遠(yuǎn)遠(yuǎn)落后在第九位,得分為4.6。這些數(shù)據(jù)是幾年前的數(shù)據(jù)。在這次測試中還發(fā)現(xiàn),C#的受歡迎程度正在急劇上升;而Java相對穩(wěn)定。這其中一個原因是.net允許許多種編程語言,而不像Java那樣,限制人們只能使用一種語言。開發(fā)者能夠使用包括C、C++、C#甚至Java在內(nèi)的幾乎任何語言來編寫代碼,然后把這些代碼翻譯成機(jī)器看得懂的CLR代碼(公共語言運行時代碼)。這樣.net可以讓開發(fā)者保護(hù)自己的“代碼投資”,換句話說,過去人們用C、C++編寫的代碼都能再次被利用。而Java只能重新寫代碼。
所有指導(dǎo)者(學(xué)校、培訓(xùn)機(jī)構(gòu)、帶你的人)在足夠的時間內(nèi)都希望新生能打下編程良好的基礎(chǔ)。從Pascal的介紹來看,似乎從它開始是很適合的。但是筆者是從C起步的,沒學(xué)過Pascal,對程序設(shè)計的習(xí)慣以及特點一點也不比學(xué)Pascal的人差。我覺得這不是語言的異同造成個人水平不同,在于拿了一門語言的書,新生是如何學(xué)編程的。不少新生可能會認(rèn)為好好上課,聽老師講課,然后回來自己的電腦上把老師講過的內(nèi)容上機(jī)去試一遍,就ok了。估計連不少教師也是這樣想的。筆者認(rèn)為即使真有學(xué)生做得到,效果也是不好的。比如C語言把,我看過不少的C的教程的書,內(nèi)容大同小異。前面幾章,也就詳細(xì)的講了語言定義的基本類型。然后講結(jié)構(gòu)體什么的。C++則是講類,繼承等。這些東西,我感覺上課沒什么好講的,要講最多也就半節(jié)課。如果有一定編程基礎(chǔ)的人,這些東西學(xué)得更快。但是筆者的經(jīng)歷是這些課都上了滿滿一個學(xué)期,還有后面某些章節(jié)是來不及講的。筆者不幸運,在上Java課的時候,沒有上機(jī)課,前面的基本類型都上了半學(xué)期了,不少學(xué)生自己連SDK都沒裝,最終考試就筆試過關(guān)罷了。連這種本應(yīng)動手的課程還是按照傳統(tǒng)的考核方法:卷面考試來解決。能通過高考的學(xué)生,不管是真的有料還是假的有料,相信都已經(jīng)是考試能人了,對于計算機(jī)系來說,筆者認(rèn)為不能全按照傳統(tǒng)的教學(xué)模式來套,這只是閉著眼睛瞎說話而已。程序是具有很強(qiáng)的唯一性的。你行就行,不行就是不行。卷面答得再好也只是吹。我相信不僅我學(xué)校,其他各大高校情況也不會差太多。 這里順便說幾句感想:對于新生來說,應(yīng)該自己能看清進(jìn)入計算機(jī)系跟中學(xué)時候的環(huán)境不同。中學(xué)可以專門應(yīng)試,不必學(xué)一些太實用的東西(除非不讀下去了,準(zhǔn)備出來工作的)。但是到了本科,如果你也只是應(yīng)付教學(xué),然后只是爭取拿獎學(xué)金,最后你不考研或者考不上研,那可以說你在最后一年找工作的時候首先是自己心虛。雖然外面社會對本科要求不會太高,不必學(xué)生的技術(shù)像外面的技術(shù)牛人那么高。但這不代表學(xué)生能什么技能都不會。現(xiàn)在恐怕只有國企性質(zhì)的企業(yè)很看重學(xué)生的成績、拿獎學(xué)金情況等等。但是不能期望所有同學(xué)都能順利去國企。 選擇編程語言也是比較重要的一個環(huán)節(jié),這就看新生個人的興趣在哪。比如有人喜歡黑客,那么它可能就適合學(xué)C,以及各種腳本。有人只喜歡網(wǎng)絡(luò)編程,那么也許他選擇Java或C#就比較適合。如果有人想成為很好的windows編程,那么VC++、.Net編程也許是一個不錯的選擇。語言不在于多,而在于精。如果只學(xué)了一點就換語言,那不如不要學(xué)了,去打游戲,找人聊天更好。 數(shù)據(jù)結(jié)構(gòu):這是編程最基礎(chǔ)的課了??梢哉f能否學(xué)好編程的一個原因在于你有沒學(xué)好數(shù)據(jù)結(jié)構(gòu)。注意,沒學(xué)數(shù)據(jù)結(jié)構(gòu)的,未必編不好程。如果學(xué)生只是每節(jié)課聽老師講結(jié)構(gòu)。然后理解了就完的話,數(shù)據(jù)結(jié)構(gòu)是不會學(xué)好的,別以為考了個9X分就高興。說不定比考了60分的學(xué)得還差。依照筆者的經(jīng)歷。一個班里不少的人,估計一個學(xué)期上完了,連個鏈表如何用語言實現(xiàn)都不懂。對于數(shù)據(jù)結(jié)構(gòu),新生用什么語言來實現(xiàn),這個無所謂。只要你會用某種語言,就行了。 學(xué)編程有一點是很重要的,就是學(xué)會看別人代碼。從代碼中看懂別人的意圖。這樣,可以快速學(xué)到各種技巧,提高自身的編程能力。 不少新生可能會遇到一個比較普遍的問題,就是以前編過的東西會忘記,以后再要寫同樣的功能代碼的時候,就忘了。我以前也經(jīng)常碰到。我認(rèn)為應(yīng)該懂得把你寫的代碼保存起來或封裝起來。以后要用的時候可以直接拿來用,不必重寫。如果以后想到了更好的算法,那么再替換掉舊的代碼。這里我建議學(xué)會創(chuàng)建鏈接接口,Windows下就是dll或lik,其他系統(tǒng)我沒試過,不清楚,不過總會有相應(yīng)的鏈接口文件的。這樣,把代碼測試完畢后,封裝到dll中,就可以長久保存。需要用的時候可以調(diào)用。這樣可以把大部分注意力集中在新的問題上,而不是糾纏于實現(xiàn)過的算法。 學(xué)編程最主要的一點,還是要多編程。并且嘗試去接觸不同方面的問題,并試圖去解決它。這樣,就能在技術(shù)上有很大的提高。本科學(xué)校的教育教不出一個程序員的。程序員只有編程、再編程、然后還是編程,這樣的歷程才能鍛煉出來的。 對于學(xué)生或初學(xué)者來講來,專家建議C/C++作為入門的基礎(chǔ)。重點可以放在C++中,學(xué)好面向?qū)ο蟮乃枷?。從編程中體會到為什么要用面向?qū)ο?,而不是單純的背書。計算機(jī)系的課不應(yīng)該去背的,不懂的就查資料就行了。當(dāng)有了一定編程能力后,就可以選擇你以后作為主要的語言。即可以繼續(xù)研究C++,也可以選擇Java或.net中的任何一門語言。
|
|
來自: raee > 《計算機(jī)入門》