官术网_书友最值得收藏!

前言

為什么寫本書

19年前夏日的一天,我正在宿舍里看一本關于禪宗禪宗,又稱宗門,漢傳佛教宗派之一,始于菩提達摩,盛于六祖慧能,中晚唐之后成為漢傳佛教的主流,也是漢傳佛教最主要的象征之一。漢傳佛教宗派多來自于印度,但唯獨天臺宗、華嚴宗與禪宗,是由中國獨立發展出的三個本土佛教宗派。其中又以禪宗最具獨特的性格。禪宗祖師會運用各種教學方法,以求達到這種境界,這又稱開悟。其核心思想為:“不立文字,教外別傳;直指人心,見性成佛”,意指透過自身實踐,從日常生活中直接掌握真理,最后達到真正認識自我。的書。一位朋友走過來,他注意到了書的封面,然后好奇地問我禪宗是什么。當時我也說不清楚,只是覺得禪宗很像唯心主義者的一道邏輯題。

禪宗的心髓是悟,在禪宗思想推廣的歷史上,有很多具體生動的故事闡釋了這個概念。最有名的是六祖慧能慧能(638—713),俗姓盧氏,河北燕山人(現今的涿州),生于嶺南新州(今廣東新興縣)。佛教禪宗祖師,得黃梅五祖弘忍傳授衣缽,繼承東山法門,為禪宗第六祖,世稱禪宗六祖。唐中宗追謚大鑒禪師。他是中國歷史上有重大影響的佛教高僧之一。陳寅恪稱贊六祖:“特提出直指人心、見性成佛之旨,一掃僧徒繁瑣章句之學,摧陷廓清,發聾振聵,固我國佛教史上一大事也!”的偈句:“菩提本無樹,明鏡亦非臺。本來無一物,何處惹塵埃?”。“本來無一物”——說明了慧能在洞悉事物本質上的境界(后來這首詩的境界又被超越了)。

禪宗的歷史就是種種境界被建立和被超越的過程。為了達到無法超越的最高境界,參禪者們發明了機鋒公案、棒喝直指、揚眉瞬目、拳打腳踢、斬蛇殺貓這樣一些輔助手段,這些手段可以讓人快速通過量變到質變的一剎那(沒有可以解釋的過程),直達內心頓悟。進入頓悟狀態后,所有語言、文字和思想都成了阻礙。

唯一例外的詞——想入非非——可以作為那種境界的縮影。想入非非的意思是說,那種至高無上的境界不是我們頭腦中可以想到的,因為可以想到是一種阻礙;也不是我們頭腦中無法想到的,因為無法想到是指除了可以想到之外的。非非,表示否定了否定,這里的雙重否定不代表肯定。想入非非,把沒有邊界的思想通過一種特殊的方式表達了出來。

在這些年的軟件開發生涯中,禪宗那種積極反思、不斷追求完美境界的精神一直影響著我。憑著這種精神,我把軟件開發變成了樂趣。有兩個原因使這種轉變成為可能:第一,我把想象力和創造力結合了起來;第二,我的軟件開發思想已經比較成熟和完整了。這兩點很重要。想象力和創造力的運用使人的精神得到了滿足,而軟件開發思想則使任何事情在開始之前都有了一個合理的解釋。合理與滿足會給你帶來樂趣。

我寫本書的主要目的也有兩個:第一,回顧自己的軟件開發生涯;第二,與讀者朋友們分享我自己的體驗和感受。我希望在你閱讀完本書后,可以發現如何品嘗軟件開發的樂趣,如何從千頭萬緒變得線索明朗,如何從復雜世界進入簡單世界。

我還想在本書中表達以下幾個觀點。

首先,思想是解決一切問題(包括軟件開發中的問題)的根本。Robert C.MartinRobert C.Martin是Object Mentor公司總裁,面向對象設計、模式、UML、敏捷方法學和極限編程領域內的資深顧問。他不僅是Jolt獲獎圖書《敏捷軟件開發:原則、模式與實踐》(中文版)(《敏捷軟件開發》(英文影印版))的作者,還是暢銷書Designing Object-OrientedC++Applications Using the Booch Method的作者。Martin是Pattern Languages of Program Design 3和More C++ Gems的主編,并與James Newkirk合著了XP in Practice。他是國際程序員大會上著名的發言人,并在C++ Report雜志擔任過4年的編輯。Agile Software Development: Principles, Patterns, andPractices的中文版序言中表達了一個思想,即軟件是美的(我喜歡閱讀序言,因為那里通常是和作者心靈最接近的地方)。而我想表達的思想是,在你熟悉的軟件開發領域,軟件不僅是美的,還是簡單的。領悟到軟件開發中的簡單之美是解決軟件開發問題的鑰匙。在我看來,思想是一種堅定不移的信仰,并且是在經過了足夠的實踐檢驗后形成的。在軟件開發過程中,穩定的思想會使所有的力量匯聚到一個有效的方向。

其次,思想是一盞明燈,但有時也會成為一種桎梏。像參禪者一樣不斷追求完美的境界,使思想成為你自己不斷成長的體驗。

最后,思想必須轉換成習慣。我不是個真正意義上的實用主義者(本質上是個追求內驅力的理想主義者),但是在實踐中運用思想比停留在思考層面顯然更有樂趣。

總之,構建一套完整的思想體系是軟件開發能力成熟的標志。只有思想成熟,才會使你的一言一行、舉手投足、細節決策等在復雜的實踐中收放自如。

軟件開發思想的成熟,還需要操作層面上的大力支持。我們不妨以方法論為例來看看軟件開發中的問題。

很多軟件開發人員在實踐中經常處于一種混亂狀態。所謂混亂狀態,就是當出現問題的時候沒有人知道怎么做才算最好,或者人們之間缺乏足夠的信任和共識,或者大家不斷地討論卻得不到滿意的解決方案。

對于軟件開發老手而言,經驗是幫助他們保持清醒并走出混亂狀態的安全繩。可是,要想依靠經驗來持續地造福一個團隊就比較難。

事實上,造成混亂狀態的原因有很多。本書中的所有內容都是在嘗試從各個層面來談論這個話題。如果單從方法論的層面來看主要有兩個原因。

首先,沒有操作性強的方法論的指導。

軟件開發者的很多工作和努力都基于個人經驗的積累。即便某些經驗豐富的軟件開發者掌握了一些必要的方法論知識,也不能在組織范圍內有意識地推廣,從而成為有實用價值的共享體驗。

其次,有經驗的軟件開發者獲取知識和使用知識的方法無法系統地傳遞給軟件開發新手。

無法傳遞知識,會使新手們在軟件開發領域的成長起點變得很低。在這種情況下,軟件開發項目的成功通常依賴于個人英雄主義、人海疲勞戰和運氣。

當你經常對軟件開發中的某些現象,如無休止地加班、返工、資源緊張等產生迷惘時,應該停下來認真思考;當你認真思考后仍然沒有明確的解決之道,不妨看看別人的想法。

好,還是看看本書里寫了些什么吧。

本書不是一本關于方法論的理論性書籍(盡管我已經嘗試在大量的思考上進行一些理論歸納),也不是一本關于具體技術的操作手冊。本書為讀者呈現的是我在軟件開發實踐中的思考和體驗,目的在于探究實踐中的問題的根源,并給出思想上的解決之道。

本書以軟件開發的基本順序為主線,以簡單、想象和文化的開發思想為線索,以為軟件開發實踐提供指導價值為目標。本書力圖做到傳遞經過組織的、可操作的軟件開發經驗,使軟件開發領域的新手減少知識(軟件開發思想)積累中的彎路,也使軟件開發領域的老手可以對照自己的經驗把可能的困惑降到最低。有一些例子為那些有趣的思考提供支持。

在本書中,我會嘗試對簡單、想象和文化做一些形而上的思考。這些思考會比較抽象,但卻是很多話題的基礎。

本書面向的讀者

每個人的一生都在獲取知識。有些知識來自于被動接受,有些知識來自于主動學習。知識有不同的類型,而學習知識又有不同的方法。

顯然,本書也會提供一些知識。

在推薦誰應該閱讀本書之前,了解本書提供的知識類型是很有用的。同時,在獲取知識之前對知識本身進行一些思考也有助于學習效率的提升。很多領域內的行家都善于此道。

李敖李敖(1935年4月25日—),字敖之,吉林省扶余縣人,祖籍山東省濰縣,出生于黑龍江哈爾濱。中國臺灣作家、中國近代史學者、時事批評家、思想家。被稱作臺灣第一狂人、斗士、“文化頑童”。就是一位獲取知識的大師,我非常欣賞他的學習方法。來看看他獲取知識的特點:

  • 目標簡單、穩定;
  • 圍繞目標思考和行動(持續不斷地收集歷史資料);
  • 享受內心自由樂趣,不盲從權威;
  • 經過特訓的大腦,善于知識歸類和檢索。

他一生都在闡述一個論題,論據的豐富程度達到人生的極限。你可以從主觀出發不贊同他的思想,但是卻無法對抗那些論據。

李敖是一位歷史學家,他所學習的知識類型與軟件行業不同。事實上,即便在軟件行業內部,知識也有不同的類型。知識類型的不同,決定了學習方法的不同,最終對人的能力和培養提出不同的要求。

下表列出了軟件開發中各種工作類型的要求。所有的定義都是非充分性的和非全面性的。它們表達出了我個人的一些偏重。關注這些偏重,對于實現我們最終的目標(成熟的軟件開發能力)是有意義的。

在后續的章節中,讀者可以體會到這些定義形成的思路。如果仔細閱讀,你還會發現,有很多的文字都在間接地解釋——這些能力在軟件開發中應該是怎樣的,以及為什么有助于軟件開發工作。

本書提供的知識類型與上表中的知識類型有千絲萬縷的聯系。但是,本質上又不同于其中的任何一項。相較于務實的軟件開發工作,本書提供的知識更接近于虛。所以,我把本書提供的知識類型稱作思想型。

當你追溯一切問題的根源時,哲學總是追溯的源頭。而當你從事軟件開發工作時,當你面對軟件開發中的迷惘和失敗時,當你尋求解決問題的途徑時,你也許會在追溯的過程中用到本書提供的知識。

所以,本書的讀者,主要是那些在實際工作中陷入迷惘或存在困惑的軟件開發者、管理者和企業經營者。

對于軟件開發者來說,他們已經有了一定的軟件開發技能,但是還沒有或很少有成功的軟件開發經歷;他們對于軟件開發工作存在著抱怨,有一些模糊的或零星的改革想法;他們熱愛軟件開發工作,但是感覺工作缺少樂趣;他們希望有一個明確的方向、一段可以借鑒的經歷、一個行之有效的方法和一種超越以往的境界。

對于管理者和企業經營者來說,他們不滿組織生產能力的現狀,他們有著變革的決心,對于不成熟的軟件開發能力帶來的成本也有著切膚之痛,但是對于如何構建一個合理有效的軟件開發環境沒有思路。

本書主要是為以上三種人準備的。

遺憾的是,世上不存在可以供你直達目標的操作手冊。每個人實現目標的方式都是不同的。除了最后一步的領悟之外,有效信息收集和經驗積累是必需的基礎。

什么樣的信息是有效的呢?

  • 簡潔明確的思想表述;
  • 層次清晰的分類信息;
  • 令人信服的論證過程。

我一直在努力嘗試,希望能為讀者提供這樣的有效信息。

另外,本書是我的經驗之談和人生體驗。我的想法是,也許本書會讓你產生共鳴,也許不會。但是有一點我可以許諾,本書的內容是前面表述的各種想法的實現,是獨特的和真實的。

就軟件開發而言,我根本不顧忌什么,沒有任何讓我盲從的權威。本書中所有的想法都是自己的真實體驗,借鑒來的想法也都經過了自己的“咀嚼”。

本書中的所有內容基本上都以思想討論為主,伴之一些驗證有效的技術實踐。思想討論的內容往往會超出專業和行業的范疇,所以我期望有更多的人來參與這種形式的思想交流。

總而言之,如果你樂意,你可以閱讀本書。

如何閱讀本書

對于讀者而言,沒有什么比知道如何閱讀一本書更重要的了。很多書都是有價值的,從書店中得到它只是第一步。如果不清楚如何閱讀這本書最有效,書的價值就不會輕易地轉移到讀者身上。這一小節將會告訴你如何閱讀本書。

可以想象,得到一本書時,有些讀者因為欠缺領域經驗而需要點撥,有些讀者由于相同的體驗而產生共鳴,有些讀者可以站在更高的層次上對書的內容進行批判。無論哪一類的讀者,都期望快速清晰地獲得作者的寫作思路。

從作者的角度,最誠實的做法就是直白的交流。我認同一種精神,全力表明自己的想法,直到某些讀者可以清楚地認識到自己是反對這種想法為止。當然,我也相信另外一些讀者會贊同它。基于這種精神,本書中所有問題的表述都是斷言式的,不留有任何引申和狡辯的空間。

本書中大多數章節的第一部分是實踐場景,場景中包含了虛構的情節和虛構的人物。你可以把這些場景單獨挑選出來,當作一篇描寫軟件開發者生活的文學作品。你也可以忽略這些場景,這不會影響你獲取本書中的知識。

場景是一個理想中的美好故事,它不能傳遞明確的知識信息。寫作這個場景故事的主要目的,是想說明現實中的軟件開發活動比本書中涉及的討論要復雜和生動得多。例如,一個人的些許想法可能會給軟件開發帶來極大的影響。我不是一個不可知論者,即便在復雜多變的現實場景中,簡單的原則同樣能產生有效的影響。

我一直在考慮一個問題:

業界有很多流行的方法論,也有很多大師的軟件開發思想,可是在實踐中,好像還是有很多組織找不到方向。比方說,敏捷開發敏捷軟件開發又稱敏捷開發,是從20世紀90年代開始逐漸引起廣泛關注的一些新型軟件開發方法,是應對快速變化的需求的一種軟件開發能力。它們的具體名稱、理念、過程、術語都不盡相同,相對于“非敏捷”,更強調程序員團隊與業務專家之間的緊密協作、面對面的溝通(認為比書面的文檔更有效)、頻繁交付新的軟件版本、緊湊而自我組織型的團隊、能夠很好地適應需求變化的代碼編寫方法和團隊組織方法,也更注重軟件開發中人的作用。,我真的沒有看到多少成功的案例。我知道的是,大家在不斷地縮減Scope,不斷地提升Schedule評估的時間,從而來適應傳統的管理方式。我也聽到很多管理者在議論哪種方法論是最好的,好像實施了某種方法論就可以解決所有的問題,可是問題仍然在那里沒有變,只是換了個形式。

所以我想,問題的根源也許不在這里。我覺得,無論方法論也好,管理理論也好,都是技術層面的。這些技術層面的東西來自于很多大師長期的總結和提煉,本身是非常好的,但是它們有復雜的上下文,例如在敏捷開發中沒有提到或者強調的——注重個體文化、專業化思想以及多元化價值認同等。所以,一旦割裂上下文,機械來運用這些方法論,效果就總是不好。

在本書中,我想從實踐者的角度來強調這一點,通過強調軟件開發思想和文化來嘗試連接實踐和方法論。

場景故事也是在這個想法上產生的,我很想反映現實的復雜性,在這種復雜性場景中,讀者可以發現自己熟悉的人和事,我希望可以產生共鳴。然后,我想推薦用簡單的思想和一些文化反思來應對它,至于效果如何,那肯定是仁者見仁智者見智了。

在大多數章節場景故事之后的第二部分,我會首先列出作者寫作本章節的中心思想。這些中心思想是斷言式的、概括式的。讀者需要通過閱讀本章節后續展開論述的內容來了解中心思想的具體含義。

本書想要傳遞的思想是,用簡單的原則、富于想象的精神、文化的視角來認識軟件開發。請在閱讀時始終關注這個核心思想。

我的E-mail地址是:jianni@hotmail.com,歡迎讀者朋友的來信。

主站蜘蛛池模板: 玉龙| 阜南县| 红桥区| 鱼台县| 大新县| 安平县| 枣阳市| 阿拉尔市| 和静县| 大安市| 莲花县| 洪雅县| 甘孜县| 特克斯县| 格尔木市| 酉阳| 新疆| 盐边县| 乌恰县| 浠水县| 锦州市| 宁晋县| 陵川县| 县级市| 林州市| 徐州市| 顺义区| 乌兰县| 江西省| 新余市| 呼图壁县| 新干县| 若羌县| 南皮县| 澄江县| 临潭县| 山阴县| 莱西市| 汾西县| 岢岚县| 图木舒克市|