因為食譜是壹種工作流,描述的是先幹什麽後幹什麽以及所用的資源和時間,而程序除了可以被看成壹種工作流之外,還可以被看成壹種生成工作流的邏輯描述,也就是說,除了要安排好食譜中的步驟,還要知道食材和步驟的邏輯關系,比如是先炒後燉還是先燉後炒,是先放油鹽醬醋還是後放油鹽醬醋,什麽東西和什麽東西不能放壹起等等。這些是通過編程和程序中的邏輯判斷來實現的,這種邏輯判斷在食譜中是沒有的(例如,食譜中是不會出現"如果炒糊了就放點糖"這樣的描述的)。因此,食譜只是單純的流程描述,編程和程序是比食譜更高級和復雜的概念。
其實,編程用大白話來說,就是如何控制計算機利用各種硬件資源來處理數據和信息。因此,編程分為幾個層級。最底層是直接與硬件打交道的,用來控制硬件的執行,壹般是匯編編程;最上面的是軟件編程,直接處理數據和信息,編寫的程序直接面向程序的使用者;在他們之間的是操作系統級編程,用來建立連接底層和上層的橋梁。每壹層就不展開說了,否則都夠寫幾本書了。
大多數程序員都屬於軟件編程這個層級的,其他的程序員壹般都必須非常了解他們使用的硬件,因為他們的程序就是要操作這些硬件的。
說完了編程的分類,再來說說編程到底幹什麽。我也來比喻壹下,我把編程比喻成教育,計算機就是小孩,綜合起來就是教計算機做什麽以及怎麽做,也就是教育小孩做事情,而編程寫出來的程序,就是壹種行為規範。
比如,我要教小孩過馬路,那麽我告訴他壹個過馬路的行為規範:"先向左看,如果沒車過來就走到路中央,如果有車就等車過去;到了路中央向右看,如果沒車就過去,如果有車就等壹等。"
我把這個過馬路的"行為規範"(程序)告訴我的"小孩"(計算機),他就能嚴格照著去執行。
這個比喻不恰當的地方,就是我的"小孩"的學習能力實在有限,他只會照著我寫好的"行為規範"去做,我沒寫的他就不知道怎麽做了。但是,將來的"小孩"肯定會增強自己的學習能力,通過"行為規範"來產生新的"行為規範",並且新的"教育方法"(編程方法)也在不斷的被研究著。