我是如何寫作一本軟件+哲學式的書籍的(上)

近來,陸陸續續寫了快十年的書《完美軟件開發:方法與邏輯》終於上市了,這書非常另類,更像是軟件+哲學的作品,很可能賣不好,也很多人不喜歡,但一路寫來實在是比較坎坷,因此把大致的過程寫下來,供想寫書的各位參考。另一個自己很想說下的話題是,每個程序員都應該給自己寫本書,雖然不太賺錢,下一篇寫這個。

 

非要給IT書分個類的話,我感覺可以分兩大類:一類是解決具體問題的書,比如:《C#高級編程》,《Hadoop實戰》等等。一類則是修煉內功的書籍,比如:《人月神話》,《程序員修煉之道》,等等。當然也有一些融合的比較好的,比如《代碼大全》。自從從事軟件開發之後一直想寫一本後一類的書,主要原因是自己除了軟件之外也比較喜歡哲學,總感覺把哲學的思維用到軟件上後,看到了一些別人沒有看到過的東西,寫出來沒準可以超越《人月神話》。這想法不能說錯,但其實是個坑,真用心去做的話,很容易就很多年過去了,還看不到什麼成績。現在想想,做這種判斷和選擇純粹性格使然,有人喜歡創業,有人喜歡開源,我則喜歡思考一些本質的問題,03年的這篇文章可以算是個旁證《編程本質論   。 那時候還沒有博客,只有文檔中心,當時大家討論的很兇,可惜轉成博客後,各種討論都不見了。

 

什麼事情,如果心裏有執念,就會放不下,之後就會轉化成一種動力,推着你走。思考也是,就因爲持續思考,老感覺自己看到了些特別的東西,因此也就一直斷斷續續的寫點東西。但寫這類修煉內功的書,其實很累人,尤其是年紀小,視野不夠開闊,實踐不夠多的時候。寫點東西出來,過個一陣,自己看都會感覺慘不忍睹。但不管怎麼樣,這也是一種目標,雖然不是很清晰,只有模糊的一種感覺。真要想寫書的話這點很關鍵,執念的程度直接影響書寫不寫的出來,寫書不像成爲比爾蓋茨,需要很多其他東西,最最主要的是能堅持,這個上不給力,特別容易想放棄,因爲寫書既不酷,也不好玩,還很花時間。

 

就這樣抱着“寫本闡述軟件本質問題的書”的想法就開始動筆了。這其中有三個比較大的坎。第一個是書的涵蓋範圍。

大約10年前OO還沒有像現在這樣有一種爛大街的感覺,所以最開始的切入點是OO,想寫成一種關於設計的書。

直接起因是雖然OO大家都說很好,但違揹我個人的直觀感覺,讀OO的程序明顯比讀非OO的程序費勁。對程序員而言在傳統的結構化方法裏,主要關注調用,作用域等幾個基本概念就可以了,而OO程序裏你要關注繼承、多態、包含、聚合等等。直觀上這等於好處沒看到,但先支出了一筆----雖然都說上了規模,其好處自顯,但自己沒看到終究是不信的。

如果從對立統一的角度看,一物有其優勢的地方就必然有其劣勢的地方,當它跨越某種邊界之後,這種劣勢就會表現的明顯。這就和說真理再向前一小步就是謬誤的道理一樣,但關鍵是邊界,你要能說清那裏是OO的能力邊界,那裏是結構化方法的邊界。回頭想想,這點對寫書很關鍵:在邏輯和事實面前可以承認自己錯了,否則的話要相信自己,不管多牛的人,多牛的組織也不能讓他強姦個人的意志。

 

讀了很多書,看了很多程序,最終寫了篇文章來專門闡述這個問題,後來還以《閒侃分析設計》的名字發在《程序員》雜誌上了。我們先不說具體內容,還是說寫作過程。

但寫了半天發現,從寫書的角度看,單隻這一個切入點也就只能是一段素材,篇幅遠不足夠支撐一本書。這時候我才認識到寫書要做詳細一點的規劃,而不是隻有熱情,但從結果來看,最終結果與最初規劃偏差實在是大。

第一版規劃的時候,是想專注於設計,以抽象及抽象所需要的基本原則爲提綱,打通各種設計方法,比如:結構化分析設計,面向對象分析設計,設計模式,框架設計,契約式編程等等。書名都想好了,那時準備叫《編程基礎》。

 

可寫寫,又發現有問題了。

一個是在定位上有點好高騖遠了,要想把設計挖的這麼深,太花時間;一個是發現有點違背初衷。我想寫的是一本關於軟件的書,而軟件裏不只包含設計。軟件的本質特徵也作用於管理、流程這樣的領域,最終各種因素匯合纔有軟件產品。

 

而要想把管理、流程、估算、開發模型、需求開發、開發與設計這麼廣的話題串起來又簡直不像人乾的事情。這時候的關鍵選擇是隻寫設計,還是涵蓋管理、流程這些領域。

 

琢磨了好一陣,由於比較年輕,還是想整個大的題目,要既有廣度也有深度。說是好高騖遠也好,不知天高地厚也好,反正自我感覺良好,就是這麼選了。這是寫這本書的第一個坎,跨這個坎的時候扔了很多寫好的篇章的。現在想想,寫書的經驗可以描述成:你可以好高騖遠,但得咬牙堅持,堅持了也能寫出來。(待續)

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

理想流 + 軟件 = 《完美軟件開發:方法與邏輯》
理想流 + 人生 = ??
理想流 + 管理 = ??
理想流 = 以概念和邏輯推演本質,追求真理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章