您的位置:首頁>正文

月薪數萬的攻城獅帶你瞭解到什麼是程式設計思想,原來這就是程式設計思想

什麼是程式設計思想?答案可能很會複雜, 但也可以很簡單;

一句話來講就是, 用電腦來解決人們實際問題的思維方式, 即程式設計思想;

程式設計就是為了解決實際中的問題, 在思考如何編碼的時候, 把問題抽象到一定的高度去思考, 更容易把握問題所在;

我們學習程式設計語言的最終目的, 就是希望用電腦來解決我們的實際問題;

那麼學習電腦該如何入手, 也是很多初學者犯難的一個問題, 特別是對與非電腦專業的人來說更是如此;

面對現實如此多的程式設計語言(比如:C,C++,JAVA,C# …)和 種類繁多的應用技術(比如: windows程式設計,

linux程式設計, 資料庫, 網路程式設計 …),

確實讓人有些眼花繚亂, 摸不著頭腦。

分享之前我還是要推薦下我自己的C/C++學習群:154937490, 不管你是小白還是大牛, 小編我都挺歡迎, 不定期分享乾貨, 包括我自己整理的資料和零基礎入門教程, 送給大家,

歡迎初學和進階中的小夥伴。

瞭解電腦原理

在這裡就不多費口舌。

這個階段裡面代表性的書籍就是"計算機組成原理"。 這門課的精髓在於兩點:

電腦由哪些部分組成, 各有什麼作用, 少一個組成部件會有什麼後果。 雖然當初我對這本書看得不是很透, 但看完後我至少就知道了, 電腦只要有個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)。 為什麼說它是過程性的程式設計思想, 值得你去好好的體會一下。

不妨寫幾個演算法的程式(在程式裡面用到比較, 跳轉, 程序呼叫), 再來看看組合語言程式的特點, 相信你會有所感悟。 值得提一下的是, 如果你對作業系統感興趣, 也可以看看什麼是保護模式。

結構性的程式設計思想

結構性的程式設計思想隨著人們解決的問題越來越複雜, 組合語言程式當然束縛了電腦軟體的發展。

因此程式設計思想發生了一場革命性的變化, 結構性的程式設計方法出現了。 在結構性程式設計思想的程式設計語言裡面, C語言首當其衝。C語言裡面有幾個能表現出結構化思想的地方:分支(if), 迴圈(while,for),結構體(struct). 只要你會用這三個,那麼你就可以寫出結構化的程式,但不一定你就瞭解什麼是結構化的程式設計方法。

什麼叫做結構化?為什麼說goto會破壞程式的結構化?結構體有什麼作用,你能說出結構體的哪些好處? 這些都是值得認真體會的地方。

別人給的定義不見得都全面。還是自己理解比較靠得住。

結構化程式設計裡面最具代表性的書籍就要屬"資料結構",具體哪本書比較好就不知道了,好像都差不多,只要是用C寫的就行。

C語言的"資料結構"裡面就是專門來講怎麼用結構性的程式設計思想來解決實際中的演算法問題。

看完某些章節,然後自己找個問題,再用程式去實現它。

多寫一些程式,會很有説明。如果第一遍看完後你看得很模糊,不防先放一放,過一段時間再看看,你可能會有種霍然開朗的感覺。還有需要說明一下,並不是所有的時候結構化的程式設計一就定好。某些的時候,結構化的程式設計會使程式更繁雜。比如結構化程式設計希望函數只能有一個入口,一個出口。然而有時一個出口會使程式看起來更繁雜。

物件導向程式設計思想

物件導向,則在基於物件的基礎上增加了多態性。所謂多態,就是可以用統一的方法對不同的物件進行同樣的操作。當然,這些物件不能完全不同,而需要有一些共性,只有存在了這些共性才可能用同樣的方法去操作它們。我們從 C++ 通常的實現方法的角度來看,A 和 B 在繼承關係上都有共同的祖先 R ,那麼我們就可以把 A 和 B 都用對待 R 的控制方法去控制它們。

它和結構性的思想有什麼不同?從程式語法上看,物件導向比結構性的程式多了兩個特性:

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程式設計。

掌握了程式設計思想你將不在局限於某個特定的程式設計技術,而是對整個軟體系統有了全域的把握,研究的不再是程式設計技術,而是協定和規範。

學習程式設計需要達到一種狀態,就是在任何時候腦海裡面都會在隱約的思考:對電腦裡面某種原理的理解,或者尋找某種問題的演算法。

有時一個新想法的閃現會讓自己興奮不已。如果你表現出這種狀況,說明你對電腦有著濃厚的興趣。

最後補充一點,就是中國的一句老話"盡信書,不如無書"。

程式設計的學習還是需要有一點批判的精神和創造的精神才好。對於某些東西不要過早下定論,或許你某一個智慧的閃光,將為電腦開闢出一個新的發展方向。

程式設計思想在我實踐看來就是這樣一個事情,很多代碼你認真的都啊都啊,開始有很多不明白,他們為什麼這麼做,有的是不明白他們在幹什麼,有的是不明白他們為什麼搞得這麼彆扭,慢慢的就瞭解編寫過程中一些竅門。

C語言首當其衝。C語言裡面有幾個能表現出結構化思想的地方:分支(if), 迴圈(while,for),結構體(struct). 只要你會用這三個,那麼你就可以寫出結構化的程式,但不一定你就瞭解什麼是結構化的程式設計方法。

什麼叫做結構化?為什麼說goto會破壞程式的結構化?結構體有什麼作用,你能說出結構體的哪些好處? 這些都是值得認真體會的地方。

別人給的定義不見得都全面。還是自己理解比較靠得住。

結構化程式設計裡面最具代表性的書籍就要屬"資料結構",具體哪本書比較好就不知道了,好像都差不多,只要是用C寫的就行。

C語言的"資料結構"裡面就是專門來講怎麼用結構性的程式設計思想來解決實際中的演算法問題。

看完某些章節,然後自己找個問題,再用程式去實現它。

多寫一些程式,會很有説明。如果第一遍看完後你看得很模糊,不防先放一放,過一段時間再看看,你可能會有種霍然開朗的感覺。還有需要說明一下,並不是所有的時候結構化的程式設計一就定好。某些的時候,結構化的程式設計會使程式更繁雜。比如結構化程式設計希望函數只能有一個入口,一個出口。然而有時一個出口會使程式看起來更繁雜。

物件導向程式設計思想

物件導向,則在基於物件的基礎上增加了多態性。所謂多態,就是可以用統一的方法對不同的物件進行同樣的操作。當然,這些物件不能完全不同,而需要有一些共性,只有存在了這些共性才可能用同樣的方法去操作它們。我們從 C++ 通常的實現方法的角度來看,A 和 B 在繼承關係上都有共同的祖先 R ,那麼我們就可以把 A 和 B 都用對待 R 的控制方法去控制它們。

它和結構性的思想有什麼不同?從程式語法上看,物件導向比結構性的程式多了兩個特性:

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程式設計。

掌握了程式設計思想你將不在局限於某個特定的程式設計技術,而是對整個軟體系統有了全域的把握,研究的不再是程式設計技術,而是協定和規範。

學習程式設計需要達到一種狀態,就是在任何時候腦海裡面都會在隱約的思考:對電腦裡面某種原理的理解,或者尋找某種問題的演算法。

有時一個新想法的閃現會讓自己興奮不已。如果你表現出這種狀況,說明你對電腦有著濃厚的興趣。

最後補充一點,就是中國的一句老話"盡信書,不如無書"。

程式設計的學習還是需要有一點批判的精神和創造的精神才好。對於某些東西不要過早下定論,或許你某一個智慧的閃光,將為電腦開闢出一個新的發展方向。

程式設計思想在我實踐看來就是這樣一個事情,很多代碼你認真的都啊都啊,開始有很多不明白,他們為什麼這麼做,有的是不明白他們在幹什麼,有的是不明白他們為什麼搞得這麼彆扭,慢慢的就瞭解編寫過程中一些竅門。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示