程序员的认知负荷
作为一名专业程序员,我每天都在阅读和编写代码。我正在研究新项目,进行代码审查,使用遗留代码,阅读文档等。根据我自己和同事的经验,作为一名程序员通常比实际编写代码需要更多阅读。
无论是你自己的代码还是其他人的代码,当你打开一个文件时,你必须全身心投入。在你能够编写代码,做你自己的事情之前,你需要了解正在发生的事情。
几乎每天都要处理代码,找到使这个过程变得简单的方法很重要。为了尽量减少认知负担,它会尽可能地增加你的大脑。
使代码更易于阅读将使您能够更快更好地工作,并且还可以改善您的心理状态和情绪。
在认知心理学中,认知负荷是指在工作记忆中使用的心理努力的总量 - 维基百科
今天我想分享一些技巧,可以帮助你减少编码时的认知负荷。与最近的一些“视觉债务”倡导者相反,我不会谈论剥离你的代码库。我们将完全看待视觉方面:什么使代码难以阅读和推理,以及如何使代码更容易。
字体和间距
字体对我们的情绪有影响。Crew的人写了一篇关于字体如何让我们感受到的有趣内容。您选择的字体会对您的大脑上处理屏幕上文本的负载产生很大影响。顺便说一下,它不仅仅是字体,而且它的大小,线条高度和字母间距也起着作用。
排版本身就是一本关于书籍的主题。我鼓励您考虑当前的字体选择,以及它如何影响您阅读代码的方式。
根据我的经验,这里是一个不太好和更好的字体配置之间的比较。
折页
曾经使用控制器提供一些CRUD操作?有几种方法的课程?默认情况下折叠方法体可以在打开文件时更清晰地概述类。它可以更轻松地决定您要去的位置,而不是滚动和搜索。看一下下面的例子。
像IntelliJ这样的IDE可以默认折叠代码:Settings > Editor > General > Code Folding
。我默认启用它有点犹豫,但我可以向你保证,一旦你习惯它,这是一个了不起的功能。
与许多IDE和编辑器提供的文件结构导航器相比,它也更方便。这种方法允许您查看类的视觉结构,颜色和缩进。
你可能也想学习与折叠相关的键盘。在Mac上使用的IntelliJ,这些都是默认设置:⌘⇧+
,⌘⇧-
,⌘+
和⌘-
。
文档
文档和注释是澄清代码实际执行情况的好工具。此外,一些语言和IDE依赖于评论元数据来提供适当的静态分析。我们不应该过度使用它:docblocks和注释经常陈述显而易见的事情,这些事情已经通过阅读代码而得知。
经过几年的编程,我可以肯定地说,大约80-90%的评论是多余的。应该删除它们以清除视觉过载,但您还需要在其位置提供一些内容:
- 清楚地命名方法,变量,常量等。
- 使用正确的类型注释和定义
自我记录的代码比依赖评论更好。添加评论时我的经验法则是询问以下问题:“此评论实际上是否添加了比通过代码已有的更多信息?”。如果答案是否定的,则评论不应该在那里。
删除这些注释可以释放您的代码,为您提供视觉上的“呼吸空间”。
命名的东西
要记住的另一件重要事情是:如何命名?最好给变量一个更长的描述性名称; 而不是让它们尽可能短。
在编写代码的那一刻,简短而神秘的名字是有意义的; 但即使你写完它们几天后,它们也已经变得含糊不清。
最好多写一点,而不是读十倍于理解你过去写的东西。
以下是我的一个项目的几个例子:
- 我改名
createPage()
为createPaginatedPage()
。 $process
成了$pageRenderProcess
。testStitcher()
改为多种方法,其中一种叫做test_stitch_multiple_routes()
。
颜色
对许多人来说,这可能是一个敏感的话题; 虽然我想请你让我怀疑一分钟。我们都喜欢我们黑暗,酷炫的配色方案,但它们存在问题。
研究表明,人眼更适合在浅色背景上阅读暗文,而不是相反。早在80年代,当个人计算越来越受欢迎时,一个名叫Etienne Grandjean的人 就如何在屏幕上最好地阅读文本进行了广泛的研究。
事实证明,对于几乎所有人来说,浅色方案是更好的选择。
现在你的第一个想法可能是浅色方案实际上伤害了你的眼睛,但这更多地与你的屏幕亮度有关,而不是配色方案本身。
如果不降低屏幕亮度,浅色方案确实会导致头痛和眼睛疼痛。另一方面,亮度较低的屏幕与浅色方案相结合可以减轻您眼睛的负担,这使得长时间阅读代码不那么详尽。
我当然可以说出我想要的东西,但我能做的最好的事情就是挑战你一周的试训。我以前曾经挑战过很多程序员,而且他们中的大多数人在几天之后确实相信了一个轻松的主题。
由你决定!以下是我的代码现在的样子:
一定要让我知道挑战是如何进行的!您可以通过Twitter或通过电子邮件与我联系。
我今天列出的要点几乎与编写实际代码(编程逻辑,使用的模式等)无关。但是它们会对日复一日的大脑认知负荷产生影响。
他们在编写代码时会消除一些痛点。它们允许您更多地享受编程
via https://stitcher.io/blog/a-programmers-cognitive-load