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

簡(jiǎn)單代碼的秘訣—去掉顯而易見的,加上有意義的

開發(fā) 前端
現(xiàn)代應(yīng)用程序的代碼量普遍很大。 如果我們把現(xiàn)代十大應(yīng)用程序的源代碼打印出來,那么這些紙疊起來的高度將可以比得上一座摩天大樓,由此可以想象軟件的維護(hù)成本有多高。 也就是說,寫的代碼越多,成本就越高。

 成為10倍開發(fā)人員有捷徑可走嗎? 是否有這樣一個(gè)神奇的秘密,可以幫助我們打開一個(gè)全新的軟件開發(fā)精通和生產(chǎn)力世界?懷疑者們通常會(huì)說:“當(dāng)然沒有捷徑可走! 每個(gè)人都需要不斷的練習(xí)才能變得更好!”

的確如此,但是軟件生產(chǎn)力實(shí)踐的專家是什么?有沒有一件可以產(chǎn)生巨大變化的關(guān)鍵事情?答案是有的!但是,即使我現(xiàn)在拿出來分享,一字一句講給你聽,可能你還是需要要花10年才能有足夠多的經(jīng)驗(yàn)來領(lǐng)悟它極致的簡(jiǎn)單性。

是的,這就是發(fā)生在我身上的事情。 我上學(xué)時(shí)候的程序設(shè)計(jì)老師用通俗易懂的話給我講過一遍,并且用一些示例代碼一步步教我如何去運(yùn)用它。 然而直到10年后,我才真正理解。 但是現(xiàn)在,憑借過往的經(jīng)驗(yàn),我深深地體會(huì)到了這堂課的意義,我現(xiàn)在就分享給你。

這個(gè)秘密是平均生產(chǎn)率和10倍生產(chǎn)率之間的關(guān)鍵區(qū)別,如同杠桿一般,可以讓我們把效率提高幾個(gè)數(shù)量級(jí)。

生產(chǎn)率提高10倍的秘訣是學(xué)會(huì)如何抽象(Abstraction)。 許多開發(fā)人員將“抽象”視為一個(gè)臟話。 也許你會(huì)經(jīng)常聽到這樣的建議,例如“不要過早抽象”或 Python 之禪中著名的“顯式勝于隱式”,這意味著具體(Concrete)要?jiǎng)儆诔橄蟆?這些建議都是很有價(jià)值的,不過也得看問題的上下文。

現(xiàn)代應(yīng)用程序的代碼量普遍很大。 如果我們把現(xiàn)代十大應(yīng)用程序的源代碼打印出來,那么這些紙疊起來的高度將可以比得上一座摩天大樓,由此可以想象軟件的維護(hù)成本有多高。 也就是說,寫的代碼越多,成本就越高。

抽象是簡(jiǎn)單代碼的關(guān)鍵

正確的抽象可以隱藏對(duì)當(dāng)前上下文不重要的細(xì)節(jié),并減少執(zhí)行相同工作所需的代碼量(通常減少幾個(gè)數(shù)量級(jí)),從而使代碼更具可讀性,適應(yīng)性和可維護(hù)性。

簡(jiǎn)單就是去掉顯而易見的,加上有意義的。——John Maeda《簡(jiǎn)單的法則》

抽象并不是一條單向路。 它實(shí)際上是由兩個(gè)互補(bǔ)的概念構(gòu)成的:

  • 泛化(Generalization)——刪除重復(fù)的部分(顯而易見的部分)并將其隱藏在抽象后面。
  • 特化(Specialization)——將抽象應(yīng)用于特定用例,僅添加需要不同的內(nèi)容(有意義的內(nèi)容)。

考慮以下代碼:

  1. const doubleList = (list) => { 
  2.   const newList = []; 
  3.   for (var i = 0; i < list.length; i++) { 
  4.     newList[i] = list[i] * 2; 
  5.   } 
  6.   return newList; 
  7. }; 

這些代碼本質(zhì)上沒有錯(cuò),但其中包含許多瑣碎的細(xì)節(jié),對(duì)于特定應(yīng)用而言可能并不重要。

  • 它包含正在使用的容器/數(shù)據(jù)結(jié)構(gòu)(數(shù)組)的詳細(xì)信息,這意味著它僅適用于數(shù)組。 它包含狀態(tài)形狀依賴性。
  • 它包含迭代邏輯,這意味著如果其他操作也需要訪問數(shù)據(jù)結(jié)構(gòu)中的每個(gè)元素,則還需要在該代碼中重復(fù)非常相似的迭代邏輯,這就可能違反 DRY(Do not Repeat Yourself)原則。
  • 它包括一個(gè)顯式賦值,而不是以聲明方式描述要執(zhí)行的操作,太冗長(zhǎng)了。

這些都沒有必要。所有這些都可以隱藏在抽象后面。在這種情況下,這種非常通用的抽象方法改變了現(xiàn)代應(yīng)用程序的構(gòu)建方式,并減少了我們需要編寫的顯式for循環(huán)的數(shù)量。

當(dāng)你帶著深刻的覺知觸及了一個(gè)事物, 你就觸及到了一切。——釋一行

 

通過使用 map 操作,我們可以通過刪除明顯的代碼(我們可能會(huì)在相似的代碼中重復(fù)的部分)并將代碼集中在有意義的代碼上(只是需要與我們使用的代碼有所不同的代碼),從而簡(jiǎn)化成一行代碼:

  1. const doubleList = list => list.map(x => x * 2); 

初級(jí)程序員認(rèn)為他們必須編寫大量代碼才能產(chǎn)生很多價(jià)值。而高級(jí)程序員了解無需編寫任何代碼的價(jià)值。

想象一下,作為一名程序員,他在像JavaScript這樣的編程語(yǔ)言中廣泛使用了map操作。Map 操作抽象了被操作的數(shù)據(jù)節(jié)點(diǎn)的類型,包含該數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)的類型以及每個(gè)數(shù)據(jù)節(jié)點(diǎn)的迭代邏輯。過去十年來,它提高了我開發(fā)的每個(gè)應(yīng)用程序的效率。

Jeremy Ashkenas 使這些操作在 JavaScript 中變得很流行,并且通過開創(chuàng)性的 CoffeeScript,為目前 JavaScript 中理所當(dāng)然的許多重要的快捷語(yǔ)法奠定了基礎(chǔ)。 他開發(fā)了 Underscore 和 Backbone,Underscore 產(chǎn)生了 Lodash(至今仍然是 JavaScript 中最受歡迎的工具庫(kù)之一),Backbone 則使 JavaScript 中的 MVC 架構(gòu)得以普及,并為 Angular 和 React 奠定了基礎(chǔ)。

John Resig 開發(fā)了流行和有影響力的 jQuery,它形成了可重用的,封裝的 JavaScript 模塊(jQuery插件)的最大集合,直到幾年后標(biāo)準(zhǔn)的 Node 模塊和 ES6 模塊出現(xiàn)。jQuery 的選擇器 API 影響深遠(yuǎn),它構(gòu)成了當(dāng)今 DOM Selection API 的基礎(chǔ)。當(dāng)我對(duì) React 組件進(jìn)行單元測(cè)試時(shí),我仍然幾乎每天都會(huì)從 jQuery 的選擇 API 中受益。

正確的抽象是可以極大地影響生產(chǎn)力的強(qiáng)大杠桿。抽象不是一個(gè)臟話。模塊,函數(shù),變量,類——所有這些都是抽象形式,它們存在的全部原因就是為了簡(jiǎn)化抽象和抽象的構(gòu)成。

沒有抽象就無法構(gòu)建復(fù)雜的軟件,甚至匯編語(yǔ)言也使用抽象——指令的名稱,內(nèi)存地址的變量,子例程(例如函數(shù)調(diào)用)跳轉(zhuǎn)到的代碼點(diǎn)等?,F(xiàn)代軟件是有用的抽象的多層蛋糕,這些層為您提供了杠桿作用。

給我一根足夠長(zhǎng)的杠桿和支撐它的支點(diǎn),我將翹起整個(gè)地球。——阿基米德

 

簡(jiǎn)單的關(guān)鍵就是:如何減少我們正在生產(chǎn)的代碼的數(shù)量,如何用更少的錢做更多的事情。掌握了這一點(diǎn)之后,您將成為10倍的程序員,我保證。

 

責(zé)任編輯:姜華 來源: 圖雀社區(qū)
相關(guān)推薦

2019-12-05 18:00:39

物聯(lián)網(wǎng)智能手表機(jī)器人

2014-11-24 10:48:49

OpenStack私有災(zāi)難恢復(fù)

2021-04-22 15:55:56

UCaaS統(tǒng)一通信企業(yè)通信

2023-01-30 07:55:44

代碼過度設(shè)計(jì)

2016-02-17 09:06:42

代碼注釋代碼規(guī)范

2021-02-19 09:45:50

Python面向?qū)ο?/a>代碼

2021-03-04 13:25:22

Python面向?qū)ο?/a>代碼

2021-04-06 11:21:50

Python面向?qū)ο?/a>代碼

2015-04-23 16:21:23

2019-01-24 10:23:58

Web前端密碼加密

2011-08-23 09:00:47

可用性五個(gè)九

2020-06-04 08:05:06

物聯(lián)網(wǎng)客戶見解IOT

2016-02-17 10:01:36

編程代碼注釋

2011-09-09 10:31:40

Xen虛擬化linux內(nèi)核

2022-02-28 22:52:56

混合云工具技術(shù)

2022-09-30 09:24:10

思維辦公IT

2021-05-21 10:33:37

數(shù)據(jù)中心數(shù)據(jù)存儲(chǔ)

2023-08-30 08:04:03

架構(gòu)前端應(yīng)用程序

2016-10-24 15:41:37

2014-01-02 14:59:52

中顧保鏢私人定制
點(diǎn)贊
收藏

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