这季度最后一天,我把 M1 MacBook Pro 的盖子合上,电池显示还剩 47%。过去三个月,这台机器跟着我跑了 87 个 Python 脚本,处理了超过 300G 的体育场馆会员数据,还顺带编译了 4 个微信小程序。显卡?我连它有没有独立显卡都快忘了。现在这行情,一张 3080 比我整台电脑都贵,去他的。
去年这时候我还在为办公室租金和五个员工的社保发愁。扩张就是个陷阱,真的。你以为流水翻倍就是成功,结果发现自己成了全公司最贵的销售兼最累的客服兼最憋屈的财务。每个月的 15 号像一道催命符,不是催客户款,是看着银行扣款短信心绞痛。交付?那更是个无底洞。客户觉得“不就是个后台管理系统吗”,手下的小孩觉得“老板这个需求不合理”,我卡在中间,白天改 Axure 原型,晚上安抚程序员情绪,半夜自己偷偷写两行 SQL 把坑填了。自由?那段时间我连下楼抽根烟都觉得是罪过,手机一响就心悸。
疫情把一切都打回原形,也给了我一个体面的台阶下。团队散了,项目结了,或者烂尾了。关掉公司银行账户那天,我坐在空荡荡的出租屋里,感觉不是失落,是他妈如释重负。钱是少了,但命回来了。我开始意识到,过去引以为傲的“管理能力”、“商业嗅觉”,在不可抗力面前屁都不是。只有长在自己身上的技能,和一副能扛得住造的躯体,才是硬通货。
所以 Q1 我干了两件事:把技术栈从“广度”转向“深度”,把身体从“亚健康”拉回“战斗状态”。我不再研究怎么管人,我研究怎么让 M1 这块统一内存和 8 核 GPU 替我打工。体育健身行业的客户数据清洗,用 pandas 默认读?慢死。我拆开看,发现瓶颈在 I/O 和重复的类型转换上。上 pyarrow 引擎,用 dtype 预定义,把该用 category 的绝不留给 object。一个 2G 的 CSV,处理时间从 3 分钟压到 40 秒。这就叫榨干。
多线程?M1 的能效核不是吃素的。我用 concurrent.futures 的 ThreadPoolExecutor,把那些不需要 GIL 锁的、纯 I/O 绑定的任务——比如批量调用第三方场馆 API 拉取课程表——拆成碎片扔进去。看着活动监视器里 8 个核心齐刷刷地亮起来,比看银行卡余额增长还舒坦。API 有频率限制?那就加指数退避的重试机制,用 tenacity 库,配好 stop_after_attempt 和 wait_exponential。代码稳得像块石头,扔出去就不用管了,它自己会爬回来。
身体上更简单,也更残酷。戒了所有含糖饮料,午饭就是鸡胸肉沙拉,晚上雷打不动 40 分钟划船机。一开始饿得眼冒金星,看见碳水走不动道。坚持了三周,体脂掉了 4 个百分点,以前下午三点必来的困劲儿消失了。最直观的感受是,深夜调试代码的时候,脑子是清的,手不抖。这投资回报率,比买什么理财都高。
世界是变了,疫情没完没了,大厂在裁员,元宇宙和 NFT 吵得沸沸扬扬。但我好像找到了自己的节奏。我不再焦虑“下一个风口在哪”,我焦虑“手上这个脚本还能不能再优化 10%的效率”。这种焦虑是扎实的,有解的,敲完代码跑一遍,优化成功与否立刻见分晓。比琢磨人心、猜测市场实在一万倍。
Q2 的主题我定好了,叫“极限自愈”。技术层面,我要死磕 M1 的 Metal API,看看能不能用 GPU 加速一些矩阵运算,哪怕是用 numba 的 experimental 功能试试水。身体层面,准备挑战第一个半程马拉松。听起来有点中二,但我觉得,把“压榨”和“修复”这两个动作都推到极限,才能摸清楚自己这副皮囊和手里这台机器的真实边界在哪。快乐?现在每天最快乐的时候,就是下午六点,合上电脑,换上跑鞋,走出门的那一刻。什么也不用想,只管往前跑。














