今天讀到一些UNIX下的編程哲學(xué),對(duì)自己相當(dāng)?shù)挠袥_擊力,把我覺(jué)得有用并且有道理的,自己組織了一下:
“編程的核心是數(shù)據(jù)結(jié)構(gòu),而不是算法”,即使最簡(jiǎn)單的程序邏輯人類(lèi)來(lái)驗(yàn)證也很困難,但就算復(fù)雜的數(shù)據(jù),對(duì)人類(lèi)來(lái)說(shuō)也相對(duì)容易推導(dǎo)和建模。五十個(gè)節(jié)點(diǎn)的指針樹(shù)要比五十行程序的流程圖更清楚。
“編程的本質(zhì)是控制復(fù)雜度”,而流程圖、過(guò)程化、結(jié)構(gòu)化、面向?qū)ο笠约捌渌椒ㄕ撉『?#8220;成功”將復(fù)雜度提升到人腦不能處理的地步。所以,降低整體復(fù)雜度的方法是用清晰的接口把若干簡(jiǎn)單模塊組合成一個(gè)復(fù)雜軟件。
“簡(jiǎn)潔最美”,最錯(cuò)綜復(fù)雜的美妙設(shè)計(jì),常常使我們的設(shè)計(jì)能力超出排錯(cuò)能力,結(jié)果是代價(jià)高昂的廢品。
“接口和引擎分離”,把復(fù)雜的GUI界面與后臺(tái)處理分做兩端,中間用簡(jiǎn)單協(xié)議架橋。
“可見(jiàn)才可掌控”,軟件系統(tǒng)的透明性就是說(shuō),你能一眼看出它在干什么,要能監(jiān)視到內(nèi)部狀態(tài)。
“撐不下去,馬上退出”,出現(xiàn)異常,補(bǔ)救措施明明又沒(méi)成功,還挺在那里,很久才發(fā)現(xiàn)是最壞的一種情況。要么“響亮的倒塌,要么為工作鏈下一環(huán)程序輸出一個(gè)嚴(yán)謹(jǐn)干凈的正確數(shù)據(jù)”。
“過(guò)早的優(yōu)化是萬(wàn)惡之源”,先要求運(yùn)行,再求正確,最后再求快。還不知道瓶頸就匆忙優(yōu)化,是唯一一個(gè)比亂加功能更損害設(shè)計(jì)的錯(cuò)誤。“最強(qiáng)大的優(yōu)化工具是DELETE鍵”。
“善用工具”,教會(huì)電腦生成一些簡(jiǎn)單的代碼;一旦有人解決了某個(gè)問(wèn)題,就直接拿過(guò)來(lái)用,盡可能一切都自動(dòng)化。
“寧花機(jī)器一分,不花程序員一秒”。有的程序員寫(xiě)程序是“為機(jī)器寫(xiě)”,過(guò)份追求效率。想方設(shè)法讓機(jī)器“少做些事”,因此耽誤大量時(shí)間精力。與此相對(duì)地,我們可以使用一些簡(jiǎn)單直接的,即使是相對(duì)費(fèi)時(shí)的算法,浪費(fèi)了一些“機(jī)器的時(shí)間”,但節(jié)省了程序員的精力。又比如,有的語(yǔ)言,將程序員從內(nèi)存釋放中解脫出來(lái),可以更高效的開(kāi)發(fā),這也是一種珍惜程序員精力,讓機(jī)器多做事的例子。
BTW:我其實(shí)一直以來(lái)都是做C++的,從前總覺(jué)得這才是最“高效”的語(yǔ)言,一向?qū)AVA和腳本語(yǔ)言不感冒,但漸漸才明白,一把鑰匙開(kāi)一扇門(mén),有時(shí)候,甚至是大多數(shù)時(shí)候,選擇后者才是“高效”的做法。機(jī)器只不過(guò)是通了電一堆晶體管,讓它費(fèi)點(diǎn)力沒(méi)什么。
綜上所述,4個(gè)字母:KISS--Keep It Simple, Stupid!
最后,還是把UNIX哲學(xué)的17個(gè)原則完整列一下:
1、 模塊性原則:寫(xiě)簡(jiǎn)單的,通過(guò)干凈的接口可被連接的部件。
2、 清楚原則:清楚要比小聰明好。
3、 合并原則:設(shè)計(jì)能被其它程序連接的程序。
4、 分離原則:從機(jī)制分離從策略,從實(shí)現(xiàn)分離出接口。
5、 簡(jiǎn)單原則:設(shè)計(jì)要簡(jiǎn)單;只有當(dāng)你需要的時(shí)候,增加復(fù)雜性。
6、 節(jié)儉原則:只有當(dāng)被證實(shí)是清晰,其它什么也不做的時(shí)候,才寫(xiě)大的程序。
7、 透明原則:為使檢查和調(diào)試明顯更容易而設(shè)計(jì)。
8、 健壯性原則:健壯性是透明和簡(jiǎn)單的追隨者。
9、 表現(xiàn)原則:把知識(shí)整理成資料,于是程序邏輯能變得易理解和精力充沛的。
10、最小意外原則:在接口設(shè)計(jì)中,總是做最小意外事情。
11、沉默原則:當(dāng)一個(gè)程序令人吃驚什么也不說(shuō)的時(shí)候,他應(yīng)該就是什么也不說(shuō)。
12、修補(bǔ)補(bǔ)救:當(dāng)你必須失敗的時(shí)候,盡可能快的吵鬧地失敗。
13、經(jīng)濟(jì)原則:程序員的時(shí)間是寶貴的;優(yōu)先機(jī)器時(shí)間節(jié)約它。
14、產(chǎn)生原則:避免手工堆砌;當(dāng)你可能的時(shí)候,編寫(xiě)可以寫(xiě)程序的程序。
15、優(yōu)化原則:在雕琢之前先有原型;在你優(yōu)化它之前,先讓他可以運(yùn)行。
16、差異原則:懷疑所有聲稱(chēng)的“唯一真理“。
17、可擴(kuò)展原則:為將來(lái)做設(shè)計(jì),因?yàn)樗赡鼙饶阏J(rèn)為來(lái)的要快。
posted on 2007-12-05 17:52
我愛(ài)佳娃 閱讀(3995)
評(píng)論(12) 編輯 收藏 所屬分類(lèi):
系統(tǒng)設(shè)計(jì)