什么是編程瘤运?百度百科的解釋是:
編程是編寫(xiě)程序的中文簡(jiǎn)稱,就是讓計(jì)算機(jī)為解決某個(gè)問(wèn)題而使用某種程序設(shè)計(jì)語(yǔ)言編寫(xiě)程序代碼匠题,并最終得到相應(yīng)結(jié)果的過(guò)程拯坟。
這樣的解釋是非常合理的:其中的關(guān)鍵詞是計(jì)算機(jī)、程序語(yǔ)言韭山、結(jié)果郁季。我也從這3個(gè)方向說(shuō)說(shuō)自己的一些看法!由于自己認(rèn)識(shí)的局限難免出現(xiàn)錯(cuò)誤钱磅,希望大家指正梦裂。
一:認(rèn)識(shí)計(jì)算機(jī)
計(jì)算機(jī)的發(fā)展大家也有所了解,在這里就不多費(fèi)口舌盖淡。我們現(xiàn)在用的計(jì)算機(jī)CPU只能認(rèn)識(shí)0和1年柠,這是目前的現(xiàn)狀(如果你能發(fā)明另一種機(jī)器,能夠識(shí)別更多的符號(hào)褪迟,那么我支持你冗恨,并由衷的希望你能有所成就)。計(jì)算機(jī)由哪些部分組成味赃,各有什么作用掀抹,少一個(gè)組成部件會(huì)有什么后果?這些問(wèn)題是非常深刻的心俗,我們不一定要對(duì)他們了如指掌(不是不重要)傲武,但最起碼要有一些基本的認(rèn)識(shí)。電腦只要有個(gè)CPU城榛,主板揪利,內(nèi)存就可以點(diǎn)亮。加個(gè)軟驅(qū)吠谢,就可以運(yùn)行DOS操作系統(tǒng)土童。再加個(gè)硬盤(pán),就可以把WINDOWS系統(tǒng)放到硬盤(pán)上運(yùn)行起來(lái)工坊。對(duì)CPU是如何工作献汗,CPU做了哪些事情,CPU為什么只能認(rèn)識(shí)0和1王污,CPU的尋址方式罢吃?對(duì)CPU我了解得不深,不敢隨意賣(mài)弄昭齐。但有一個(gè)還是是需要知道一下的尿招,CPU基礎(chǔ)計(jì)算只有3個(gè):與,或,非就谜。這3個(gè)邏輯門(mén)實(shí)現(xiàn)了我們現(xiàn)在所有的計(jì)算機(jī)程序計(jì)算怪蔑。
二、程序語(yǔ)言
據(jù)不完全統(tǒng)計(jì)丧荐,全世界的編程語(yǔ)言就多達(dá)1000多種缆瓣,我們學(xué)完也幾乎不可能,也沒(méi)有那個(gè)必要虹统。有人說(shuō)一個(gè)優(yōu)秀的程序員至少要掌握6門(mén)以上的編程語(yǔ)言弓坞,其實(shí)想想還是有一定道理。雖然一個(gè)人編程能力的體現(xiàn)并不是你會(huì)多少語(yǔ)言车荔,而是你能寫(xiě)出多少精妙的程序渡冻。要想寫(xiě)出精妙的程序,編程思想是必不可少的忧便。沒(méi)學(xué)過(guò)面向過(guò)程的語(yǔ)言如:c族吻,你說(shuō)你想通了面向過(guò)程,這得打個(gè)問(wèn)號(hào)茬腿。沒(méi)學(xué)過(guò)面向?qū)ο蟮恼Z(yǔ)言呼奢,你說(shuō)想通了面向?qū)ο螅@還得打個(gè)問(wèn)號(hào)切平。當(dāng)然那種大神除外哈!
拋開(kāi)編程思想說(shuō)編程語(yǔ)言就是耍流氓辐董,語(yǔ)言本身就是思想的體現(xiàn)悴品。那我們就說(shuō)說(shuō)編程思想吧!
1简烘、過(guò)程性的編程思想
計(jì)算機(jī)只認(rèn)識(shí)0和1 苔严,但是人們用0和1寫(xiě)程序是非常困難的。為了方便就出現(xiàn)了0孤澎,1的第一層抽象標(biāo)記:匯編語(yǔ)言届氢。目前的CPU只能執(zhí)行過(guò)程性的程序,任何高級(jí)語(yǔ)言都必須轉(zhuǎn)換成過(guò)程性的編程語(yǔ)言后再交給CPU執(zhí)行覆旭。在匯編里主要有三個(gè)操作:比較退子,跳轉(zhuǎn)(goto),過(guò)程調(diào)用(call)。為什么說(shuō)它是過(guò)程性的編程思想型将,值得你去好好的體會(huì)一下寂祥。不妨寫(xiě)幾個(gè)算法的程序(在程序里面用到比較,跳轉(zhuǎn)七兜,過(guò)程調(diào)用)丸凭,再來(lái)看看匯編程序的特點(diǎn),相信你會(huì)有所感悟。
2惜犀、結(jié)構(gòu)性的編程思想
隨著人們解決的問(wèn)題越來(lái)越復(fù)雜铛碑,匯編程序當(dāng)然束縛了計(jì)算機(jī)軟件的發(fā)展。因此編程思想發(fā)生了一場(chǎng)革命性的變化虽界,結(jié)構(gòu)性的編程方法出現(xiàn)了亚茬。在結(jié)構(gòu)性編程思想的編程語(yǔ)言里面,C語(yǔ)言首當(dāng)其沖浓恳。
C語(yǔ)言里面有幾個(gè)能表現(xiàn)出結(jié)構(gòu)化思想的地方:分支(if), 循環(huán)(while刹缝,for),結(jié)構(gòu)體(struct). 只要你會(huì)用這三個(gè),那么你就可以寫(xiě)出結(jié)構(gòu)化的程序颈将,但不一定你就了解什么是結(jié)構(gòu)化的編程方法梢夯。
什么叫做結(jié)構(gòu)化?為什么說(shuō)goto會(huì)破壞程序的結(jié)構(gòu)化晴圾?結(jié)構(gòu)體有什么作用颂砸,你能說(shuō)出結(jié)構(gòu)體的哪些好處? 這些都是值得認(rèn)真體會(huì)的地方死姚。別人給的定義不見(jiàn)得都全面人乓。還是自己理解比較靠得住。
結(jié)構(gòu)化編程里面最具代表性的書(shū)籍就要屬"數(shù)據(jù)結(jié)構(gòu)"都毒,具體哪本書(shū)比較好就不知道了色罚,好像都差不多,只要是用C寫(xiě)的就行账劲。C語(yǔ)言的"數(shù)據(jù)結(jié)構(gòu)"里面就是專門(mén)來(lái)講怎么用結(jié)構(gòu)性的編程思想來(lái)解決實(shí)際中的算法問(wèn)題戳护。看完某些章節(jié)瀑焦,然后自己找個(gè)問(wèn)題腌且,再用程序去實(shí)現(xiàn)它。多寫(xiě)一些程序榛瓮,會(huì)很有幫助铺董。還有需要說(shuō)明一下,并不是所有的時(shí)候結(jié)構(gòu)化的編程一就定好禀晓。
3精续、面向?qū)ο蟮木幊趟枷?/b>
現(xiàn)在該說(shuō)說(shuō)面向?qū)ο缶幊塘恕_@個(gè)也是現(xiàn)在用得最多的編程思想匆绣。什么是面向?qū)ο笞び遥徒Y(jié)構(gòu)性的思想有什么不同?從程序語(yǔ)法上看崎淳,面向?qū)ο蟊冉Y(jié)構(gòu)性的程序多了兩個(gè)特性:
(1)堪夭、 結(jié)構(gòu)體成員的私有化。結(jié)構(gòu)化程序里面,結(jié)構(gòu)體的成員都是公有的森爽。然而在面向?qū)ο罄锩婧藁恚Y(jié)構(gòu)體改稱為類,并且成員分為公有和私有兩個(gè)部分爬迟。就因?yàn)檫@一點(diǎn)的不同橘蜜,就產(chǎn)生了接口的概念。接口不就是類成員的公有部分么付呕?
(2)计福, 類的繼承。因?yàn)槌霈F(xiàn)了繼承徽职,才出現(xiàn)了多態(tài)象颖。然而就是因?yàn)槎鄳B(tài),才出現(xiàn)諸如:隱藏啊姆钉,虛函數(shù)…等等這些概念说订。多態(tài)的出現(xiàn),能夠讓同一組數(shù)據(jù)潮瓶,在不同的階段陶冷,用同一種表達(dá)方式,執(zhí)行不同的操作毯辅。如果把這個(gè)東西領(lǐng)悟到了埂伦,那么你會(huì)感嘆一句"原來(lái)程序是可以這么寫(xiě)的".。
因?yàn)橐陨蟽牲c(diǎn)的變化悉罕,編程思想也隨之發(fā)生了巨大轉(zhuǎn)變赤屋。它可以讓程序更適合人的思維方法來(lái)編寫(xiě)。面向?qū)ο蟮木幊陶Z(yǔ)言就很多了,可謂五花八門(mén) :C++ 壁袄、 JAVA 、C#等媚媒。這三種語(yǔ)言我都用過(guò)嗜逻,下面說(shuō)一下我用的感覺(jué)吧!他們的語(yǔ)法都出自于C語(yǔ)言缭召,這對(duì)我們從C語(yǔ)言入手學(xué)習(xí)編程的很親切栈顷。
都說(shuō)C++和JAVA有很大的不同,而JAVA和C#卻非常相似嵌巷,你知道為什么嗎萄凤?
最根本區(qū)別就在于垃圾收集器。就是因?yàn)镴AVA里面有垃圾自動(dòng)收集功能搪哪,所以JAVA不能和C兼容靡努,而且也不能使用指針。
在C++中的值類型和引用類型是可以自己定義的。如果對(duì)象被定義為值類型惑朦,那么當(dāng)編輯器自動(dòng)把對(duì)象收集走之后兽泄,有時(shí)自己會(huì)一無(wú)所知。如果對(duì)象被定義為引用類型漾月,那么又要必須記得把它釋放掉病梢,不然又會(huì)引起什么內(nèi)存泄漏的問(wèn)題。在JAVA和C#里面就不一樣梁肿,在這兩種語(yǔ)言里面蜓陌,自定義的類,初始得到的對(duì)象只能是引用類型吩蔑。并且有垃圾收集器幫你回收垃圾對(duì)象钮热。所以就不會(huì)出現(xiàn)內(nèi)存泄漏的問(wèn)題。
因?yàn)镃#比JAVA后出來(lái)吧哥纫,JAVA所具有的特性霉旗,C#基本上都有。并且還具有一些JAVA所不具有的特性蛀骇。當(dāng)然在這里不是說(shuō)哪個(gè)語(yǔ)言好厌秒,哪個(gè)語(yǔ)言壞。其實(shí)他們都是來(lái)實(shí)現(xiàn)面向?qū)ο缶幊痰墓ぞ摺?/p>
在面向?qū)ο蟮木幊汤锩嫔勉荆硇詴?shū)籍就要屬"《設(shè)計(jì)模式》"了鸵闪。不過(guò)設(shè)計(jì)模式這個(gè)東西,不是你看書(shū)就能看懂的暑诸。并且你硬套那些模式蚌讼,不一定對(duì)你有多大的好處。這個(gè)東西个榕,只有設(shè)計(jì)做多了篡石,才能有所領(lǐng)悟,自己得到總結(jié)西采』巳總結(jié)多了,就會(huì)發(fā)現(xiàn)和書(shū)上的那些東西不謀而合械馆,或許可能比書(shū)上總結(jié)得更好 胖眷。
好了,目前編程思想的發(fā)展就到這一步了霹崎。將來(lái)的編程思想的會(huì)是一個(gè)什么樣子珊搀,我也不得而知。希望有志之士能夠發(fā)明一種編程的思想出來(lái)尾菇,推動(dòng)軟件業(yè)的發(fā)展境析,讓中國(guó)也來(lái)引領(lǐng)一下世界軟件的發(fā)展潮流囚枪。
大家走進(jìn)程序界的初衷是什么呢,這個(gè)我也不敢胡亂猜測(cè)簿晓。但是有一點(diǎn)還是要的眶拉,那就是錢(qián)。畢竟我們都是要生活的憔儿。
而往往能夠快速用來(lái)賺錢(qián)的都是一種應(yīng)用技術(shù)像windows編程忆植,linux編程,WEB開(kāi)發(fā)等等谒臼。你掌握了其中的一門(mén)技能朝刊,就可以謀得一個(gè)職位,可能還可以拿到一個(gè)不錯(cuò)的薪水蜈缤。然而如果你掌握了編程思想拾氓,那么那些應(yīng)用技術(shù)將一通百通(因?yàn)閼?yīng)用技術(shù)往往都是對(duì)特定的一些函數(shù)的調(diào)用,通俗一點(diǎn)就是調(diào)用API)底哥。 掌握了編程思想你將不在局限于某個(gè)特定的編程技術(shù)咙鞍,而是對(duì)整個(gè)軟件系統(tǒng)有了全局的把握,研究的不再是編程技術(shù)趾徽,而是協(xié)議和規(guī)范续滋。
就現(xiàn)在的發(fā)展看來(lái),技術(shù)的迭代周期超乎想象的短孵奶。深入了解程序思想還是很有必要的疲酌。我們程序猿需要一顆不老的心。
三了袁、結(jié)果
這個(gè)結(jié)果才是我們想要的朗恳。到達(dá)這個(gè)結(jié)果的路很多,怎么走才最快最好最方便载绿,一直是我們探索的粥诫。在探索過(guò)程中才出現(xiàn)了計(jì)算機(jī)、才出現(xiàn)了程序崭庸。這條路會(huì)越走越寬臀脏、越走越遠(yuǎn)我們深信。
看完上面的文字冀自。你對(duì)“什么是編程?是不是有了屬于自己的答案秒啦?
首發(fā)于知乎專欄:《微信小程序之家》地址:https://zhuanlan.zhihu.com/p/25262957?refer=weixinapphome