什么是編程?百度百科的解釋是:
編程是編寫程序的中文簡稱,就是讓計算機為解決某個問題而使用某種程序設計語言編寫程序代碼,并最終得到相應結果的過程。
這樣的解釋是非常合理的:其中的關鍵詞是計算機、程序語言、結果。我也從這3個方向說說自己的一些看法!由于自己認識的局限難免出現錯誤,希望大家指正。
一:認識計算機
計算機的發展大家也有所了解,在這里就不多費口舌。我們現在用的計算機CPU只能認識0和1,這是目前的現狀(如果你能發明另一種機器,能夠識別更多的符號,那么我支持你,并由衷的希望你能有所成就)。計算機由哪些部分組成,各有什么作用,少一個組成部件會有什么后果?這些問題是非常深刻的,我們不一定要對他們了如指掌(不是不重要),但最起碼要有一些基本的認識。電腦只要有個CPU,主板,內存就可以點亮。加個軟驅,就可以運行DOS操作系統。再加個硬盤,就可以把WINDOWS系統放到硬盤上運行起來。對CPU是如何工作,CPU做了哪些事情,CPU為什么只能認識0和1,CPU的尋址方式?對CPU我了解得不深,不敢隨意賣弄。但有一個還是是需要知道一下的,CPU基礎計算只有3個:與,或,非。這3個邏輯門實現了我們現在所有的計算機程序計算。
二、程序語言
據不完全統計,全世界的編程語言就多達1000多種,我們學完也幾乎不可能,也沒有那個必要。有人說一個優秀的程序員至少要掌握6門以上的編程語言,其實想想還是有一定道理。雖然一個人編程能力的體現并不是你會多少語言,而是你能寫出多少精妙的程序。要想寫出精妙的程序,編程思想是必不可少的。沒學過面向過程的語言如:c,你說你想通了面向過程,這得打個問號。沒學過面向對象的語言,你說想通了面向對象,這還得打個問號。當然那種大神除外哈!
拋開編程思想說編程語言就是耍流氓,語言本身就是思想的體現。那我們就說說編程思想吧!
1、過程性的編程思想
計算機只認識0和1 ,但是人們用0和1寫程序是非常困難的。為了方便就出現了0,1的第一層抽象標記:匯編語言。目前的CPU只能執行過程性的程序,任何高級語言都必須轉換成過程性的編程語言后再交給CPU執行。在匯編里主要有三個操作:比較,跳轉(goto),過程調用(call)。為什么說它是過程性的編程思想,值得你去好好的體會一下。不妨寫幾個算法的程序(在程序里面用到比較,跳轉,過程調用),再來看看匯編程序的特點,相信你會有所感悟。
2、結構性的編程思想
隨著人們解決的問題越來越復雜,匯編程序當然束縛了計算機軟件的發展。因此編程思想發生了一場革命性的變化,結構性的編程方法出現了。在結構性編程思想的編程語言里面,C語言首當其沖。
C語言里面有幾個能表現出結構化思想的地方:分支(if), 循環(while,for),結構體(struct). 只要你會用這三個,那么你就可以寫出結構化的程序,但不一定你就了解什么是結構化的編程方法。
什么叫做結構化?為什么說goto會破壞程序的結構化?結構體有什么作用,你能說出結構體的哪些好處? 這些都是值得認真體會的地方。別人給的定義不見得都全面。還是自己理解比較靠得住。
結構化編程里面最具代表性的書籍就要屬"數據結構",具體哪本書比較好就不知道了,好像都差不多,只要是用C寫的就行。C語言的"數據結構"里面就是專門來講怎么用結構性的編程思想來解決實際中的算法問題。看完某些章節,然后自己找個問題,再用程序去實現它。多寫一些程序,會很有幫助。還有需要說明一下,并不是所有的時候結構化的編程一就定好。
3、面向對象的編程思想
現在該說說面向對象編程了。這個也是現在用得最多的編程思想。什么是面向對象,它和結構性的思想有什么不同?從程序語法上看,面向對象比結構性的程序多了兩個特性:
(1)、 結構體成員的私有化。結構化程序里面,結構體的成員都是公有的。然而在面向對象里面,結構體改稱為類,并且成員分為公有和私有兩個部分。就因為這一點的不同,就產生了接口的概念。接口不就是類成員的公有部分么?
(2), 類的繼承。因為出現了繼承,才出現了多態。然而就是因為多態,才出現諸如:隱藏啊,虛函數…等等這些概念。多態的出現,能夠讓同一組數據,在不同的階段,用同一種表達方式,執行不同的操作。如果把這個東西領悟到了,那么你會感嘆一句"原來程序是可以這么寫的".。
因為以上兩點的變化,編程思想也隨之發生了巨大轉變。它可以讓程序更適合人的思維方法來編寫。面向對象的編程語言就很多了,可謂五花八門 :C++ 、 JAVA 、C#等。這三種語言我都用過,下面說一下我用的感覺吧!他們的語法都出自于C語言,這對我們從C語言入手學習編程的很親切。
都說C++和JAVA有很大的不同,而JAVA和C#卻非常相似,你知道為什么嗎?
最根本區別就在于垃圾收集器。就是因為JAVA里面有垃圾自動收集功能,所以JAVA不能和C兼容,而且也不能使用指針。
在C++中的值類型和引用類型是可以自己定義的。如果對象被定義為值類型,那么當編輯器自動把對象收集走之后,有時自己會一無所知。如果對象被定義為引用類型,那么又要必須記得把它釋放掉,不然又會引起什么內存泄漏的問題。在JAVA和C#里面就不一樣,在這兩種語言里面,自定義的類,初始得到的對象只能是引用類型。并且有垃圾收集器幫你回收垃圾對象。所以就不會出現內存泄漏的問題。
因為C#比JAVA后出來吧,JAVA所具有的特性,C#基本上都有。并且還具有一些JAVA所不具有的特性。當然在這里不是說哪個語言好,哪個語言壞。其實他們都是來實現面向對象編程的工具。
在面向對象的編程里面,代表性書籍就要屬"《設計模式》"了。不過設計模式這個東西,不是你看書就能看懂的。并且你硬套那些模式,不一定對你有多大的好處。這個東西,只有設計做多了,才能有所領悟,自己得到總結。總結多了,就會發現和書上的那些東西不謀而合,或許可能比書上總結得更好 。
好了,目前編程思想的發展就到這一步了。將來的編程思想的會是一個什么樣子,我也不得而知。希望有志之士能夠發明一種編程的思想出來,推動軟件業的發展,讓中國也來引領一下世界軟件的發展潮流。
大家走進程序界的初衷是什么呢,這個我也不敢胡亂猜測。但是有一點還是要的,那就是錢。畢竟我們都是要生活的。
而往往能夠快速用來賺錢的都是一種應用技術像windows編程,linux編程,WEB開發等等。你掌握了其中的一門技能,就可以謀得一個職位,可能還可以拿到一個不錯的薪水。然而如果你掌握了編程思想,那么那些應用技術將一通百通(因為應用技術往往都是對特定的一些函數的調用,通俗一點就是調用API)。 掌握了編程思想你將不在局限于某個特定的編程技術,而是對整個軟件系統有了全局的把握,研究的不再是編程技術,而是協議和規范。
就現在的發展看來,技術的迭代周期超乎想象的短。深入了解程序思想還是很有必要的。我們程序猿需要一顆不老的心。
三、結果
這個結果才是我們想要的。到達這個結果的路很多,怎么走才最快最好最方便,一直是我們探索的。在探索過程中才出現了計算機、才出現了程序。這條路會越走越寬、越走越遠我們深信。
看完上面的文字。你對“什么是編程?是不是有了屬于自己的答案?
首發于知乎專欄:《微信小程序之家》地址:https://zhuanlan.zhihu.com/p/25262957?refer=weixinapphome