UNIX編程藝術:17點哲學原則
2015年4月3日的舊文,重發一下。
前面的小文中多次提到Eric S. Raymond,他是公認的Unix編程大師、開源運動領袖人之一,通俗點說叫老牌黑客,美國憤青。今天我們就來看看他寫的最有名的書The Art of UNIX Programming中文版譯名為UNIX編程藝術。包括Unix設計者在內的多位領域專家也為這本書貢獻了寶貴的內容。看看書的封面,很有意思。一中國老夫子和一中國小學生,作者藉此表明此書背後所想說明的經驗和智慧。這本書名里有藝術這個詞,所以書中沒有講述編程的細節,而是講看起來似乎很玄乎的方法和理念,通過野史和坊間傳說來傳遞文化。具體來說,通過場景、設計、工具和社區這四個部分講述了Unix系統領域中的設計和開發哲學、思想文化體系、原則與經驗。今天小編主要和大家聊聊UNIX哲學。簡單來說,就是下面這張圖。
細細來說,17個原則如下。
1、Rule of Modularity: Write simple parts connected byclean interfaces.
1、模塊原則:使用清晰的介面拼接簡單的組件。
正如,BrianKernighan 曾經說過,"計算機編程的本質就是盡量控制(降低)程序的複雜度"。編寫複雜而龐大的軟體,唯一的方法,就是控制並降低程序的整體複雜度,用清晰的介面把若干的模塊組合成一個複雜軟體。各模塊之間要減少耦合,這樣在對局部進行改動時不會牽動全身。
2、Rule of Clarity: Clarity is better than cleverness.
2、清晰原則:清晰勝於奇巧。
為了減少後期程序的維護成本,要養成良好的編程習慣。不僅添加良好有用的注釋,也在選擇演算法和實現時考慮未來的可擴展性。嘿嘿,不要以為自己寫的程序不會忘記。本人寫代碼N多年的體會就是,我很容易忘記自己寫的代碼。有點想念閱讀那些優雅而清晰的代碼的日子了。
3、Rule of Composition: Design programs to be connected toother programs.
3、組合原則:設計時,要考慮程序之間的連接。
考慮讓程序彼此之間能有效通信,程序彼此獨立,具有組合性。
4、Rule of Separation: Separate policy from mechanism;separate interfaces from engines.
4、分離原則:策略同機制分離,介面同引擎分離。
這樣做,策略靈活,可以適應用戶需求的改變;而且任何策略的改變不會影響到整個機制。
5、Rule of Simplicity: Design for simplicity; addcomplexity only where you must.
5、簡潔原則:設計儘可能簡潔,複雜度能低則低。
不炫耀那些下三濫的技巧,不用噓頭,簡潔為美,以簡潔至上。這也是Unix文化的精髓。
6、Rule of Parsimony: Write a big program only when it isclear by demonstration thatnothing else will do.
6、吝嗇原則:除非別無他法,否則,不要去編寫龐大的程序。
不編寫龐大而複雜的程序,不利於維護。
7、Rule of Transparency: Design for visibility to makeinspection and debugging easier.
7、透明原則:設計要可見,以便檢查和調試。
充分考慮透明性、易見性和簡潔性。能快速了解軟體的功能和實現方法。軟體有監視其自身運行狀態的功能。簡潔,利於測試監視工具和調試腳本。
8、Rule of Robustness: Robustness is the child oftransparency and simplicity.
8、健壯原則:健壯的程序源於透明與簡潔。
程序越簡潔,越透明,內部邏輯易於理解,程序就越健壯。
9、Rule of Representation: Fold knowledge into data soprogram logic can be stupid androbust.
9、表示原則:把知識放入數據,以便邏輯結構質樸而健壯。
將代碼的複雜度轉移到數據中去。通過數據建模,可以實現邏輯結構清晰。
10、Rule of Least Surprise: In interface design, always dothe least surprising thing.
10、通俗原則:介面設計避免標新立異。
介面設計按照用戶最可能熟悉的功能介面和相似應用程序建模。關注傳統的慣例,緩和學習曲線。
11、Rule of Silence: When a program has nothing surprisingto say, it should say nothing.
11、緘默原則:如果一個程序沒什麼好挑剔的,那就保持沉默。
不顯示不重要的信息,合理使用用戶的注意力。
12、Rule of Repair: When you must fail, fail noisily and assoon as possible.
12、補救原則:出現異常時,馬上退出並適當給出充分的出錯信息。
程序儘可能從容應對各種錯誤輸入和自身的運行錯誤。如果做不到,儘可能讓程序以一種容易診斷出錯誤的方式終止掉。
13、Rule of Economy: Programmer time is expensive; conserveit in preference to machine time.
13、經濟原則:寧可多花機器一分,也不浪費程序員一秒。
程序員的時間是寶貴的,不要無故浪費一分一秒。教會機器做更多低層次的編程工作,就可以節約程序員的時間了。
14、Rule of Generation: Avoid hand-hacking; write programsto write programs when you can.
14、生成原則:避免手工hack,儘可能編寫程序,讓程序去生成程序。
使用代碼生成器讓細節工作自動化。這樣便於避免出錯。
15、Rule of Optimization: Prototype before polishing. Getit working before you optimize it.
15、優化原則:潤色代碼前先要有模型,在優化前,先確保能用。
先製作原型,再精雕細琢。優化之前,先確保能用。磨刀不誤砍柴工。
或者如,極限編程大師Kent Beck所說,先求運行,再求正確,最後求快。
系統性地調整。
16、Rule of Diversity: Distrust all claims for "onetrue way".
16、多樣原則:決不相信所謂"不二法則"的言論。
即使最出色的軟體,也常常會受限於設計者的想像力。堅持Unix的傳統,廣泛採用多種語言、開放的可擴展系統和用戶定製機制。
17、Rule of Extensibility: Design for the future, becauseit will be here sooner than youthink.
17、擴展原則:設計要著眼於未來,因為有時未來來的比想像中的快。
為數據格式和代碼留下擴展的空間。設計協議或是文件格式時,應使其具有充分的自描述性以便擴展。設計代碼時,要有組織架構設計,便於將來的開發者增加新功能。
Eric在書中說,Software design andimplementation should be a joyous art, a kind of high-level play. 希望你能體會到這種快樂。
下一次,我們聊聊書中的第二部分設計,看看如何將Unix哲學的原理應用到設計與實現。
歡迎關注我的微信公眾號
TAG:上海成趣信息科技 |
※技嘉X470 AORUS GAMING7 WIFI開箱:工業風的藝術品
※BOTTEGA VENETA重新打造「合作的藝術」——2018春夏系列廣告特輯「數字優先」
※旅居的藝術——2018 LV OBJETS NOMADES系列香港展
※SOULGOODS 開啟 X-LARGE 2018 CHINA TOUR 北京站,藝術家打造 RIMOWA 概念傢具
※科技與藝術,HUAWEI P20系列國行版開箱體驗
※北京798 BRIC藝術空間
※2018米蘭傢具展與藝術家PHILLIP K.SMITH III合作
※韓國新銳藝術家推介:HWANG HYE JUNG
※藝術匯 ART FRONTIER 專訪
※插畫:美國藝術家JOHN HENRY作品
※24小時:鄭容和-東方神起-EXO-CBX-《百想藝術大賞》MC-《漂亮姐姐》-WINNER
※冠軍藝術 NIKE推出ART OF A CHAMPION
※首屆3.3ART SCENE公共藝術季即將亮相三里屯3.3文化廣場
※康佳8k分體及A2藝術電視新品亮相AWE2018
※典型案例4/10 (類型:藝術類,學校:愛默生學院)
※2018QS藝術與設計專業排名,RCA三度斬獲第一,學藝術類專業首選英國
※ZERO-G夢想男團成員祖懷、斯然 出席上海時裝周LABELHOOD 2018 A/W先鋒時裝藝術節
※藝術級史詩聯名 OFF-WHITE x 村上隆超限量發售正式來襲!
※EDITION APARTMENT奧克蘭的藝術家公寓
※藝術匯 ART FRONTIER 展評