IT人如何修煉編程的內(nèi)功[2]
ok了,這我們是不是可以理解到,計(jì)算機(jī)編程,其實(shí)首先是人的工作,當(dāng)我們遇到一個(gè)服務(wù)需求,我們?nèi)藖?lái)做一次,嗯,獲得一個(gè)比較滿意的結(jié)果,然后我們覺(jué)得這個(gè)動(dòng)作可以重復(fù),下次遇到類似的問(wèn)題,照做就好了。于是,我們就安排計(jì)算機(jī)來(lái)做這件事了。是不是這樣?
這是不是說(shuō)明,程序,其實(shí)是在講一件事應(yīng)該怎么做,這個(gè)做的過(guò)程,以及這個(gè)過(guò)程的含義,其實(shí)是人定義出來(lái)的,然后通過(guò)編程,教給計(jì)算機(jī)來(lái)做而已。
我以前經(jīng)常有種感覺(jué),計(jì)算機(jī)編程,是兩層意思,一層,是程序本身的含義,就是怎么做事,另一層,是隱含在程序下面的邏輯含義,就是做事的意義,程序只是字面上的意思,而邏輯,是程序段落組合起來(lái),共同表述的一層意思,F(xiàn)在想想,其實(shí)就是這個(gè)道理。
嗯,既然我們知道,編程,就是把做一件事情的步驟,分拆開(kāi)來(lái),教計(jì)算機(jī)去做,但,分拆到什么粒度呢?這個(gè)很重要。如果分拆的粒度太細(xì),白白浪費(fèi)程序員的時(shí)間和精力,這些都是成本。而分拆得太粗,計(jì)算機(jī)還是弄不明白,做事不對(duì),就是bug了。
這說(shuō)明,編程有個(gè)很重要的概念,就是粒度,也就是我們對(duì)問(wèn)題描述的精細(xì)程度。
最開(kāi)始的計(jì)算機(jī)是最笨的,學(xué)過(guò)計(jì)算機(jī)組成原理的同學(xué)大概知道,只要有個(gè)累加器,其實(shí)已經(jīng)可以算一臺(tái)計(jì)算機(jī)了,只會(huì)做加法計(jì)算。因?yàn)閺臄?shù)學(xué)上,我們可以知道,任何計(jì)算,最終都可以演化成加法計(jì)算,事實(shí)上,現(xiàn)在的CPU,在最底層核心的部分,也還是這個(gè)加法邏輯。
這樣做當(dāng)然沒(méi)什么不好,不過(guò),有個(gè)小小的問(wèn)題,就是粒度太細(xì)了。如果每件事情,都要程序員去拆解成很細(xì)的加法計(jì)算,這個(gè)工作就幾乎不是人干的事情了。難道就無(wú)解了嗎?
呵呵,前面我們說(shuō)過(guò),計(jì)算機(jī)的特點(diǎn)是什么?無(wú)限重復(fù),大家就發(fā)現(xiàn),一個(gè)事情,比如7*24,這是乘法計(jì)算,但是,我們最終要拆解為加法計(jì)算去實(shí)現(xiàn),但是,不是說(shuō)我們每次都要這么拆解,乘法計(jì)算也是一個(gè)工作,有規(guī)律的,因此,當(dāng)我們拆解一次之后,我們當(dāng)然可以把這次拆解過(guò)程本身,編訂為程序,下次遇到類似問(wèn)題,讓計(jì)算機(jī)把這個(gè)程序再跑一遍就ok了。呵呵,大家以為Intel的CPU里面的乘法計(jì)算指令是怎么實(shí)現(xiàn)的?大家又以為AMD的CPU內(nèi)部的微代碼體系是怎么實(shí)現(xiàn)的?
就是這么一個(gè)思維,解決了所有的問(wèn)題,遇到需求,首先拆分,然后不斷檢索我們以前是不是以前拆分過(guò)了,遇到能套用的程序段落,就直接用,不用每次都拆分那么細(xì),減少工作量,當(dāng)然,遇到新問(wèn)題,還是需要自己拆解的',不過(guò),拆解后,最好把拆解本身,也寫(xiě)成程序,下次重用。
大家玩各種語(yǔ)言,一般都提供基本庫(kù),這個(gè)基本庫(kù),其實(shí)就是前人已經(jīng)拆解過(guò)的結(jié)果,軟件公司覺(jué)得有代表性,可以滿足大多數(shù)應(yīng)用場(chǎng)合,就編訂到基本庫(kù)里面,以后程序員直接用,不用自己重復(fù)了,大家說(shuō)是不是這樣?
現(xiàn)在,大家知道怎么看待C的stdio.h,stdlib.h這些基本庫(kù)了吧?C++的iostream是什么含義,知道了不?MFC知道了不?Java的運(yùn)行時(shí)庫(kù)是什么意思,也知道了吧?
不過(guò)呢,這個(gè)世界的需求總是很多的,并且,計(jì)算機(jī)的能力也是不斷在進(jìn)步,以前不適合計(jì)算機(jī)做的事情,現(xiàn)在也慢慢變得適合了。因此,大家總能遇到一些新問(wèn)題,需要自己重新拆解,基本庫(kù)中沒(méi)有提供,這就是程序員這個(gè)職業(yè)存在的真實(shí)含義。幫助用戶不斷拆解新需求,解決新問(wèn)題。當(dāng)然,庫(kù)本身也在進(jìn)步,不斷把已經(jīng)被證明拆解成功的問(wèn)題,修補(bǔ)到庫(kù)中,避免以后的程序員做重復(fù)工作。就這么簡(jiǎn)單。
【IT人如何修煉編程的內(nèi)功[2]】相關(guān)文章:
太極拳內(nèi)功修煉方法09-19
accp如何學(xué)習(xí)編程11-02
如何修煉領(lǐng)導(dǎo)力08-08
如何修煉你的領(lǐng)導(dǎo)力09-18
楊式太極拳內(nèi)功如何練習(xí)10-04
如何修煉成超級(jí)廣告模特08-07
形體舞蹈如何修煉自身氣質(zhì)09-04