当代码照进生活:一个程序员眼中的欲望陷阱

写代码写了这么多年,我一直觉得编程和生活是两个完全不相干的世界。直到最近读了《模仿欲望》这篇文章,我才恍然大悟:原来我的生活,早就被写进了别人的代码里。

vx公众号:TSing_addiction

01. 我们都在implements一个看不见的接口

做TypeScript开发的人都知道,interface是定义一个对象"应该长什么样"的蓝图。我们常常这样写:

ts 复制代码
interface IdealLife {
  fancyCar: boolean;
  luxuryWatch: boolean;
  weekendTravel: boolean;
  perfectSkin: boolean;
}

然后我们拼命让自己去"实现"这个接口,买各种东西,去各种地方打卡,仿佛不这样就不是个"合格的对象"。

上周我刷小红书,看到一个和我同龄的博主展示他的"程序员精致生活":苹果全家桶、最新款机械键盘、咖啡店远程工作照。我的第一反应不是"这很酷",而是"我怎么没有这些"。那一刻,我突然意识到:我正在试图implements一个从未明确定义、却无处不在的社会接口。

最可怕的是,这个接口不是写在代码里的,而是通过算法悄悄注入到我们脑海中的。就像TypeScript的类型推断,我们甚至没有意识到自己正在被定义。

02. 闭包里的无限循环

在编程中,闭包是指函数记住并访问它的词法作用域,即使这个函数在其作用域外执行。这听起来很技术,但其实我们每天都在经历:

那天晚上,我本来只想刷5分钟抖音,结果两小时后才放下手机。算法给我推荐了第一个露营视频,我点了赞;然后是第二个、第三个...每一个互动都被记住,用来决定下一个推荐什么。我就这样被困在一个闭包里,不断循环,无法跳出。

就像这段代码:

ts 复制代码
let timeSpent = 0;
function scrollFeed() {
  timeSpent += 15; // 每次刷15分钟
  if (timeSpent < 120) { // 两小时后才意识到
    scrollFeed();
  } else {
    console.log("天啊,已经凌晨1点了!");
  }
}

我们的注意力就这样被算法捕获,形成一个完美的闭包,而我们甚至不知道自己被困住了。

03. "精致穷"就像危险的类型断言

做前端开发的都知道,TypeScript中有一种操作叫类型断言------你告诉编译器:"相信我,这个变量就是这个类型"。有时候这很危险,特别是当你断言一个不可能的类型时。

ts 复制代码
// 明知工资不高,却断言自己能过上博主的生活
const myWallet = { balance: 5000 } as LuxuryLifestyleWallet;

在编译阶段(发朋友圈时),一切看起来完美无缺。但到了运行时(月底交房租时),就会抛出一个残酷的错误:Uncaught BalanceError: Insufficient funds for projected lifestyle

我有个朋友就是这样。他月薪1万,却买了3万的相机,理由是"博主都用这个"。结果是接下来三个月天天吃泡面。这不就是把BudgetReality强行断言为InfluencerBudget的后果吗?

04. 职场内卷:递归函数没有退出条件

在编程中,递归是很强大的工具,但必须有明确的退出条件,否则会导致栈溢出。现在想想,职场内卷不就是这样一个没有退出条件的递归函数吗?

ts 复制代码
function workHarder(colleagues) {
  // 看到同事加班
  const maxOvertime = colleagues.reduce((max, c) => 
    Math.max(max, c.overtimeHours), 0);
  
  // 于是你也加更长时间的班
  myOvertimeHours = maxOvertime + 1;
  
  // 但没有人问:为什么要加班?
  return workHarder(updatedColleaguesList); 
  // 没有退出条件,直到精神崩溃
}

我们团队就有这样的情况。一开始只有一两个人晚走,渐渐地,七点下班变成了常态,然后是八点、九点...没有人明确要求这样,但就像递归函数没有base case,我们陷入了无限循环。

最讽刺的是,项目进度并没有因此加快多少。就像算法复杂度,我们的努力是O(n²),但产出只是O(n)。这种内卷,本质上就是一段写得很烂的代码。

05. 重写人生代码

意识到这些问题后,我开始尝试"重构"自己的生活代码。这不是件容易事,就像重构一个老旧的系统,处处都是隐患。

首先是依赖注入的问题。以前我的消费决策严重依赖外部注入:小红书推荐、博主种草、同事攀比。现在我尝试这样写:

ts 复制代码
class MyLife {
  private coreValues = ['growth', 'health', 'authenticity'];
  
  decidePurchase(item: any): boolean {
    // 不再依赖外部注入
    return this.coreValues.includes(item.value) && 
           this.budget.allows(item.price);
  }
}

其次是打破那个闭包。我给自己装了个屏幕时间管理app,设置每天刷短视频不超过30分钟。第一次看到自己一天刷了4小时短视频时,我惊呆了。这就像在调试时突然看到一个函数被调用了几百次------你必须找出为什么循环停不下来。

还有很重要的一点:接受自己不是泛型。TypeScript中有泛型,可以适配各种类型。但生活不是代码,我们不必成为"通用模板"。我开始允许自己:

  • 用便宜的键盘写代码(只要它好用)
  • 周末在家休息而不是去网红地点打卡
  • 穿舒适的衣服而不是"程序员该穿"的潮牌

06. 从any到明确类型

TypeScript最强大的功能之一,就是将JavaScript的"any"世界变成明确类型的系统。我们的人生也需要这样的转变------从"别人怎么做我也怎么做"(any)到"这是我真正想要的"(明确类型)。

以前,我的消费决定就像这样:

ts 复制代码
// 以前的我
let wantToBuy: any = trendingOnXiaohongshu;

现在,我尝试这样:

ts 复制代码
// 现在的我
let wantToBuy: unknown = trendingOnXiaohongshu;

function isRealNeed(item: unknown): item is GenuineNeed {
  return (
    typeof item === 'object' && 
    'solvesMyActualProblem' in item && 
    item.solvesMyActualProblem
  );
}

if (isRealNeed(wantToBuy)) {
  buy(wantToBuy);
} else {
  ignore(wantToBuy);
}

这种转变并不容易。有时候看到同事换了新手机,我还是会心动;刷到精致生活的内容,依然会感到焦虑。但至少现在,我有了一个"类型守卫"来检查这些欲望是否真实。

最后

作为一个程序员,我习惯了相信代码是理性的、有逻辑的。但我没想到,我们的欲望和行为,也早已被写入了某种看不见的代码中。

这篇文章不是要批判所有消费或所有社交媒体的使用。就像代码本身没有好坏,关键是谁在控制它,以及它服务于什么目的。

当我开始用程序员的眼睛观察生活,我发现自己不再那么容易被算法操控。当我看到小红书推送"必买清单",我会想:"这是callback hell,我不能陷入这个异步循环。"当同事炫耀新买的奢侈品,我会提醒自己:"不要进行不安全的类型断言。"

或许,理解这些"代码"就是夺回控制权的第一步。就像我们重构一段混乱的代码,生活也可以被重构成更真实、更符合自己核心价值观的样子。

下次当你想买一个东西、做一个重要决定,或者感到莫名焦虑时,不妨问自己:这真的是我的需求,还是我在implements别人的接口?我的人生代码,到底是谁在编写?

写完这篇文章,我要去关掉手机通知,好好享受一个没有算法干扰的周末。毕竟,最好的代码,是能服务于人,而不是让人服务于它的代码。

相关推荐
Aotman_2 小时前
Vue el-table 字段自定义排序(进阶)
前端·javascript·vue.js·elementui·前端框架·ecmascript
Charonrise2 小时前
完美解决Microsft Edge浏览器双击无法打开 双击无反应 无响应 不能用
前端·edge
华仔啊2 小时前
这 5 个冷门 HTML 标签,让我直接删了100 行 JS 代码!
前端·html
西维2 小时前
大屏、看板必备的丝滑技巧 — 数字滚动
前端·javascript·动效
前端工作日常2 小时前
我学习到的AG-UI的功能:全面的交互支持
前端
LawrenceLan2 小时前
Flutter 零基础入门(十三):late 关键字与延迟初始化
开发语言·前端·flutter·dart
深耕AI2 小时前
【wordpress系列教程】03 网站页面的编辑
开发语言·前端
前端达人2 小时前
2026年React数据获取的第六层:从自己写缓存到用React Query——减少100行代码的秘诀
前端·javascript·react.js·缓存·前端框架