抽象是简单代码的关键。

图片


有没有办法将您的技能提高10倍?如果您只知道这一点,是否有任何魔术秘密可以为您打开软件开发的全新技能和生产力世界?



怀疑者就是这样想的:“这里你不能偷工减料!每个人都必须练习才能变得更好!”的确如此,但是专家们会采取哪些措施来加快软件开发速度,并且有一件关键的事情可以带来巨大的改变吗?



是!有!



但是,即使我与您分享(即使我为您详细介绍了它),也可能需要10年才能成长并完全欣赏它的简单性。



至少那是发生在我身上的事情。这是我的高中编程老师用朴素的英语教给我的。我使用一些代码示例逐步完成了应用它的过程。而这确实是在10年后才发生的。但是现在,通过经验,我对本课程深感赞赏,尽管我知道您乍看之下并不能真正欣赏它,但我将与您分享。



这个秘密是平均性能和10倍性能之间的关键区别。利用此秘密提供的杠杆作用,您可以提高效率一个数量级。



当引入新的需求并在代码中进行更改时,您可以编写更可重用且不太可能损坏的代码。



生产率提高10倍的秘诀是掌握抽象。许多开发人员将“抽象”视为脏话。您可能会听到一些建议,例如“不要过早抽象”或Zen Python著名的“显式胜于隐式”,这意味着具体要胜于抽象。所有这些都是很好的技巧,具体取决于上下文。



但是现代应用程序使用大量代码。如果您打印出10种最佳现代应用程序的源代码,那么这些纸张将与摩天大楼的高度竞争,并且该软件的维护成本很高。您创建的代码越多,成本就越高。



抽象是简单代码的关键。



正确的抽象可以隐藏对当前上下文不重要的细节,并减少执行同一工作所需的代码量(通常是多次),从而使您的代码更具可读性,适应性和可维护性。



“简单性就是减少显而易见的事物,而增加有意义的事物。”

-前田(John Maeda):简单法则


抽象不是单向的街道。它由两个附加概念组成:



  • 泛化 -删除重复部分(显而易见的部分)并将其隐藏在抽象后面。
  • 专业化 -在特定用例中使用抽象,仅添加应该有所不同的内容(有意义)。


考虑以下代码:



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


代码没有错,但是它包含了许多与该特定应用程序无关的细节。



  • 它包含有关正在使用的容器数据结构(数组)的详细信息,这意味着它仅适用于数组。它包含状态形式依赖项
  • 它包含迭代逻辑,这意味着,如果需要其他操作也需要访问数据结构中的每个元素,则还需要在此代码中重复非常相似的迭代逻辑。这会导致重复,这可能违反DRY原理(请勿重复自己)
  • 它包括要执行的操作的明确分配而不是声明性描述。这是罗嗦


这些都不需要。所有这些都可以隐藏在抽象背后。在这种情况下,这种通用抽象改变了我们创建现代应用程序的方式,并减少了我们需要编写的显式for循环的数量。



“如果您以深刻的意识触摸一件事,那么您触摸的一切。”

-Thih Nhat Hanh


使用map操作,我们可以将代码简化为一行,删除明显的代码(我们可能在同一代码中重复的部分),然后将注意力集中在重要的代码上(仅在我们使用时应该有所不同)。例:



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


初级开发人员认为他们需要编写大量代码才能获得巨大的价值。



高级开发人员了解没有人需要编写的代码的价值。



想象一下自己是一位程序员,他在JavaScript等编程语言中普及了map操作的使用。 Map提取了详细信息,例如正在映射的数据类型,包含该数据的数据结构的类型以及枚举数据结构中每个数据节点所需的迭代逻辑。这提高了我在过去十年中创建的每个应用程序的性能。



杰里米·阿什肯纳斯(Jeremy Ashkenas)使其中的一些操作在JavaScript中变得很流行,并为许多很棒的语法快捷方式铺平了道路。他创建了Underscore,产生了Lodash(仍然是JavaScript中最流行的函数编程工具)和Backbone,后者在JavaScript中普及了MVC架构,并为Angular和React奠定了基础。



约翰·雷兹格制作了jQuery,它非常流行且很有影响力,以致于它形成了最大的重新封装的JavaScript模块(jQuery插件)集合,直到几年后出现了标准的Node模块和ES6模块。 jQuery Selector API非常有影响力,以致成为现代DOM API的基础。测试React组件时,几乎每天都可以从该API中受益



正确的抽象是强大的杠杆,可以在性能上产生很大的不同。抽象不是一个脏话。模块,函数,变量,类都是抽象形式,它们存在的全部原因是为了简化抽象和组成抽象。



没有抽象就不能创建复杂的程序。即使在汇编程序中,也使用抽象-指令名称,内存地址变量,切换到子程序的代码点(例如,函数调用)等。现代软件是有用的抽象层,这些层为您提供了优势。



“给我足够长的杠杆和支点,让我可以依靠它,让我步入整个世界。”

-阿基米德


简单的关键:我们正在寻找的秘诀是如何减少我们创建的代码量-如何以更少的钱做更多的事情。掌握了这一点,您将成为程序员的10倍。我保证





图片



通过参加SkillFactory的付费在线课程,了解如何从头开始或获得技能和薪资水平提高的详细信息:






阅读更多






All Articles