這本書很可以
這本書《禪與摩托車維修藝術(shù)》是我一個朋友推薦給我的,我當(dāng)時淺顯的以為這本書貌似就是通過修摩托車看出來一些哲學(xué)問題,但開始讀之后卻發(fā)現(xiàn)很不一樣,你竟然能從中看到軟件開發(fā)的哲學(xué),這些哲學(xué)也適用于其他工作方面。
以下內(nèi)容來源于 https://book.douban.com/review/2541870/,作者:compactset
最近看到很多軟件開發(fā)的書后參考文獻都有這本書,就覺得很奇怪怎么會有摩托車維修技術(shù)的書。后來又看到很多犇人(Code Complete2中也有)都推薦這本書(Joel和Plauger的推薦在文末),于是找來看了,讀后覺得不愧是經(jīng)典,不光研究形而上,思考人生意義的人可以讀,而且從實用主義的角度看,對技術(shù)人員(不光是軟件開發(fā)人員)甚至任何有工作的人都有很大的啟發(fā)作用。
Pirsig說,要把工作變?yōu)樗囆g(shù),選擇良質(zhì)。正如一本投資經(jīng)典書里作者告訴我們,投資者投機者(市場本質(zhì)上是需要理性和非理性的人群,因此本書中的非二分法的思維方式很有用)要把交易視為一種藝術(shù),如果僅僅看到了盈利和損失,是不能成為好的trader的,好的trader應(yīng)該專注于他/她的交易藝術(shù),這點做好了,自然能帶來好的回報。
于是我?guī)е浖_發(fā)的有色眼鏡來看這本書并做出了讀書筆記:
p229. 摩托車的組件和功能分析,從組件來看一輛摩托車,要了解這些組件的作用,必須進一步解釋它的功能。
p233. 你必須先壓制住自己的看法,否則你就無法讀下去。它是一個比溝里的死水還要沉悶的東西,你會讀到化油器,齒輪,壓縮里等等,活塞,火花塞,進氣等等。如果從浪漫的角度來看就會覺得非常沉悶,丑陋而且十分笨拙,浪漫的人很少能突破這一點。
[軟件框架的api文檔,鎖,線程池,實體,關(guān)系,nLn(n),抽象代數(shù)中的群環(huán)域,初讀都很枯燥,難怪文科的人大都理工不行(如錢鐘書數(shù)學(xué)很差),浪漫過頭了。達芬奇這種文理通吃的是天才。很枯燥,讀不下去的時候要控制住自己的厭倦想停下來的念頭。站樁也類似,要繼續(xù)站下去,甜頭就會來了。] 但是一旦你能控制最初的反應(yīng),就會繼續(xù)發(fā)現(xiàn)其他的內(nèi)涵。[先苦后甜]
p251. 如果你直接面對一個瘋子,你所了解的就是他瘋了,這等于是根本不了解他。要了解他,你就必須從他的角度看事情。
[要用好框架, 要了解它, 就必須從框架的角度來看程序]
p281. 不可以在大太陽下直接修理車子,或者在你累了一整天下來腦筋不清楚的時候修理。
[要在腦子清醒和好的環(huán)境下進行軟件調(diào)試]
p287. 精確的儀器是為了表達一種理念而設(shè)計的。約翰認為我接觸到的是各種零件,實際我接觸的是各種觀念。
[程序員面對的類庫或code base并不是一砣砣代碼,而是各種觀念]
p290. 所有相互牽動的結(jié)構(gòu)整體地被稱為系統(tǒng)。摩托車也是一種系統(tǒng),一種真正的系統(tǒng)。
p292. 這就是所謂的摩托車,它是由一組鋼鐵制的零件所組成的觀念體系,其中任何一部分,任何一種形狀都是由人所設(shè)計出來的。
p298. 我說:"他要把這些零件組合起來,一定對摩托車有相當(dāng)?shù)牧私? 比爾笑著說:"這也是最好的學(xué)習(xí)方式"。
[深入源代碼, 是最好的學(xué)習(xí)方式]
p306. 在這里要提到邏輯的兩種方法,歸納法和演繹法。要解決一般思維無法解決的難題,就要通過你的觀察和手冊當(dāng)中所提供的結(jié)構(gòu),不斷交替運用歸納法和演繹法,如此才能找到解決之道。這種交織混雜的正確程序,如果正統(tǒng)化,就是所謂的科學(xué)方法。
p309. 你先拿出一個筆記本,把所有的狀況都寫下來,這樣你就知道情況如何,問題要怎么解決。
[相當(dāng)于在調(diào)試卡住時, 跟同事或玩具熊閑聊,把問題講給他/它聽]
p310. 要把問題正確的寫下來,起碼要兼顧到六方面:
(1) 問題是什么。
(2) 假設(shè)問題的原因。
(3) 證實每個問題的假設(shè)。
(4) 預(yù)測實驗的結(jié)果。
(5) 觀察實驗的結(jié)果。
(6) 由實驗得出結(jié)論。
p784. 用這種二分法來修理摩托車,聽起來似乎錯不了,因為我們已經(jīng)很習(xí)慣它了。但是這不是正確的態(tài)度。
p789. 所以,一個人在修理摩托車的時候,對車子的了解分分秒秒都在改變,因而得到了全新知識,其中蘊涵了更多的良質(zhì)。
p790. 如果你想修一輛摩托車,不會發(fā)生被卡住的情形,那么古典的二分法。雖然必要。但是不足以滿足你的需要。你必須對工作的品質(zhì)有某種情感,你必須能判斷什么才是好的,注意點才能促使你行動。
[如果調(diào)試中充滿對bug的痛恨心理,是不好的]
p794. 你的心靈中就會很自然的找到解決的辦法,除非你非常容易被卡住。其實怕被卡住是不必要的,因為被卡住越久,你就越能看清楚讓你脫困的良質(zhì)。
[軟件調(diào)試過程被一個bug卡住很久, 也不是壞事]
要想了解良質(zhì),不論是在技術(shù)工作上或是其他方面,無私的接納這種被卡住的現(xiàn)象是各關(guān)鍵。無師自通的技術(shù)人員就是因為常常被卡住,才比接受學(xué)院訓(xùn)練的人員更了解良質(zhì)。
p797. 現(xiàn)在為了要把螺絲拿下來,你對它究竟是什么已經(jīng)不感興趣了。它的功能才是你研究的重點。于是你會提出有關(guān)功能方面的問題,由你的問題就可以知道你對良質(zhì)的分辨能力。
p808. 當(dāng)然,提升自己的精神層次并不一定要接觸摩托車,單純到磨一把菜刀,縫一件衣服或是修補一張壞掉的椅子,它們背后的問題都是一樣的。你做任何一件事都可以把它做的很漂亮,或是很丑陋。如果你想要有高水平的表現(xiàn),就必須具備鑒賞力和達到目標的方法,也就是同時具有對良質(zhì)的古典和浪漫的認識。我們的文化只會給你古典的認知方法,然而它把鑒賞力給忽略了。
[斯賓諾莎磨鏡片也算吧? 程序員喜歡做木匠活(The Pragmatic Programmer作者之一)也是出于這個?]
p810. 你得經(jīng)常跟上流行而不厭倦,所以你落入了流行的陷阱之中。
[在技術(shù)上喜歡跟風(fēng), 學(xué)習(xí)各種流行的類庫, 框架]
p813. 解決之道就在裴德絡(luò)的論點當(dāng)中,古典的認知不應(yīng)該僅套上浪漫的外殼。古典和浪漫必須從根本上融合在一起。
p815. 保持內(nèi)心的寧靜在機械工作上并不是一件小事,它是工作的核心。能夠使你平靜的就是高級的手藝,反之就是低級的。而最后真正重要的,就是要達到內(nèi)心的平靜,除此之外別無它物。因為只有內(nèi)心平靜,我們才能覺察到良質(zhì)的存在。它超越了浪漫和古典的認知,將兩者融合為一。要想具有鑒賞力,了解如何完成高級的工作,體會和工作融為一體的感覺,就要培養(yǎng)內(nèi)心的寧靜。
[在敲Quick and Dirty的代碼的時候就會覺得很厭煩;而在重構(gòu)的過程中能體會到筆記本,鍵盤,手指和大腦融為一體的寧靜感覺]
p820. 優(yōu)秀的技術(shù)人員就不會如此。如果他對手中的工作很感興趣,他就會沉浸在工作之中,而不會產(chǎn)生主客觀之間的對立。
[就像好的和尚念經(jīng)肯定也能沉浸進去, 老太念經(jīng)時就未必了]
p822. 所以在維修摩托車的時候,最重要的就是要培養(yǎng)內(nèi)心的寧靜。這一點做到了,其他的一切都會變得很自然。內(nèi)心的平靜會產(chǎn)生正確的價值觀,正確的價值觀就會產(chǎn)生正確的思想,正確的思想就會產(chǎn)生正確的行動,正確的行動的工作就可使別人從中看到做事人內(nèi)心的平靜。
[在浮躁的軟件開發(fā)環(huán)境里, 在項目壓力下, 不當(dāng)?shù)捻椖抗芾硐? 還能保持內(nèi)心的寧靜嗎?]
[好的技術(shù)人員在工作時大都很安靜,聽耳機敲代碼的程序員和書里開著錄音機瞎修摩托的修理工一樣具有破壞力]
p837. 如果你想要修理一部摩托車,那么充足的進取心是最重要的工具。如果你還沒有足夠的熱忱,你最好收拾工具暫放一邊。因為它們不會對你有任何幫助。
進取心是精神的補給品,能夠推動事情的進行,如果你沒有它,就不可能修理摩托車。但是如果你有了它,你就可會知道如何運用它,那么無論如何一定能修好這部摩托車。所以在開始之前,最重要就是要有熱忱。
p839. 在你修理機器時,經(jīng)常會出現(xiàn)劣質(zhì)的狀況:關(guān)節(jié)生銹了,零件無法組合。這些意外都會消耗一個人的進取心,減少你得熱忱,讓你覺得十分沮喪,以至于想放棄。我稱這些為進取心的陷阱。維修摩托車容易讓人受挫,也容易讓人憤怒,但這正是它讓人覺得有趣的地方。
[軟件開發(fā)調(diào)試中也容易讓人受挫, 遺留代碼, 需求變化...]
p841. 進取心的陷阱可以定義為,因無法意識到良質(zhì),從而使人喪失做事的熱忱。陷阱主要有兩種:第一種是因外在的環(huán)境使你放棄了良質(zhì),稱為挫折;第二種是你內(nèi)在的因素引起的,稱為憂慮。
p844. 第一次拆卸部件可能會有許多不利,因為你要花更多的時間和金錢去應(yīng)付意外的損害。但是毫無疑問,下一回你就會遠遠超過專家了。雖然這個過程很辛苦,但是你對它已經(jīng)有了感情,這是專家不可能擁有的。避開陷阱的第一個技巧是拿出你的筆記本,寫下拆卸的每一個步驟,然后記下以后重新組合時可能產(chǎn)生的問題。第二個技巧是在地上鋪一張報紙,把所有的零件由左到右,由上到下排列整齊。
[維護代碼的技巧]
p852. 最后,如果你和我一樣吃過零件的不少苦頭,而且又有投資的能力,那么你也可以學(xué)著自己制造零件。自己制造不但不會破壞進取心,反而會激勵自己,有一種特殊的感覺。內(nèi)心因素的陷阱有三個:價值陷阱,真理陷阱,肌肉陷阱。
[開發(fā)自己的類庫]
p863. 在修理機器這方面,如果你得自我太強,往往無法把工作做好。
[做程序員,要Humble]
p866. 為了減輕自己的焦慮不安,你可以告訴自己,沒有哪一個技術(shù)人員不會犯錯的。如果你自己犯了錯,你最起碼還有學(xué)習(xí)的機會。當(dāng)你覺得厭倦的時候,放下手中的工作去看場表演,打開電視機或者和朋友聯(lián)絡(luò)一下,暫時離開那臺機器。醫(yī)治枯燥的最好方法就是睡覺,第二個選擇是喝咖啡。
[開發(fā),調(diào)試累了,應(yīng)該休息, 但是像華為那樣在桌子下面放鋪蓋太過分了點]
p869. 我聽說有兩種焊接工:生產(chǎn)線上的和維修的。前者不喜歡復(fù)雜的事,喜歡重復(fù)同樣的動作,而維修焊接工卻很討厭重復(fù)相同的動作。
[coder和developer的區(qū)別]
p871. 摒除煩躁最好的方法,就是增加工作時間。如果要趕時間,那么盡可能增加預(yù)定的時間,然后降低過高的期望。
p880. 在維修摩托車的時候,往往你提出的許多問題,都會碰到無法解決的狀況,因而你就可能喪失信心。其實大可不必如此。
如果你一時找不到答案,就表明你設(shè)計的問題無法替你找到你想要的答案,因而你對問題的了解必須更廣泛。所以你要做的是進一步研究你的問題,而不是擯棄這些無法回答的狀況,它們和是與否的答案同樣重要,甚至更重要,它們能夠讓你成長!
p889. 你想知道怎樣畫一張完美的畫嗎?很簡單,你先讓自己變得完美,然后再順其自然畫出來。這就是所有專家的方式。如果一周當(dāng)中有六天你都很懶散,不去照顧你得摩托車,那么有什么方法能夠使你在第七天突然變得敏銳起來呢?
[要勤拂拭, 技術(shù)領(lǐng)域頓悟幾率很低吧。像鳩摩羅什他媽懷他的時候突然無師自通會梵語簡直是天上掉餡餅。McGrady 這樣的天才訓(xùn)練懶散,能力也會下降。所以要勤敲鍵盤,少上網(wǎng)]
p950. 理性是指建立我們對世界的了解的方式,而神話則是指史前人類的世界觀。
p972. 造成這種寂寞的主要原因就是科技。真正的禍首并不是科技本身。而是科技所帶來的一種趨勢,物化了人與人之間的關(guān)系。
p973. 如果有的人工作很枯燥,為了讓自己過得愉快些,他就會開始選擇良質(zhì)。然后悄悄地為自身著想而追尋這個目標,使自己手中的工作變成一種藝術(shù)。
[很多應(yīng)用軟件或工具軟件都是這樣來滴,典范是Unix Shell下的工具]
Joel 推薦書目(http://www.joelonsoftware.com/navLinks/fog0000000262.html)里有這本書,下面是他的評價: Some people's attitude towards programming is that it's a nifty way to pay the bills. For others, that's not enough... our work is a significant a part of our lives, and we need a philosophical understanding to make sense of it. This book goes a long way towards relating engineering and philosophy.
P. J. Plauger的評價(Programming On Purpose I page 174): I have yet to find a good book on debugging computer programs. Until one comes along, you should read this one, which has next to nothing to do with computers. It is, just as its title says, about Zen and maintaining motorcycles. If you happen not to enjoy reading essays, or if you don't get caught up in inner quests by introspective people who happen to be good writers, then you may find this book heavy going. If you find that to be the case, please don't put the book down unfinished. At the very least, skip to the chapter on debugging motorcycles. You will learn more about the process of debugging software there than anywhere else I can point you. Don't put the book down until you understand what Pirsig means by "gumption traps," or until you accept the fact that a 59-cent bolt can be worth far more than the contents of your wallet. Particularly if you strip its threads alongside the road, 50 miles from civilization in either direction. If you finish the book, you will also get a first-rate sermon on Quality (with a capital Q, by all means). After all that has been written in recent years about how the Japanese are beating us on quality this and quality that, Pirsig can put you back in touch with Quality.
還有一個是amazon上一個讀者的評價: Whenever I interview someone I ask them what book has most influenced the way they develop software. If they answer "The Pragmatic Programmer" (or "Zen and the Art of Motorcycle Maintenance") then they have the job!
