《Unix编程艺术》笔记(一)
?Unix哲學(xué)是自下而上,而不是自上而下的,注重實(shí)效,立足于豐富的經(jīng)驗(yàn),你不會(huì)在正規(guī)方法學(xué)和標(biāo)準(zhǔn)中找到它。
?? Unix管道的發(fā)明人Doug McIlroy曾經(jīng)說過:
1、讓每個(gè)程序就做好一件事,如果有新任務(wù)就重新開始,不要往新程序中加入功能而搞的復(fù)雜。
2、假定每個(gè)程序的輸出都會(huì)成為另一個(gè)程序的輸入,哪怕那個(gè)程序是未知的。輸出中不要有無關(guān)的信息干擾,避免使用嚴(yán)格的分欄格式和二進(jìn)制格式輸入。不要堅(jiān)持使用交互式輸入。
3、盡可能早將設(shè)計(jì)和編譯的軟件投入試用,哪怕是操作系統(tǒng)也不例外,理想情況下應(yīng)該是幾星期內(nèi),對抽劣的代碼別猶豫,扔掉重寫。
4、優(yōu)先使用工具,而非拙劣的幫助來減輕編程任務(wù)的負(fù)擔(dān),工欲善其事,必先利其器。
Rob Pike在《Notes on C programming》中提到:
原則1:你無法斷行程序會(huì)在什么地方耗費(fèi)運(yùn)行時(shí)間。瓶頸經(jīng)常出現(xiàn)在想不到的地方,所以別急于胡亂找個(gè)地方改代碼,除非你已經(jīng)證實(shí)那兒就是瓶頸所在。
原則2:估量。在你沒對代碼進(jìn)行估量,特別是沒找到最耗時(shí)的那部分之前,別去優(yōu)化速度。
原則3:花哨的算法,在n很小的適合通常很慢,而n通常很小。花哨算法的常數(shù)復(fù)雜度很大,除非你確定n一直很大,否則不要用花哨算法(即使n很大,也要優(yōu)先考慮原則2)。
原則4:花哨的算法比簡單的算法更容易出bug ,更難實(shí)現(xiàn)。盡量使用簡單的算法配合簡單的數(shù)據(jù)結(jié)構(gòu)。
原則5:數(shù)據(jù)壓倒一切。如果已經(jīng)選擇了正確的數(shù)據(jù)結(jié)構(gòu)并且把一切組織得井井有條,正確的算法也就不言自明,編程的核心是數(shù)據(jù)結(jié)構(gòu),而不是算法。
原則6:沒有原則6.
Ken Thompson對原則4做了強(qiáng)調(diào):
拿不準(zhǔn)就窮舉。
Unix哲學(xué)的17條原則:
1、模塊原則:簡潔的接口拼合簡單的部件。
2、清晰原則:清晰勝于機(jī)巧。
3、組合原則:設(shè)計(jì)時(shí)考慮拼接組合。
4、分離原則:策略同機(jī)制分離,接口同引擎分離。
5、簡潔原則:設(shè)計(jì)要簡潔,復(fù)雜度能低則低。
6、吝嗇原則:除非卻無他法,不要編寫龐大的程序。
7、透明性原則:設(shè)計(jì)要可見,以便審查和調(diào)試。
8、健壯原則:健壯源于透明與簡潔。
9、表示原則:把知識(shí)疊入數(shù)據(jù),以求邏輯質(zhì)樸而健壯。
10、通俗原則:接口設(shè)計(jì)避免標(biāo)新立異。
11、緘默原則:如果一個(gè)程序沒什么好說的,就沉默。
12、補(bǔ)救原則:出現(xiàn)異常時(shí),馬上退出,并給出足夠錯(cuò)誤信息。
13、經(jīng)濟(jì)原則:寧花機(jī)器一分,不花程序員一秒。
14、生成原則:避免手工hack,盡量編寫程序去生成程序。
15、優(yōu)化原則:雕琢前先要有原型,跑之前先學(xué)會(huì)走。
16、多樣原則:絕不相信所謂“不二法門”的斷言。
17、擴(kuò)展原則:設(shè)計(jì)著眼未來,未來總是比預(yù)想來得快。
Unix哲學(xué)之一言以蔽之:KISS
Keep it simple,stupid!
應(yīng)用unix哲學(xué):
1、只要可行,一切都應(yīng)該做成與來源和目標(biāo)無關(guān)的過濾器。
2、數(shù)據(jù)流應(yīng)盡可能的文本化(這樣可以用標(biāo)準(zhǔn)工具來查看和過濾)。
3、數(shù)據(jù)庫部署和應(yīng)用協(xié)議應(yīng)盡可能文本化(讓人閱讀和編輯)。
4、復(fù)雜的前端(用戶界面)和后端應(yīng)該涇渭分明。
5、如果可能,用c編寫前,先用解釋性語言搭建原型。
6、當(dāng)且僅當(dāng)只用一門編程語言會(huì)提高程序復(fù)雜度時(shí),混用語言編程才比單一語言編程來得好。
7、寬收嚴(yán)發(fā)(對接收的東西要包容,對輸出的東西要嚴(yán)格)
8、過濾時(shí),不需要丟棄的消息絕不丟。
9、小就是美。在確保完成任務(wù)的基礎(chǔ)上,程序功能盡可能的少。
最后強(qiáng)調(diào)的是態(tài)度:
要良好地運(yùn)用unix哲學(xué),你就應(yīng)該不斷地追求卓越,你必須相信,程序設(shè)計(jì)是一門技藝,值得你付出所有的智慧、創(chuàng)造力和激情。否則,你的視線就不會(huì)超越那些簡單、老套的設(shè)計(jì)和實(shí)現(xiàn);你就會(huì)在應(yīng)該思考的時(shí)候急急忙忙跑去編程。你就會(huì)在該無情刪繁就簡的時(shí)候反而把問題復(fù)雜化——然后你還會(huì)反過來奇怪你的代碼怎么會(huì)那么臃腫,那么難以調(diào)試。
要良好地運(yùn)用unix哲學(xué),你應(yīng)該珍惜你的時(shí)間絕不浪費(fèi)。一旦某人已經(jīng)解決了某個(gè)問題,就直接拿來利用,不要讓驕傲或偏見拽住你又去重做一遍。永遠(yuǎn)不要蠻干;要多用巧勁,省下力氣在需要的時(shí)候用,好鋼用到刀刃上。善用工具,盡可能將一切自動(dòng)化。
軟件設(shè)計(jì)和實(shí)現(xiàn)是一門充滿快樂的藝術(shù),一種高水平的游戲。如果這種態(tài)度對你來說聽起來有些荒謬,或者令你隱約感到有些困窘,那么請停下來,想一想,問問自己是不是已經(jīng)把什么給遺忘了。如果只是為了賺錢或者打發(fā)時(shí)間,你為什么要搞軟件設(shè)計(jì),而不是別的什么呢?你肯定曾經(jīng)也認(rèn)為軟件設(shè)計(jì)值得你付出激情……
要良好地運(yùn)用unix哲學(xué),你需要具備(或者找回)這種態(tài)度。你需要用心。你需要去游戲。你需要樂于探索。
操作系統(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、首選用戶界面風(fēng)格
8、目標(biāo)受眾
9、開發(fā)的門坎
總結(jié)
以上是生活随笔為你收集整理的《Unix编程艺术》笔记(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 修改键盘映射、交换按键
- 下一篇: android之socket编程实例