下面是15條來自軟件開發(fā)實(shí)踐中的基本規(guī)律法則:
奧卡姆剃刀
這個(gè)著名的格言可以追溯到14世紀(jì)的哲學(xué)家和修士William_of_Ockham,奧卡姆剃刀(Occam's razor)通常描述為:
在有多個(gè)相互競(jìng)爭(zhēng)性的理論中,選擇那個(gè)最少的假設(shè)解釋的理論(因?yàn)榧僭O(shè)越多,錯(cuò)誤的概率越多)。
這個(gè)原理最早至少能追溯到亞里士多德的“自然界選擇最短的道路”。在大多數(shù)情況下,如果我們可以選擇理論,那么無疑選擇越簡(jiǎn)單的越好。
但是這個(gè)原理被人們還總結(jié)簡(jiǎn)單有效原理:如無必要,勿增實(shí)體。切勿浪費(fèi)較多東西去做,用較少的東西,同樣可以做好的事情。也就是將復(fù)雜事情簡(jiǎn)單化。
這種解釋其實(shí)偏離了奧卡姆剃刀的原話,奧卡姆剃刀的原話中有一個(gè)前提是,存在多個(gè)相互競(jìng)爭(zhēng)性理論的情況下,傾向于選擇簡(jiǎn)單那一個(gè)。這句話的意思不等同于“如無必要,勿增實(shí)體”,因?yàn)楹笳叩募僭O(shè)前提是“如無必要”,這個(gè)前提與奧卡姆剃刀原話的前提不是同一的,因?yàn)槭欠癖匾欠浅V饔^的,假設(shè)當(dāng)前只有一個(gè)方案,那么主觀者會(huì)認(rèn)為沒有必要再探索其他方案了;如果過了一段時(shí)間,其他人又提出一個(gè)簡(jiǎn)單方案,這個(gè)主觀者會(huì)認(rèn)為已經(jīng)沒有必要再考慮第二個(gè)方案,盡管按照奧卡姆剃刀原意還是需要將這兩個(gè)方案進(jìn)行比較,有可能第二個(gè)方案更簡(jiǎn)單,能夠入選。
在多個(gè)方案中選擇簡(jiǎn)單的,不代表否定進(jìn)行多個(gè)方案的論證,如同我們進(jìn)行軟件開發(fā)與設(shè)計(jì),如果僅僅認(rèn)為功能足夠可以運(yùn)行了,沒有必要再加入過多設(shè)計(jì),設(shè)計(jì)模式和其他最佳實(shí)踐是多余的,這種懶惰認(rèn)識(shí)反而是有害的,相反,設(shè)計(jì)模式和最佳實(shí)踐或者面向?qū)ο蠡蛘吆瘮?shù)式方案有可能是出其意外地簡(jiǎn)單巧妙。這些如果你不首先進(jìn)行復(fù)雜化,又如何能夠在復(fù)雜基礎(chǔ)上真正獲得簡(jiǎn)單的解決方案呢?
Hanlon的剃刀(Hanlon's razor)
Never attribute to malice what can be adequately explained by stupidity,如果能夠使用無知解釋,就無需歸因于惡意。
軟件測(cè)試中經(jīng)常讓程序員懊惱的是測(cè)試員或用戶總是挑選自己的死穴進(jìn)行測(cè)試,其實(shí)大部分情況下他們不是惡意或故意的,而是對(duì)你的程序邏輯的無知導(dǎo)致,這種無知的測(cè)試正是軟件測(cè)試的無盲點(diǎn)測(cè)試。
現(xiàn)實(shí)生活中也是經(jīng)常有這樣情況,很多人出于無知,或者無意識(shí)地犯錯(cuò),那么我們就不能再歸因于他們出于惡意,因?yàn)閻阂獗仨毷且庾R(shí)到了再去故意違反,所以,在法律上,故意殺人與正當(dāng)防衛(wèi)的無意殺人在量刑上是區(qū)別對(duì)待的。
Hanlon的剃刀也是讓我們寬宏原諒別人的一個(gè)約定俗成的理由。
帕累托原則(二八定律 80/20定律)
“80%的影響源于20%的原因。”1897年,意大利經(jīng)濟(jì)學(xué)者帕累托發(fā)現(xiàn):20%的人占有80%的社會(huì)財(cái)富。
在軟件開發(fā)調(diào)試中,我們會(huì)發(fā)現(xiàn)大量問題和Bug,也許你會(huì)感到泄氣,但是奇怪的是,當(dāng)你解決一個(gè)問題后,會(huì)發(fā)現(xiàn)其他很多錯(cuò)誤竟然消失了,這說明,大部分的問題其實(shí)都是由一些共同原因引起的。
簡(jiǎn)而言之,立刻解決許多問題的最快方法是找到共同的根源并修復(fù)他們。
達(dá)克效應(yīng)(鄧寧-克魯格效應(yīng)(Dunning-Kruger effect)
"非熟練專業(yè)人員經(jīng)常會(huì)對(duì)自己的能力產(chǎn)生認(rèn)知偏差,以為自己的能力比他們實(shí)際能力要強(qiáng)大得多“
這個(gè)定律認(rèn)為相對(duì)不熟練的人會(huì)遭受虛幻的優(yōu)越感,錯(cuò)誤地評(píng)估他們的真實(shí)能力,用中國(guó)俗語(yǔ)解釋:滿瓶不動(dòng)半瓶搖。當(dāng)然一些研究表明,不同的社會(huì)文化也在其中發(fā)揮作用。例如,東方人往往會(huì)低估自己的能力,不斷尋找機(jī)會(huì)提高自己和他人。
類似概念有:儒家孔子認(rèn)為”知之為知之不知為不知“,蘇格拉底認(rèn)為“真正的知識(shí)是知道自己的無知的程度“。老子:知人者智,自知者明。
林納斯定律
雷蒙德的名言,“足夠多的眼睛,就可讓所有問題浮現(xiàn)。”(Given enough eyeballs, all bugs are shallow)
換句話說,如果你不能找到問題,就去尋求他人的幫助。 這也是為什么需要結(jié)對(duì)編程和軟件測(cè)試的原因。
健壯性原則(又名Postel法則/伯斯塔爾法則)
在軟件開發(fā)中有一個(gè)基本思想,特別是API設(shè)計(jì)等領(lǐng)域,可以簡(jiǎn)明地表達(dá)為健壯性:
嚴(yán)以律己,寬以待人。
最早這個(gè)規(guī)范是針對(duì)TCP協(xié)議設(shè)計(jì)的,當(dāng)代碼發(fā)送命令或數(shù)據(jù)到其他機(jī)器時(shí)應(yīng)該完全符合規(guī)格,但代碼接收其他輸入應(yīng)該可以接受非標(biāo)準(zhǔn)一致的輸入,只要這個(gè)輸入意思清楚。
在函數(shù)式編程中,這個(gè)原理表現(xiàn)為輸入類型是逆變的(contravariant),而輸出類型應(yīng)該是協(xié)變的(covariant)。在程序員中,產(chǎn)生兼容的功能,原理是推廣[引文需要]的形式在輸出型的輸入類型和協(xié)變是逆變。
Eagleson定律
程序員離開項(xiàng)目一段時(shí)間后再去看看自己的代碼,心里經(jīng)??赡芰R娘,這是哪個(gè)白癡寫的代碼?
自己的代碼如果六個(gè)月以上沒有沒有再看,如同其他人編寫一樣。
記住,下次你再加入一個(gè)項(xiàng)目你已經(jīng)離開好幾個(gè)月。 代碼是 不再你的代碼 ;它是別人的,你現(xiàn)在負(fù)責(zé)改善。
彼得原理
彼得原理是管理心理學(xué)的一種心理學(xué)效應(yīng),指每個(gè)員工不斷遷升,最終趨向于上升到他所不能勝任的崗位。對(duì)一個(gè)組織而言,一旦組織中的相當(dāng)部分人員被推到了其不稱職的職位,就會(huì)造成組織的人浮于事,效率低下,導(dǎo)致平庸者出人頭地,發(fā)展停滯。
呆伯特的原則
漫畫的主人公呆伯特,是一位白領(lǐng)工人、電氣工程師,也是全世界聞名的倒霉蛋,其上司愚蠢、官僚。其原則是:
沒有能力的員工將比有能力的員工更能提拔到管理崗位,從而將他們從實(shí)際工作中去除,以減少他們可能造成的危害。
霍夫斯塔特定律
實(shí)際花費(fèi)的時(shí)間總是超過你的預(yù)期,所以,你只能加班,唉,程序員加班很苦逼啊。
90-90 規(guī)則
因?yàn)槭虑榭偸浅鲥e(cuò),因?yàn)槿耸浅隽嗣牟簧瞄L(zhǎng)估算自己的技術(shù)水平:
"百分之90開發(fā)時(shí)間花在90%代碼上,剩余的10%代碼量卻又花費(fèi)了90%的開發(fā)時(shí)間“
這也許解釋了為什么那么多軟件項(xiàng)目最后超出預(yù)算
帕金森定律
是官僚主義或官僚主義現(xiàn)象的一種別稱,被稱為二十世紀(jì)西方文化三大發(fā)現(xiàn)之一,“官場(chǎng)病”、“組織麻痹病”或者“大企業(yè)病”:
工作量總是會(huì)填滿其所需的時(shí)間。
總是有做不完的工作,
塞爾定律(Sayre's Law)
爭(zhēng)議的強(qiáng)度總是和價(jià)值成反比。也就是說:重要性越少的事情,人們?cè)接袩崆槿?zhēng)議。
帕金森瑣碎定律
管理學(xué)上,帕金森發(fā)現(xiàn)一種稱為瑣碎定律現(xiàn)象。在討論非常專業(yè)而且金額龐大的事情時(shí),一般人由于缺乏專業(yè)知識(shí),不敢隨便發(fā)言,以免失言,貽笑大方,因此多半都會(huì)肯定(或逃避)該重大方案,而提些與主題無關(guān)的雞毛蒜皮小事。相對(duì)的,對(duì)于簡(jiǎn)單的瑣碎小事,由于平常大家都會(huì)接觸到而且有相當(dāng)?shù)恼J(rèn)識(shí),反而意見特別多,帕金森稱此現(xiàn)象為瑣碎定律。
在任何議程項(xiàng)目上所花費(fèi)的時(shí)間與金錢之和成反比。
好辯定律
人們?cè)嚼斫饽呈挛?,他們就越愿意去?zhēng)論,他們也越好這口。