发布于 2026-01-06 1 阅读
0

面向认知编程的 DEV 全球展示挑战赛,由 Mux 呈现:展示你的项目!

认知导向编程

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

编程令人着迷。作为程序员,我们拥有巨大的力量。我们可以创造出规模和功能几乎无限的机器。我们的创造物可以带来巨大的乐趣和实用价值。在代码的世界里,一切皆有可能。

我们程序员终究还是人。我们是脆弱的、不受控制的机器,拥有柔软的身体和更加柔软的思维。我们开发软件的能力取决于我们驾驭自身有限的身心资源的能力。

编程范式提供了一些宽松的规则集,帮助我们合理利用这些资源。我们可以采用函数式编程、面向对象编程、数据导向编程或其他编程方向。这些范式已经非常成熟,并且运行良好。

它们是构成庞大编程技巧、模式、潮流和原则体系的顶层概念。探索新的代码编写方式,并找出能够帮助我们每个人最有效地实现目标的方法,会带来极大的乐趣。

科学为我们指明了方向。

什么应该驱动这种探索?我们如何才能知道是否应该在最新的项目中采用数据导向的方法?这个决定通常被认为是一个计算机科学问题。哪种范式最符合系统的需求?

游戏程序员通常要求程序在 16 毫秒或更短时间内响应用户输入。为了尽可能多地将数据保存在 L1 缓存中,牺牲一些代码可读性,采用高度优化的热循环或许是更明智的选择。也许应该考虑使用面向数据的 C++?

Web程序员或许有更大的发挥空间,客户端进度动画和普遍接受的网络延迟使得20-150毫秒的响应时间成为可以接受的范围。他们或许应该专注于提升代码的可读性。或许可以考虑使用面向对象的Ruby?

然而,选择很少如此泾渭分明。最新的潮流、框架和明星程序员的宣言可能会将我们引向不同的方向。

先思考,后构建范式

我们应当以自身的认知倾向为指导。每个人的思维方式都不同。你的大脑发育方式与我的不同。不同的经历、训练和遗传倾向共同影响着我们理解代码的方式。

这有点抽象。让我们来看一个实际例子。考虑一个类定义。多长才算太长?200 行?1000 行?如果我们把多个类混合到一个文件中呢?

你或许已经习惯处理数千行长的文件。起初,我也曾目睹过这种能力,并效仿。但多年后,我意识到自己无法掌控如此庞大的数据。现在,我的目标是每个文件最多不超过 150 行,并且每个文件只包含一个类定义。

如果定义超过 150 行,我会积极考虑将其拆分成更小的、可组合的部分。在编写程序时,我一次最多处理两个文件,研究数据在两个文件之间的流动。这样,我始终最多只处理大约 300 行代码。

对你来说,这听起来或许很荒谬。你可能拥有庞大的文件,并且能够轻松地浏览它们。关键就在这里:我们每个人都不同,我们必须努力以一种能够支持我们自身认知的方式来编写代码。不妨称之为“面向认知的编程”。

团队认知

在团队中,这似乎会带来一些问题。如果你的首席技术官喜欢使用大型文件,而你却不喜欢怎么办?我认为,在一个配合默契的团队中,领导力体现在设定目标和标准上,而不是设定方法上。

也就是说,理想情况下,你会被告知需要做什么以及需要在哪些范围内完成,而不是如何去做。在这种环境下,你可能会采用团队通用的代码风格指南。你可能会有诸如“禁止使用全局变量”和“禁止使用可变状态”之类的规则。

然后,在这些限制范围内,您可以专注于为您的代码提供可维护、合理且清晰的公共接口。在这些接口背后,并在始终遵守既定限制的前提下,您可以倾向于优化自身的认知体验。

你的优化心智模型

“心流”的概念已被广泛研究。认知导向编程可以被视为“心流”所需条件的一个子集。从最高层面来看,它可以被视为寻找自身高度优化的心理模型。

你的大脑容量有限,存在着严格的限制。你的短期工作记忆一次可能只能存储大约七个“对象”。你的长期记忆或许能存储指向你那20万行程序中每一个角落的指针,但在任何时刻,你都只能根据其中一小部分代码进行推理。

如何构建有限的引用至关重要。不妨将工作内存想象成你自己的 L1 缓存。理想情况下,你的程序以极快的速度处理缓存数据,完全不需要访问速度相对缓慢的 RAM。在最佳状态下,你的大脑会快速处理存储在工作内存中的概念。你能够以极快的速度和极高的精度进行推理。

实际上,我们的实际程序需要访问内存(RAM)。更糟糕的是,它们可能还需要访问持久存储。更糟糕的是,它们可能还需要通过网络协议栈进行漫长的传输。这同样适用于我们的思维模型。在我们的比喻中,内存可能代表代码库中的其他部分。存储可能引用某些文档。网络 I/O 可能代表与其他人进行通信。

所有这些操作都至关重要。优化它们能让你拥有更多时间进入心境平和的状态,优化后的思维模式将促进高效、可靠且合理的代码流淌。就我个人经验而言,这种感觉与演奏乐器非常相似。手指在琴键上翩翩起舞,永无止境,充满韵律,甚至可能带有某种精神层面的体验。

寻求涅槃

找到适合自己的认知模型需要时间。尝试新的模式,广泛阅读,观察一些非常成功的程序员是如何工作的。这并不是说你应该模仿他们,而是因为他们的模型或许能为你自身的模型提供一些启发。

反复尝试,不断纠错。构建、破坏、修改系统。同时,观察自身。你是否感到如鱼得水?还是感觉自己正竭力掌控程序?你是否能立即找到实现新功能、修复漏洞或提升性能的途径?还是苦苦思索如何继续?

这些问题将帮助你找到与自身认知相契合的模式。不要将你的模式强加于人,也不要想当然地认为他人的模式对你适用。代码是你这只脆弱的哺乳动物改变世界的工具。努力让它成为你自己的工具吧。

文章来源:https://dev.to/hugh_jeremy/cognition-orient-programming-3359