本篇文章是作者多年來的一些感受,主要寫給那些想學(xué)習(xí)程序設(shè)計(jì)而又很迷惘的朋友,希望可以帶來一點(diǎn)幫助。我第一次接觸電腦是在小學(xué)二年級(jí)的時(shí)候。那時(shí)純粹是因?yàn)橄矚g打電子游戲,聽別人說電腦上的游戲十分好玩,于是就漫漫開始與之接觸了。在三年級(jí)時(shí)父母出于我對(duì)計(jì)算機(jī)濃厚的興趣送我去了一個(gè)BASIC編程學(xué)習(xí)班,從那時(shí)起我才真正開始走上編程這條不歸之路。雖然說現(xiàn)在程序設(shè)計(jì)這門專業(yè)在社會(huì)上很熱,競(jìng)爭(zhēng)十分激烈,但是這只是學(xué)習(xí)編程的人比較多而已。真正能夠掌握以至于精通的人實(shí)際上很少,畢竟中國(guó)的軟件業(yè)才剛剛起步不久?,F(xiàn)在社會(huì)對(duì)優(yōu)秀的程序設(shè)計(jì)人員的需求量還是相當(dāng)大的,但是前提是必須要優(yōu)秀。我自己雖然也談不上優(yōu)秀,但多少還是有些感觸。
在這里想講述自己對(duì)于一般程序員和優(yōu)秀程序員之間在技術(shù)上的一些認(rèn)識(shí)(什么敬業(yè)精神生活態(tài)度我就不多說了): 首先作為一個(gè)優(yōu)秀的程序員,數(shù)學(xué)是十分重要的。數(shù)學(xué)是自然科學(xué)的基礎(chǔ),計(jì)算機(jī)科學(xué)實(shí)際上是數(shù)學(xué)的一個(gè)分支。數(shù)學(xué)主要能讓人懂得一種分析問題的方法,然后再通過編程去實(shí)現(xiàn)它。計(jì)算機(jī)內(nèi)部的許多原理也都牽涉到比較復(fù)雜的數(shù)學(xué)知識(shí)。它是我們用來解決現(xiàn)實(shí)問題的最高效的工具。很多學(xué)習(xí)編程的朋友對(duì)數(shù)學(xué)覺得不屑一顧,覺得對(duì)于編程沒有什么關(guān)系。實(shí)際上優(yōu)秀程序員和一般程序員拉開檔次很大一個(gè)程度上就是取決于對(duì)數(shù)學(xué)的能力。一些項(xiàng)目有時(shí)需要很復(fù)雜的數(shù)學(xué)建模和利用數(shù)學(xué)對(duì)于系統(tǒng)效率進(jìn)行分析,而這些項(xiàng)目對(duì)于一般的程序員是很困難的。正確應(yīng)用數(shù)學(xué)知識(shí)有時(shí)候能使你的程序的效率產(chǎn)生質(zhì)的飛躍?,F(xiàn)在的程序員在數(shù)學(xué)上普遍是薄弱環(huán)節(jié),這點(diǎn)是大家應(yīng)該引起足夠重視的。當(dāng)別人對(duì)于這些項(xiàng)目感到無從下手,而你卻能夠完成,這個(gè)時(shí)候你的價(jià)值也就表現(xiàn)出來了。真正優(yōu)秀的程序員是能夠最基本的一點(diǎn)就是要能夠通過自己的知識(shí)來解決一般程序員所無法完成的問題。而數(shù)學(xué)能力就是一個(gè)很重要的環(huán)節(jié)。 其次就是要對(duì)數(shù)據(jù)結(jié)構(gòu)引起足夠的重視。
如果說計(jì)算機(jī)專業(yè)的學(xué)生與非計(jì)算機(jī)專業(yè)的最根本的差別絕對(duì)是數(shù)據(jù)結(jié)構(gòu)(數(shù)學(xué)大家都一樣學(xué)了,主要看你自己學(xué)得好壞)。對(duì)數(shù)據(jù)結(jié)構(gòu)的掌握與運(yùn)用能力是衡量你編程能力的一個(gè)很重要的指標(biāo)。有的人對(duì)于看了鏈表,棧,樹,廣義表這些東西就頭痛。然而這些東西往往能使你的程序的效率比別人高出百倍。由于一直搞信息學(xué)競(jìng)賽,到了大學(xué)又搞ACM,所以我對(duì)數(shù)學(xué)和數(shù)據(jù)結(jié)構(gòu)都掌握得相對(duì)較好。這使我在應(yīng)聘與工作中明顯感到勝人一酬。記得自己大學(xué)時(shí)去一家公司應(yīng)聘的經(jīng)歷,當(dāng)時(shí)去應(yīng)憑的還有3個(gè)人,有2個(gè)大學(xué)畢業(yè),有個(gè)也工作了一段時(shí)間了。他們幾個(gè)都在大講自己的能力如何之強(qiáng),會(huì)使用的語言及編程工具如何之多,經(jīng)驗(yàn)如何之豐富。按理說我應(yīng)該是資質(zhì)最淺的。當(dāng)時(shí)也是初生牛X不怕虎,也就硬著頭皮去了。當(dāng)時(shí)面試的題目是一個(gè)公司的資金管理項(xiàng)目的一個(gè)問題,要求每個(gè)人都在思考后給出自己的設(shè)計(jì)方案。其中比較核心的一個(gè)問題就是要計(jì)算一個(gè)資金最小波動(dòng)值的問題,給出的數(shù)據(jù)量相當(dāng)大,對(duì)效率要求很高。對(duì)于整個(gè)程序的面向?qū)ο蠡姆治鑫覀儙讉€(gè)都是差不多的,畢竟這些東西在學(xué)校里是很重視的,而且不是真正的難點(diǎn)。然而到了最關(guān)鍵的問題時(shí)其余的人都卡殼了,有兩個(gè)是用簡(jiǎn)單的雙重循環(huán),時(shí)間復(fù)雜度(N^2),慘不忍睹。還有一個(gè)在冥思苦想了好一陣以后說用樹,具體技術(shù)細(xì)節(jié)又講不清楚,效率分析也很馬虎。只有我當(dāng)時(shí)很快就給出了采取AVL樹的方案,并且利用高等數(shù)學(xué)推導(dǎo)作出了很詳細(xì)的效率分析和時(shí)空換算,并提出了引入?yún)R編的方法。很自然的我得到了這分工作。在這里大家顯然可以看到數(shù)學(xué)和數(shù)據(jù)結(jié)構(gòu)對(duì)于一個(gè)優(yōu)秀程序員是多么重要,它們是和一般的程序員打開檔次的最關(guān)鍵的地方。這樣向“棗子”碰到的那種情況應(yīng)該很輕松的就可以想到。 如果你是一位想學(xué)習(xí)編程的朋友,我經(jīng)過多年的學(xué)習(xí)總結(jié)出來了一個(gè)學(xué)習(xí)的線路希望對(duì)你有所幫助。要學(xué)習(xí)編程是要有很大恒心和毅力的,首先你要明確自己的目標(biāo),想好自己編程是為了干什么。如果你學(xué)習(xí)僅僅只是一時(shí)想編出QUAKE和成為比爾蓋次的沖動(dòng),那么我勸你還是應(yīng)該還是不要開始學(xué)習(xí),應(yīng)為這樣的目標(biāo)很難支持你日后大量的學(xué)習(xí)。而且你的年齡不能太大(最好是中學(xué)或者大學(xué)生)。如果你想好目標(biāo)并決定開始奮斗,那就讓我們開始吧。如果你一開始對(duì)電腦一無所知,那么你應(yīng)該先熟悉一些電腦的一些最基本的原理和操作,這個(gè)不需要特別細(xì)致的學(xué)習(xí),只要大概知道二進(jìn)制和一些基本操作就可以了。接下來你應(yīng)該先學(xué)習(xí)BASIC語言,這個(gè)語言并不會(huì)耽誤你太多的時(shí)間,學(xué)習(xí)它完全是為了入門,讓你對(duì)電腦編程有一個(gè)比較初步的認(rèn)識(shí)。這時(shí)候你應(yīng)該多編一些小的程序,知道一些最基本每條語句的功能,搞清楚一些基本的數(shù)據(jù)結(jié)構(gòu)(尤其是數(shù)組)對(duì)于一些其余用途的函數(shù)最好不要做任何學(xué)習(xí),因?yàn)檫@樣只會(huì)分散你的注意力。當(dāng)你能夠可以熟練的運(yùn)用BASIC編出猴子選大王,以及電腦出題考試之類的程序時(shí),你就可以開始后面的學(xué)習(xí)了。接下來如果覺得自己接受能力強(qiáng)的話就可以開始學(xué)C了(注意不是C++),如果感覺有困難也可以先學(xué)Pascal過度一下。還有很重要的一點(diǎn)就是千萬不要一開始就學(xué)VB,DELPHI,VC之類的東西,這些東西在一開始學(xué)會(huì)對(duì)你造成很壞的影響。有可能會(huì)把你引入另外一個(gè)錯(cuò)誤的學(xué)習(xí)方向而忽略了真正應(yīng)該掌握的東西。學(xué)C主要是學(xué)過程話的程序設(shè)計(jì),學(xué)會(huì)把自己的程序分成許多的函數(shù)(或過程),養(yǎng)成良好的編程習(xí)慣。這時(shí)可以多看一下高人的程序,不一定要懂意思,主要是學(xué)會(huì)別人程序的格式(比如變量如何起名,怎么劃分函數(shù))。除開掌握基本的控制流語句外,應(yīng)該學(xué)習(xí)一些很簡(jiǎn)單的I/O函數(shù)和數(shù)學(xué)函數(shù)。C的學(xué)習(xí)主要是你舍棄原來BASIC程序那種把所有語句積成一大堆的風(fēng)格,要學(xué)會(huì)使用函數(shù),提高代碼重用性。對(duì)于指針之類的東西如果實(shí)在看不懂可以先不去管,到后面會(huì)有辦法。當(dāng)你能夠比較自如的用C編寫一些小的計(jì)算程序時(shí),你就可以開始你的數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)了(數(shù)學(xué)的學(xué)習(xí)主要是在學(xué)校,自己要多用心)。數(shù)據(jù)結(jié)構(gòu)你可以一點(diǎn)一點(diǎn)漫漫看,并不需要專門空出一段時(shí)間來專門研究,這樣的目的是讓你能夠很好的掌握它,要學(xué)會(huì)用數(shù)據(jù)結(jié)構(gòu)的知識(shí)來規(guī)范自己的程序設(shè)計(jì)和提高程序的效率。學(xué)完C我認(rèn)為接著最好學(xué)習(xí)匯編。這個(gè)或許有許多人都會(huì)反對(duì),然而我個(gè)人認(rèn)為這樣是很好的。從最基本的DOS匯編開始,買本《IBM PC匯編程序設(shè)計(jì)》(清華黃皮)一定要一點(diǎn)一點(diǎn)吃透,實(shí)在看不懂就跳,反復(fù)的嚴(yán)讀是一定可以看懂的。匯編是一定要掌握的,因?yàn)樗婕暗胶芏嘧罨镜闹R(shí)。掌握了匯編和對(duì)I/O有了個(gè)很徹底的認(rèn)識(shí)后,應(yīng)該去學(xué)編譯原理。這個(gè)東西并不要精通,但是一定要知道,在大腦里要有一個(gè)這樣的概念,這對(duì)你對(duì)程序語言的控制能力都有很大的幫助。這樣最基本的學(xué)習(xí)就算完成了。一般智力正常的人前一段東西應(yīng)該都是可以掌握的。接著后面的學(xué)習(xí)就要看你自身的造化了。這個(gè)時(shí)候你應(yīng)該研究一下數(shù)據(jù)結(jié)構(gòu),不要分散自己學(xué)習(xí)的注意力,要知道數(shù)據(jù)結(jié)構(gòu)是異常重要的(相信我,絕對(duì)沒錯(cuò))如果你覺得自己已經(jīng)對(duì)于樹,連表,堆棧之類的東西和排序,遞歸之類的算法已經(jīng)十分清楚,就可以開始學(xué)習(xí)C++了。學(xué)習(xí)前一定要有個(gè)正確的認(rèn)識(shí),那就是C和C++是兩個(gè)不同的東西。學(xué)習(xí)C++是為了學(xué)習(xí)面向?qū)ο蟮某绦蛟O(shè)計(jì),這個(gè)時(shí)候你對(duì)于指針應(yīng)該也能夠掌握了(有匯編的基礎(chǔ)),主要抓住C++和C相比的一些新特性,對(duì)于多態(tài)之類的特性要注意理解掌握,如果沒有搞懂就堅(jiān)決不要往下學(xué)習(xí)。一些基本的概念掌握以后可以看一些別人設(shè)計(jì)的程序,學(xué)習(xí)別人怎么利用面向?qū)ο蟮姆椒▉碓O(shè)計(jì)程序的。這個(gè)東西也是人之間拉開檔次的一個(gè)環(huán)節(jié),可以和數(shù)據(jù)結(jié)構(gòu)放在同等重要的地位。我就見過有的人都大學(xué)畢業(yè)了還搞不懂virtual到底是怎么一回事情。其實(shí)我認(rèn)為學(xué)到這里你已經(jīng)為你成為一個(gè)優(yōu)秀的程序員打下了很好的基礎(chǔ),你已經(jīng)能夠應(yīng)用C++,懂得面向?qū)ο蟪绦蛟O(shè)計(jì),對(duì)數(shù)據(jù)結(jié)構(gòu)掌握很好,掌握匯編和編譯原理。接下來的學(xué)習(xí)就是基于操作平臺(tái)的了,一般是先學(xué)windows(Microsoft畢竟是老大),先學(xué)win32 api,搞請(qǐng)windows基本消息機(jī)制和原理,有匯編基礎(chǔ)基本上不會(huì)碰到什么困難。其實(shí)只要會(huì)了API,其余什么MFC,VCL都是囊中之物了,都不過是對(duì)于API的封裝而已。VC,C++Builder都可輕松拿下,這只是開發(fā)工具的問題。以后的OLE(ActiveX),.NET,數(shù)據(jù)庫(kù)就要看自己的發(fā)展方向而定了。我在這里強(qiáng)調(diào)的是前面的基本能力的學(xué)習(xí),后面操作平臺(tái)雖然知識(shí)體系龐大,然而畢竟比較死,更好掌握。最后編程能力的高低主要還是有以下幾點(diǎn)決定:1。編程的習(xí)慣 2。數(shù)學(xué)能力(包括邏輯思維,分析問題的能力) 3。對(duì)數(shù)據(jù)結(jié)構(gòu)的認(rèn)識(shí)能力 4。經(jīng)驗(yàn)的多少(包括多使用語言的掌握能力)以上只是本人一些愚見,希望大家指出不正確的地方并與我多多交流:
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。