

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、一個程序員給初學編程人的建議一個程序員給初學編程人的建議本篇文章是作者多年來的一些感受,主要寫給那些想學習程序設計而又很迷惘的朋友,希望可以帶來一點幫助。我第一次接觸電腦是在小學二年級的時候。那時純粹是因為喜歡打電子游戲,聽別人說電腦上的游戲十分好玩,于是就漫漫開始與之接觸了。在三年級時父母出于我對計算機濃厚的興趣送我去了一個BASIC編程學習班,從那時起我才真正開始走上編程這條不歸之路。雖然說現在程序設計這門專業(yè)在社會上很熱,競爭十分
2、激烈,但是這只是學習編程的人比較多而已。真正能夠掌握以至于精通的人實際上很少,畢竟中國的軟件業(yè)才剛剛起步不久?,F在社會對優(yōu)秀的程序設計人員的需求量還是相當大的,但是前提是必須要優(yōu)秀。我自己雖然也談不上優(yōu)秀,但多少還是有些感觸。在這里想講述自己對于一般程序員和優(yōu)秀程序員之間在技術上的一些認識(什么敬業(yè)精神生活態(tài)度我就不多說了):首先作為一個優(yōu)秀的程序員,數學是十分重要的。數學是自然科學的基礎,計算機科學實際上是數學的一個分支。數學主要能讓
3、人懂得一種分析問題的方法,然后再通過編程去實現它。計算機內部的許多原理也都牽涉到比較復雜的數學知識。它是我們用來解決現實問題的最高效的工具。很多學習編程的朋友對數學覺得不屑一顧,覺得對于編程沒有什么關系。實際上優(yōu)秀程序員和一般程序員拉開檔次很大一個程度上就是取決于對數學的能力。一些項目有時需要很復雜的數學建模和利用數學對于系統(tǒng)效率進行分析,而這些項目對于一般的程序員是很困難的。正確應用數學知識有時候能使你的程序的效率產生質的飛躍?,F在的
4、程序員在數學上普遍是薄弱環(huán)節(jié),這點是大家應該引起足夠重視的。當別人對于這些項目感到無從下手,而你卻能夠完成,這個時候你的價值也就表現出來了。真正優(yōu)秀的程序員是能夠最基本的一點就是要能夠通過自己的知識來解決一般程序員所無法完成的問題。而數學能力就是一個很重要的環(huán)節(jié)。其次就是要對數據結構引起足夠的重視。如果說計算機專業(yè)的學生與非計算機專業(yè)的最根本的差別絕對是數據結構(數學大家都一樣學了,主要看你自己學得好壞)。對數據結構的掌握與運用能力是衡
5、量你編程能力的一個很重要的指標。有的人對于看了鏈表,棧,樹,廣義表這些東西就頭痛。然而這些東西往往能使你的程序的效率比別人高出百倍。由于一直搞信息學競賽,到了大學又搞ACM,所以我對數學和數據結構都掌握得相對較好。這使我在應聘與工作中明顯感到勝人一酬。記得自己大學時去一家公司應聘的經歷,當時去應憑的還有3個人,有2個大學畢業(yè),有個也工作了一段時間了。他們幾個都在大講自己的能力如何之強,會使用的語言及編程工具如何之多,經驗如何之豐富。按理
6、說我應該是資質最淺的。當時也是初生牛X不怕虎,也就硬著頭皮去了。當時面試的題目是一個公司的資金管理項目的一個問題,要求每個人都在思考后給出自己的設計方案。其中比較核心的一個問題就是要計算一個資金最小波動值的問題,給出的數據量相當大,對效率要求很高。對于整個程序的面向對象化的分析我們幾個都是差不多的,畢竟這些東西在學校里是很重視的,而且不是真正的難點。然而到了最關鍵的問題時其余的人都卡殼了,有兩個是用簡單的雙重循環(huán),時間復雜度(N^2),
7、慘不忍睹。還有一個在冥思苦想了好一陣以后說用樹,具體技術細節(jié)又講不清楚,效率分析也很馬虎。只有我當時很快就給出了采取AVL樹的方案,并且利用高等數學推導作出了很詳細的效率分析和時空換算,并提出了引入匯編的方法。很自然的我得到了這分工作。在這里大家顯然可以看到數學和數據結構對于一個優(yōu)秀程序員是多么重要,它們是和一般的程序員打開檔次的最關鍵的地方。這樣向“棗子”碰到的那種情況應該很輕松的就可以想到。如果你是一位想學習編程的朋友,我經過多年的
8、學習總結出來了一個學習的線路希望對你有所幫助。要學習編程是要有很大恒心和毅力的,首先你要明確自己的目標,想好自己編程是為了干什么。如果你學習僅僅只是一時想編出QUAKE和成為比爾蓋次的沖動,那么我勸你還是應該還是不要開始學習,應為這樣的目標很難支持你日后大量的學習。而且你的年齡不能太大(最好是中學或者大學生)。如果你想好目標并決定開始奮斗,那就讓我們開始吧。如果你一開始對電腦一無所知,那么你應該先熟悉一些電腦的一些最基本的原理和操作,這
9、個不需要特別細致的學習,只要大概知道二進制和一些基本操作就可以了。接下來你應該先學習BASIC語言,這個語言并不會耽誤你太多的時間,學習它完全是為了入門,讓你對電腦編程有一個比較初步的認識。這時候你應該多編一些小的程序,知道一些最基本每條語句的功能,搞清楚一些基本的數據結構(尤其是數組)對于一些其余用途的函數最好不要做任何學習,因為這樣只會分散你的注意力。當你能夠可以熟練的運用BASIC編出猴子選大王,以及電腦出題考試之類的程序時,你就
10、可以開始后面的學習了。接下來如果覺得自己接受能力強的話就可以開始學C了(注意不是C),如果感覺有困難也可以先學Pal過度一下。還有很重要的一點就是千萬不要一開始就學VB,DELPHI,VC之類的東西,這些東西在一開始學會對你造成很壞的影響。有可能會把你引入另外一個錯誤的學習方向而忽略了真正應該掌握的東西。學C主要是學過程話的程序設計,學會把自己的程序分成許多的函數(或過程),養(yǎng)成良好的編程習慣。這時可以多看一下高人的程序,不一定要懂意思
11、,主要是學會別人程序的格式(比如變量如何起名,怎么劃分函數)。除開掌握基本的控制流語句外,應該學習一些很簡單的IO函數和數學函數。C的學習主要是你舍棄原來BASIC程序那種把所有語句積成一大堆的風格,要學會使用函數,提高代碼重用性。對于指針之類的東西如果實在看不懂可以先不去管,到后面會有辦法。當你能夠比較自如的用C編寫一些小的計算程序時,你就可以開始你的數據結構的學習了(數學的學習主要是在學校,自己要多用心)。數據結構你可以一點一點漫漫
12、看,并不需要專門空出一段時間來專門研究,這樣的目的是讓你能夠很好的掌握它,要學會用數據結構的知識來規(guī)范自己的程序設計和提高程序的效率。學完C我認為接著最好學習匯編。這個或許有許多人都會反對,然而我個人認為這樣是很好的。從最基本的DOS匯編開始,買本《IBMPC匯編程序設計》(清華黃皮)一定要一點一點吃透,實在看不懂就跳,反復的嚴讀是一定可以看懂的。匯編是一定要掌握的,因為它涉及到很多最基本的知識。掌握了匯編和對IO有了個很徹底的認識后,
13、應該去學編譯原理。這個東西并不要精通,但是一定要知道,在大腦里要有一個這樣的概念,這對你對程序語言的控制能力都有很大的幫助。這樣最基本的學習就算完成了。一般智力正常的人前一段東西應該都是可以掌握的。接著后面的學習就要看你自身的造化了。這個時候你應該研究一下數據結構,不要分散自己學習的注意力,要知道數據結構是異常重要的(相信我,絕對沒錯)如果你覺得自己已經對于樹,連表,堆棧之類的東西和排序,遞歸之類的算法已經十分清楚,就可以開始學習C了。
14、學習前一定要有個正確的認識,那就是C和C是兩個不同的東西。學習C是為了學習面向對象的程序設計,這個時候你對于指針應該也能夠掌握了(有匯編的基礎),主要抓住C和C相比的一些新特性,對于多態(tài)之類的特性要注意理解掌握,如果沒有搞懂就堅決不要往下學習。一些基本的概念掌握以后可以看一些別人設計的程序,學習別人怎么利用面向對象的方法來設計程序的。這個東西也是人之間拉開檔次的一個環(huán)節(jié),可以和數據結構放在同等重要的地位。我就見過有的人都大學畢業(yè)了還搞不
15、懂virtual到底是怎么一回事情。其實我認為學到這里你已經為你成為一個優(yōu)秀的程序員打下了很好的基礎,你已經能夠應用C,懂得面向對象程序設計,對數據結構掌握很好,掌握匯編和編譯原理。接下來的學習就是基于操作平臺的了,一般是先學windows(Microsoft畢竟是老大),先學win32api,搞請windows基本消息機制和原理,有匯編基礎基本上不會碰到什么困難。其實只要會了API,其余什么MFC,VCL都是囊中之物了,都不過是對于A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論