《程序员修炼之道》笔记(一)
這幾天開始看《程序員修煉之道》,也許不少人看了書的標(biāo)題,第一時間會覺得這是雞湯一類的書。但至少以我自己的感受來看,這是很棒的書,現(xiàn)代人文主義不是提倡自我意識嘛,自己感覺好的就是好的。況且人家也是經(jīng)過了時間和口碑的雙重考驗的,真心值得好好閱讀。
作者在再版的序中寫道:
寫完《程序員修煉之道》至今已有十年。在這十年中,軟件產(chǎn)業(yè)發(fā)生了翻天覆地的變化。……從表面上看,軟件世界似乎陷入了瘋狂的狀態(tài)。但如果你深入繁雜表象的背后,會發(fā)現(xiàn)變化其實并不大。1999年的那些通用開發(fā)原則,在2009年同樣有效(很可能到2019年還會有效)……
大師就是這樣,能從繁雜的表象背后看到事物的本質(zhì)。就像任正非說的:不管是不是互聯(lián)網(wǎng)思維,你造的汽車首先應(yīng)該是汽車。
書中的內(nèi)容多是兩位作者對多年經(jīng)驗的敏銳抽象和升華,對我這個只有一年多經(jīng)驗的程序員來說,要全部理解是不可能的,而好書也不是讀一次就夠的。這里就先記錄一些有點感觸的內(nèi)容:
?
?
第一章 注重實效的哲學(xué)
下面是作者在開篇提到的注重實效的程序員的特征:主要體現(xiàn)在處理問題、尋求解決方案時的態(tài)度、風(fēng)格、哲學(xué)
1. 能夠超越出直接的問題去思考,總是設(shè)法把問題放在更大的語境中,設(shè)法注意更大的圖景。沒有這樣更大的語境,你又怎能注重實效。
2. 對所做的每件事負責(zé),因為負責(zé),注重實效的程序員不會坐視他們的項目土崩瓦解或者慢慢腐爛。
3. 勇于接受變化。大多數(shù)人發(fā)現(xiàn)自己很難接受變化,有時是出于好的理由,有時只是因為固有的惰性。
4. 擁有廣泛的知識和經(jīng)驗基礎(chǔ)。
5. 善于交流。
從“程序員修煉之道”突然談到“注重實效的程序員”,咋看有點突兀,但如果看看原書的標(biāo)題 The Proagmatic Programmer,就不會有這種誤會了。越往后看本書,越能體會到作者提到的這幾個特征的必要性。處理問題、尋求方案時的態(tài)度、風(fēng)格、哲學(xué),這些對我們在軟件開發(fā)中的行為是潛移默化而影響深遠的。
?
?
1. 我的源碼讓貓給吃了
a. 在所有弱點中,最大的弱點就是害怕暴露弱點。
b. 不管是在職業(yè)生涯、還是項目、日常工作,為你自己和你的行為負責(zé),是注重實效的哲學(xué)的一塊基石,注重實效的程序員對自己的職業(yè)生涯負責(zé),而且不害怕承認無知或錯誤。即使在最好的項目中,盡管有徹底的測試、良好的文檔和足夠的自動化,出錯是難免的事情。一旦發(fā)生這樣的事情,我們要設(shè)法盡可能職業(yè)地處理他們,要誠實坦率。我們可以為自己的能力自豪,但對于自己的缺點、無知和所犯的錯,我們必須誠實。
c. 責(zé)任是你主動承擔(dān)的東西。在作出承諾之前,盡可能的分析風(fēng)險是否超出了自己的控制,對于不可能做到的事情或風(fēng)險太大的事情,你有權(quán)不去負責(zé)。但如果你確實同意為某個結(jié)果負責(zé),就應(yīng)切實負起責(zé)任。但你犯錯誤或是判斷失誤是,就誠實地承認它,并設(shè)法給出各種選擇。不要責(zé)備別人活別的東西,不要拼湊借口。遇到問題時,提供各種選擇,不要找蹩腳的借口(Provide options, Don’t make lame execuses)
“我的源碼讓貓給吃了”便是一個蹩腳的借口。要做到坦然地暴露弱點,確實很難,但這是必要地,有一句很簡練的話:Be Human。我們要明白自己是普通人,而不是某種完美的物種,我們有失誤、疲倦、膽怯,允許這些發(fā)生并正視這一切,同時努力成為更好的人。而說到責(zé)任,作者首先教我們的是正確評估事情的風(fēng)險和自己的能力,如果風(fēng)險超過了自己的控制,有權(quán)不去承擔(dān)。這真是再“實效”不過了。
?
2. 軟件的熵
熵是一個物理學(xué)概念,指的是某個系統(tǒng)中“無序”的總量。當(dāng)軟件的無序性增長時,稱為“軟件腐爛”。而造成軟件腐爛的原因主要是:開發(fā)項目時的心理(或文化)。軟件開發(fā)同樣受“破窗理論”影響,低劣的設(shè)計、錯誤的決策、糟糕的代碼都是軟件領(lǐng)域的破窗戶。一旦窗戶開始破裂,情況就會迅速惡化,不要對其置之不理,發(fā)現(xiàn)一個就修復(fù)一個,如果臨時沒有時間,就“用木板把它訂起來”,比如注釋、顯示“為實現(xiàn)”消息,或用假數(shù)據(jù)(dummy data)加以替代。
對于這一點挺有體會,我見過有的軟件,編譯器給出了1000多個警告而置之不理。但話說回來,這又怎么處理,當(dāng)看到前人留下的1000多個警告的時候,我們嘗試過處理一下自己就近的,但馬上就會覺得無助。只能小心別讓自己增加更多的警告。當(dāng)若干年前第一條警告出現(xiàn)的時候,窗戶已經(jīng)開始破裂,直到膨脹到無法收拾的地步。
?
3. 足夠好的軟件
a. 欲求更好,常會把好事變糟——李爾王
b. 我們沒辦法做到十分完美,但可以訓(xùn)練自己,編寫出足夠好的軟件,對你的用戶、對未來的維護者、對你的內(nèi)心安寧來說足夠好。但“足夠好”絕不是編寫不整潔或糟糕的代碼
c. 如何編寫出足夠好的軟件:
1) 讓用戶參與權(quán)衡
軟件開發(fā)過程會受到各種約束,比如市場人員有需要信守的承諾,最終用戶也許已經(jīng)基于交付日期制定了各種計劃,公司也會有現(xiàn)金流方面的約束。如果無視這些約束,一味地增加新特性或一次次潤飾代碼,這不是有職業(yè)素養(yǎng)的做法。但許諾不可能兌現(xiàn)的承諾,為趕上最后期限而削減基本的工程內(nèi)容,同樣不是有職業(yè)素養(yǎng)的做法。
使質(zhì)量成為需求問題。常常需要權(quán)衡足夠好與完美,許多用戶寧愿在今天用上有一些“毛邊”的軟件,也不愿等待一年后的多媒體版本。今天的了不起的軟件常常比明天的完美軟件更可取。而且讓用戶提前使用,他們的反饋可以把你引導(dǎo)向更好的解決方案。
2) 知道何時止步
藝術(shù)家們會告訴你,如果你不懂得應(yīng)何時止步,所有的辛苦勞作就會遭到毀壞。比如繪畫,畫家需要不時得后退,用批判的眼光觀察自己的作品,以確定下一步,但如果你一層又一層地疊加細節(jié),就會迷失在繪畫中。程序也是這樣,不要過度修飾和過于求精二損毀完好的程序。
區(qū)分完美主義與強迫癥真是一件困難的事情。在現(xiàn)實生活中,兩者都可能帶來問題。還好作者提示“如果無視這些約束,一味地增加新特性或一次次潤飾代碼,這是不有職業(yè)素養(yǎng)的做法”,讓我們懂得權(quán)衡并知道何時止步。同樣地我想到最近發(fā)生在自己身上的一件事,遇到技術(shù)上的困難沒有請教別人,耗費了很多時間才自己搞出來,這同樣不是有職業(yè)素養(yǎng)的做法。
?
?
4. 你的知識資產(chǎn)
a. 你的知識和經(jīng)驗是最重要的職業(yè)財富,但它們是有時效的資產(chǎn)。隨著你的知識價值的降低,對你的公司和客戶來說,你的價值也在降低。
b. 怎樣經(jīng)營管理知識資產(chǎn),與金融資產(chǎn)類似:
1) 定期投資。即使投資量很小,習(xí)慣自身也和總量一樣重要。
2) 多元化是長期成功的關(guān)鍵。你知道的不同的事情越多,你就越有價值。但作為底線,你需要知道你目前所用的技術(shù)的各種特性,同時不要就此止步
3) 在保守的投資和高風(fēng)險、高回報的投資之間取得平衡。不要把所有的技術(shù)放在一個籃子里。
4) 低買高賣,以獲取最大回報。在新興技術(shù)流行之前學(xué)習(xí)它就可能和找到被低估的股票一樣困難,但所得到的就和那樣的股票帶來的一樣。
5) 周期性地重新評估和平衡資產(chǎn)。
知識如同財富,需要用心經(jīng)營,這聽起來挺功利的,但對于技術(shù)性的知識來說,確實應(yīng)該采納作者的這些建議。
?
5. 交流
交流的重要性自不必作者多說,在交流技巧方面,作者建議考慮WISDOM原則:
What do you want them to learn
What is their interest in what you’re got to say
How sophisticated are they
How much detail do they want
Whom do you want to own the information
How can you motivate them to listen to you
總體來說,就是首先要了解交流的對象,并能夠站在對方的角度想問題,同時要經(jīng)常跳出事情本身來看看大局
?
歡迎關(guān)注我的個人公眾號【菜鳥程序員成長記】
轉(zhuǎn)載于:https://www.cnblogs.com/zhixin9001/p/6764767.html
總結(jié)
以上是生活随笔為你收集整理的《程序员修炼之道》笔记(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: equals和==的区别(转)
- 下一篇: 与其感慨路难行,不如马上出发