一位十年軟件工程師告訴你什麼是編程思想

什麼是編程思想?答案可能很會複雜,但也能夠很簡單。一句話來說就是,用計算機來解決人們實際問題的思惟方式,即編程思想。 咱們學習編程語言的最終目的,就是但願用計算機來解決咱們的實際問題。那麼學習計算機該如何入手,也是不少初學者犯難的一個問題,特別是對與非計算機專業的人來講更是如此。面對現實如此多的編程語言(好比:C,C++,JAVA,C# …)和 種類繁多的應用技術(好比: windows編程, linux編程,數據庫, 網絡編程 …)。確實讓人有些眼花繚亂,摸不着頭腦。此篇文章就來談談學習計算機的步驟和編程思想的發展。linux

一:認識計算機算法

計算機的發展你們也有所瞭解,在這裏就很少費口舌。咱們如今用的計算機CPU只能認識0和1,這是目前的現狀。(若是你能發明另外一種機器,可以識別更多的符號,那麼我支持你,並由衷的但願你能有所成就)這個階段裏面表明性的書籍就是"計算機組成原理"。這門課的精髓在於兩點:第一,計算機由哪些部分組成,各有什麼做用,少一個組成部件會有什麼後果。雖然當初我對這本書看得不是很透,但看完後我至少就知道了,電腦只要有個CPU,主板,內存就能夠點亮了。加個軟驅,就能夠運行DOS超做系統。再加個光驅,硬盤,就能夠把WINDOWS系統放到硬盤上運行起來。第二,CPU是如何工做,CPU作了哪些事情,CPU爲何只能認識0和1,CPU的尋址方式? 對CPU本人瞭解得不深,不敢隨意賣弄。但有一個仍是是須要知道一下的,CPU基礎計算只有3個:與,或,非。這3個邏輯門實現了咱們如今全部的計算機程序計算。數據庫

二:過程性的編程思想編程

計算機只能認識0和1 ,但人卻不能只是用0,1來寫程序。爲了程序的寫得方便就出現了0,1的第一層抽象標記,彙編語言。彙編裏面的那些標記但是直接對應硬件的。硬件生產廠商都有明確的指令說明書。這些彙編標記是能夠被硬件直接識別的。好比CPU,生產CPU的廠家都會有寄存器的標識好比(ax,bx,cx),操做指令標識(mov),等等。驅動方面的編程大多會用到這方面的東西。學習彙編的核心是你須要認識到彙編是一種過程性的編程語言,而且目前的CPU只能執行過程性的程序,任何高級語言都必須轉換成過程性的編程語言後再交給CPU執行。在彙編裏主要有三個操做:比較,跳轉(goto),過程調用(call)。爲何說它是過程性的編程思想,值得你去好好的體會一下。不妨寫幾個算法的程序(在程序裏面用到比較,跳轉,過程調用),再來看看彙編程序的特色,相信你會有所感悟。值得提一下的是,若是你對操做系統感興趣,也能夠看看什麼是保護模式。windows

三:結構性的編程思想設計模式

隨着人們解決的問題愈來愈複雜,彙編程序固然束縛了計算機軟件的發展。所以編程思想發生了一場革命性的變化,結構性的編程方法出現了。在結構性編程思想的編程語言裏面,C語言首當其衝。C語言裏面有幾個能表現出結構化思想的地方:分支(if), 循環(while,for),結構體(struct). 只要你會用這三個,那麼你就能夠寫出結構化的程序,但不必定你就瞭解什麼是結構化的編程方法。什麼叫作結構化?爲何說goto會破壞程序的結構化?結構體有什麼做用,你能說出結構體的哪些好處? 這些都是值得認真體會的地方。別人給的定義不見得都全面。仍是本身理解比較靠得住。結構化編程裏面最具表明性的書籍就要屬"數據結構",具體哪本書比較好就不知道了,好像都差很少,只要是用C寫的就行。C語言的"數據結構"裏面就是專門來說怎麼用結構性的編程思想來解決實際中的算法問題。看完某些章節,而後本身找個問題,再用程序去實現它。多寫一些程序,會頗有幫助。若是第一遍看完後你看得很模糊,不防先放一放,過一段時間再看看,你可能會有種霍然開朗的感受。還有須要說明一下,並非全部的時候結構化的編程一就定好。某些的時候,結構化的編程會使程序更繁雜。(好比結構化編程但願函數只能有一個入口,一個出口。然而有時一個出口會使程序看起來更繁雜)網絡

四:面向對象的編程思想數據結構

如今該說說面向對象編程了。這個也是如今用得最多的編程思想。什麼是面向對象,它和結構性的思想有什麼不一樣?從程序語法上看,面向對象比結構性的程序多了兩個特性:
1, 結構體成員的私有化。結構化程序裏面,結構體的成員都是公有的。然而在面向對象裏面,結構體改稱爲類,而且成員分爲公有和私有兩個部分。就由於這一點的不一樣,就產生了接口的概念。接口不就是類成員的公有部分麼?(想一想很可笑,本人剛開始認識面向對象的時候,覺得只有定義成interface的才叫作接口)
2, 類的繼承。由於出現了繼承,纔出現了多態。然而就是由於多態,纔出現諸如:隱藏啊,虛函數啊 …等等這些概念。多態的出現,可以讓同一組數據,在不一樣的階段,用同一種表達方式,執行不一樣的操做。若是把這個東西領悟到了,那麼你會感嘆一句"原來程序是能夠這麼寫的". 由於以上兩點的變化,編程思想也隨之發生了巨大轉變。它可讓程序更適合人的思惟方法來編寫。面向對象的編程語言就不少了,可謂五花八門 :C++ , JAVA , C# 這三個本人都用過。用的感受在這裏也隨口說說,只是表明我的觀點。都說C++和JAVA有很大的不一樣,而JAVA和C#卻很是類似,你知道爲何嗎?最根本區別就在於垃圾收集器。就是由於JAVA裏面有垃圾自動收集功能,因此JAVA不能和C兼容,並且也不能使用指針。在C++中的值類型和引用類型是能夠本身定義的。若是對象被定義爲值類型,那麼當編輯器自動把對象收集走以後,有時本身會一無所知。若是對象被定義爲引用類型,那麼又要必須記得把它釋放掉,否則又會引發什麼內存泄漏的問題。在JAVA和C#裏面就不同,在這兩種語言裏面,自定義的類,初始獲得的對象只能是引用類型。而且有垃圾收集器幫你回收垃圾對象。因此就不會出現內存泄漏的問題。編程語言

由於C#比JAVA後出來吧,JAVA所具備的特性,C#基本上都有。而且還具備一些JAVA所不具備的特性(但C#目前不能在linux上面運行)。固然在這裏不是說哪一個語言好,哪一個語言壞。其實他們都是來實現面向對象編程的工具。你也能夠用C或者彙編寫一門支持面向對象的語言出來(若是你想作,本人絕對支持,或者用匯編也行。爲中國的軟件事業貢獻一份力量,省得總說什麼什麼語言都是他們外國人發明的。)只要它可以實現數據封裝,成員私有化,和繼承就好了。在面向對象的編程裏面,表明性書籍就要屬"設計模式"了。不過設計模式這個東西,不是你看書就能看懂的。而且你硬套那些模式,不必定對你有多大的好處。這個東西,只有設計作多了,纔能有所領悟,本身獲得總結。總結多了,就會發現和書上的那些東西不謀而合,或許可能比書上總結得更好 。編輯器

好了,目前編程思想的發展就到這一步了。未來的編程思想的會是一個什麼樣子,我也不得而知。但願有志之士可以發明一種編程的思想出來,推進軟件業的發展,讓中國也來引領一下世界軟件的發展潮流。若是你是初學者,能夠按照上面的順序來學習計算機。但願在每一個環節中能掌握其重點。相信一年以後,你就會有所感悟。 你們都但願學的東西是能夠用來賺錢的。而每每可以快速用來賺錢的都是一種應用技術像windows編程,linux編程,WEB開發等等。你掌握了其中的一門技能,就能夠謀得一個職位,可能還能夠拿到一個不錯的薪水。然而若是你掌握了編程思想,那麼那些應用技術將一通百通(由於應用技術每每都是對特定的一些函數的調用,通俗一點就是調用API,這些東西到專門的網站上查手冊將一目瞭然,好比windows編程,http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/WindowsUserInterface/Windowing/WindowClasses/UsingWindow.asp 這就是一個入門的例子)。 掌握了編程思想你將不在侷限於某個特定的編程技術,而是對整個軟件系統有了全局的把握,研究的再也不是編程技術,而是協議和規範。

你們在學習初期看書。最好不要看電子書,而是買書本看(電子書用來當詞典查閱一下仍是不錯的)。由於電子書看一會眼就花,給人形成一種煩躁的情緒而不能靜下心來好好體會書裏所說的內容。一本書,一支筆,加一個草稿本,是最佳的學習狀態。若是你是在校學生,你能夠到http://www.xiangyataclub.com裏看看你本校內有沒有你想要的二手書或者學習用的電腦設備,這樣能使得資源能夠重複利用。遇到不懂的地方到論壇裏面討論一下仍是不錯的,好比http://www.csdn.net裏面通常性的問題可以找獲得答案。學習計算機須要達到一種狀態,就是在任什麼時候候腦海裏面都會在隱約的思考:對計算機裏面某種原理的理解,或者尋找某種問題的算法。有時一個新想法的閃現會讓本身興奮不已。若是你表現出這種情況,說明你對計算機有着濃厚的興趣。

最後補充一點,就是中國的一句老話"盡信書,不如無書"。編程的學習仍是須要有一點批判的精神和創造的精神纔好。對於某些東西不要過早下定論,或許你某一個智慧的閃光,將爲計算機開闢出一個新的發展方向。

編程思想在我實踐看來就是這樣一個事情,不少代碼你認真的都啊都啊,開始有不少不明白,他們爲何這麼作,有的是不明白他們在幹什麼,有的是不明白他們爲何搞得這麼彆扭,慢慢的就瞭解編寫過程當中一些敲門。在讀啊讀啊,你就能明白怎麼遵照他們之間的那種默契和協定(中國沒有),在讀啊讀啊,你就開始本身想寫些什麼來表達你對他方法的不認同,而後會有不少國外的高手會告訴你你的錯誤(他們真的很好很謙虛,願意和你探討的!國內沒有碰見過。我所知道的高人都玩潛水可能)。而後你就不感造次了,冷靜的讀啊讀啊,直到有一天你忽然以爲就是你本身對了,他們都錯了,你就又發表文章了,這回國外的高手明顯少了,只有1,2我的發來郵件詳細談談,你可能對了可能錯了,因而你不只繼續讀啊讀啊,也開始研究啊研究啊,這時候基本上你開始回人家的問題,等你一旦發表文章的時候就會引發圈內幾個知道你的人注意,你繼續努力,注意你的人就會愈來愈多,這時候你就有了小小小小的名氣,開始有人找你但願你能加盟或者幫助開發等等。

可能有人說,我沒有談到編程思想,可是我告訴你,沒有編程思想,在這個過程當中,你明白了遊戲規則,你取得了他人的承認,你就有了編程思想,這是潛移默化產生的,說白了這個思想就是在這個圈子裏高手之間尊從的一種合同,你們都這麼作,規則就這麼創建了,直到有人提出新的合同方式,你們再去討論,你在去發展。有人可能問我搞什麼,我告訴你搞linux方面的工做(但絕對再也不中國那幾個linux公司幹)。有人問我用了多少時間,我告訴你學習用了將近3年,搞出一點點明堂用了1年多。

由於我不是很聰明,因此用了這麼長時間,可是我相信3年時間是確定要的,我天天至少6個小時埋頭學習,4年時間,懂得了編程思想,真的很苦,很寂寞。因此若是你不是很是熱愛這項事業,請慎重,若是你熱愛,請努力。 源文地址:http://blog.csdn.net/shupan001/article/details/6824668

相關文章
相關標籤/搜索