杂谈(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是不同的两个物种,基因代码会告诉我们:晚上喝一杯啤酒、打飞机、玩游戏、看爽剧会比思考带来更多价值。至于对价值的定义,这是另一个话题了。

相关推荐
-睡到自然醒~5 分钟前
[go 面试] 前端请求到后端API的中间件流程解析
前端·中间件·面试
洛卡卡了13 分钟前
Sentry 都不想接,这锅还让我背?这xx工作我不要了!
前端·架构
咖啡の猫17 分钟前
Vue 实例生命周期
前端·vue.js·okhttp
JNU freshman31 分钟前
vue 之 import 的语法
前端·javascript·vue.js
剑亦未配妥32 分钟前
Vue 2 响应式系统常见问题与解决方案(包含_demo以下划线开头命名的变量导致响应式丢失问题)
前端·javascript·vue.js
凉柚ˇ35 分钟前
Vue图片压缩方案
前端·javascript·vue.js
慧一居士35 分钟前
vue 中 directive 作用,使用场景和使用示例
前端
慧一居士38 分钟前
vue 中 file-saver 功能介绍,使用场景,使用示例
前端
文心快码BaiduComate1 小时前
文心快码3.5S实测插件开发,Architect模式令人惊艳
前端·后端·架构
Kimser1 小时前
基于 VxeTable 的高级表格选择组件
前端·vue.js