莊周夢(mèng)蝶

          生活、程序、未來(lái)
             :: 首頁(yè) ::  ::  :: 聚合  :: 管理

             Unix哲學(xué)是自下而上,而不是自上而下的,注重實(shí)效,立足于豐富的經(jīng)驗(yàn),你不會(huì)在正規(guī)方法學(xué)和標(biāo)準(zhǔn)中找到它。

             Unix管道的發(fā)明人Doug McIlroy曾經(jīng)說(shuō)過(guò):

          1、讓每個(gè)程序就做好一件事,如果有新任務(wù)就重新開(kāi)始,不要往新程序中加入功能而搞的復(fù)雜。

          2、假定每個(gè)程序的輸出都會(huì)成為另一個(gè)程序的輸入,哪怕那個(gè)程序是未知的。輸出中不要有無(wú)關(guān)的信息干擾,避免使用嚴(yán)格的分欄格式和二進(jìn)制格式輸入。不要堅(jiān)持使用交互式輸入。

          3、盡可能早將設(shè)計(jì)和編譯的軟件投入試用,哪怕是操作系統(tǒng)也不例外,理想情況下應(yīng)該是幾星期內(nèi),對(duì)抽劣的代碼別猶豫,扔掉重寫(xiě)

          4、優(yōu)先使用工具,而非拙劣的幫助來(lái)減輕編程任務(wù)的負(fù)擔(dān),工欲善其事,必先利其器。


          Rob Pike在《Notes on C programming》中提到:

          原則1:你無(wú)法斷行程序會(huì)在什么地方耗費(fèi)運(yùn)行時(shí)間。瓶頸經(jīng)常出現(xiàn)在想不到的地方,所以別急于胡亂找個(gè)地方改代碼,除非你已經(jīng)證實(shí)那兒就是瓶頸所在。

          原則2:估量。在你沒(méi)對(duì)代碼進(jìn)行估量,特別是沒(méi)找到最耗時(shí)的那部分之前,別去優(yōu)化速度。

          原則3:花哨的算法,在n很小的適合通常很慢,而n通常很小。花哨算法的常數(shù)復(fù)雜度很大,除非你確定n一直很大,否則不要用花哨算法(即使n很大,也要優(yōu)先考慮原則2)。

          原則4:花哨的算法比簡(jiǎn)單的算法更容易出bug ,更難實(shí)現(xiàn)。盡量使用簡(jiǎn)單的算法配合簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)。

          原則5數(shù)據(jù)壓倒一切。如果已經(jīng)選擇了正確的數(shù)據(jù)結(jié)構(gòu)并且把一切組織得井井有條,正確的算法也就不言自明,編程的核心是數(shù)據(jù)結(jié)構(gòu),而不是算法。

          原則6:沒(méi)有原則6.


          Ken Thompson對(duì)原則4做了強(qiáng)調(diào):

          拿不準(zhǔn)就窮舉。


          Unix哲學(xué)的17條原則:

          1、模塊原則:簡(jiǎn)潔的接口拼合簡(jiǎn)單的部件。

          2、清晰原則:清晰勝于機(jī)巧。

          3、組合原則:設(shè)計(jì)時(shí)考慮拼接組合。

          4、分離原則:策略同機(jī)制分離,接口同引擎分離。

          5、簡(jiǎn)潔原則:設(shè)計(jì)要簡(jiǎn)潔,復(fù)雜度能低則低。

          6、吝嗇原則:除非卻無(wú)他法,不要編寫(xiě)龐大的程序。

          7、透明性原則:設(shè)計(jì)要可見(jiàn),以便審查和調(diào)試。

          8、健壯原則:健壯源于透明與簡(jiǎn)潔。

          9、表示原則:把知識(shí)疊入數(shù)據(jù),以求邏輯質(zhì)樸而健壯。

          10、通俗原則:接口設(shè)計(jì)避免標(biāo)新立異。

          11、緘默原則:如果一個(gè)程序沒(méi)什么好說(shuō)的,就沉默。

          12、補(bǔ)救原則:出現(xiàn)異常時(shí),馬上退出,并給出足夠錯(cuò)誤信息。

          13、經(jīng)濟(jì)原則:寧花機(jī)器一分,不花程序員一秒。

          14、生成原則:避免手工hack,盡量編寫(xiě)程序去生成程序。

          15、優(yōu)化原則:雕琢前先要有原型,跑之前先學(xué)會(huì)走。

          16、多樣原則:絕不相信所謂“不二法門(mén)”的斷言。

          17、擴(kuò)展原則:設(shè)計(jì)著眼未來(lái),未來(lái)總是比預(yù)想來(lái)得快。


          Unix哲學(xué)之一言以蔽之:KISS

          Keep it simple,stupid!

          應(yīng)用unix哲學(xué):

          1、只要可行,一切都應(yīng)該做成與來(lái)源和目標(biāo)無(wú)關(guān)的過(guò)濾器

          2、數(shù)據(jù)流應(yīng)盡可能的文本化(這樣可以用標(biāo)準(zhǔn)工具來(lái)查看和過(guò)濾)。

          3、數(shù)據(jù)庫(kù)部署和應(yīng)用協(xié)議應(yīng)盡可能文本化(讓人閱讀和編輯)。

          4、復(fù)雜的前端(用戶(hù)界面)和后端應(yīng)該涇渭分明

          5、如果可能,用c編寫(xiě)前,先用解釋性語(yǔ)言搭建原型

          6、當(dāng)且僅當(dāng)只用一門(mén)編程語(yǔ)言會(huì)提高程序復(fù)雜度時(shí),混用語(yǔ)言編程才比單一語(yǔ)言編程來(lái)得好。

          7寬收嚴(yán)發(fā)(對(duì)接收的東西要包容,對(duì)輸出的東西要嚴(yán)格)

          8、過(guò)濾時(shí),不需要丟棄的消息絕不丟。

          9小就是美。在確保完成任務(wù)的基礎(chǔ)上,程序功能盡可能的少。


          最后強(qiáng)調(diào)的是態(tài)度:

          要良好地運(yùn)用unix哲學(xué),你就應(yīng)該不斷地追求卓越,你必須相信,程序設(shè)計(jì)是一門(mén)技藝,值得你付出所有的智慧、創(chuàng)造力和激情。否則,你的視線就不會(huì)超越那些簡(jiǎn)單、老套的設(shè)計(jì)和實(shí)現(xiàn);你就會(huì)在應(yīng)該思考的時(shí)候急急忙忙跑去編程。你就會(huì)在該無(wú)情刪繁就簡(jiǎn)的時(shí)候反而把問(wèn)題復(fù)雜化——然后你還會(huì)反過(guò)來(lái)奇怪你的代碼怎么會(huì)那么臃腫,那么難以調(diào)試。

          要良好地運(yùn)用unix哲學(xué),你應(yīng)該珍惜你的時(shí)間絕不浪費(fèi)。一旦某人已經(jīng)解決了某個(gè)問(wèn)題,就直接拿來(lái)利用,不要讓驕傲或偏見(jiàn)拽住你又去重做一遍。永遠(yuǎn)不要蠻干;要多用巧勁,省下力氣在需要的時(shí)候用,好鋼用到刀刃上。善用工具,盡可能將一切自動(dòng)化

          軟件設(shè)計(jì)和實(shí)現(xiàn)是一門(mén)充滿快樂(lè)的藝術(shù),一種高水平的游戲。如果這種態(tài)度對(duì)你來(lái)說(shuō)聽(tīng)起來(lái)有些荒謬,或者令你隱約感到有些困窘,那么請(qǐng)停下來(lái),想一想,問(wèn)問(wèn)自己是不是已經(jīng)把什么給遺忘了。如果只是為了賺錢(qián)或者打發(fā)時(shí)間,你為什么要搞軟件設(shè)計(jì),而不是別的什么呢?你肯定曾經(jīng)也認(rèn)為軟件設(shè)計(jì)值得你付出激情……

          要良好地運(yùn)用unix哲學(xué),你需要具備(或者找回)這種態(tài)度。你需要用心。你需要去游戲。你需要樂(lè)于探索。


          操作系統(tǒng)的風(fēng)格元素:

          1、什么是操作系統(tǒng)的統(tǒng)一性理念

          2、多任務(wù)能力

          3、協(xié)作進(jìn)程(IPC

          4、內(nèi)部邊界

          5、文件屬性和記錄結(jié)構(gòu)

          6、二進(jìn)制文件格式

          7、首選用戶(hù)界面風(fēng)格

          8、目標(biāo)受眾

          9、開(kāi)發(fā)的門(mén)坎


          評(píng)論

          # re: 《Unix編程藝術(shù)》重讀筆記(一)  回復(fù)  更多評(píng)論   

          2010-03-01 21:54 by hoorace
          發(fā)現(xiàn)java中的n多設(shè)計(jì)思想是從unix編程中繼承的。

          # re: 《Unix編程藝術(shù)》重讀筆記(一)  回復(fù)  更多評(píng)論   

          2010-06-30 13:36 by 今天還是再編程
          同意樓上!

          # re: 《Unix編程藝術(shù)》重讀筆記(一)  回復(fù)  更多評(píng)論   

          2010-07-01 21:48 by 明天又是編程
          應(yīng)該說(shuō)這種單想是通用的 ...
          一種思想,一種原理,就有它的適用范圍。

          # re: 《Unix編程藝術(shù)》重讀筆記(一)  回復(fù)  更多評(píng)論   

          2011-11-24 13:21 by nightmare23
          好高深的哲學(xué)啊。。。

          # re: 《Unix編程藝術(shù)》重讀筆記(一)  回復(fù)  更多評(píng)論   

          2012-03-23 18:07 by 開(kāi)啟
          這寫(xiě)得不錯(cuò)

          # re: 《Unix編程藝術(shù)》重讀筆記(一)  回復(fù)  更多評(píng)論   

          2012-03-24 11:56 by 瘋狂的烤冰
          發(fā)現(xiàn)一個(gè)bug:第一行“失效”應(yīng)該是“時(shí)效”吧?

          # re: 《Unix編程藝術(shù)》重讀筆記(一)  回復(fù)  更多評(píng)論   

          2012-03-26 09:29 by dennis
          @瘋狂的烤冰
          不是,是實(shí)效,感謝你的指正。
          主站蜘蛛池模板: 清水河县| 汤阴县| 含山县| 玉田县| 利津县| 维西| 甘德县| 辽宁省| 铁力市| 濮阳县| 贡觉县| 开封县| 平南县| 厦门市| 威海市| 信丰县| 霞浦县| 额尔古纳市| 龙胜| 毕节市| 安达市| 防城港市| 盐城市| 大厂| 桃园市| 龙海市| 那曲县| 武清区| 红安县| 枣庄市| 双牌县| 托里县| 奉化市| 古田县| 卫辉市| 龙南县| 永安市| 辽宁省| 美姑县| 监利县| 苏州市|