自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

每個程序員都該知道的五大定律

開發(fā)
定律-或稱法則,可以指導(dǎo)我們并讓我們在同伴的錯誤中學(xué)習。這篇文章中,我將介紹我每次設(shè)計或?qū)崿F(xiàn)軟件時出現(xiàn)在我腦海的五大定律。其中有些和開發(fā)有關(guān),有些和系統(tǒng)組織有關(guān)。它們可以幫助你成為合格的軟件工程師。

[[204958]]

定律-或稱法則,可以指導(dǎo)我們并讓我們在同伴的錯誤中學(xué)習。這篇文章中,我將介紹我每次設(shè)計或?qū)崿F(xiàn)軟件時出現(xiàn)在我腦海的五大定律。其中有些和開發(fā)有關(guān),有些和系統(tǒng)組織有關(guān)。它們可以幫助你成為合格的軟件工程師。

墨菲定律

“凡是可能出錯,就一定出錯。”

這條定律來源于 Edward Murphy —— 一名航天工程師在 50 年代初對火箭測試失敗的回應(yīng)。這條定律給我們的啟示是永遠在系統(tǒng)關(guān)鍵地方使用防御性設(shè)計,因為系統(tǒng)某些地方總會出錯!

 

 

這條定律很容易引入軟件工程領(lǐng)域。當你將軟件暴露給終端用戶,他們會創(chuàng)造性地輸入一些出人意料的內(nèi)容,使系統(tǒng)宕機。所以你需要讓你的軟件足夠健壯,能夠檢測并警告非預(yù)期行為。

當你在機器上運行軟件時,任何地方都有可能發(fā)生問題 —— 從硬盤上的系統(tǒng)到數(shù)據(jù)中心的電力供應(yīng)。所以你必須確保你設(shè)計的架構(gòu)在每個層級都可以應(yīng)對故障。

我曾經(jīng)有機會領(lǐng)略過幾次墨菲定律。 舉個例子,我曾經(jīng)在一個批處理框架中使用字符串“null”來表示空值,我并不認為這有問題,直到有個名字叫“Null”的用戶提交了一個交易訂單,我們的報表流程中斷了幾個小時…… 還有一次,在另一個項目中。當所有東西都準備好部署到生產(chǎn)環(huán)境了,突然 Azure 基礎(chǔ)設(shè)施故障導(dǎo)致我們運行自動化腳本的服務(wù)器宕機了。

現(xiàn)實世界中的經(jīng)驗教訓(xùn)提醒著我生活的艱難 —— “凡事可能出錯,就一定出錯”。 所以,心中牢記墨菲定律,設(shè)計健壯的軟件。

Knuth 定律

“在(至少大部分)編程中,過早優(yōu)化是萬惡之源。”

這條定律是高德納(Donald Knuth) 的經(jīng)典語錄之一,它告誡我們不要過早優(yōu)化應(yīng)用程序中的代碼,直到必須優(yōu)化時再優(yōu)化。

 

[[204959]]

 

的確,簡單易讀的源碼可以滿足 99% 的性能需要,并能提高應(yīng)用的可維護性。最開始使用簡單的解決方案也讓后期性能出現(xiàn)問題時更容易迭代和改進。

垃圾自動回收的編程語言中,字符串的連接常常是過早優(yōu)化的例子。在 Java 或 C# 中,String 對象是不可變的,我們學(xué)會使用其他結(jié)構(gòu)動態(tài)創(chuàng)建字符串,比如 StringBuilder。但事實上直到你分析完個應(yīng)用程序前,你并不知道 String 對象創(chuàng)建了多少次并對性能的產(chǎn)生多大影響。所以首先編寫盡可能整潔的代碼,之后在必須的時候再優(yōu)化,往往這樣做更有意義。

然而,這條規(guī)則并不應(yīng)該阻止你去學(xué)習編程語言的性能權(quán)衡和正確的數(shù)據(jù)結(jié)構(gòu)。并且,正如所有其他性能問題,你在優(yōu)化前要測量開銷。

North 定律

“每一個決定都是一次權(quán)衡”

好吧,我承認這是取自 Dan North 的演講 Decisions,Decisions,它目前還不是公認的定律。 但這條語錄影響了我做的每個決定,所以我把它放在這。

 

[[204960]]

 

開發(fā)者日復(fù)一日的生活中,我們每天都做無數(shù)個大大小小的決定。從命名變量到自動化(手動)任務(wù),再到定義平臺架構(gòu)。

這條語錄強調(diào)無論你做的選擇是什么,你總會放棄一個或多個選項

但這不是最重要的。 最重要的是理智地做出決定,了解其他選項,清楚你為什么不選擇它們。你要始終根據(jù)當前你掌握的信息來權(quán)衡并做出決定。

但是如果后來你了解到新的信息,并發(fā)現(xiàn)之前的決定是錯誤的,這也沒關(guān)系。關(guān)鍵是記清楚你為什么做出那個決定,重新評估新的選項之后再做出新的理智的決定。

重復(fù)一遍

“每一個決定都是一次權(quán)衡”

所以,做出選擇并對所有選項心知肚明。

Conway 定律

“系統(tǒng)設(shè)計的架構(gòu)受限于生產(chǎn)設(shè)計,反映出公司組織的溝通架構(gòu)”

在 60 年代,一位名叫 Melvin Conway 的工程師注意到公司組織結(jié)構(gòu)影響到他們開發(fā)的系統(tǒng)的設(shè)計。他用一篇論文描述了這個觀點,并命名為“Conway 定律”。

 

 

這條定律很適用于軟件開發(fā)領(lǐng)域,甚至體現(xiàn)到代碼層面上。交付軟件組件的各個團隊組織結(jié)構(gòu)直接影響到組件的設(shè)計。

舉個例子,一個集中式的開發(fā)者團隊會開發(fā)出各組件耦合的整體應(yīng)用。另一方面,分布式的團隊會開發(fā)出單獨的(微)服務(wù),每一部分關(guān)注點分離清晰。

這些設(shè)計沒有好壞之分,但它們都是受到團隊溝通方式的影響。在全球有大量獨立開發(fā)者的開源項目,通常是模塊化和可重用庫,這就是很有說服力的例子。

如今,將大的集成應(yīng)用解耦成微服務(wù)已成趨勢。這很棒,因為這可以加速交付使用項目。但你也應(yīng)該牢記 Conway定律,在公司組織構(gòu)建中投入與技術(shù)開發(fā)同樣多的工作。

瑣碎定律(帕金森瑣碎定律)

“組織成員投入大量精力到瑣碎的事情上。”

這條定律論點是在會議中花費的時間與事情的價值成反比。的確是這樣,人們更愿意把注意力和觀點放在他們熟悉的事物上,而不是復(fù)雜的問題上。

 

[[204961]]

 

帕金森給出一個例子,一場會議中,成員們討論兩件事:為公司建核反應(yīng)堆和為員工建車棚。建反應(yīng)堆是一件巨大而復(fù)雜的任務(wù),沒有人能完全掌控全局。他們完全信賴流程和系統(tǒng)專家,并很快接受了項目。

另一邊,建車棚是一般人都可以做的,每個人都可以對顏色有意見。事實上,每個會議成員都會表達自己的意見,使得建車棚的決議所花費的時間遠遠超過建反應(yīng)堆的。

這條定律在軟件行業(yè)十分出名,這個故事隨后也被稱為車棚效應(yīng)

舉個例子,開發(fā)者會花費更多時間到討論正確縮進或函數(shù)命名,而不是討論類的職責或應(yīng)用架構(gòu)。這是因為每個人都能認知幾個字符的變動,但項目架構(gòu)的變動則需要巨大的認知負載

你能注意到的車棚效應(yīng)的另一個例子是 Scrum 演示。不要誤會我,我喜歡演示,我認為這是一個很好的機會來面對用戶并獲得對應(yīng)用程序的反饋。但通常 Scrum 演示過程中的討論會轉(zhuǎn)向瑣碎問題,而不是審視全局。這些討論也很重要,但你應(yīng)該注意權(quán)衡更重要更復(fù)雜的問題。

一旦你了解這種規(guī)律,你將在會議和交流中發(fā)覺這種行為。 我并不是讓你在每次討論中避免“小”問題,提高你的意識可以幫助你關(guān)注真正的問題,并為這些會議做好準備。

結(jié)論

這五條定律只是我們行業(yè)中總結(jié)出的教訓(xùn)中一些例子。隨著軟件開發(fā)經(jīng)驗的增長,我們將會學(xué)會更多。 盡管其中某些定律現(xiàn)在看起來是常識,我始終堅信了解這些原則可以幫助你識別這些模式并做出反應(yīng)。 

責任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2014-10-22 10:54:14

程序員

2015-10-12 15:07:46

亞馬遜CTO云架構(gòu)師

2022-03-09 09:56:27

插件開發(fā)效率

2010-03-25 09:58:25

大齡程序員

2010-07-16 09:00:00

.NET

2023-03-28 23:08:18

Bash編碼Shell

2019-05-20 10:28:16

定律原則GitHub

2023-01-31 15:43:47

2012-02-28 10:52:13

2018-03-07 12:57:53

2015-07-16 09:56:58

Web開發(fā)程序員技巧

2016-04-19 10:23:48

2022-09-02 15:25:59

程序員工具項目

2009-07-22 09:25:19

程序員非技術(shù)

2009-06-10 09:58:14

程序員職場層次

2010-11-12 10:27:08

求職

2011-11-15 08:46:26

項目管理

2015-10-26 09:08:29

程序員JavaScript理由

2017-10-28 23:35:08

CSS框架開發(fā)工具

2013-12-19 10:10:58

交互設(shè)計費茨法則席克定律
點贊
收藏

51CTO技術(shù)棧公眾號