其實(shí)不只是說程序員的修煉之道浑玛,也是人生的修煉之道。
1、Care Abort Your Craft (關(guān)心你的技藝)
如果你不在乎能否漂亮的開發(fā)出軟件全蝶,你又何必要耗費(fèi)生命去開發(fā)軟件呢德迹?
要深入的了解你所使用的技術(shù)弦赖。要知其然知其所以然。
2浦辨、Think! Abort Your Work (思考蹬竖!你的工作)
關(guān)掉自動(dòng)駕駛儀,接管操作流酬,不斷地批評(píng)和評(píng)估你的工作
3币厕、Provide Options, Don't Make Lame Excuses(提供各種選擇,不要找蹩腳的借口)
提供各種選擇芽腾,而不是找借口旦装,不要說事情做不到 ,說明做到了什么摊滔。
4阴绢、Don't Live with Broken Windows(不要容忍破窗戶)
當(dāng)你看到糟糕的設(shè)計(jì)、錯(cuò)誤的決策或者不好的代碼時(shí)艰躺,修正他們
5呻袭、Be a Catalyst for Change(做變化的催化劑)
你不能強(qiáng)迫人們改變,想法腺兴,你要向他們展示未來可能會(huì)怎樣左电,并幫助他們參與對(duì)未來的創(chuàng)造
6、Remember the Big Picture(記住大圖景)
不要太過專注于細(xì)節(jié),以致忘了查看你周圍正在發(fā)生什么
7篓足、Make Quality a Requirements Issue(使質(zhì)量成為需求問題)
讓你的用戶參與確定項(xiàng)目真正的質(zhì)量需求
8段誊、Invest Regularly in Your Knowledge Portfolio(定期為你的只是資產(chǎn)投資)
讓學(xué)習(xí)成為習(xí)慣
9、Critically Analyze What You Read and Hear(批評(píng)地分析你讀到的和聽到的)
不要被供應(yīng)商栈拖、媒體炒作或教條左右连舍。要依照你自己的看法和你項(xiàng)目的情況去對(duì)信息進(jìn)行分析
10、It's Both What You Say and the Way You Say It(你說什么和你怎么說同樣重要)
如果你不能有效地向他人傳達(dá)你的了不起的想法涩哟,這些想法毫無用處
11索赏、DRY --- Don't Repeat Yourself(不要重復(fù)你自己)
系統(tǒng)中的每一項(xiàng)知識(shí)都必須具有單一、無歧義染簇、權(quán)威的表示
12参滴、Make It Easy to Reuse(讓復(fù)用變得容易)
如果復(fù)用很容易,人們就會(huì)去復(fù)用锻弓,創(chuàng)造一個(gè)支持復(fù)用的環(huán)境
13砾赔、Eliminate Effects Between Unrelated Things(消除無關(guān)事物之間的影響)
設(shè)計(jì)自足、獨(dú)立青灼、并具有單一暴心、良好定義的目的的組件
14、There Are No Final Decisions(不存在最終決策)
沒有決策時(shí)澆鑄在石頭上的杂拨,想法专普,要把每項(xiàng)決策都視為是寫在沙灘上的,并為變化做好計(jì)劃
15弹沽、Use Tracer Bullets to Find the Target(用曳光彈找到目標(biāo))
曳光彈能通過試驗(yàn)各種事物并檢查它們離目標(biāo)有多遠(yuǎn)來讓你追蹤目標(biāo)
16檀夹、Prototype to Leam(為了學(xué)習(xí)而制作原型)
原型制作是一種學(xué)習(xí)經(jīng)驗(yàn),其價(jià)值并不在于所產(chǎn)生的代碼策橘,而在于所學(xué)到的經(jīng)驗(yàn)教訓(xùn)
17炸渡、Program Close to the Problem domain (靠近問題領(lǐng)域編程**)
用你的用戶的語言進(jìn)行設(shè)計(jì)和編碼
18、Estimate to Avoid Surprises(估算丽已,以避免發(fā)生意外)
在著手之前先進(jìn)行估算蚌堵,你將提前發(fā)現(xiàn)潛在的問題
19、Iterate the Schedule with the Code(通過代碼對(duì)進(jìn)度表進(jìn)行迭代)
用你在進(jìn)行實(shí)現(xiàn)時(shí)獲得的經(jīng)驗(yàn)提煉項(xiàng)目的時(shí)間標(biāo)度
20沛婴、Keep Knowledg in Plain Text(用純文本保存知識(shí))
純文本不會(huì)過時(shí)吼畏,它能夠幫助你有效利用你的工作,并簡化調(diào)試和測(cè)試嘁灯。
21泻蚊、Use the Power of Command Shells(利用命令shell的力量)
當(dāng)圖形用戶界面無能為力時(shí)使用shell
22、Use a Single Editor Well(用好一種編輯器)
編輯器應(yīng)該是你的手的延伸旁仿,確保你的編輯器是可配置藕夫,可擴(kuò)展和可編程的
23孽糖、Always Use Source Code Control(總是使用源碼控制)
源碼控制是你的工作的時(shí)間機(jī)器-----你能夠回到過去
24枯冈、Fix the Problem毅贮,Not the Blame(要修正問題,而不是發(fā)出指責(zé))
Bug 是你的過錯(cuò)還是別人的過錯(cuò)尘奏,并不是真的很有關(guān)系-----它仍然是你的問題滩褥,他仍然需要修正
25、Don't Panic When Debuging(調(diào)試時(shí)不要慌張)
做一次深呼吸炫加,思考什么可能是bug的原因
26瑰煎、“”Select“ Isn't Broken”("Select"沒有問題)
在OS或者編譯器,甚或是第三方產(chǎn)品或庫中很少發(fā)現(xiàn)bug,bug可能在應(yīng)用中
27俗孝、Don't Assume It ---Prove It(不要假定酒甸,要證明)
在實(shí)際環(huán)境中,使用真正的數(shù)據(jù)和邊界條件赋铝,證明你的假定
28插勤、Learn a Text manipulation Language(學(xué)習(xí)一種文本操作語言)
你每天的很大一部分時(shí)間處理文本,為什么不讓計(jì)算機(jī)替你完成部分工作呢革骨?
29农尖、Write Code That Writes Code(編寫能編寫代碼的代碼)
代碼生成器能提高你的生成率,并有助于避免重復(fù)
30良哲、You Can't Write Perfect Software(你不可能寫出完美的軟件)
軟件不可能完美盛卡,保護(hù)你的代碼和用戶。使他們免于能夠預(yù)見的錯(cuò)誤
31滑沧、Design With Contracts(通過合約進(jìn)行設(shè)計(jì))
使用合約建立文檔,并檢驗(yàn)代碼所做的事情證號(hào)是她聲明要做的
32巍实、Crash Early(早崩潰)
死程序造成的危害通常比有問題的程序要小的多
33滓技、Use Assertions to Pervent the Impossible(用斷言避免不可能發(fā)生的事情)
斷言驗(yàn)證你的各種假定,在一個(gè)不確定的世界里蔫浆,用斷言保護(hù)你的代碼
34殖属、Use Exceptions for Exceptional Problems(將異常用于異常的問題)
異常可能會(huì)遭受經(jīng)典的意大利面條式的所有可讀性和可維護(hù)性問題的折磨瓦盛。將異常保留給異常的事物
35洗显、Finish What You Start(要有始有終)
只要可能,分配某資源的例程或?qū)ο笠矐?yīng)該負(fù)責(zé)接觸其分配
36原环、Minimize Coupling Between Modules(使模塊之間的耦合減至最少)
通過編寫“羞怯的”代碼并應(yīng)用德墨忒爾法則來避免耦合
37挠唆、Configure, Don't Integrate(要配置,不要集成)
要將應(yīng)用得各種技術(shù)選擇實(shí)現(xiàn)為配置選項(xiàng)嘱吗,而不是通過集成或工程方法實(shí)現(xiàn)
38玄组、Put Abstactions in Code ,Details in Metadata(將抽象放進(jìn)代碼滔驾,細(xì)節(jié)放進(jìn)元數(shù)據(jù))
為一般情況編程,將細(xì)節(jié)放在被編譯的代碼庫之外
39俄讹、Analyze Workflow to Improve Concurrency(分析工作流哆致,以改善并發(fā)性)
利用你的用戶的工作流中的并發(fā)性
40、Design Using Services(用服務(wù)進(jìn)行設(shè)計(jì))
根據(jù)服務(wù)(獨(dú)立的患膛,良好定義摊阀,一致的接口之后的并發(fā)對(duì)象)進(jìn)行設(shè)計(jì)
41、Always Design for Concurrency(總是為并發(fā)進(jìn)行設(shè)計(jì))
容許并發(fā)踪蹬,你將會(huì)設(shè)計(jì)出更整潔胞此,具備更少假定的接口
42、Separate Views from Models(使視圖與模型分離)
要根據(jù)模型和視圖設(shè)計(jì)你的應(yīng)用跃捣,從而以低廉的代碼獲取靈活性
43漱牵、Use Blackboards to Coordinate Workflow(用黑板協(xié)調(diào)工作流)
用黑板協(xié)調(diào)完全不同的實(shí)施和因素,同時(shí)又使各參與方保持獨(dú)立和隔離
44疚漆、Don't Program by Coincidence(不要靠巧合編程)
之一開可靠的事物酣胀,注意偶發(fā)的復(fù)雜性,不要把幸運(yùn)的巧合與有目的的計(jì)劃混為一談
45愿卸、Estimate the Order of Your Algorithms(估算你的算法的階)
在你編寫代碼之前灵临,先大致估算事情需要多長時(shí)間
46、Test Your Estimates(測(cè)試你的估算)
對(duì)算法的數(shù)學(xué)分析并不會(huì)告訴你每一件事情趴荸,在你的代碼的目標(biāo)環(huán)境中測(cè)定它的速度
47儒溉、Refactor Early,Refactor Often(早重構(gòu),常重構(gòu))
就和你會(huì)在花園里除草发钝,并重新布置一樣顿涣,在需要時(shí)對(duì)代碼進(jìn)行重寫,重做和重新架構(gòu)酝豪,要鏟除問題的根源
48涛碑、Design to Test(為測(cè)試而設(shè)計(jì))
在你還沒有編寫代碼時(shí)就開始思考測(cè)試問題
49、Test Your Software ,or Your Users Will(測(cè)試你的軟件孵淘,否則你的用戶就得測(cè)試)
無情的測(cè)試蒲障,不要讓你的用戶為你查找Bug
50、Don't Use Wizard Code You Don't Understand(不要使用你不理解的向?qū)Тa)
向?qū)Э梢陨纱罅看a瘫证,在你把他們合并進(jìn)你的項(xiàng)目之前揉阎,確保你理解全部這些代碼
51、Don't Gather Requirements ----Dig for Them(不要搜集需求----挖掘它們)
需求很少存在于表面上背捌,它們深深地埋藏在層層假定毙籽、誤解和政治手段的下面
52、Work with a User to Think Like a User(與用戶一同工作毡庆,以像用戶一樣思考)
要了解系統(tǒng)實(shí)際上將如何被使用坑赡,這是最好的方法
53烙如、Abstractions Live Longer than Details(抽象比細(xì)節(jié)活得更長久)
“投資”于抽象,而不是實(shí)現(xiàn)毅否,抽象能在來自不同的實(shí)現(xiàn)和新技術(shù)的變化“攻擊”之下存活下去
54亚铁、Use a Project Glossary(使用項(xiàng)目詞匯表)
創(chuàng)建并維護(hù)項(xiàng)目中使用的專用術(shù)語和詞匯的單一信息源
55、Don't Thank Outside the Box --- Find the Box(不要在盒子外面思考----要找到盒子)
在遇到不可能解決的問題時(shí)搀突,要確定真正的約束刀闷,問問自己:“它必須以這種方式完成嗎熊泵?它真的必須完成嗎仰迁?”
56、Start When You're Ready(等你準(zhǔn)備好再開始)
你的一生都在積累經(jīng)驗(yàn)顽分,不要忽視反復(fù)出現(xiàn)的疑慮
57徐许、Some Things Are Better Done than Described(對(duì)有些事情“做”勝于“描述”)
不要掉進(jìn)規(guī)范的螺旋。在某個(gè)時(shí)刻卒蘸,你需要開始編碼
58雌隅、Don't Be Slave to Formal Methods(不要做形式方法的奴隸)
如果你沒有把某項(xiàng)技術(shù)放進(jìn)你的開發(fā)實(shí)踐和能力的語境中,不要盲目的采用它
59缸沃、Costly Tools Don't Produce Better Designs(昂貴的工具不一定能制作出更好的設(shè)計(jì))
小心供應(yīng)商的炒作恰起,行業(yè)教條,以及價(jià)格標(biāo)簽的誘惑趾牧,要根據(jù)工具的價(jià)值判斷它們检盼。
60、Organize Teams Around Functionality(圍繞功能組織團(tuán)隊(duì))
不要把設(shè)計(jì)師與編碼員分開翘单,也不要把測(cè)試員與數(shù)據(jù)建模員分開吨枉,按照你構(gòu)建代碼的方式構(gòu)建團(tuán)隊(duì)
61、Don't Use Manual Procedures(不要使用手工流程)
shell 腳本或批文件會(huì)一次次地以同一順序執(zhí)行同樣的指令
62哄芜、Test Early.Test Often.Test Automatically(早測(cè)試貌亭,常測(cè)試,自動(dòng)測(cè)試)
與呆在書架上的測(cè)試計(jì)劃相比认臊,每次構(gòu)建時(shí)運(yùn)行的測(cè)試要有效得多
63圃庭、Coding Ain't Done.Til All the Tests Run (要通過全部測(cè)試,編碼才算完成**)
所有的代碼都需要測(cè)試一遍失晴,才能算完成了編碼
64剧腻、Use Saboteurs to Test Your Testing (通過“蓄意破壞”測(cè)試你的測(cè)試**)
在單獨(dú)的軟件副本上故意引入Bug,以檢驗(yàn)測(cè)試能夠抓住它們。
65师坎、Test State Coverage,Not Code coverage(測(cè)試狀態(tài)覆蓋恕酸,而不是代碼覆蓋)
確定并測(cè)試重要的程序狀態(tài),只是測(cè)試代碼行是不夠的胯陋。
66蕊温、Find Bug Once(一個(gè)Bug只抓一次)
一旦測(cè)試員找到一個(gè)bug,這應(yīng)該是測(cè)試員最后一次找到它袱箱。伺候自動(dòng)測(cè)試應(yīng)該對(duì)其進(jìn)行檢查
67、English is Just a Programming Language(陰雨就是一種編程語言)
像你編寫代碼一樣編寫文檔义矛,遵守DRY原則发笔,使用元數(shù)據(jù)、MVC凉翻、自動(dòng)生成等等
68了讨、Build Documentation In, Don't Bolt It On(把文檔建在里面,不要拴在外面)
與代碼分離的文檔不太可能被修正和更新
69制轰、Gently Exceed Your Users' Expectations(溫和地超出用戶的期望)
要理解你的用戶的期望前计,然后給他們的東西要多那么一點(diǎn)。
70垃杖、Sign Your Work(在你的作品上簽名)
過去時(shí)代的受益人為能在他們的作品上簽名而自豪男杈、你也應(yīng)該如此