《UNIX 編程藝術(shù)》學(xué)習(xí)筆記 - UNIX 哲學(xué)基礎(chǔ)

Is anything more important than happiness??

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- nosix

? ? ? ?最近在極客時(shí)間上學(xué)習(xí)《從0開始學(xué)架構(gòu)》的課程骂际,給自己充充電孝治,晃晃悠悠敲了好幾年代碼了胞谈,也沒有做出啥牛逼的事填具,還是得提升提升,這本書也是在學(xué)習(xí)課程的時(shí)候看到艰额,正好趕上二手東618活動(dòng)就入手了澄港,學(xué)習(xí)筆記主要是記錄下看書想記住的部分,沒有啥高深的見解柄沮。

? ? 上圖就是本書提到的UNIX系統(tǒng)的設(shè)計(jì)哲學(xué)的精髓回梧,之前一直沒有聽到過這么一個(gè)原則,作為一個(gè)程序員想想還是挺慚愧的??祖搓。

? ? UNIX哲學(xué)(同其它工程領(lǐng)域的民間傳統(tǒng)一樣)是自下而上的狱意,而不是自上而下的。UNIX哲學(xué)注重實(shí)效拯欧,立足于豐富的經(jīng)驗(yàn)详囤。

? ? 每個(gè)人對(duì)事情都有自己的看法和總結(jié)

? ? 一、Unix管道發(fā)明人镐作,Unix傳統(tǒng)的奠基人之一 Doug Mcllroy在[Mcllroy78]中曾說:

? (i)讓每個(gè)程序就做好一件事藏姐,如果有新任務(wù),就重新開始该贾,不要往原程序中加入新功能而搞的復(fù)雜羔杨。

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

? (iii)盡可能早地降設(shè)計(jì)和編譯的軟件投入試用护姆,哪怕是操作系統(tǒng)也不例外,理想情況下掏击,應(yīng)該是在幾星期內(nèi)卵皂,對(duì)于拙劣的代碼別猶豫,扔掉重寫砚亭。

? (iv)優(yōu)先使用工具而不是拙劣的幫助來減輕編程任務(wù)的負(fù)擔(dān)灯变,工欲善其事,必先利其器捅膘。

? ? Unix哲學(xué)是這樣的:一個(gè)程序只做一件事添祸,并做好。程序要能協(xié)作寻仗。程序要能處理文本流刃泌,因?yàn)檫@是最通用的接口。

二署尤、Rob Pike, 最偉大的C語(yǔ)言大師之一耙替,在《Notes on C Programming》中從另外一個(gè)稍微不同的角度表述了對(duì)Unix的哲學(xué)[Pike]:

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

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

? ? 原則3:花哨的算法在n很小時(shí)通常很慢啥酱,而n通常很小,花哨算法的常數(shù)負(fù)責(zé)度很大厨诸。除非你確定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:沒有原則

? ? Ken Thompson ---- Unix最初版本的設(shè)計(jì)和實(shí)現(xiàn)者,禪宗偈語(yǔ)般地對(duì)Pike的原則4做出了強(qiáng)調(diào):拿不準(zhǔn)就窮盡。

三绽族、Unix 哲學(xué)中更多的內(nèi)容不是這些先哲們口頭表述出來的姨涡,而是由他們所做的一切和Unix本身所作出的榜樣體現(xiàn)出來的。從整體上來說吧慢,可以概括為以下幾點(diǎn):

? ? 1.模塊原則:使用簡(jiǎn)介的接口拼合簡(jiǎn)單的部件涛漂。

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

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

? ? 4.分離原則:策略同機(jī)制分離匈仗,接口同引擎分離。(這句話我其實(shí)一點(diǎn)都理解不了)

? ? 5.簡(jiǎn)潔原則:? 設(shè)計(jì)要簡(jiǎn)潔逢慌,復(fù)雜度能低則低悠轩。

? ? 6.吝嗇原則:除非卻無它法,不要編寫龐大的程序涕癣。

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

? ? 8.健壯原則:健壯源于透明與簡(jiǎn)潔坠韩。

? ? 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ù)想來的快震鹉。

好記性不如爛筆頭俱笛,好的原則在于不斷用于實(shí)踐,不是每一條都適用传趾,讓適用的規(guī)則提升自己的代碼就好了??迎膜。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市浆兰,隨后出現(xiàn)的幾起案子磕仅,更是在濱河造成了極大的恐慌珊豹,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榕订,死亡現(xiàn)場(chǎng)離奇詭異平夜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)卸亮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玩裙,“玉大人兼贸,你說我怎么就攤上這事〕越Γ” “怎么了溶诞?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)决侈。 經(jīng)常有香客問我螺垢,道長(zhǎng),這世上最難降的妖魔是什么赖歌? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任枉圃,我火速辦了婚禮,結(jié)果婚禮上庐冯,老公的妹妹穿的比我還像新娘孽亲。我一直安慰自己,他們只是感情好展父,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布返劲。 她就那樣靜靜地躺著,像睡著了一般栖茉。 火紅的嫁衣襯著肌膚如雪篮绿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天吕漂,我揣著相機(jī)與錄音亲配,去河邊找鬼。 笑死痰娱,一個(gè)胖子當(dāng)著我的面吹牛弃榨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播梨睁,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鲸睛,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了坡贺?” 一聲冷哼從身側(cè)響起官辈,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤箱舞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后拳亿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晴股,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年肺魁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了电湘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鹅经,死狀恐怖寂呛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瘾晃,我是刑警寧澤贷痪,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站蹦误,受9級(jí)特大地震影響劫拢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜强胰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一舱沧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧偶洋,春花似錦狗唉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至哆料,卻和暖如春缸剪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背东亦。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工杏节, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人典阵。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓奋渔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親壮啊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嫉鲸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前言 Unix是開源運(yùn)動(dòng)歷史上最著名的代表之一,而如今前端是開源運(yùn)動(dòng)中最活躍的一支隊(duì)伍歹啼,我相信它們兩者之間一定有共...
    云峰yf閱讀 3,179評(píng)論 0 6
  • The Art of unix programming 哲學(xué) 哲學(xué)基礎(chǔ): unix 哲學(xué)并不算是一種正規(guī)設(shè)計(jì)方法玄渗,...
    willdimagine閱讀 1,065評(píng)論 0 2
  • Doug Mcilroy: 1.讓每個(gè)程序就做好一件事座菠。如果有新任務(wù),就重新開始藤树,不要往原程序中加入新功能而搞得復(fù)...
    農(nóng)天狼閱讀 1,161評(píng)論 0 0
  • 本文把程序員所需掌握的關(guān)鍵知識(shí)總結(jié)為三大類19個(gè)關(guān)鍵概念浴滴,然后給出了掌握每個(gè)關(guān)鍵概念所需的入門書籍,必讀書籍岁钓,以及...
    dle_oxio閱讀 11,112評(píng)論 6 244
  • The sky have been teared by God. That changed thousands o...
    啟文閱讀 290評(píng)論 1 1