隨筆-124  評論-194  文章-0  trackbacks-0
          今天讀到一些UNIX下的編程哲學,對自己相當?shù)挠袥_擊力,把我覺得有用并且有道理的,自己組織了一下:

          “編程的核心是數(shù)據(jù)結(jié)構(gòu),而不是算法”,即使最簡單的程序邏輯人類來驗證也很困難,但就算復雜的數(shù)據(jù),對人類來說也相對容易推導和建模。五十個節(jié)點的指針樹要比五十行程序的流程圖更清楚。

          “編程的本質(zhì)是控制復雜度”,而流程圖、過程化、結(jié)構(gòu)化、面向?qū)ο笠约捌渌椒ㄕ撉『?#8220;成功”將復雜度提升到人腦不能處理的地步。所以,降低整體復雜度的方法是用清晰的接口把若干簡單模塊組合成一個復雜軟件。

          “簡潔最美”,最錯綜復雜的美妙設計,常常使我們的設計能力超出排錯能力,結(jié)果是代價高昂的廢品。

          “接口和引擎分離”,把復雜的GUI界面與后臺處理分做兩端,中間用簡單協(xié)議架橋。

          “可見才可掌控”,軟件系統(tǒng)的透明性就是說,你能一眼看出它在干什么,要能監(jiān)視到內(nèi)部狀態(tài)。

          “撐不下去,馬上退出”,出現(xiàn)異常,補救措施明明又沒成功,還挺在那里,很久才發(fā)現(xiàn)是最壞的一種情況。要么“響亮的倒塌,要么為工作鏈下一環(huán)程序輸出一個嚴謹干凈的正確數(shù)據(jù)”。

          “過早的優(yōu)化是萬惡之源”,先要求運行,再求正確,最后再求快。還不知道瓶頸就匆忙優(yōu)化,是唯一一個比亂加功能更損害設計的錯誤。“最強大的優(yōu)化工具是DELETE鍵”。

          “善用工具”,教會電腦生成一些簡單的代碼;一旦有人解決了某個問題,就直接拿過來用,盡可能一切都自動化。

          “寧花機器一分,不花程序員一秒”。有的程序員寫程序是“為機器寫”,過份追求效率。想方設法讓機器“少做些事”,因此耽誤大量時間精力。與此相對地,我們可以使用一些簡單直接的,即使是相對費時的算法,浪費了一些“機器的時間”,但節(jié)省了程序員的精力。又比如,有的語言,將程序員從內(nèi)存釋放中解脫出來,可以更高效的開發(fā),這也是一種珍惜程序員精力,讓機器多做事的例子。
          BTW:我其實一直以來都是做C++的,從前總覺得這才是最“高效”的語言,一向?qū)AVA和腳本語言不感冒,但漸漸才明白,一把鑰匙開一扇門,有時候,甚至是大多數(shù)時候,選擇后者才是“高效”的做法。機器只不過是通了電一堆晶體管,讓它費點力沒什么。

          綜上所述,4個字母:KISS--Keep It Simple, Stupid!


          最后,還是把UNIX哲學的17個原則完整列一下:
          1、 模塊性原則:寫簡單的,通過干凈的接口可被連接的部件。
          2、 清楚原則:清楚要比小聰明好。
          3、 合并原則:設計能被其它程序連接的程序。
          4、 分離原則:從機制分離從策略,從實現(xiàn)分離出接口。
          5、 簡單原則:設計要簡單;只有當你需要的時候,增加復雜性。
          6、 節(jié)儉原則:只有當被證實是清晰,其它什么也不做的時候,才寫大的程序。
          7、 透明原則:為使檢查和調(diào)試明顯更容易而設計。
          8、 健壯性原則:健壯性是透明和簡單的追隨者。
          9、 表現(xiàn)原則:把知識整理成資料,于是程序邏輯能變得易理解和精力充沛的。
          10、最小意外原則:在接口設計中,總是做最小意外事情。
          11、沉默原則:當一個程序令人吃驚什么也不說的時候,他應該就是什么也不說。
          12、修補補救:當你必須失敗的時候,盡可能快的吵鬧地失敗。
          13、經(jīng)濟原則:程序員的時間是寶貴的;優(yōu)先機器時間節(jié)約它。
          14、產(chǎn)生原則:避免手工堆砌;當你可能的時候,編寫可以寫程序的程序。
          15、優(yōu)化原則:在雕琢之前先有原型;在你優(yōu)化它之前,先讓他可以運行。
          16、差異原則:懷疑所有聲稱的“唯一真理“。
          17、可擴展原則:為將來做設計,因為它可能比你認為來的要快。

          posted on 2007-12-05 17:52 我愛佳娃 閱讀(4005) 評論(12)  編輯  收藏 所屬分類: 系統(tǒng)設計

          評論:
          # re: 感觸最深的幾條設計哲學 2007-12-05 19:22 | sitinspring
          “寧花機器一分,不花程序員一秒”?!

          這句該怎么理解?  回復  更多評論
            
          # re: 感觸最深的幾條設計哲學 2007-12-05 19:24 | 10:10
          編程的核心是數(shù)據(jù)結(jié)構(gòu),而不是算法
          NB  回復  更多評論
            
          # re: 感觸最深的幾條設計哲學 2007-12-05 20:03 | 我愛佳娃
          “寧花機器一分,不花程序員一秒”:有的程序員寫程序是“為機器寫”,過份追求效率。與此相反,PERL、JAVA等語言相對C/C++,將程序員從內(nèi)存釋放中解脫出來,可以更高效的開發(fā),而不是一味在乎“機器上的效率”。
          也就是說,應該最珍惜程序員的精力。  回復  更多評論
            
          # re: 感觸最深的幾條設計哲學 2007-12-05 21:58 | sitinspring
          @我愛佳娃

          我感覺應該從提高程序可讀性方向理解,而不是說Java程序員可以忽視程序效率問題.  回復  更多評論
            
          # re: 感觸最深的幾條設計哲學 2007-12-05 22:37 | Matthew Chen
          高效的開發(fā),良好的架構(gòu),KISS的哲學,也是java比其他語言更多關(guān)注的東西,畢竟你不如人家快,但語言本身的優(yōu)雅和靈活使你在這方面能比其他語言更容易提升,最后才是效率考慮和優(yōu)化,當然,這有一個大前提,那就是功能架構(gòu)的時候你就想清楚了正確的方向,因為大的方向上是正確的,所以可以不用過早的優(yōu)化。  回復  更多評論
            
          # re: 感觸最深的幾條設計哲學 2007-12-06 09:16 | 我愛佳娃
          “用清晰的接口把若干簡單模塊組合成一個復雜軟件”,在UNIX上都是將功能切割后,通過文本流或者IPC在“進程”之間傳遞。但,JAVA的項目往往是所有模塊“揉合”在一起,最多是通過分層或者接口來切分模塊,還是會“一損俱損”,在這一點是否有人有實踐,還是我理解有問題?  回復  更多評論
            
          # re: 感觸最深的幾條設計哲學 2007-12-06 10:57 | shaomin
          謝謝
          收下深刻體會下
            回復  更多評論
            
          # re: 感觸最深的幾條設計哲學 2007-12-06 16:59 | 東舟
          看看BLOGJAVA的功能  回復  更多評論
            
          # re: 感觸最深的幾條設計哲學 2007-12-06 21:10 | 專注java開源
          “寧花機器一分,不花程序員一秒”?!  回復  更多評論
            
          # re: 感觸最深的幾條設計哲學 2007-12-06 23:53 | Newly_Yu
          值得慢慢回味!先謝謝了  回復  更多評論
            
          # re: 感觸最深的幾條設計哲學 2007-12-07 09:01 | 我愛佳娃
          我把“寧花機器一分,不花程序員一秒”體會重新更新了一下,可能原來自己覺得“太有道理”了,所以沒有多寫什么。  回復  更多評論
            
          # re: 感觸最深的幾條設計哲學 2012-07-08 00:45 | 醉中仙
          好東西。  回復  更多評論
            
          主站蜘蛛池模板: 临泽县| 平远县| 错那县| 射阳县| 子长县| 栾城县| 张掖市| 临泉县| 延津县| 东安县| 黄梅县| 东平县| 蓬溪县| 永仁县| 雅安市| 乐山市| 公安县| 临海市| 甘孜| 岐山县| 罗定市| 临沭县| 大洼县| 佛教| 鄢陵县| 广昌县| 大厂| 云浮市| 湟中县| 安陆市| 日喀则市| 锦屏县| 叶城县| 龙游县| 团风县| 资兴市| 陕西省| 都江堰市| 鹿泉市| 天峻县| 什邡市|