學習編程有幾年了,感受走了很多彎路,而很多的學弟學妹又在重蹈我當初的覆轍,難免有些痛心。最近在網上也看了許多前輩們的經驗建議,再結合本身的學習經歷在這裏談談基礎的重要性,但願幫助你們少走些彎路。
什麼是基礎呢?就是要把咱們大學所學的離散數學,算法與數據結構,操做系統,計算機體系結構,編譯原理等課程學好,對計算機的體系,CPU自己,操做系統內核,系統平臺,面向對象編程,程序的性能等要有深層次的掌握。
初學者可能體會不到這些基礎的重要性,學習jsp,donet,mfc,vb的朋友甚至會對這些嗤之以鼻,可是一開始沒學好基礎就去學jsp或donet會產生很壞的影響,並且陷入其中不能自拔。
我上大二的時候還對編程沒什麼概念,就上了門C++也不知道能幹什麼,老師說MFC也不知道是什麼東西,看別的同窗在學asp.net就跟着學了,而後就瞭解到.net,j2ee,php是什麼了,就以爲軟件開發就是用這些了,而上的那些專業課又與咱們學的sqlserver啊,css啊,ajax啊,毫無關係,就感慨啊,還不如回家自學去就爲一個文憑嗎?
還不如去培訓,浪費這麼多錢.因而每天基本上沒去上什麼課,每天就在作網站,幾個學期就作了三個網站。感受作這些網站就是學到些技巧,沒什麼進步,這些技巧就比如別人的名字,告訴你你就知道了,網上也均可以搜到。那時候就以爲把.net學好就好了,搞j2ee的比較難,搞api編程就別想了,操做系統更是可望不可即了。後來隨着學習的深刻和看了網上許多前輩們的建議纔對這些基礎的重要性有所體會。
雖然.net或java的開發並不直接用到彙編,操做系統這些,可是不掌握這些基礎是有很大問題的,由於你只知其然不知其全部然,在mfc和.net裏面控件一拖什麼都作好了,很方便,可是出了問題可能就解決不了,有些在網上搜都搜不到。這就是基礎沒打好,不知道它的原理就不知道出錯的緣由。在學.net的時候常會討論那些控件該不應用別人說盡可能別用也不知道爲何?不讓用是由於你在高層開發,你不知道它的原理出錯了你可能解決不了,但實際上是應該用的,否則人家開發它幹嗎,但要在瞭解它的原理後去用就會很方便。
要編寫出優秀的代碼一樣要紮實的基礎,若是數據結構和算法學的很差,怎麼對程序的性能進行優化,怎樣從類庫中選擇合適的數據結構。若是不瞭解操做系統,怎樣能瞭解這些開發工具的原理,它們都是基於操做系統的。不瞭解彙編,編譯原理,怎麼知道程序運行時要多長時間要多少內存,就不能編出高效的代碼。
若是沒有學好基礎一開始就去學.net,java這些越日後就會以爲越吃力,它們涉及的技術太多了,並且不但在更新,對於三層啊,mvc,orm這些架構,你只會用也不明白爲何用,就感受內心虛,感受沒學好。而你把面向對象,軟件工程,設計模式這些基礎學好了再去看這些就能夠一不變應萬變。
你們不要被新名詞、新技術所迷惑.NET、XML等等技術當然誘人,但是若是本身的基礎不紮實,就像是在雲裏霧裏行走同樣,只能看到眼前,不能看到更遠的地方。這些新鮮的技術掩蓋了許多底層的原理,要想真正的學習技術仍是走下雲端,紮紮實實的把基礎知識學好,有了這些基礎,要掌握那些新技術也就很容易了。
開始編程應該先學C/C++,系統api編程,由於它們更接近底層,學習他們更能搞清楚原理。學好了c/C++編程和基礎,再去學習mfc,.net這些就會比較輕鬆,並且很踏實。假設學習VB編程須要4個月,學習基礎課程和VC的程序設計須要1年。那麼若是你先學VB,再來學習後者,時間不會減小,仍是1年,而反過來,若是先學習後者,再來學VB,也許你只須要1個星期就能學得很是熟練 。
編程就比如練功,若是學習.net,mfc,vb等具體的語言和工具是外功(招式),對基礎的學習就是內功,只注重招式而內功不紮實是不可能成爲高手的。不少人會認爲《射鵰英雄傳》中馬玉道長什麼都沒有教郭靖,馬道長教的表面看來是馬步衝權實則都是內功心法,郭靖拜師洪七以後開始練習降龍十八掌憑藉的就是這深厚的內功,吞食蝮蛇寶血又加上練習了周博通傳授的九陰真經和外加功夫雙手互博技以後,終於練就行走江湖的武功,因而可知馬玉道長傳授給了郭靖的是最基礎的,也是最重要的觀念,編程也比如蓋高樓,根基沒打好遲早有一天會挎掉的,並且蓋得越高,損失也越慘重。這些底層知識和課本不是沒有用也不是高深的不能學,而是咱們必須掌握的基礎。php
PS:這些底層知識和課本不是沒有用也不是高深的不能學,而是咱們必須掌握的基礎。這句話你們好好理解下,並非說先生存好才能考慮去研究一些底層,換句話說,若是你底層都不去嘗試研究,那何談發展呢?css