Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

90年代的黄河路
0

好的,下面我将根据你提供的信息,结合我作为资深新闻记者和编辑的经验,撰写一篇高质量的新闻报道。

标题:代码“减负”:一场软件开发界的认知革命

引言:

在技术日新月异的今天,软件开发似乎已经成为一项高度复杂的智力挑战。然而,最近一篇名为《认知负荷才是关键》的文章,却如同一股清流,引发了技术圈的广泛反思。这篇文章的核心观点并非追逐最新的技术潮流,而是将目光聚焦于一个常常被忽视的根本问题:如何编写更易于理解和维护的代码,从而降低开发者的认知负荷。这篇“神文”不仅在Hacker News上迅速走红,还得到了OpenAI创始成员之一、前特斯拉AI主管Andrej Karpathy以及科技界领袖埃隆·马斯克的点赞,这无疑为这场关于软件开发本质的讨论增添了更多分量。

正文:

认知负荷:软件开发中的“隐形杀手”

文章作者Artem Zakirullin,一位拥有超过13年软件开发经验的架构师,将“认知负荷”这个概念推到了聚光灯下。所谓认知负荷,指的是开发人员在完成一项任务时需要付出的思考量和注意力。当我们阅读代码时,需要不断地将变量值、控制流逻辑以及调用序列等信息塞入大脑。然而,人类的短期记忆容量有限,一旦认知负荷超过了临界值,理解难度就会陡然上升。

Zakirullin将认知负荷分为两种:内在负荷和外在负荷。内在负荷是任务本身固有的难度,无法避免。而外在负荷则是由信息的呈现方式导致,例如代码的复杂程度、架构的晦涩难懂等,这些是可以被有效降低的。文章的核心主张正是:在软件开发中,应该尽一切可能减少外在认知负荷。

“减负秘笈”:告别“脑筋急转弯”式代码

那么,如何才能有效地降低外在认知负荷呢?Zakirullin结合开发中常见的“认知雷区”,给出了以下几点建议:

  1. 告别复杂条件语句: 避免编写过于复杂的嵌套条件语句,如if val > someConstant && (condition2 || condition3) && (condition4 && !condition5)。这种代码如同脑筋急转弯,让人难以理解。更好的做法是引入清晰的中间变量,如:


    isValid = val > someConstant
    isAllowed = condition2 || condition3
    isSecure = condition4 && !condition5
    if isValid && isAllowed && isSecure { ... }

    这样不仅提高了代码的可读性,也降低了理解的难度。

  2. 慎用继承,多用组合: 复杂的继承链会带来巨大的认知负担。当你需要修改某个类的代码时,可能需要追溯多层继承关系,才能理解其影响。相比之下,组合的方式更加灵活,也更容易理解。

  3. 深模块优于浅模块: 避免将代码过度拆分成多个小模块。虽然“方法应该少于15行代码”之类的说法很流行,但过度拆分会导致模块之间关系复杂,维护困难。深模块的特点是接口简单,功能复杂,能够隐藏内部的复杂性,提供更清晰的抽象。

  4. 谨慎使用新语言特性: 编程语言的新功能固然令人兴奋,但滥用新特性可能会带来认知负担。当你回头看自己写的代码时,可能需要花费额外的时间来回忆当时使用这些特性的原因。因此,应该在充分理解其含义和适用场景的前提下,谨慎使用新特性。

  5. 避免滥用分层架构: 过度分层架构可能会导致调用链过长,增加调试难度。在大多数情况下,数据访问层的抽象机制带来的好处远小于其带来的认知负担。分层架构只有在需要明确扩展点时才有意义。

  6. 正确理解领域驱动设计(DDD): DDD的本质是关于问题空间的思考,而不是解决方案空间的代码设计。许多团队在实践中将DDD变成了某种固定的文件夹结构、服务命名规则,这反而增加了认知负担。

认知负荷:衡量项目“友好度”的标尺

Zakirullin强调,认知负荷的高低直接决定了一个项目对开发者是否“友好”。对于熟悉项目的开发者来说,认知负荷较低,工作效率也较高。但对于新加入的开发者来说,如果项目充斥着晦涩的命名、复杂的模块关系和缺失的文档,他们会很快陷入困境。因此,应该定期评估新加入团队成员的“懵圈程度”,并以此为依据改进代码。

结论:

《认知负荷才是关键》这篇文章的出现,引发了技术界对于软件开发本质的深刻反思。它提醒我们,编写代码不仅仅是实现功能,更要关注代码的可读性和可维护性。降低认知负荷,不仅可以提高开发效率,还可以减少错误,并让软件开发变得更加人性化。这场关于“代码减负”的讨论,或许将引领软件开发走向一个更加注重开发者体验的新时代。

参考文献:

后记:

这篇报道不仅是对文章内容的总结,更是对软件开发领域的一次深度观察。在信息爆炸的时代,我们不仅要关注技术的发展,更要关注技术背后的人。如何让技术更好地服务于人,而不是让人疲于奔命,这是我们应该不断思考的问题。正如文章所说,代码不仅要让机器理解,更要让人理解,这才是软件开发的真谛。


>>> Read more <<<

Views: 0

0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注