当前位置: 首页 > 科技观察

简单代码的秘诀——删除显而易见的内容并添加有意义的

时间:2023-03-18 22:42:09 科技观察

有成为10倍开发人员的捷径吗?是否有这样一个神奇的秘密,可以帮助我们打开一个软件开发掌握和生产力的全新世界?怀疑论者常说:“当然没有捷径!每个人都需要不断练习才能变得更好!”没错,但是什么是软件生产力实践的专家呢?有没有一把钥匙可以产生很大的不同?事物?答案是肯定的!但即使我现在与你分享并逐字逐句地告诉你,你可能需要10年的时间才能有足够的经验来欣赏它的极致简单。是的,这就是发生在我身上的事情。我在学校时的编程老师用通俗易懂的语言向我解释了它,并通过一些示例代码逐步教我如何使用它。然而直到10年后,我才真正明白。但是现在,有了以往的经验,我深刻地理解了这堂课的意义,现在就分享给大家。这个秘密是平均生产力和10倍生产力之间的主要区别,就像杠杆作用一样,可以让我们将效率提高几个数量级。生产力提高10倍的秘诀是学习如何抽象。许多开发人员认为“抽象”是一个肮脏的词。或许你会经常听到这样的建议,比如“不要过早抽象”或者Python之禅中著名的“显式优于隐式”,意思是具体(Concrete)优于抽象。这些建议都很有价值,但也取决于问题的上下文。现代应用程序通常代码量很大。如果我们打印出前10大现代应用程序的源代码,那一叠纸将有摩天大楼那么高,因此您可以想象维护软件的成本是多么高昂。也就是说,你写的代码越多,成本就越高。抽象是简单代码的关键正确的抽象可以隐藏对当前上下文不重要的细节并减少执行相同工作所需的代码量(通常减少几个数量级),使代码更具可读性、适应性等可管理的可维护性。简单就是去除显而易见的东西并添加有意义的东西。——JohnMaeda《简单的法则》抽象不是单行道。它实际上由两个互补的概念组成:泛化——删除重复的(明显的)部分并将其隐藏在抽象之后。专业化——将抽象应用于特定的用例,只添加需要不同的东西(有意义的东西)。考虑以下代码:constdoubleList=(list)=>{constnewList=[];for(vari=0;ilist.map(x=>x*2);初级程序员认为他们必须编写大量代码才能产生大量价值。高级程序员明白不必编写任何代码的价值。想象一下,作为一名程序员,他在像JavaScript这样的编程语言中广泛使用map操作。映射操作抽象了被操作的数据节点的类型、包含数据的数据结构的类型以及每个数据节点的迭代逻辑。它提高了我在过去十年中开发的每个应用程序的效率。JeremyAshkenas使这些操作在JavaScript中流行起来,并通过开创性的CoffeeScript为许多重要的快捷语法奠定了基础,而这些语法现在被JavaScript视为理所当然。他开发了Underscore,它催生了Lodash(今天仍然是JavaScript中最流行的工具库之一)和Backbone,它在JavaScript中普及了MVC架构,并为Angular和React奠定了基础。JohnResig开发了流行且有影响力的jQuery,它形成了最大的可重用封装JavaScript模块(jQuery插件)集合,直到几年后出现标准Node模块和ES6模块。jQuery的选择器API影响如此之大,以至于它构成了当今DOMSelectionAPI的基础。当我对React组件进行单元测试时,我仍然几乎每天都从jQuery的selectAPI中受益。正确的抽象是一个强大的杠杆,可以显着影响生产力。抽象不是一个肮脏的词。模块、函数、变量、类——所有这些都是抽象形式,它们存在的全部原因是为了简化抽象和抽象组合。没有抽象就无法构建复杂的软件,甚至汇编语言也使用抽象——指令的名称、内存地址的变量、子程序(如函数调用)跳转到的代码点等等。现代软件是有用的多层蛋糕抽象,层给你杠杆。给我一根足够长的杠杆和一个支撑它的支点,我会举起整个地球。——阿基米德简单的关键是:如何减少我们正在生产的代码量,如何用更少的钱做更多的事情。一旦你掌握了这个,你就会成为一个10x程序员,我保证。