大道至簡——軟件工程實踐者的思想 第1章 編程的精義

>>>  讀書—連接古今充實信仰  >>> 簡體     傳統

第1章 編程的精義

“雖我之死,有子存焉;子又生孫,孫又生子;子又有子,子又有孫。子子孫孫,無窮匱也。而山不加增,何苦而不平?”

——《愚公移山》,《列子湯問篇》

1. 編程的精義

僅僅就編程序來說,實在是一件很簡單的事,甚至可以說是一件勞力活。兩千年前的寓言中,已經成就了一位工程名家:愚公。在這位名家的身上,濃縮了項目組織者、團隊經理、編程人員、技術分析師等眾多角色的優秀素質。他的出現,遠遠早于計算機發展的歷史,甚至早于一些西方國家的文明史。

湯問篇中所述的愚公移山這一事件,我們看到了原
始需求的產生:“懲山北之塞,出入之迂”

我們也看到了項目溝通的基本方式:“聚室而謀曰”

然后,我們看到愚公確定了一個項目的目標:

第 1 章 編程的精義

“畢力平險,指通豫南,達于漢陰”

并通過研討,擇定了一個井然有序的、可以實現的技術方案:

“扣石墾壤,箕畚運于渤海之尾”

在這個項目中,動用了三名技術人員和一名工程管
理人員:

“(愚公)率子孫荷担者三夫”

并獲得了一名力量較弱,但滿富工作激情的外協:

“鄰人京城氏之孀妻,有遺男,始齔,跳往助之”

基本上,這已經描述了“愚公移山”整個工程的概況。接下來,我們應該注意到愚公作為編程人員的基本素質。在與“河曲智叟”的對答中,他敘述了整個工程的實現程序:

“雖我之死,有子存焉”,這里描述了可能存在的分支結構,即“IF”條件判斷。

“子又生孫,孫又生子;……子子孫孫,無窮匱也”,這里描述了完成這個工程所必須的循環結構。

作為優秀的程序分析師,愚公論述了這個循環的可行性:由于“山不加增”,所以條件“山平”必將成立(“何苦而不平”),所以這不會是一個死循環。

在愚公的論述中,我們看到了編程的根本:順序、分支和循環。龐大若“愚公移山”這樣的工程,都是可以通過這樣簡單的編程來實現的。這,就是編程的精義了。

2. 會或者不會寫程序的問題

我經常會被人問到“(我)能不能學會寫程序”這樣的問題。

這個問題由來以久。上溯七、八年,程序員還是少有人從事的職業。聽說的人少,真正了解的人也不多。而當一個程序軟件被裝在電腦里并開始運行時,人們便開始驚訝于程序員的厲害。所以“能不能學會寫程序”甚至成了一些人對自己的智力考評,所以便有人向我這樣發問。

愚公都能明白的編程精義,那些向我發問的智叟們又怎么會不明白呢?

第 1 章 編程的精義

所以除了先天智障或后天懶惰者,都是可以學會寫程序的。如果你能確信,自己知道在早上起床后需要:

如果天冷則先穿衣服后洗漱

如果天熱則可反之

日復一日直到死亡

那么你就可以開始編程了。甚至,如果你認為以下條件成立:

如果有類似于生病、不能行動、以及意外的緊急事件,則當日可以略過那么你就可以開始向設計師發展。因為你已經具備了一項常人不具備的基本素質:折衷。

3. 程序 = 算法 + 結構

編程作為一種行為,只需要知道其邏輯方法就可以了。所謂編程實際上是把一件事情交給計算機去做,你認為這件事該如何做,就用“程序語言”的形式描述給計算機。如果你原本就不明白如何去做,那么你也不要期望計算機去理解你想要做什么。

所以編程的第一要務是先把事情分析清楚,事件先后的邏輯關系和依賴關系搞清楚,然后再去代碼實現。一接到任務就開始 Coding 的程序員,通常就是加班最多的程序員。

記住:積極工作和勤于思考都要占時間。

第一個完成關于編程本質的思考的人,提出了一個公式“程序 = 算法 + 結構”。這個公式的精彩之處,在于它沒有任何的地方提及到 Code。甚至可以說,在這個公式里,代碼是不存在的。存在的只是思想。

算法是對一個程序的邏輯實現的描述,而結構是邏輯實現所依附的數據實體。只要開發人員將這個程序的算法設計出來了,把結構描述出來了,那么程序就已經定型了。剩下的事,簡而言之,就是勞力活。

在計算機專業所學的課程中,同時講述算法和結構的,是“數據結構”。現在,你放下手邊這本書,再去讀讀被你扔到不知哪個角落的《數據結構》,你仔細看看,在所有的算法描述中,有且僅有三種執行邏輯:順序、分支和循環。簡單若順序表,復雜如樹、圖,它們的算法都是用上面這三種執行邏輯來描述的。

4. 語言

當你熟悉了一門語言之后,你會發現,編程語言只有喜歡與不喜歡的問題,沒有會不會的問題。任何的一門語言,你都可以在兩周內掌握并開始熟練編程。因為任何的一門語言,他們的底層函數庫都是那么的相似,而他們API 都是那樣的依賴于操作系統。A 語言里有的,B 語言里也基本都有。

通常而言,語言的差別主要表現在適用范圍上。一些語言適合做數值處理,小數點后可以精確到原子級,而小數點前則可以表達到宇宙之無窮;另一些語言則適合做圖形處理,它的底層函數庫比其它語言可以快上十倍或數十倍;還有一些語言則適合于做網頁,要用它來做一個通訊薄軟件都將是史無前人的挑戰。

成天討論這門語言好,或者那門語言壞的人,甚至是可悲的。不但是悲其一葉障目,更要悲嘆于那種大愚若智的自得心態。

5. 在沒有工程的時代

在沒有工程的時代,上面所說的就是一個程序員的全部。他們掌握了一門語言,懂得了一些生活中最常見的邏輯,他們用程序的方式思考和學習了一些算法,并根據前人的經驗,把這些算法跑在了一些數據結構之上,最后,我們就看到了他們寫的程序。

在沒有工程的時代,出現了非常非常多的人物。其中算法大師,有游戲大師,有語言大師,有掙錢的大師……唯獨,沒有工程大師。嗯,可以理解嘛,那是沒有工程的時代。好蠻荒,好遠古的。


周愛民(Aimingoo) 2013-08-24 22:02:23

[新一篇] 大道至簡——軟件工程實踐者的思想 目 錄

[舊一篇] 大道至簡——軟件工程實踐者的思想 第2章 是懶人造就了方法
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表