UNIX编程艺术学习笔记-1
? ? ? ?由于興趣原因,近段時間特別想在某些開源的架構(gòu)或者項目上吸取那么一點值得借鑒的經(jīng)驗或者方法。想來想去,一向口碑不錯的UNIX中應(yīng)該有值得學(xué)習(xí)的東西。找來了《UNIX編程藝術(shù)》的英文版,讀了一天感覺實在是太慢,最終還是轉(zhuǎn)向了中文版本。
?????? 總結(jié)一下自己覺得對我來說比較有用的部分原則或者知識:
1.每個軟件只做好一件事,如果需要做一項新的工作,重新設(shè)計一個軟件而不要再在原來的軟件上增加新的功能。
2.每個程序的輸出都會作為另一個程序的輸入,哪怕另一個程序未知。輸出中不要有無關(guān)項,避免嚴格的分欄格式以及二進制,不要堅持使用交互式方式輸入。
3.盡可能早地將設(shè)計和編譯的軟件投入使用,OS也不例外。理想的情況下應(yīng)該在幾周內(nèi),拙劣的代碼扔掉重寫。
4.優(yōu)先使用工具而不是拙劣的幫助來減輕編程的負擔(dān),工欲善其事必先利其器。
5.一個程序只做好一件事,程序要能夠協(xié)作。程序要能夠處理文本流,因為這是最通用的接口。
6.原則:你無法斷定程序會在什么地方耗費運行時間,瓶頸經(jīng)常出現(xiàn)在意想不到的地方。所以,別急于胡亂找一個地方修改代碼,除非你已經(jīng)證實那就是瓶頸所在。
7.原則:估量。在你沒有對代碼進行估量,特別是沒有找到最耗時的那部分之前,別去優(yōu)化速度。
8.原則:花哨的算法在n很小時通常很慢,而n通常很小,花哨的算法的常熟復(fù)雜度很大。除非你確定n總是很大,否則不要用花哨算法(即使n很大,也優(yōu)先考慮7中提到的原則)。
9.原則:花哨的算法比簡單的算法更容易出bug,更難實現(xiàn)。盡量采用簡單的算法配合簡單的數(shù)據(jù)結(jié)構(gòu)。
10.原則:數(shù)據(jù)壓倒一切。如果已經(jīng)選擇了正確的數(shù)據(jù)結(jié)構(gòu)并且把一切都組織的井井有條,正確的算法也就不言自明。編程的核心是數(shù)據(jù)而不是算法。
11. Ken Thompson: 拿不準就窮舉!
12.模塊原則:使用簡單的接口拼合簡單的部件。
13.清晰原則:清晰勝過機巧。
14.組合原則:設(shè)計師考慮拼接組合。
15.分離原則:策略與機制分離,接口與引擎分離。
16.簡潔原則:設(shè)計要簡潔,復(fù)雜度能低則低。
17.吝嗇原則:除非別無他法,否則不要寫龐大的程序。
18.透明性原則:設(shè)計要可見,一遍審查和調(diào)試。
19.健壯原則:健壯源于透明和簡潔。
20.表示原則:把知識疊入數(shù)據(jù)以求邏輯質(zhì)樸而健壯。
21.通俗原則:接口設(shè)計避免標新立異。
22.緘默原則:如果一個程序沒什么好說的就沉默。
23.補救原則:出現(xiàn)異常時,馬上退出并給出足夠的信息。
24.經(jīng)濟原則:寧花機器一分,不花程序員一秒。
25.生成原則:避免手工hack,盡量編寫程序去生成程序。
26.優(yōu)化原則:雕琢前要現(xiàn)有圓形,跑之前先學(xué)會走。
27.多樣原則:絕不相信所謂的“不二法門”。
28.擴展原則:設(shè)計著眼未來,未來總比預(yù)想來得快。
29.一些有經(jīng)驗的開發(fā)者總是先定義接口,然后編寫簡單的說明,對其進行描述。最后才編寫代碼。
30.膠合層是個挺討厭的東西,必須盡可能薄,這一點極為重要。
31.UNIX程序員一直比其他程序員對面向?qū)ο?#xff08;OO)更執(zhí)懷疑態(tài)度,原因之一就源于多樣性原則。
32.全局變量是模塊化的毒藥,很容易使各模塊輕率、混亂地互相泄露信息。
33.要追求代碼的透明性,最有效的方法很簡單,就是不要在具體的操作代碼上疊放太多的抽象層。
34.程序調(diào)用應(yīng)考慮層次最大的靜態(tài)深度,大于4就要小心。
35.如果作者以外的其他人能夠順利理解和修改軟件,則這個軟件就是可維護的。
36.總的來說,線程不是降低而是提高了全局復(fù)雜度。因此,除非萬不得已,盡量避免使用線程。
37.堅持結(jié)構(gòu)化數(shù)據(jù)而不是微型語言。
38.盡可能少干活,讓數(shù)據(jù)塑造代碼;依靠工具,把機制從策略中分離。專家級UNIX程序員要學(xué)會迅速自動地看出這個這些可能性。建設(shè)性的懶惰是大師級程序員的基本美德之一。
總結(jié)
以上是生活随笔為你收集整理的UNIX编程艺术学习笔记-1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cuteftp 9 显示中文乱码
- 下一篇: weblogic部署静态网页