杂谈(2023.11.27)

每个个体的视野是有限的,认知也是局限的,认识到这一点需要好多年

主题图由AI生成

今天我拜读了咱们部门各位前辈写的工具库并且自己尝试写了写polyfill,途中发现函数命名和函数结构也会在我构建抽象逻辑树时造成不可忽视的心智影响,这件事看似理所应当,但是却十分有趣,这里面似乎充满了设计的哲学。

下面会有两段功能相同的JS代码,您会更喜欢哪段代码呢?

typescript 复制代码
// segment 1
async function fn() {
  const res = { status: "fail", data };
  try {
    res.data = await ajax();
    res.status = "success";
  } catch (e) {
    throw new Error(e);
  }
  return res;
}

// segment 2
async function fn() {
  try {
    const data = await ajax();
    return { status: "success", data };
  } catch (e) {
    throw new Error(e);
  }
}

segment 1 是我在业务中请求后端数据时常用的结构,segment 2 是我使用copilotsegment 1重构后的产物。

他们到底有什么区别?

当我看到segment 2 的时候,我好像变成了在冬天的朝阳大街奔跑的哈士奇

  • segment 2segment 1是等幂的,输出和异常判断都取决于相同的因子ajax()
  • segment 2segment 1少2行代码
  • segment 2segment 1 少创建具有记忆压力的res对象
  • segment 2的模型:try or catch
  • segment 1的模型:try or catch -> return

当我去找这个方法在返回什么时

  • segment 1:返回了一个res -> 往上找 -> res是一个对象 -> 不同区块的try 对res的data和status进行了操作
  • segment 2:返回了一个含有data和status的对象 -> 同一区块的try 对res的data和status进行了操作

是的,他们具有相同的作用,但却造成了不同的心智代价。很明显,心智影响在代码评估前就已经决定了。

不妨在写代码前问问自己:这个方法有什么用?需不需要res作为"注释型变量"而存在?当我去阅读这一段代码时会不会过量消耗我的脑力?

AI在代码评估方面就像一位深耕了多年的码农老师,能够给出建议性的意见而且不太会带来额外的情绪副作用,这和大多数人不同,它很纯粹。

当我们谈论心智负担时我们在谈论什么?

AI告诉我,当我们进行认知活动时,比如学习、解决问题或执行任务,我们的大脑需要处理和管理各种信息和操作。心智负担(Cognitive Load)指的是在进行认知活动时,大脑所承受的认知负荷或压力。

心智负担可以分为三种类型:

  1. 内在负荷(Intrinsic Load):这是与任务本身的复杂性和难度相关的负荷。某些任务本身就很复杂,需要大量的注意力和思考,因此会增加内在负荷。

  2. 外在负荷(Extraneous Load):这是与任务环境或信息呈现方式相关的负荷。例如,复杂的界面设计、混乱的信息排列或不清晰的指导都会增加外在负荷。

  3. 生成负荷(Germane Load):这是与学习和理解任务相关的负荷。当我们努力理解新的概念、建立新的知识结构或将信息与已有知识进行关联时,会增加生成负荷。

心智负担的高低会影响我们的认知能力和学习效果。当心智负担过高时,我们可能会感到困惑、疲劳和压力,导致学习和问题解决的效果下降。因此,降低心智负担是提高认知效能的关键之一。这可以通过简化任务、提供清晰的指导、优化信息呈现方式等方式来实现。

代码编写和理解过程中可能会造成心智负担。代码本身可以是复杂的,包含许多细节和逻辑。在编写代码时,需要考虑语法规则、算法设计、数据结构等方面的知识,并将其转化为可执行的代码。这个过程需要集中注意力和思考,可能会增加内在负荷。

此外,代码的阅读和理解也可能会增加心智负担。当我们阅读他人编写的代码时,需要理解其意图、逻辑和结构。复杂的代码结构、命名不清晰的变量、缺乏注释等因素都会增加外在负荷。

为了减轻代码造成的心智负担,可以采取以下措施:

  1. 使用清晰、简洁的代码风格和命名规范,使代码易于理解和阅读。

  2. 提供适当的注释和文档,解释代码的意图和实现细节。

  3. 模块化和抽象化代码,将复杂的逻辑分解为更小的部分,降低内在负荷。

  4. 使用合适的工具和技术,如IDE的自动补全和调试功能,以减少编写和调试代码的负担。

  5. 不断学习和提升编程技能,以增强对代码的理解和处理能力。

当然,人类和AI是不同的两个物种,基因代码会告诉我们:晚上喝一杯啤酒、打飞机、玩游戏、看爽剧会比思考带来更多价值。至于对价值的定义,这是另一个话题了。

相关推荐
咖啡の猫38 分钟前
Shell脚本-for循环应用案例
前端·chrome
百万蹄蹄向前冲3 小时前
Trae分析Phaser.js游戏《洋葱头捡星星》
前端·游戏开发·trae
朝阳5814 小时前
在浏览器端使用 xml2js 遇到的报错及解决方法
前端
GIS之路4 小时前
GeoTools 读取影像元数据
前端
ssshooter4 小时前
VSCode 自带的 TS 版本可能跟项目TS 版本不一样
前端·面试·typescript
Jerry5 小时前
Jetpack Compose 中的状态
前端
dae bal6 小时前
关于RSA和AES加密
前端·vue.js
柳杉6 小时前
使用three.js搭建3d隧道监测-2
前端·javascript·数据可视化
lynn8570_blog6 小时前
低端设备加载webp ANR
前端·算法
LKAI.6 小时前
传统方式部署(RuoYi-Cloud)微服务
java·linux·前端·后端·微服务·node.js·ruoyi