什么是編程思想?答案可能很會(huì)復(fù)雜琐凭,但也可以很簡單芽隆。一句話來講就是,用計(jì)算機(jī)來解決人們實(shí)際問題的思維方式统屈,即編程思想胚吁。
我們學(xué)習(xí)編程語言的最終目的,就是希望用計(jì)算機(jī)來解決我們的實(shí)際問題愁憔。那么學(xué)習(xí)計(jì)算機(jī)該如何入手腕扶,也是很多初學(xué)者犯難的一個(gè)問題,特別是對(duì)與非計(jì)算機(jī)專業(yè)的人來說更是如此吨掌。面對(duì)現(xiàn)實(shí)如此多的編程語言(比如:C,C++,JAVA,C# …)和 種類繁多的應(yīng)用技術(shù)(比如: windows編程半抱, linux編程,數(shù)據(jù)庫思犁, 網(wǎng)絡(luò)編程 …)代虾。確實(shí)讓人有些眼花繚亂,摸不著頭腦激蹲。此篇文章就來談?wù)剬W(xué)習(xí)計(jì)算機(jī)的步驟和編程思想的發(fā)展棉磨。
一:認(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)衙傀,那么我支持你,并由衷的希望你能有所成就)這個(gè)階段里面代表性的書籍就是"計(jì)算機(jī)組成原理"萨咕。這門課的精髓在于兩點(diǎn):第一统抬,計(jì)算機(jī)由哪些部分組成,各有什么作用,少一個(gè)組成部件會(huì)有什么后果聪建。雖然當(dāng)初我對(duì)這本書看得不是很透钙畔,但看完后我至少就知道了,電腦只要有個(gè)CPU金麸,主板擎析,內(nèi)存就可以點(diǎn)亮了。加個(gè)軟驅(qū)挥下,就可以運(yùn)行DOS超作系統(tǒng)揍魂。再加個(gè)光驅(qū),硬盤棚瘟,就可以把WINDOWS系統(tǒng)放到硬盤上運(yùn)行起來现斋。第二,CPU是如何工作解取,CPU做了哪些事情步责,CPU為什么只能認(rèn)識(shí)0和1,CPU的尋址方式禀苦? 對(duì)CPU本人了解得不深蔓肯,不敢隨意賣弄。但有一個(gè)還是是需要知道一下的振乏,CPU基礎(chǔ)計(jì)算只有3個(gè):與蔗包,或,非慧邮。這3個(gè)邏輯門實(shí)現(xiàn)了我們現(xiàn)在所有的計(jì)算機(jī)程序計(jì)算调限。
二:過程性的編程思想
計(jì)算機(jī)只能認(rèn)識(shí)0和1 ,但人卻不能只是用0误澳,1來寫程序耻矮。為了程序的寫得方便就出現(xiàn)了0,1的第一層抽象標(biāo)記忆谓,匯編語言裆装。匯編里面的那些標(biāo)記可是直接對(duì)應(yīng)硬件的。硬件生產(chǎn)廠商都有明確的指令說明書倡缠。這些匯編標(biāo)記是可以被硬件直接識(shí)別的哨免。比如CPU,生產(chǎn)CPU的廠家都會(huì)有寄存器的標(biāo)識(shí)比如(ax,bx,cx)昙沦,操作指令標(biāo)識(shí)(mov)琢唾,等等。驅(qū)動(dòng)方面的編程大多會(huì)用到這方面的東西盾饮。學(xué)習(xí)匯編的核心是你需要認(rèn)識(shí)到匯編是一種過程性的編程語言采桃,并且目前的CPU只能執(zhí)行過程性的程序懒熙,任何高級(jí)語言都必須轉(zhuǎn)換成過程性的編程語言后再交給CPU執(zhí)行。在匯編里主要有三個(gè)操作:比較芍碧,跳轉(zhuǎn)(goto),過程調(diào)用(call)煌珊。為什么說它是過程性的編程思想,值得你去好好的體會(huì)一下泌豆。不妨寫幾個(gè)算法的程序(在程序里面用到比較,跳轉(zhuǎn)吏饿,過程調(diào)用)踪危,再來看看匯編程序的特點(diǎn),相信你會(huì)有所感悟猪落。值得提一下的是贞远,如果你對(duì)操作系統(tǒng)感興趣斟叼,也可以看看什么是保護(hù)模式吮铭。
三:結(jié)構(gòu)性的編程思想
隨著人們解決的問題越來越復(fù)雜熔萧,匯編程序當(dāng)然束縛了計(jì)算機(jī)軟件的發(fā)展晦炊。因此編程思想發(fā)生了一場革命性的變化出革,結(jié)構(gòu)性的編程方法出現(xiàn)了乏沸。在結(jié)構(gòu)性編程思想的編程語言里面作瞄,C語言首當(dāng)其沖某弦。C語言里面有幾個(gè)能表現(xiàn)出結(jié)構(gòu)化思想的地方:分支(if), 循環(huán)(while途凫,for),結(jié)構(gòu)體(struct). 只要你會(huì)用這三個(gè)垢夹,那么你就可以寫出結(jié)構(gòu)化的程序,但不一定你就了解什么是結(jié)構(gòu)化的編程方法维费。什么叫做結(jié)構(gòu)化果元?為什么說goto會(huì)破壞程序的結(jié)構(gòu)化?結(jié)構(gòu)體有什么作用犀盟,你能說出結(jié)構(gòu)體的哪些好處而晒? 這些都是值得認(rèn)真體會(huì)的地方。別人給的定義不見得都全面阅畴。還是自己理解比較靠得住倡怎。結(jié)構(gòu)化編程里面最具代表性的書籍就要屬"數(shù)據(jù)結(jié)構(gòu)",具體哪本書比較好就不知道了恶阴,好像都差不多诈胜,只要是用C寫的就行。C語言的"數(shù)據(jù)結(jié)構(gòu)"里面就是專門來講怎么用結(jié)構(gòu)性的編程思想來解決實(shí)際中的算法問題冯事〗剐伲看完某些章節(jié),然后自己找個(gè)問題昵仅,再用程序去實(shí)現(xiàn)它缓熟。多寫一些程序累魔,會(huì)很有幫助。如果第一遍看完后你看得很模糊够滑,不防先放一放垦写,過一段時(shí)間再看看,你可能會(huì)有種霍然開朗的感覺彰触。還有需要說明一下梯投,并不是所有的時(shí)候結(jié)構(gòu)化的編程一就定好。某些的時(shí)候况毅,結(jié)構(gòu)化的編程會(huì)使程序更繁雜分蓖。(比如結(jié)構(gòu)化編程希望函數(shù)只能有一個(gè)入口,一個(gè)出口尔许。然而有時(shí)一個(gè)出口會(huì)使程序看起來更繁雜)
四:面向?qū)ο蟮木幊趟枷?/p>
現(xiàn)在該說說面向?qū)ο缶幊塘嗣春住_@個(gè)也是現(xiàn)在用得最多的編程思想。什么是面向?qū)ο笪独龋徒Y(jié)構(gòu)性的思想有什么不同蒸甜?從程序語法上看,面向?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)生了接口的概念。接口不就是類成員的公有部分么痢甘?(想想很好笑喇嘱,本人剛開始認(rèn)識(shí)面向?qū)ο蟮臅r(shí)候,以為只有定義成interface的才叫做接口)
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ì)感嘆一句"原來程序是可以這么寫的".? ? ? 因?yàn)橐陨蟽牲c(diǎn)的變化探赫,編程思想也隨之發(fā)生了巨大轉(zhuǎn)變型宙。它可以讓程序更適合人的思維方法來編寫。面向?qū)ο蟮木幊陶Z言就很多了,可謂五花八門 :C++ , JAVA , C# 這三個(gè)本人都用過伦吠。用的感覺在這里也隨口說說妆兑,只是代表個(gè)人觀點(diǎn)。都說C++和JAVA有很大的不同毛仪,而JAVA和C#卻非常相似箭跳,你知道為什么嗎?最根本區(qū)別就在于垃圾收集器潭千。就是因?yàn)镴AVA里面有垃圾自動(dòng)收集功能,所以JAVA不能和C兼容借尿,而且也不能使用指針刨晴。在C++中的值類型和引用類型是可以自己定義的。如果對(duì)象被定義為值類型路翻,那么當(dāng)編輯器自動(dòng)把對(duì)象收集走之后狈癞,有時(shí)自己會(huì)一無所知。如果對(duì)象被定義為引用類型茂契,那么又要必須記得把它釋放掉蝶桶,不然又會(huì)引起什么內(nèi)存泄漏的問題。在JAVA和C#里面就不一樣掉冶,在這兩種語言里面真竖,自定義的類,初始得到的對(duì)象只能是引用類型厌小。并且有垃圾收集器幫你回收垃圾對(duì)象恢共。所以就不會(huì)出現(xiàn)內(nèi)存泄漏的問題。
因?yàn)镃#比JAVA后出來吧璧亚,JAVA所具有的特性讨韭,C#基本上都有。并且還具有一些JAVA所不具有的特性(但C#目前不能在linux上面運(yùn)行)癣蟋。當(dāng)然在這里不是說哪個(gè)語言好透硝,哪個(gè)語言壞。其實(shí)他們都是來實(shí)現(xiàn)面向?qū)ο缶幊痰墓ぞ叻杞痢D阋部梢杂肅或者匯編寫一門支持面向?qū)ο蟮恼Z言出來(如果你想做濒生,本人絕對(duì)支持,或者用匯編也行秉撇。為中國的軟件事業(yè)貢獻(xiàn)一份力量甜攀,免得總說什么什么語言都是他們外國人發(fā)明的秋泄。)只要它能夠?qū)崿F(xiàn)數(shù)據(jù)封裝,成員私有化规阀,和繼承就行了恒序。在面向?qū)ο蟮木幊汤锩妫硇詴鸵獙?設(shè)計(jì)模式"了谁撼。不過設(shè)計(jì)模式這個(gè)東西歧胁,不是你看書就能看懂的。并且你硬套那些模式厉碟,不一定對(duì)你有多大的好處喊巍。這個(gè)東西,只有設(shè)計(jì)做多了箍鼓,才能有所領(lǐng)悟崭参,自己得到總結(jié)】羁В總結(jié)多了何暮,就會(huì)發(fā)現(xiàn)和書上的那些東西不謀而合,或許可能比書上總結(jié)得更好 铐殃。
好了海洼,目前編程思想的發(fā)展就到這一步了。將來的編程思想的會(huì)是一個(gè)什么樣子富腊,我也不得而知坏逢。希望有志之士能夠發(fā)明一種編程的思想出來,推動(dòng)軟件業(yè)的發(fā)展赘被,讓中國也來引領(lǐng)一下世界軟件的發(fā)展潮流是整。如果你是初學(xué)者,可以按照上面的順序來學(xué)習(xí)計(jì)算機(jī)帘腹。希望在每個(gè)環(huán)節(jié)中能掌握其重點(diǎn)贰盗。相信一年之后,你就會(huì)有所感悟阳欲。? ? ? ? 大家都希望學(xué)的東西是可以用來賺錢的舵盈。而往往能夠快速用來賺錢的都是一種應(yīng)用技術(shù)像windows編程,linux編程球化,WEB開發(fā)等等秽晚。你掌握了其中的一門技能,就可以謀得一個(gè)職位筒愚,可能還可以拿到一個(gè)不錯(cuò)的薪水赴蝇。然而如果你掌握了編程思想,那么那些應(yīng)用技術(shù)將一通百通(因?yàn)閼?yīng)用技術(shù)往往都是對(duì)特定的一些函數(shù)的調(diào)用巢掺,通俗一點(diǎn)就是調(diào)用API句伶,這些東西到專門的網(wǎng)站上查手冊將一目了然,比如windows編程劲蜻,http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/WindowsUserInterface/Windowing/WindowClasses/UsingWindow.asp 這就是一個(gè)入門的例子)。 掌握了編程思想你將不在局限于某個(gè)特定的編程技術(shù)考余,而是對(duì)整個(gè)軟件系統(tǒng)有了全局的把握先嬉,研究的不再是編程技術(shù),而是協(xié)議和規(guī)范楚堤。
大家在學(xué)習(xí)初期看書疫蔓。最好不要看電子書,而是買書本看(電子書用來當(dāng)詞典查閱一下還是不錯(cuò)的)身冬。因?yàn)殡娮訒匆粫?huì)眼就花衅胀,給人造成一種煩躁的情緒而不能靜下心來好好體會(huì)書里所說的內(nèi)容。一本書酥筝,一支筆滚躯,加一個(gè)草稿本,是最佳的學(xué)習(xí)狀態(tài)嘿歌。如果你是在校學(xué)生哀九,你可以到http://www.xiangyataclub.com里看看你本校內(nèi)有沒有你想要的二手書或者學(xué)習(xí)用的電腦設(shè)備,這樣能使得資源可以重復(fù)利用搅幅。遇到不懂的地方到論壇里面討論一下還是不錯(cuò)的,比如http://www.csdn.net里面一般性的問題能夠找得到答案呼胚。學(xué)習(xí)計(jì)算機(jī)需要達(dá)到一種狀態(tài)茄唐,就是在任何時(shí)候腦海里面都會(huì)在隱約的思考:對(duì)計(jì)算機(jī)里面某種原理的理解,或者尋找某種問題的算法蝇更。有時(shí)一個(gè)新想法的閃現(xiàn)會(huì)讓自己興奮不已沪编。如果你表現(xiàn)出這種狀況,說明你對(duì)計(jì)算機(jī)有著濃厚的興趣年扩。
最后補(bǔ)充一點(diǎn)蚁廓,就是中國的一句老話"盡信書,不如無書"厨幻。編程的學(xué)習(xí)還是需要有一點(diǎn)批判的精神和創(chuàng)造的精神才好相嵌。對(duì)于某些東西不要過早下定論,或許你某一個(gè)智慧的閃光况脆,將為計(jì)算機(jī)開辟出一個(gè)新的發(fā)展方向饭宾。
編程思想在我實(shí)踐看來就是這樣一個(gè)事情,很多代碼你認(rèn)真的都啊都啊格了,開始有很多不明白看铆,他們?yōu)槭裁催@么做,有的是不明白他們在干什么盛末,有的是不明白他們?yōu)槭裁锤愕眠@么別扭弹惦,慢慢的就了解編寫過程中一些敲門否淤。在讀啊讀啊,你就能明白怎么遵守他們之間的那種默契和協(xié)定(中國沒有)棠隐,在讀啊讀啊石抡,你就開始自己想寫些什么來表達(dá)你對(duì)他方法的不認(rèn)同,然后會(huì)有很多國外的高手會(huì)告訴你你的錯(cuò)誤(他們真的很好很謙虛宵荒,愿意和你探討的汁雷!國內(nèi)沒有遇見過。我所知道的高人都玩潛水可能)报咳。然后你就不感造次了侠讯,冷靜的讀啊讀啊,直到有一天你突然覺得就是你自己對(duì)了暑刃,他們都錯(cuò)了厢漩,你就又發(fā)表文章了,這回國外的高手明顯少了岩臣,只有1溜嗜,2個(gè)人發(fā)來郵件詳細(xì)談?wù)劊憧赡軐?duì)了可能錯(cuò)了架谎,于是你不僅繼續(xù)讀啊讀啊炸宵,也開始研究啊研究啊,這時(shí)候基本上你開始回人家的問題谷扣,等你一旦發(fā)表文章的時(shí)候就會(huì)引起圈內(nèi)幾個(gè)知道你的人注意土全,你繼續(xù)努力,注意你的人就會(huì)越來越多会涎,這時(shí)候你就有了小小小小的名氣裹匙,開始有人找你希望你能加盟或者幫助開發(fā)等等。
可能有人說末秃,我沒有談到編程思想概页,但是我告訴你,沒有編程思想练慕,在這個(gè)過程中惰匙,你明白了游戲規(guī)則,你取得了他人的認(rèn)可铃将,你就有了編程思想徽曲,這是潛移默化產(chǎn)生的,說白了這個(gè)思想就是在這個(gè)圈子里高手之間尊從的一種合同麸塞,大家都這么做秃臣,規(guī)則就這么建立了,直到有人提出新的合同方式,大家再去討論奥此,你在去發(fā)展弧哎。有人可能問我搞什么,我告訴你搞linux方面的工作(但絕對(duì)不再中國那幾個(gè)linux公司干)稚虎。有人問我用了多少時(shí)間撤嫩,我告訴你學(xué)習(xí)用了將近3年,搞出一點(diǎn)點(diǎn)明堂用了1年多蠢终。
因?yàn)槲也皇呛苈斆餍蛉粒杂昧诉@么長時(shí)間,但是我相信3年時(shí)間是肯定要的寻拂,我每天至少6個(gè)小時(shí)埋頭學(xué)習(xí)程奠,4年時(shí)間,懂得了編程思想祭钉,真的很苦瞄沙,很寂寞。所以如果你不是非常熱愛這項(xiàng)事業(yè)慌核,請(qǐng)慎重距境,如果你熱愛,請(qǐng)努力垮卓。