敲出簡易代碼的祕密 — 開發人員如何產生10倍的價值

成爲一名有10倍價值的開發人員有捷徑嗎?若是有一個神奇的祕密,能爲您打開一道通向全新、高效的軟件開發世界的大門,您願意聆聽嗎?javascript

image

老是有懷疑者認爲:"沒有捷徑可走!每一個人都須要練習才能變得更好!" 的確如此,可是軟件生產的專家本質到底是什麼?有沒有一個能夠令開發過程產生巨大變化的關鍵細節?java

是! 有!git

可是,即便我願意分享這個祕密,甚至將它贈送給您並詳細爲您說明-可能也仍須要花10年的不斷練習,才能令您徹底欣賞這份簡單的美。程序員

這是我曾經經歷的事情。我高中的程序設計老師曾用通俗易懂的英語給我講了一下。但一直到了十年後,我才真正明白背後的意義。如今,我終於深深地體會到了這堂課的重要性,即便我知道這只是一堂課,而您只靠看而不實踐是沒法真正體會到我但願與您分享的,因此如今我使用一些示例代碼逐步介紹了應用它的過程。github

_這個方法是平均生產率和10倍生產率之間的關鍵差別_。一方面,知道此方法能讓您在編程期間,帶來事半功倍的槓桿做用,您能夠提升幾個數量級的效率。另外一方面,當引入新的需求抑或周圍代碼發生變化時,您能夠藉此方法來編寫更可重用且不太可能break的代碼。編程

_使生產力提升10倍的祕訣是精通抽象_。許多開發人員將"抽象"視爲一個貶義詞。您經常聽到關於代碼的建議,例如"不要抽象化"或Python成名之道就是由於其標榜的"顯式優於隱式",這意味着具體要比抽象好。全部這些都是很好的建議(視狀況而定)。數組

可是現代應用程序每每使用大量代碼。若是您打印出現代十大應用程序的源代碼,那麼這些紙疊起來將與摩天大樓的高度相若,而且軟件維護成本很高。您建立的代碼越多,成本就越高。網絡

抽象是簡單代碼的關鍵數據結構

正確的抽象能夠隱藏對當前上下文不重要的細節,並減小執行相同工做所需的代碼量(一般減小几個數量級),從而使代碼更具可讀性,適應性和可維護性。架構

"簡單就是要減去明顯的東西並增長有意義的東西。"

—— 約翰·梅達(John Maeda):簡單法則(The Laws of Simplicity)

抽象不是一條單行線。它其實是由兩個互補的概念構成的:

  • _泛化_——刪除重複的部分(顯而易見的部分)並將其隱藏在抽象部分的後面。
  • _專業化_——將抽象應用於特定場景,每次應對新需求僅添加須要的新內容(有意義的內容)。

請查看如下代碼的建議:

const doubleList = list => {

🔗https://gist.github.com/erice...

代碼天生沒有錯,但其中包含許多細節,對於該特定應用而言可能並不重要。

  • _它包含正在使用的容器/傳輸數據結構(數組)的詳細信息_,它有一種狀態形狀依賴性,這意味着它僅適用於特定的數組及結構。
  • _它包含迭代邏輯_,這意味着,若是您須要編輯或新增其餘操做就必須訪問數據結構中的每一個元素,甚至還須要在該代碼中重複很是類似的迭代邏輯。這樣就與強制重複沒有分別,這可能違反DRY原則(請勿重複本身的代碼)。
  • _它表明着一個顯式分配_,若然不以聲明的方式描述要執行的操做,這會令代碼變得太冗長。

這些都沒有必要,全部的這些均可以隱藏在抽象部分的後面。在這種狀況下,這種通用性很強的抽象方法改變了現代應用程序的構建方式,並減小了咱們須要編寫的for循環的數量。

"__若是你以深入的意識觸摸一件事,你就會觸摸一切。__"

—— 一行禪師(Thich Nhat Hanh)

經過使用Map操做,咱們能夠刪除顯而易見的代碼(指類似的代碼中重複的部分)並將代碼集中在有意義的代碼上(指代碼有所不一樣的部分),從而將代碼簡化爲單一的use case:

const  doubleList  =  list  =>  list 。映射(x  =>  x * 2 );

🔗https://gist.github.com/erice...

一些初級開發人員有一種迷思—認爲他們必須編寫不少代碼才能產生不少價值。相比而言,高級開發人員則清楚無需更多編寫纔是代碼的價值。

想象一下,你做爲一名程序員,在JavaScript這樣的編程語言中普遍使用了Map操做,這有極大的好處。由於Map提供了詳細信息,例如您要映像的數據類型,包含該數據的結構類型以及枚舉數據結構中每一個數據節點所需的迭代邏輯。過去十年來,它提升了我開發的每一個應用程序的效率。

傑里米·阿什肯納斯(Jeremy Ashkenas)使此類操做在JavaScript中變得很流行,並開拓到CoffeeScript中應用,爲咱們如今在JavaScript中理所固然的許多重要語法快捷方式鋪平了道路。此外,他製做了Underscore和Backbone,Backscore產生了Lodash(至今是JavaScript中最受歡迎的功能編程實用程序),Backbone則使JavaScript中的MVC架構得以普及,併爲Angular和React奠基了基礎。

約翰·雷西格(John Resig)製做了很是流行和有影響力的jQuery,它造成了可重用的,封裝的JavaScript模塊(jQuery插件)大集合,爲幾年後出現的Node模塊和ES6模塊提供了標準。jQuery的API極有影響力,它構成了當今DOM選擇API的基礎。當我對React組件進行單元測試時,我仍然幾乎天天都會從jQuery的API中受益。

正確的抽象是能夠極大地影響生產力的強大槓桿。抽象不是一個貶義詞。模塊,函數,變量,類-全部這些自己就是抽象的形式,它們存在的根本緣由就是爲了簡化抽象和抽象的構成。

沒有抽象就沒法構建複雜的軟件。甚至彙編語言也使用抽象-指令名稱,內存地址變量,子程序(如函數調用)跳轉到的代碼點等。現代軟件是應用抽象的分層蛋糕,這些層爲您提供了槓桿做用。

"__給我足夠長的槓桿和支撐它的支點,我將移動地球。"

—— 阿基米德(Archimedes)

簡化的關鍵:咱們追求的祕密是如何減小咱們正在編寫的代碼數量-如何以更少的錢完成更多的工做。掌握了這一點以後,我保證您將成爲10倍價值的程序員。

做者介紹

埃裏克·埃利奧特(Eric Elliott)是《撰寫軟件》一書的做者。做爲EricElliottJS.com和DevAnywhere.io的共同創始人,他教開發人員基本的軟件開發技能。他創建併爲加密項目的開發團隊提供建議,併爲Adobe系統,Zumba Fitness,《華爾街日報》,ESPN,BBC和包括Usher,Frank Ocean,Metallica等頂級唱片藝術家的軟件經驗作出了貢獻。

🔗原文連接:

https://medium.com/javascript...

以上信息來源於網絡,由「京東智聯雲開發者」公衆號編輯整理,

不表明京東智聯雲立場

相關文章
相關標籤/搜索