敲出简易代码的秘密 — 开发人员如何产生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...

以上信息来源于网络,由“京东智联云开发者”公众号编辑整理,

不表明京东智联云立场

相关文章
相关标签/搜索