幽默:程序员耍小聪明导致认知负担 - tef


有一种观点:未来编程系统发展应该以减少认知负担为主要目标,这个观点是好的,例如低代码开发工具等,更简单的编程语言等,但是必须认识到:解决认知负担是社会性的、是自然性的系统工程,或者说,我们创造的混乱源自我们自己的杰作。
我们创建的工具(如编译器)已经确实减少了认知负担(就像我们可以编写一个快速的 bash 脚本来完成一项平凡的任务),但它们也让我们可以创建一个更大的混乱(就像bash脚本一样)。
你可以构建一种语言,它奖励一些简单的概念并惩罚一些复杂的概念,但我们已经拥有有这些,它们被称为函数式编程语言,程序员不遗余力地在上面实现最多的鲁布·戈德堡机械(rube-goldberg) 装置来显示自己的聪明。

鲁布·戈德堡机械(Rube Goldberg machine)是一种被设计得过度复杂的机械组合,以迂回曲折的方法去完成一些其实是非常简单的工作,例如倒一杯茶,或打一颗蛋等等。设计者必须计算精确,令机械的每个部件都能够准确发挥功用,因为任何一个环节出错,都极有可能令原定的任务不能达成。由于鲁布·戈德堡机械运作繁复而费时,而且以简陋的零件组合而成,所以整个过程往往会给人荒谬、滑稽的感觉。美国漫画家鲁布·戈德堡在他的作品中创作出这种机械,故人们就以“鲁布·戈德堡机械”命名这种装置。 - 百度百科

股票交易者经常使用一个糟糕的软件并拒绝改变(banq注:这是股票交易系统非常弱智表现之一,每天打新都需要每天进去点击一下按钮,无法使自动设置进行),因为人为的挑战让他们感觉聪明和强大,我还想起了程序员如何经常使用 git 并分享咒语,就像我们正在努力施法一样。
换句话说,您可以创建工具和实践来减少编程的认知开销,但在实践中,程序员现在会更容易给其他人创建符合他们美学要求的认知负担的系统。
许多减少代码库中认知负担的东西似乎不为现代开发人员所欢迎,例如有一点冗余或重复,或将内容保存在一个文件中,这样您不必跳过整个代码库来修复问题。
编程工具更难使用,使得编写复杂代码的过程变得更加困难和昂贵,但这只是意味着人们就是为了弄得一团糟才感觉更聪明,这就无法使用技术手段解决这个问题了。
如果你让事情变得困难,就只能吸引最差的程序员(与你合作),或者你让事情变得更容易,而另一种最差类型的程序员是在创建困难时没有任何克制,这样他们就会觉得自己很聪明。
 
认知负担是有上下文的:sql 不容易使用,数据库是难以维护的产品,但它们在操作中确实有一些相对的一致性,并且用数千行代码替换更便宜的sql查询并不是很有帮助。
与此同时,Rails要求你从一个反恐精英玩家/赛车手角度看webapps应该如何工作,但这确实意味着你可以在开始之处能够大量生产应用程序,尽管替换 rails 应用程序通常比重写它更容易,因为隐含太多了逻辑。
另一个例子是 mvc:保持你的 db 和 html 代码不同的概念让生活更轻松,但最终我们将所有的 db 代码和所有的 html 代码收集在一起,每个功能更改都横切了 20 个不同的文件。
在某种程度上,在别人的大泥球下受苦确实会激励一些程序员发誓他们下次会做得更好,但在实践中,程序员会创造一个他们可以理解的大泥球,并假设其他人会发现它同样容易正如他们所做的那样。
我们不需要让编程变得更容易的开发工具,我们需要这样的程序员:不要从感觉聪明中获得价值;我们需要不想炫耀的程序员,需要关心让事情变得容易的人。
 具有讽刺意味的是,即使您确实以较低的认知开销制作了一个不错的代码库,也会在最简单的地方进行更改,直到人们用完易于更改的内容,然后您又回到了一个大泥球减少认知开销是一项持续的任务。
 
归根结底,“干净与肮脏”或“复杂与简单”或“好与坏”只是程序员用来描述他们自己的代码库体验的词,并断言它们是客观真理,而不是自己与事实博弈后的一种权衡选择。