參考網絡文章,……html
如何 學習C語言 時間:2007-1-5 17:23:03 做者:梁肇新 程序員
梁肇新先生談編程 — 舒愈的博客 (2007-02-14 01:20:01)編程
從C語言程序員入手,實現個人夢想:在 GNU 領域作出突出貢獻,像華人小子李小龍同樣。怎麼學習C語言?(這裏我遵從「梁肇新」先生指路。)網絡
① 學習編寫程序「規範的格式」編程語言
長標識符命名(命名規則),代碼縮進,一對大括號範圍不超過一屏,……ide
我在幹什麼,讓人人都能看得明白。函數
② 耐心工具
個人足球,顛球從0到10,從10到30,從30到50,……到100,……性能
雙腳內側撥球,雙腳撥球次數30萬次。(雙腳內側拉球一樣)學習
……
③ 「重複權威是成熟的必經之路」
學習書本上的源代碼,親自敲出來,編譯、調試……,一本接着一本調試。
熟悉功夫套路——練習師傅的拳路子
④ 學習師傅的代碼後,本身有想法,……
先在紙、筆之間演練本身的思路,以人腦做爲電腦,處理一邊,調整好了上機測試。
練就絕世武功(編程)
① 能熟練地使用某種編程語言
練習套路階段
② 熟悉平臺的接口、語言自身的函數庫
系統調用函數、庫函數;
完成後便可以擂臺決戰。
③ 深刻了解某個平臺的底層
開始練習內功,達到必定功力;依賴於環境。
④ 在平臺上進行較深層次的開發
對系統的核心能作出修改;
擺脫對於具體語言的束縛,能夠作到舉一反三;
內功修煉的高級階段。
⑤ 再也不着眼與技術上的問題了,能從全局上把握和設計一個比較大的軟件系統。
⑥ 該階段的全部問題,僅僅是一個思路。
①②:經過自學徹底能夠實現。
③: 開始依賴環境
5年時間走完①②③。
初級程序員和高級程序員的區別
通常對於一個問題,初級程序員和高級程序員考慮這個問題的方法絕對是不一樣的。好比,在初級程序員階段時,他會以爲vb也能作出應用來,且看起來也不錯。
但到了中級程序員時,他可能就不會選擇vb了,可能會用mfc,這時,也能作出效果不錯的程序。
到高級程序員時,他絕對不是首先選擇以上工具,vb也好,vc也好,這些都不是他考慮的問題。這時考慮的絕對是什麼纔是具備最快效率、最穩定性能的解決問題的方法。軟件和別的產品不一樣。好比,在軟件中要達到某個目標,有n種方法,可是在n種方法中,只有一種方法或兩種方法是最好的,其餘的都很次。因此,要作一個好的系統,是很須要耐心的。若是沒有耐心,就不會有細活,有細活的東西纔是好東西。我以爲作軟件是這樣,作任何事情也是這樣的,必定要投入。
程序員到達最高境界的時候,想的就是「我就是程序,程序就是我」。這時候我要作一個軟件,不會有本身主觀的思路,而是以機器的思路來考慮問題,也就是說,就是以程序的思考方式來思考程序,而不是以我去設計程序的方式去思考程序。這一點若是不到比較高的層次是不能明白的。
你設計程序不就是你思考問題,而後按本身的思路去作程序嗎?
其實不是的。在我設計這個程序的時候,至關於我「鑽」入這個程序裏面去了。這時候沒有我本身的任何思惟,個人全部思惟都是這個程序,它這步該怎麼走,下步該怎麼走,它可能會出現什麼狀況。我動這個部分的時候,別的部分是否要干擾,也許會動一發而牽全身,它們之間是怎麼相互影響的?
也只有到達這個境界,你的程序才能真正地寫好,絕對不是作個什麼可視化。可視化自己就是「我去設計這個程序」,而真正的程序高手是「我就是程序」,這兩種方法絕對是不一樣的。好比,我要用vb去設計一個程序,和我自己就是一個程序的思惟方式,是不同的。別人也許以爲操做系統很深奧,很複雜,其實,若是你到達高手狀態,你就是操做系統,你就能作任何程序。
對待軟件要有一個全面的分析方法,光說理論是沒有用的。若是你沒有通過第1、第2、第3、第四這四個階段,則永遠到達不了高境界。由於空中樓閣的理論沒有用,而這些必須是一步一步地去作出來。
一個高級程序員應該具有開放性思惟,從裏到外的全部的知識都能瞭解。而後,看到世界最新技術就能立刻掌握,立刻了解。實際上,技術到達最高的境界後,是沒有分別的。任何東西都是相通的,只要你到達這個境界之後,什麼問題一看就能明白,一看就能抓住最核心的問題,最根本的根本,而不會被其餘的枝葉或表象所迷惑,作到這一步後纔算比較成功。
從程序員自己來講,若是它到達這一步之後,他就已經造成了開闊的思惟。他有這種開放性思惟的話,他就能作戰略決策,這對他未來作任何事情都有好處。事實上,會作程序後,就會有一種分析問題的方法,學會怎麼樣把問題的表象剖開,看到它的本質。這時你碰到任何具體的問題,只要給點時間,都能垂手可得地解決。實際上,對開發計算機軟件來講,沒有什麼作不了的軟件,全部的軟件都能作,只是看你有沒有時間,有沒有耐心,有沒有資金作支撐。
這幾年,尤爲是這兩三年,估計到2005年前,中國軟件這個行業裏面大的軟件公司就能造成。如今就已經在造成,例如用友,它上市後,地位就更加穩固了。其餘大的軟件企業會在這幾年內迅速長大。這時候,包括流通渠道、經銷商的渠道也會迅速長大。也就是說,到2005年之後,中國軟件這個行業的門檻比如今還要高不少,與美國不會有太大的差異。此時,中國軟件才真正體現出它的威力來。若是你是這些威力中的一員,就已經很厲害了。
別人可能知道比爾?蓋茨是個談判的高手,是賣東西的高手,其實,比爾?蓋茨從根本上來講是個程序高手,這是他根本中的根本。他對全部的技術都很是敏感,一眼就看到本質,並且他自己也能作程序,時常在看程序。如今他不作董事長,而作首席設計師,這時他就更加接近程序的本質。由於他自己就有很開闊的思惟,又深刻到技術的自己,因此他就知道技術的方向。這對於一個公司,對他這樣的人來講,是很是重要的。
若是他判斷錯誤一步,那公司之後再回頭就很難了。計算機的競爭是很是激烈的,不能走錯半步。不少公司之前看上去很火,後來就銷聲匿跡了,就是由於它走錯一步,而後就不行了。爲何它會走錯?由於他不瞭解技術的本質在哪裏,技術的發展方向在哪裏。
比爾?蓋茨由於父母是學法律的,因此他自己就很能「侃」,頗有說服力,而他又是作技術的,就很是清楚技術的方向在哪裏,因此他才能把方向把握得很準確,公司愈來愈大。而別的公司只火一陣子,他卻火了還會再火。就算微軟再龐大,你若是不把握好軟件技術的最前沿,同樣也會玩完。就像intel時刻把握着cpu的最新技術,才能保證本身是行業老大。技術決定它的未來。
因此,程序員要能達到這樣的目標,就要有很是強的耐心和很是好的機遇纔有可能。事實上,如今的機會挺好的,2005年之前機會都很是大,之後機會會比較小。可是,若是有耐心的話,你仍是會有機會的,機會都是出在耐內心。我記得有句話說「雄心的一半是耐心」,我認爲雄心的三分之二都是耐心。若是你越有野心,你就越要有耐心,你的野心纔有可能實現。若是你有野心而沒有耐心,那都是胡思亂想,別人一眼就能看穿。最後在競爭中,對手一眼就看到你的意圖,那你還有什麼可競爭的?