大道至簡——軟件工程實踐者的思想 附 錄

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

 附 錄
 
一、Jiangtao, Aimingoo 關于序言的對談(2005.11.06)
 
Jiangtao說:
 
    大部分的人都希望看到招術,而不是學習其中之道。 但每個人碰到的情況是不同的,不通“道”,招數就不靈了。
 
Aimingoo 說:
 
    是啊。明白道理,明白原理,即知變化之道,知變通之道。 
    亦步亦趨學不好編程,同理,也學不好工程啊。
 
Aimingoo 說:
 
    正如你說所"道理歸到底是相通的",不同的人只是在換著不同的方式在說而已。
 
Aimingoo 說:
 
    像GoF這樣深徹的理解,并不多。而我們看到GoF對他們的理解的解釋,文字量并不大。而更多的是別的人的、種種不同的說法。—— 其實,根源在哪里呢?在GoF的思考,以及他們對既有事物的觀察方法。
 
Jiang Tao 說:
 
    易經,論語也很短,卻可以解釋世界萬物之理,當然其中任何一個話題展開也可以寫成長篇大論。
 
 
Aimingoo 說:
 
    從寫作手法上,看作散文集亦無妨。但我是有大綱然后逐一先成 
的,也就是說,在思想上是有中心并漸次展開的。
 
后語
 
Aimingoo 說:
 
    《程序員》選了6,7,8三章發表,其實很正確。因為6,7兩章的確 
講述了中心思想。但如果沒有前面的,就有骨無肉,不豐滿了。
 
Jiang Tao 說:
 
    我知道,你有一個邏輯關系組織,不過每一篇其實是散著談的。
 
Jiang Tao 說:
 
    你是從根上談起,一篇篇往后。
 
Aimingoo 說:
 
    對對,每一篇與其它的段落,并沒有直接關系。
 
 
 
Jiang Tao 說:
 
    前面的道理大家覺得自己都明白,其實只是知道道理,卻沒有體 
會上身。 
    所以會不斷地犯錯誤,而不知道錯誤的根源。
 
Aimingoo 說:
 
    是的。“知道”和“理解”,以及“理解”和“領悟”,都是不 
同的境界。
 
Jiang Tao 說:
 
    我們和這些專家正相反,專家是從根上來的,我們是從道理往后 
尋找根源。 
    大部分人還根本不找。只是用這個結果,卻不知道根在哪里。
 
Aimingoo 說:
 
    對。我們做事,總是做到后來才發現道理與專家們說的是一樣的。 
我讀書的時候,以及在Coder的一個很長的階段,也是很排斥“專家” 
和“理論”的。但現在我卻在思考理論的東西。
 
Aimingoo 說:
 
    因為我發現,這些理論,以及其背后的思想,是一切演化的根源。
 
 
    如果不想淪為代碼工人,甚或代碼機器,那么就需要思考并領會 
這些背后的道理。
 
Aimingoo 說:
 
    我在腳注里面,有一些文字是很值得關注的,例如:“其實所謂 
‘經典’也是對既有知識的總結。大師們所知的,與你所思考的未必 
就有天壤之別。” 
    再如“《三十六計》更多的時候是被當成方法論來讀的。其根源 
在于‘計謀’本身只是方法,而不是戰略。”
 
Jiang Tao 說:
 
    就是這個理,不過這一關不好過。 
    圍棋的學習有四個階段:記住定式 應用定式 忘掉定式 創造定 
式。
 
Aimingoo 說:
 
    大多數時候,“文字”只是思想的結果的描述。我希望更多的人 
看到思考的過程,并知道其價值。如你所說,我也希望人們忘掉我所 
說的,并創造自己的“定式”,乃至達到“法無定法”的境界。
 
Aimingoo 說:
 
    所以我在甚至希望大家最終將這本書束之高閣,“思想已經領悟, 
文字的、紙質的東西還有什么價值嗎?”
 
Jiang Tao 說:
 
    等電子版發表后,我們可以組織感興趣的人延伸討論討論,很多主 
題是可以展開討論的. 
    對照自己的問題,再看這些思考,就會有感覺了,這樣就有案例出 
來了。
 
Aimingoo 說:
 
    好啊。非常不錯的主意。
 
 
                  后 語
 
前言后語
 
    你現在讀到的文字,原本應該是這本書的前言的。然
 
而如今,它變成了后語。
 
    如果讀者是客戶,那么我就應該是這本書的工程管理
 
人員了。與第一次著書不同,這一次我已經嘗試參與整個
 
“做書”的過程。我必須要考慮客戶問題,必須要知道作
 
為客戶或者讀者這個角色的你,在想些什么,或關注些什
 
么。
 
    在這本書的最最最初的時間里,我把書稿給了我的老
 
朋友王寒松。然而我很失望地聽到他的意見:這個前言沒
 
法讀。——我想了又想,是的,因為有了玄而又玄的觀點
 
以及曲折旁引的論述,所以的確不是太容易讀。
 
    從我的角度上講:
 
        這個前言總括地講述了我的觀點
 
    從讀者的角度上講:
 
        讀者關注的是細節的文字
 
        讀者享受的是閱讀的快樂
 
    發現我在“做書”的這件事中扮演的是工程管理人員
 
的角色的同時,我就決定了這篇前言應該改成后語。原因
 
很簡單,客戶并不關注我對觀點的總括,至少一開始他們
 
不會關注。如果要客戶做結論,或者要他們與技術人員討
 
論結論,那就讓他們在看完演示之后,在最最后的階段去
 
 
                                            -112- 
 
                                           『大道至簡』
 
做。
 
    讀者的閱讀行為決定了我將這篇文字放在這個位置:
 
這篇前言既不是細節的文字,又不能給讀者以閱讀的快
 
樂,因此它就應該放在后面。至于它是叫前言,還是改名
 
叫后語,那只是形式的問題。
 
    如果你覺得你的項目中還有一個模塊不是用戶所關
 
注的,那么,En,建議調整一下明天的客戶演示,把這一
 
部分放到幻燈的最后一頁的后面,只有客戶提及時,才拿
 
出來跟他們解說。
 
    否則,如果他們不感興趣,那么他們將永遠看不到這
 
張幻燈。一如這一篇前言。
 
軟件工程
 
    如果做一份軟件工程中的經典書目,決不會有人漏掉
 
Roger S.Pressman 著的《軟件工程》。這本書有第四、五版
 
梅宏教授譯著的中譯本。然而相信讀這本書的人不會太多
 
的注意到它的副標題是“實踐者的研究方法”。——從根
 
源上說,它是講述軟件工程方法的書,而不是軟件工程思
 
想。
 
    這有什么區別呢?拿這本書來作為軟件工程活動的
 
參考時,絕大多數的人不能明白類似如下的問題:
 
        為什么要這樣做呢?
 
        我們這里應該這樣做,但是接下去呢?
 
        這個環節很重要,但是如果不做會有怎樣的風
 
        險?
 
        我們在做這件事的時候,其它的人在做什么?
 
        為什么失敗了?
 
    相關的問題很多,但總而言之,這本經典教材更多的
 
是在描述“怎樣實做”,而絕少講述“為什么這樣做”。以
 
致于行為失去了思想的引領,能“完成”工程,而不能“做
 
成”工程便是可以想見的事了。
 
    任何人在實施軟件工程的過程中,或者處于工程過程
 
的某一個階段的時候,都會有自己的思想或思考(哪怕是
 
勞騷),那么為什么沒有人寫“軟件工程思想”這樣的書
 
呢?
 
 
 
我與軟件工程
 
    我始終認為無論是哪家公司實施軟件工程,都將是一
 
部成功者的血淚史。然而不實施軟件工程,則將是一部失
 
敗者的血淚史。換而言之,做軟件工程可能流血流淚,但
 
終究可能成功;而不實施軟件工程,那就是拋頭顱灑熱血
 
的失敗了。
 
    我所遇見的卻是不打算實施軟件工程的公司。在“誓
 
死不做軟件工程”的思想的引領下,一家堪稱河南省最具
 
資本實力的軟件公司于 2003-2004 年間倒掉了。我在這家
 
公司前后工作了 7 年。在 2003 年 2 月的時候,我開始請
 
假在家寫書,以一個絕對 Coder 的身份完成了《Delphi
 
源代碼分析》。用這一年的寫書時間,完成了我對這些年
 
的程序生涯的回顧和反思,我看到了我在做 Develope
 
Manager 和 Project Manager 過程中的得失,也透析了那家
 
公司幾年來的成敗與沉浮。
 
    我再次與總經理 P&J 對坐的時候,我們又討論到公
 
司的問題。他依舊固執地認為“最重要的是人的問題”。
 
我看不到他對管理、工程和決策上的任何反思,于是我終
 
于辭職了。
 
    2004 年 3 月,我開始應職于一家新的軟件公司。因
 
為規模小,所以實施軟件工程的風險也就小。在一次公司
 
內的軟件工程培訓中,我突然意識到工程實踐與工程思想
 
之間的差異與關系,也同時看到《軟件工程——實踐者的
 
研究方法》一書的根本性的不足。時值我那本《Delphi
 
源代碼分析》將近完成之時,于是我匆匆記下當時的想法,
 
并確定了這本新書的名字《大道至簡——軟件工程實踐者
 
的思想》。
 
 
 
大道至簡
 
    直到現在①,這本書的基本目標仍舊與它最初定名時
 
一樣:
 
        這是一本小書
 
        只用讀與思考,沒有實作
 
    所謂“小書”,是我不想做成教材或者宏論。思想應
 
該簡明,闡釋應該清晰,而讀者應該更多地去思考,而不
 
是跟隨這本書去完成什么。
 
 
 
① 我寫書的習慣是先寫前言,這相當于大綱。因此所謂“現在”, 
是指我寫下前言的這個時候:2004.11.01 凌晨 5 時。
 
    老子說“道之為物,惟恍惟惚”。道是要體悟的,而
 
不是象做木工活那樣是“會與不會”的問題。道是什么呢?
 
“道是本體,是規律,是自然”,簡而言之,道是既存在
 
的事實和影響事物發展的規律。
 
    這里需要說明的是,道并不人為的規則,而是事物本
 
身特質的規律。因此,本書中所要講述重點是這種規律。
 
即使提及到一些“實踐規則”,也是在對規律討論之后。
 
讀者應該發現這些“人為規則”是那樣的遵從于“本質規
 
律”。
 
    經常聽到的一句話是“規矩是人定的”,因此也要“靠
 
人來推翻”。但是(初級的)軟件工程實施者經常抱著一些
 
經典的教材一步一趨,此謂之曰“知其然而不知其所以
 
然”。無僭越便無建樹,無大成者。
 
畫眉深淺入時無
 
    我不是太喜歡寫很“入時”的東西。“入時”的往往
 
是新的,因而也就乏有研究。這樣的東西流于口頭的討論
 
是可以的。然而著書立說,是要將心得之見或謹嚴之論呈
 
現給讀者,不是把自己想說的話說出來就可以的了。
 
    在寫《Delphi 源代碼分析》的時候,Delphi 8 都已經
 
發布了,Win32 的時代也已近末路。促使我寫那本書的原
 
因,在于沒有人用 Delphi 來研究操作系統的內核機制,
 
而 Delphi 的源碼中對這些的實現細節實在是寶藏。絕大
 
多數用過 Delphi 的開發人員,入源代碼之寶山而空回,
 
實在令人痛惜的。因此那本書能否買得了錢我是不在乎
 
的,我在乎的是讀過那本書的朋友,能從編譯器的角度上
 
對 Win32 體系增加多少的了解。
 
    從 Delphi 7 的時代我就開始接觸.NET Framework。
 
2003 年的時候給 BorCon China 做演講時,我已經對
 
Borland 在底層上為 Delphi .NET 的實現非常了解了。因
 
此如果以“入時”(以及“適時”)而論,在《Delphi 源代
 
碼分析》完成之后,我應該寫的書是《Delphi .NET 源代
 
碼分析》,來全面講述 Delphi7、Delphi8 和 Delphi9(Delphi
 
2005)中對.NET 下開發的實現。
 
    這個計劃被我擱置了。
 
    在我如今看來,語言其實是開發的細微未節,而在大
 
學時代、在課桌上令人昏昏欲睡的《軟件工程》才是軟件
 
開發中的髓質與靈魂。十年的軟件開發實踐中,其實在很
 
多時間里我都落入了細節陷阱。
 
    “實現”的欲望是從程序員出身的管理者的通病。因
 
此如果你仍然在思考選擇什么語言、如何重構,以及在開
 
發部里爭論一段代碼有沒有或應不應該采用某種模式,那
 
么請你暫時沉寂下來,聽我說:那是細節。
 
    真正的問題是:你的老板要求你下周二就給客戶演示
 
這個系統;而客戶并不關注你的實現細節,他關注的是你
 
本月月底是否能 Close Project。
 
    軟件工程首先關注的是以客戶為對象的、整個工程的
 
成敗和質量。根本上說,技術性、重用性等等,只是保障
 
工程成敗與質量的手段而已。
 
    重要的東西往往并不入時①。例如你的ThinkPad還在
 
工作,僅僅是因為電池還沒有用光。
 
知之、好之、樂之
 
    從讀者的角度上來講,是“知之不如好之,好之不如
 
樂之”的,因此作為作者,則希望自己的作品使人“以之
 
為知,以之為好,以之為樂”。在寫《Delphi 源代碼分析》
 
時,我的書稿的第一頁就寫著“知之、好之、樂之”,然
 
而那本書僅能給人以知識,讓人“知道”就很不錯了,況
 
乎樂哉?
 
    讀書給人以痛苦之感是有可能的。如果讀《Delphi
 
源代碼分析》不感到痛苦,那是沒認真讀。然而我畢竟不
 
是想讓人(或者想授人)痛苦的,將《Delphi 源代碼分析》
 
寫到那般地步,非我所愿。
 
    讀《大道至簡》的話,就用不著這樣了。我雖然做不
 
到讓讀者“以之為樂”,但“以之為好”還是可以的。我
 
希望讀者可以輕松地將這本小書讀完,然后便可以束之高
 
閣了。畢竟這本書不是理論,也不是方法論,只是思想。
 
    思想已經領悟,文字的、紙質的東西還有什么價值
 
嗎?
 
① 你當然也可以由此反推出第 7 章的部分內容并不重要。的確,
 
那只是我思考事物的一種方式,我希望你看到本書中講的思想是
 
如何被實例化的。但對于本書來說,如同我一再強調的那樣:這
 
是枝節。
 
致謝
 
    首先感謝我的老朋友,程序員雜志社社長蔣濤先生。
 
在我看來,他所作的序,既是對本書的贊許,也是對他本人十余年來從程序員進入管理和經營角色的經歷的感言。
 
    感謝 P&J 和 Danny.Chou。他們給了我七年的從業經驗,看著一個小公司做大,又從一個大公司做到消亡。這些經歷深深地影響了我如今思考問題的方式,以及決策的方法。P&J 的知人善任和用人不疑成就了我的用人觀,而以 Danny.Chou 為鑒,則同時形成了我對技術的執著與背離的兩種態度(用于不同的思考場景)。
 
    再次感謝 P&J 在 1997 年成功地說服我留任西南區市場經理一職。如果沒有那時的轉變,我想我至今仍然會困宥于程序員的這一個角色。
 
    感謝我的朋友小邵(colorme)和明明,你在這本書上看到的插圖漫畫出自這對小夫妻的手繪。盡管 colorme 是我所見過的最好的平面設計人員,然而他只為本書畫過一輛坦克。——然后他把它藏在了某幅漫畫里面。
 
    感謝我的父親母親。父親在我 12 歲之后的教育上是成功的,他留給了我足夠的、獨立的思考空間,以及面對事物的決策權。我至今記得我的第一封信是寫于 9 歲那年的一封家書,這是我第一次用筆寫課本之外的東西。這是母親的功勞,她成就了我對文學和文字的喜好。沒有他們,我不會有今日的觀點和表達這些觀點的能力。
 
    感謝 Joy。En,我還活著,是因為她無微不至的照顧。 謝上帝把她給了我,成了我的廚師、司機、保姆、聽眾、苦力工、開心果,以及,我最愛的妻。

周愛民(Aimingoo) 2013-08-24 22:48:17

[新一篇] 大道至簡——軟件工程實踐者的思想 第8章 是思考還是思想

[舊一篇] O'Reilly:黑客(計算機革命的英雄)黑客文化和倫理的奠基之作,計算機專業人士必讀
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表