一個程序員給初學編程人的建議

我只是摘取了部分段落,因爲只有這些段落才應該是我值得思考的:

首先作爲一個優秀的程序員,數學是十分重要的。數學是自然科學的基礎,計算機科學實際上是數學的一個分支。數學主要能讓人懂得一種分析問題的方法,然後再通過編程去實現它。計算機內部的許多原理也都牽涉到比較複雜的數學知識。它是我們用來解決現實問題的最高效的工具。很多學習編程的朋友對數學覺得不屑一顧,覺得對於編程沒有什麼關係。實際上優秀程序員和一般程序員拉開檔次很大一個程度上就是取決於對數學的能力。一些項目有時需要很複雜的數學建模和利用數學對於系統效率進行分析,而這些項目對於一般的程序員是很困難的。正確應用數學知識有時候能使你的程序的效率產生質的飛躍。現在的程序員在數學上普遍是薄弱環節,這點是大家應該引起足夠重視的。當別人對於這些項目感到無從下手,而你卻能夠完成,這個時候你的價值也就表現出來了。真正優秀的程序員是能夠最基本的一點就是要能夠通過自己的知識來解決一般程序員所無法完成的問題。而數學能力就是一個很重要的環節。

其次就是要對數據結構引起足夠的重視。如果說計算機專業的學生與非計算機專業的最根本的差別絕對是數據結構(數學大家都一樣學了,主要看你自己學得好壞)。對數據結構的掌握與運用能力是衡量你編程能力的一個很重要的指標。有的人對於看了鏈表,棧,樹,廣義表這些東西就頭痛。然而這些東西往往能使你的程序的效率比別人高出百倍。由於一直搞信息學競賽,到了大學又搞ACM,所以我對數學和數據結構都掌握得相對較好。這使我在應聘與工作中明顯感到勝人一酬。記得自己大學時去一家公司應聘的經歷,當時去應憑的還有3個人,有2個大學畢業,有個也工作了一段時間了。他們幾個都在大講自己的能力如何之強,會使用的語言及編程工具如何之多,經驗如何之豐富。按理說我應該是資質最淺的。當時也是初生牛X不怕虎,也就硬着頭皮去了。當時面試的題目是一個公司的資金管理項目的一個問題,要求每個人都在思考後給出自己的設計方案。其中比較核心的一個問題就是要計算一個資金最小波動值的問題,給出的數據量相當大,對效率要求很高。對於整個程序的面向對象化的分析我們幾個都是差不多的,畢竟這些東西在學校裏是很重視的,而且不是真正的難點。然而到了最關鍵的問題時其餘的人都卡殼了,有兩個是用簡單的雙重循環,時間複雜度(N^2),慘不忍睹。還有一個在冥思苦想了好一陣以後說用樹,具體技術細節又講不清楚,效率分析也很馬虎。只有我當時很快就給出了採取AVL樹的方案,並且利用高等數學推導作出了很詳細的效率分析和時空換算,並提出了引入彙編的方法。很自然的我得到了這分工作。在這裏大家顯然可以看到數學和數據結構對於一個優秀程序員是多麼重要,它們是和一般的程序員打開檔次的最關鍵的地方。這樣向“棗子”碰到的那種情況應該很輕鬆的就可以想到。

如果你是一位想學習編程的朋友,我經過多年的學習總結出來了一個學習的線路希望對你有所幫助。要學習編程是要有很大恆心和毅力的,首先你要明確自己的目標,想好自己編程是爲了幹什麼。如果你學習僅僅只是一時想編出QUAKE和成爲比爾蓋次的衝動,那麼我勸你還是應該還是不要開始學習,應爲這樣的目標很難支持你日後大量的學習。而且你的年齡不能太大(最好是中學或者大學生)。如果你想好目標並決定開始奮鬥,那就讓我們開始吧。如果你一開始對電腦一無所知,那麼你應該先熟悉一些電腦的一些最基本的原理和操作,這個不需要特別細緻的學習,只要大概知道二進制和一些基本操作就可以了。接下來你應該先學習BASIC語言,這個語言並不會耽誤你太多的時間,學習它完全是爲了入門,讓你對電腦編程有一個比較初步的認識。這時候你應該多編一些小的程序,知道一些最基本每條語句的功能,搞清楚一些基本的數據結構(尤其是數組)對於一些其餘用途的函數最好不要做任何學習,因爲這樣只會分散你的注意力。當你能夠可以熟練的運用BASIC編出猴子選大王,以及電腦出題考試之類的程序時,你就可以開始後面的學習了。接下來如果覺得自己接受能力強的話就可以開始學C了(注意不是C++),如果感覺有困難也可以先學Pascal過度一下。還有很重要的一點就是千萬不要一開始就學VB,DELPHI,VC之類的東西,這些東西在一開始學會對你造成很壞的影響。有可能會把你引入另外一個錯誤的學習方向而忽略了真正應該掌握的東西。學C主要是學過程話的程序設計,學會把自己的程序分成許多的函數(或過程),養成良好的編程習慣。這時可以多看一下高人的程序,不一定要懂意思,主要是學會別人程序的格式(比如變量如何起名,怎麼劃分函數)。除開掌握基本的控制流語句外,應該學習一些很簡單的I/O函數和數學函數。C的學習主要是你捨棄原來BASIC程序那種把所有語句積成一大堆的風格,要學會使用函數,提高代碼重用性。對於指針之類的東西如果實在看不懂可以先不去管,到後面會有辦法。當你能夠比較自如的用C編寫一些小的計算程序時,你就可以開始你的數據結構的學習了(數學的學習主要是在學校,自己要多用心)。數據結構你可以一點一點漫漫看,並不需要專門空出一段時間來專門研究,這樣的目的是讓你能夠很好的掌握它,要學會用數據結構的知識來規範自己的程序設計和提高程序的效率。學完C我認爲接着最好學習彙編。這個或許有許多人都會反對,然而我個人認爲這樣是很好的。從最基本的DOS彙編開始,買本《IBM PC彙編程序設計》(清華黃皮)一定要一點一點吃透,實在看不懂就跳,反覆的嚴讀是一定可以看懂的。彙編是一定要掌握的,因爲它涉及到很多最基本的知識。掌握了彙編和對I/O有了個很徹底的認識後,應該去學編譯原理。這個東西並不要精通,但是一定要知道,在大腦裏要有一個這樣的概念,這對你對程序語言的控制能力都有很大的幫助。這樣最基本的學習就算完成了。一般智力正常的人前一段東西應該都是可以掌握的。接着後面的學習就要看你自身的造化了。這個時候你應該研究一下數據結構,不要分散自己學習的注意力,要知道數據結構是異常重要的(相信我,絕對沒錯)如果你覺得自己已經對於樹,連表,堆棧之類的東西和排序,遞歸之類的算法已經十分清楚,就可以開始學習C++了。學習前一定要有個正確的認識,那就是C和C++是兩個不同的東西。學習C++是爲了學習面向對象的程序設計,這個時候你對於指針應該也能夠掌握了(有彙編的基礎),主要抓住C++和C相比的一些新特性,對於多態之類的特性要注意理解掌握,如果沒有搞懂就堅決不要往下學習。一些基本的概念掌握以後可以看一些別人設計的程序,學習別人怎麼利用面向對象的方法來設計程序的。這個東西也是人之間拉開檔次的一個環節,可以和數據結構放在同等重要的地位。我就見過有的人都大學畢業了還搞不懂virtual到底是怎麼一回事情。其實我認爲學到這裏你已經爲你成爲一個優秀的程序員打下了很好的基礎,你已經能夠應用C++,懂得面向對象程序設計,對數據結構掌握很好,掌握彙編和編譯原理。接下來的學習就是基於操作平臺的了,一般是先學windows(Microsoft畢竟是老大),先學win32 api,搞請windows基本消息機制和原理,有彙編基礎基本上不會碰到什麼困難。其實只要會了API,其餘什麼MFC,VCL都是囊中之物了,都不過是對於API的封裝而已。VC,C++Builder都可輕鬆拿下,這只是開發工具的問題。以後的OLE(ActiveX),.NET,數據庫就要看自己的發展方向而定了。我在這裏強調的是前面的基本能力的學習,後面操作平臺雖然知識體系龐大,然而畢竟比較死,更好掌握。最後編程能力的高低主要還是有以下幾點決定:1。編程的習慣 2。數學能力(包括邏輯思維,分析問題的能力) 3。對數據結構的認識能力 4。經驗的多少(包括多使用語言的掌握能力)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章