您好,登錄后才能下訂單哦!
最近央視給我們連續(xù)分享了《大國工匠》,很是羨慕,嫉妒,恨。要知道我們程序員也是一名工匠,哈哈。最近用兩天多的時(shí)間讀了一本和工匠有關(guān)的書籍《程序員修煉之道-從小工到專家》這本書,現(xiàn)在分享給大家,因本人能力有限,拙劣之處請(qǐng)包涵。
從這本書的名字說起,這本書現(xiàn)在的名字體現(xiàn)不出來書中的主題內(nèi)容,書的原名為《The Pragmatic Programmer》翻譯為《注重實(shí)效的程序員》,看到這個(gè)題目想必大家對(duì)書的主題有個(gè)大概印象。這本書在編碼問題,軟件架構(gòu)和設(shè)計(jì),項(xiàng)目管理等方面都有講解。
本書總共分八章:
1. 注重實(shí)效的哲學(xué)
2. 注重實(shí)效的途徑
3. 基本工具
4. 注重實(shí)效的偏執(zhí)
5. 彎曲,或折斷
6. 當(dāng)你編碼時(shí)
7. 在項(xiàng)目編碼之前
8. 注重實(shí)效的項(xiàng)目
這本書的章節(jié)設(shè)置和一般書籍章節(jié)設(shè)置有非常大的不同,各個(gè)章節(jié)之間做到了既獨(dú)立也相關(guān),可以從頭閱讀,也可以隨意翻頁即讀。這難道是沒有明說的解耦思想,哈哈。
先說下第一章<<注重實(shí)效的哲學(xué)>>
首先大家不要被高大上的“哲學(xué)”二字迷惑,這里僅僅指的是一些基本思維方式方法。
1, 我的源碼被貓吃了
我舉個(gè)語境,要是哪天你的硬盤垮了,帶走了你的源碼,而你又沒有備份,你告訴你的老板“我的源碼被貓吃了”。這其實(shí)說的意思是,要對(duì)自己的工作負(fù)責(zé)。要提供選擇,而不是找借口。要說明通過什么能挽回局面。
2, 軟件的熵
想必程序員在維護(hù)槽糕的代碼都有這樣的經(jīng)歷,現(xiàn)在的代碼都是垃圾,我照做就是了。
當(dāng)我們發(fā)現(xiàn)自己所在的團(tuán)隊(duì)的代碼非常優(yōu)美時(shí),我們會(huì)格外的保持干凈。聽起來是否似曾相識(shí),其實(shí)這就是“破窗戶理論”。其實(shí)我現(xiàn)在還沒有弄清楚譯者為什么會(huì)用“軟件的熵”做標(biāo)題。
3, 煮青蛙和石頭湯
溫水煮青蛙也可以用到項(xiàng)目管理當(dāng)中,其實(shí)就是說,項(xiàng)目的腐爛都是從一次次脫離規(guī)范,一工時(shí)工時(shí)的拖延開始的。至于石頭湯的故事在這里不展開,留給有心的同學(xué)們,提前說一下,石頭湯的故事更有趣,參與的角色更多樣,理解的角度更多樣。
4, 足夠好的軟件
這一點(diǎn)引入一個(gè)書中的問題:
考察你使用的軟件工具和操作系統(tǒng)的制造商。你能否發(fā)現(xiàn)證據(jù),表明這些公司安于發(fā)布他們知道不完美的軟件嗎?作為用戶,你是會(huì)(1)等著他們清除所有bug,(2)擁有復(fù)雜的軟件,并接受某些bug,還是會(huì)(3)選擇缺陷較少的更簡(jiǎn)單的軟件?
這道題書中沒有給出答案及分析。從作者角度出發(fā),選項(xiàng)(3)是符合作者的“足夠好的軟件”。
但是我認(rèn)為這本書出版在2004年前后,到現(xiàn)在已12年之久,加上互聯(lián)網(wǎng),移動(dòng)互聯(lián)網(wǎng)發(fā)展,互聯(lián)網(wǎng)產(chǎn)品的涌現(xiàn)。作者對(duì)足夠好的軟件的定位還需商討。
5, 你的知識(shí)資產(chǎn)
這一點(diǎn)我就不按照書本上講解了,這里我從一個(gè)軟件開發(fā)角度講解一下知識(shí)。
第一類為基本理論類書籍,這些書籍的總量相對(duì)比較固定?;旧嫌?/span>140 左右??梢詤⒖?/span>http://www.theithome.net/read-htm-tid-43460.html
第二類為技能書籍,包括各種流行技術(shù),編程語言等。這種書籍廣泛,數(shù)量多。
我認(rèn)為讀書的過程中最重要的就是要有批判精神??梢蕴岣唛喿x轉(zhuǎn)化率。
6, 交流
這部分我主要記住了兩句話,一句話是,被打量要比被忽視更好。第二句話說的意思是說一個(gè)好的想法,如果沒有有效的溝通就如同一個(gè)沒有人關(guān)心的孤兒。
注意,在這里給人力資源部打個(gè)廣告,人力資源部給員工的培養(yǎng)課程資料中的提供的《有效溝通技巧》講的交流溝通內(nèi)容是很豐富的。
第二章《注重實(shí)效的途徑》
第一章講的內(nèi)容更多的是無招內(nèi)功九陽神功理念。第二章咱們就進(jìn)入干貨,練習(xí)九陰白骨爪。
7, 重復(fù)的危害
書中描述是這樣子的,當(dāng)你在一個(gè)系統(tǒng)中兩處或者多處表達(dá)同一個(gè)事物,你要是改變其中一處,你必須記得改變其他各處。但是我要說這不是你能否記住的的問題,而是你何時(shí)忘記的問題。這就是重復(fù)危害的深刻表達(dá)。
書中的作者在這一小節(jié)中對(duì)重復(fù)危害的產(chǎn)生原因講的很透徹全面。但是到最后沒有明確提煉出避免重復(fù)的措施,措施隱含分布在各處(難道是為了避免重復(fù),這也是太快了吧),我整理如下:
1, 通過清晰的設(shè)計(jì),強(qiáng)有力的技術(shù)領(lǐng)導(dǎo),進(jìn)而在設(shè)計(jì)中進(jìn)行充分理解的責(zé)任區(qū)域劃分。可以規(guī)避一些問題
2, 但是模塊層重復(fù)更隱蔽。不能劃入明顯的責(zé)任區(qū)域。解決這個(gè)問題就要用到第一章的第六條交流。鼓勵(lì)開發(fā)者交換意見,進(jìn)行提問,找到并復(fù)用已有的東西。
8, 正交性
這里的正交其實(shí)就是咱們熟悉的解耦。在這里你估計(jì)會(huì)想到標(biāo)題為啥是正交,不是解耦。
我忘了告訴大家本書的作者同時(shí)也是一位木匠和音樂家。估計(jì)能在木匠和音樂領(lǐng)域找到答案。作者真的博學(xué)。
這里拋出去一道思考題:
C++支持多重繼承,而java允許類實(shí)現(xiàn)多重接口,使用這些設(shè)施對(duì)正交性有和影響?使用多重繼承和使用多重接口的影響是否有不同?。。。
9, 可撤銷性
可撤銷性我認(rèn)為是對(duì)一個(gè)產(chǎn)品開發(fā)結(jié)果的一種度量??沙蜂N性就是擁抱變化,通過之前的建議,避免重復(fù),解耦等的使用,制作靈活,有適應(yīng)能力的軟件。
舉個(gè)很常見的例子,如果正在項(xiàng)目開發(fā)的過程當(dāng)中提出需要更換數(shù)據(jù)庫廠商,這時(shí)要是我們把數(shù)據(jù)庫的概念抽象出來(數(shù)據(jù)庫只是一種數(shù)據(jù)持久化),而不是把調(diào)用數(shù)據(jù)庫的代碼纏繞在各處。我們就可以說是soeasy。
10, 曳光彈
這個(gè)名詞我是第一次聽說,中間作者也花費(fèi)了筆墨解釋曳光彈的出處。這個(gè)名字估計(jì)估計(jì)要另外一個(gè)作者喜歡玩飛機(jī)有關(guān)系吧。
簡(jiǎn)單的說,曳光彈其實(shí)就是有可用代碼的原型設(shè)計(jì)。原型一旦用戶對(duì)界面同意,可以直接扔掉。但是曳光彈不同,他是一個(gè)能工作的東西。開發(fā)人員可以在里面添加新功能。
其實(shí)在這里追究曳光彈的概念邊界我覺得不重要,重要的是我們能在合適的場(chǎng)合使用。
11, 原型與便簽
這一節(jié)通篇再講原型設(shè)計(jì)。看完之后基本就忘記了。
12, 領(lǐng)域語言
這一小節(jié)的內(nèi)容作者是站在計(jì)算機(jī)語言的高度描述講解的?,F(xiàn)在這么多的語言,就是因?yàn)闉榱私鉀Q不同領(lǐng)域的問題產(chǎn)生的。例如咱們公司前一段事件招聘中提到的R語言,R語言我認(rèn)為就是一種為了用于統(tǒng)計(jì)計(jì)算和統(tǒng)計(jì)制圖的優(yōu)秀領(lǐng)域語言。
再往近的說,相信大部分公司開發(fā)人員都熟悉java,熟悉非常流行的spring框架。Spring中有一個(gè)常用的措施,就是許多特定功能都可以通過XML描述語言進(jìn)行描述??梢云帘螌?shí)現(xiàn)細(xì)節(jié)。很簡(jiǎn)單的可以讓開發(fā)人員處理特定領(lǐng)域問題(比如事務(wù)控制,日志等)。我認(rèn)為spring通過利用xml描述語言,及其自己寫的類似解釋XMl的解釋器來解決問題的思路從某種角度也有這個(gè)思想。
13, 估算
里面講到的估算,印象是最深的是一個(gè)例子,如果你的奶奶問你何時(shí)到達(dá),她也許只是想知道該給你準(zhǔn)備午餐還是晚餐,而一個(gè)困在水下,空氣就快用光的潛水員很可能需要你精確的回答。這告訴我們估算是有語境的。
這本書講到的估算比較粗略。想要系統(tǒng)學(xué)習(xí)估算要找相關(guān)專業(yè)書籍啦。
第三章《基本工具》
第三章作者從木匠切入,系統(tǒng)闡述了工具的作用,工具是如何產(chǎn)生工作效益,最終工具可以放大你的才干。其中包括14,純文本的威力,15,shell游戲,16,強(qiáng)力編輯,17,源碼控制,18,調(diào)試,19,文本操作,20,代碼生成器。
其中的shell游戲,純文本的威力小節(jié)如果你是一個(gè)類unix系統(tǒng)用戶會(huì)體會(huì)比較深刻,但是我不是。體會(huì)的不是很深刻。
對(duì)于調(diào)試書中有一句很難忘的話,如果你發(fā)現(xiàn)了他人的bug,請(qǐng)不用把精力放到職責(zé)肇事者。你應(yīng)該修正問題。因?yàn)檫@現(xiàn)在是你的問題,責(zé)任。這或許可能當(dāng)為工作環(huán)境中的一種文化引導(dǎo)。
代碼生成器的便利性在公司的開發(fā)平臺(tái)(在eclipse平臺(tái)之上做了插件開發(fā))之上體現(xiàn)的很具體可感知。
第四章《注重實(shí)效的偏執(zhí)》
這一章看完我沒有理解標(biāo)題中的偏執(zhí)。哎,畢竟是國外的東西拿來翻譯的。
這一章主要講的目的是如何編寫健壯的代碼,講解的內(nèi)容有21,按照合約設(shè)計(jì),22,死程序不說謊,23,斷言式編程,24,何時(shí)使用異常,25,怎么配平資源。
我個(gè)人不認(rèn)為斷言式編程能提高工作效率,至少現(xiàn)在,調(diào)試的設(shè)施很多。
對(duì)于書中的“在生產(chǎn)代碼中可以讓重要的斷言開啟”這個(gè)觀點(diǎn)同時(shí)有待商討。
25小節(jié)中提到的配平資源其實(shí)就是如何管理資源(內(nèi)存等),這里的原則就是誰分配的,誰就負(fù)責(zé)解除其分配。對(duì)于java而言,垃圾回收機(jī)制已經(jīng)幫我們做了大部分的工作。
第五章《彎曲,或折斷》
這一章主要介紹了如何創(chuàng)建可以擁抱變化的代碼,講解的內(nèi)容有26,解耦與得默忒耳法則,27,元程序設(shè)計(jì),28,時(shí)間耦合,29,它只是試圖,30,黑板
其中的元程序設(shè)計(jì),它只是試圖(主要是對(duì)MVC做了擴(kuò)展),時(shí)間耦合的運(yùn)用都是為了達(dá)到解耦,解耦的目的就是穿件可以擁抱變化的代碼。
這里重點(diǎn)說明一下時(shí)間耦合,時(shí)間耦合中的時(shí)間有兩個(gè)方面對(duì)我們很重要:并發(fā)(事情在同一時(shí)間發(fā)生),次序(事情在時(shí)間中的相對(duì)位置)。對(duì)于可以同時(shí)進(jìn)行的任務(wù)我們可以并發(fā)進(jìn)行,利用一個(gè)任務(wù)的可能等待去執(zhí)行另一個(gè)任務(wù),這樣就可以在時(shí)間上進(jìn)行解耦。對(duì)于有約束的并發(fā),就是并發(fā)中次序。就需要有具體分析來改進(jìn)并發(fā)。不知道是譯者的問題,還是我理解的問題,在時(shí)間耦合這塊我感覺我沒有很清晰的把握中原作者的所有意圖。
第六章《當(dāng)你編碼時(shí)》
這一章主要介紹了當(dāng)你編碼時(shí)應(yīng)該思考的問題。講解的內(nèi)容有: 31,靠巧合編程,32,算法速率,33,重構(gòu),34,易于測(cè)試的代碼,35,邪惡的向?qū)А?/span>
如何避免靠巧合編程書中提到了很多條,其中不要依靠假定寫代碼,不但要測(cè)試你的代碼,同時(shí)也要測(cè)試你的假定。
算法速率的估算書中主要是把時(shí)間復(fù)雜度,空間復(fù)雜度的具體計(jì)算方法,同時(shí)也對(duì)時(shí)間和空間取舍做了說明。
重構(gòu)需要記住的是,不要說開發(fā)時(shí)間不夠,記住上面的破窗戶理論。早重構(gòu),長(zhǎng)重構(gòu)。
在測(cè)試這塊我想說下,開發(fā)人員要重視自測(cè),因?yàn)槟骋活悊栴}(邏輯情況比較多)單靠測(cè)試人員有可能會(huì)遺漏。
邪惡的向?qū)дf法有點(diǎn)太過了,向?qū)П臼∈呛玫?,就是我們要?duì)代碼生成器或者向?qū)Мa(chǎn)生的代碼要保留百分之一的懷疑。
第七章《在項(xiàng)目開始之前》
這一章主要講述的對(duì)象從個(gè)體的哲學(xué)和編碼問題轉(zhuǎn)換為了項(xiàng)目。講解的內(nèi)容有: 36,需求之坑,37,解開不可能解開的謎題,38,等你準(zhǔn)備好,39,規(guī)范陷阱,40,圓圈與箭頭。
其中主要澄清一下需求之坑,這里的坑不是需求人員故意埋的坑,這里的坑指的是隱藏在坑底的需求,不是簡(jiǎn)單搜索,而是深層次的挖掘。當(dāng)開發(fā)人員發(fā)現(xiàn)了需求的坑,請(qǐng)不要抱怨需求人員,這不是需求人員造的坑,反而需求人員在我們不知道的情況下已幫助我們填補(bǔ)了許多坑,感謝需求人員。
這一章同時(shí)也講述了解決問題的意思思路,還有項(xiàng)目之前有限準(zhǔn)備,防止錯(cuò)失良機(jī),適度規(guī)范,不要陷入規(guī)范陷阱。最后也講述了項(xiàng)目中的工具。我重點(diǎn)提醒不要被工具束縛住。
第八章《注重實(shí)效的項(xiàng)目》
這一章主要討論使項(xiàng)目失敗和成功的關(guān)鍵區(qū)域。講解的內(nèi)容有:41,注重實(shí)效的團(tuán)隊(duì),42,無處不在的自動(dòng)化,43,無情的測(cè)試,44,全部都是寫,45,極大的期望,46,傲慢與偏見。
在團(tuán)隊(duì)的論述當(dāng)中,印象最深刻的是杜絕一個(gè)老鼠害了一鍋湯,不要讓一個(gè)消極,一個(gè)不完美的東西存在,相信這個(gè)東西會(huì)蔓延開來,惡化整個(gè)團(tuán)隊(duì)。這也和前文提到的“破窗戶理論”呼應(yīng)。努力提高自動(dòng)化程度,因?yàn)橛腥藚⑴c就有產(chǎn)生錯(cuò)誤的機(jī)會(huì)。無情的測(cè)試?yán)锩嬷v到了很大范圍的測(cè)試方法。當(dāng)你交付的產(chǎn)品能稍微超出客戶的預(yù)期時(shí)相信你的商業(yè)信譽(yù)就提高了。最后提到傲慢與偏見其實(shí)就指的一件事,就是對(duì)你的代碼簽名,對(duì)于隊(duì)友可以方便的找到你。
讀書分享總結(jié):
這本書中整體內(nèi)容前后邏輯相關(guān)性不強(qiáng),但是不能說這是缺點(diǎn)。這本書更多講的是一些觀點(diǎn),方法,原則,建議,大概有46個(gè)。在這46個(gè)當(dāng)中,我們要辯證統(tǒng)一地認(rèn)識(shí),在具體工作當(dāng)中根據(jù)具體情況要有取有舍,避免一個(gè)人同時(shí)帶了多塊不同時(shí)間的手表,讓人忙亂于原則教條本身,無形之中忽視了項(xiàng)目,忽視了提高生產(chǎn)力這一重要目的。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。