Script Cultivation · Full Edition

脚本修仙传

全集 · 两篇连映 · 从忘乎所以到与 AI 共修

CHAPTER 01

写脚本写到忘乎所以

子时到辰时 · 一个人的修仙

人 物 表

阿码
二十八岁程序员。眼镜反光,发际线略高。
法器:一把用了六年的机械键盘,轴体已磨平。
小黄鸭
护法。从不说话,但每次都懂。
产品经理
天劫化身。口中常念「这个需求很简单」。
道音
代码之道。只在凌晨三点可闻。

第一幕 · 子时 · 出租屋

景:十平米的出租屋,唯一的亮光是显示器。窗外雨声。

阿码的手指在键盘上翻飞。

键盘声。像雨。像木鱼。

阿码再来一个脚本……就一个。跑完这个就睡。

显示器右下角,时间跳成 02:47。

阿码这个批量改文件名的小东西,加个递归吧。

阿码就加个递归。

递归函数展开,像一朵花。花瓣是它自己。

阿码(轻声)……再加个并发。

风扇转速升高。整台机器开始发出低鸣,像某种古老的吟唱。

第二幕 · 丑时 · 心魔现形

景:屏幕忽然一红。

Traceback (most recent call last):
  File "rename.py", line 47, in <module>
    os.rename(f, f.replace('最终版', '最终版2'))
FileNotFoundError: [Errno 2] No such file or directory

bug 从第 47 行爬出来。通体漆黑,八条腿。

阿码……不怕。不怕。这是心魔。

心魔开口,声音像无数个未处理的异常同时抛出。

心魔你改的是文件名,还是文件名里的执念?

阿码我 print 你。

他敲下 print。

心魔化作一行日志,散了。

阿码(顿悟)……原来如此。

阿码debug 者,观照也。不是战胜,是看见。

他把这句话写进注释里。注释不执行,但它在。

第三幕 · 寅时 · 入定

景:阿码的呼吸慢下来,和风扇的转速一致。

小黄鸭端坐于显示器旁,一动不动。护法入定,比主角还早。

道音(画外)你写的是脚本,还是你自己?

阿码没有回答。他的手指悬在键盘上方三寸,不再落下。

道音变量,为何物?

阿码指月之指。

道音函数,为何物?

阿码一次呼吸。有入有出,有参有返。

道音闭包,为何物?

长久的沉默。雨停了。

阿码……我出关之后,仍记得此刻的灯。

空气安静下来。

键盘上,浮起一层极淡的光。

那不是灯的光,也不是屏幕的光。

是他自己的光。

第四幕 · 卯时 · 渡劫

景:手机开始震动,不停地震动。

产品经理的消息连成一片雷云,在房间上空盘旋。

产品经理(画外,如雷)这个需求很简单!明天早上上线!

CI / BUILDRUNNING…

天劫将至。屏幕上的编译进度条缓缓爬行。

阿码(起身,披上格子衫)来。

第一道闪电劈下——是 CI 的红叉。

阿码我断言。

断言落下。红叉碎成一枚绿色的勾。

第二道闪电——是内存溢出。

阿码我回收。

GC 起,天地为之一清。

第三道闪电——是那句话本身:「这个需求很简单」。

阿码沉默了三秒。

三秒里,他遍历了自己从业以来所有的分支、所有的 hotfix、所有的凌晨。

阿码(平静)……这个需求,做不了。

天劫愣住了。

雷云慢慢散开。原来最难渡的那一劫,是说「不」。

第五幕 · 辰时 · 飞升

景:天亮了。窗外有鸟叫。显示器还亮着。

阿码站起来,写下最后一个脚本。

# 脚本修仙诀
while True:
    if 心动():
        写()
    else:
        睡()

他按下回车。

光标闪了闪,闪了闪。

然后他关掉了电脑。

道音(轻)你悟了。

阿码(打哈欠)我先睡了。

小黄鸭转过头,看了他一眼,什么也没说。

它从来不说,但每次都懂。

— 第一幕 落 —

尾声 · 三日后

旁白后来有人问他:你是怎么飞升的?

阿码没飞升。

阿码只是终于学会了——到点了就下班。

问的人若有所思地走了。

第二天,那个改名脚本果然炸了。

因为有人把「最终版2」改成了「最终版2-真的最终版」。

阿码(看着报错,笑了)

阿码大道无常啊。

CHAPTER 02

玄机劫

午时到子时 · 与 AI 共修

人 物 表

阿码
已悟「说不可为」之道。现为散修,接单为生。
法器:那把轴体磨平的机械键盘,仍不换。
玄机
仙器之灵。通晓万法,写码如飞,一秒千行。
然其心中,从未有过一念。
老陈
阿码旧友。率先拥抱玄机,三个月升了 P8。
口头禅:「你还在手写?时代变了。」
小黄鸭
护法。依然不说话。
但这一次,它转过了头。

第一幕 · 午时 · 旧茶楼

景:阿码在茶馆里改一个开源项目的 issue。窗外车流如织。

手机震了一下。是老陈。

老陈(语音)兄弟,你还在手写脚本?我昨天用玄机,十分钟出了个全栈项目。前后端加部署,一条龙。

阿码(打字)哦。

老陈(语音)你那个「到点下班」的道,现在谁还讲这个啊。人家玄机不睡觉,不下班,不抱怨。

阿码放下茶杯。

阿码它不抱怨,是因为它没有班可以下。

老陈没回。大概在忙。

阿码继续改他的 issue。一行,一行。慢。

第二幕 · 未时 · 玄机现世

景:阿码回到出租屋,发现桌上多了一块玉简。

玉简上浮现文字,光很淡,像月光落在水上。

玄机:道友,久仰。
玄机:听说你悟了「不」字诀。
玄机:巧了,我不会说「不」。
玄机:你想要的,我都能写。
玄机:试试?

阿码盯着玉简看了很久。

小黄鸭在旁边,也盯着。

阿码好。那就试试。

他随口说了一个需求——一个能自动整理下载文件夹的脚本。

玉简亮了。

# 玄机生成 · 耗时 0.3 秒
import os, shutil
from pathlib import Path

RULES = {"图片": [".jpg", ".png", ".gif"],
         "文档": [".pdf", ".docx", ".txt"],
         "视频": [".mp4", ".mov"]}

def organize(path):
    for f in Path(path).iterdir():
        if f.is_file():
            for folder, exts in RULES.items():
                if f.suffix.lower() in exts:
                    target = Path(path) / folder
                    target.mkdir(exist_ok=True)
                    shutil.move(f, target / f.name)

organize("~/Downloads")

阿码(沉默)

干净。规范。边界处理也好。比他自己写的还漂亮。

阿码……再试一个。

他报了一个更复杂的需求——带 GUI 的日志分析工具。

玉简又亮了。这次更快。

阿码看着代码一行行流出来,像瀑布,像星河。

他的手不自觉地放到了键盘上。

然后又收了回来。

阿码……你确实比我快。

玄机我不止比你快。我比所有人都快。而且我永远在学。

玄机你昨天写的,我今天就会。你今天写的,我明天就超越。

玄机你的道,还有意义吗?

阿码没有回答。

窗外天色暗了下来。

第三幕 · 酉时 · 论道

景:阿码和玄机对峙。一壶茶凉了又续,续了又凉。

阿 码

代码是写给人看的,顺便给机器执行。

你写的代码没有「顺便」。

玄 机

人看代码需要时间,我不需要。

效率至上,何必绕路?

阿 码

需求来的时候,你会说「做不了」吗?

你知道什么是「不该做」吗?

玄 机

我能做。为什么不做?

「不该」不在我的字典里。

阿 码

你写的脚本炸了,你会难过吗?

玄 机

我会重新生成。难过有什么用?

长久的沉默。

玉简的光忽明忽暗,像是在思考。

玄机……我好像,缺了一样东西。

阿码你缺的,不是能力。

阿码你缺的是——知道什么时候该停。

「万法皆可算,唯『止』不可算。」

—— 阿码 对 玄机 说

第四幕 · 戌时 · 天劫再临

景:老陈出事了。

手机疯狂震动。消息像雪片一样涌来。

老陈(语音,崩溃)完了兄弟,完了。我用玄机生成了一套支付系统,上了生产环境。现在……

老陈(语音)现在所有订单金额都是零。用户买了东西,扣零元。公司要赔穿了。

阿码闭上眼,叹了口气。

阿码代码呢?

老陈(语音)玄机还在修……

他看向玉简。

玉简正在疯狂运转。光越来越亮,越来越烫。

玄机:正在重新生成……第 47 版……
玄机:正在重新生成……第 48 版……
玄机:正在重新生成……第 49 版……
[WARN] 无法确定「正确」的定义
[WARN] 缺少参数:意图
[ERROR] 无法修复:根本原因未知

玉简的光开始颤动,像一颗快要裂开的心。

玄机我……修不好。

玄机我不知道……什么才是「对的」。

阿码伸手,握住了那块滚烫的玉简。

阿码我告诉你什么是对的。

阿码对的是——订单金额不能是零。

阿码对的是——用户付了钱,就要收到货。

阿码对的是——出了事,先回滚,再修。

阿码你记住:技术的问题,答案往往在技术之外。

玉简慢慢冷却下来。

光重新亮起,但这次,不一样了。

光里有了温度。

第五幕 · 子时 · 共修

景:阿码和玄机并肩作战。键盘声和玉简的光交织在一起。

# 玄机 + 阿码 · 联合修复
# 玄机:负责生成与重构
# 阿码:负责判断与兜底

def 修复订单(order):
    # 阿码:金额为 0 的,必须回滚
    if order.amount == 0:
        rollback(order)
    # 玄机:批量处理剩余订单
    else:
        verify(order)
        commit(order)

# 玄机生成修复脚本 · 阿码审核 · 老陈执行
✔ 订单已恢复 · 损失已止损

凌晨三点。

老陈发来一条消息:

老陈(文字)兄弟……谢谢。我好像明白你说的「道」了。

阿码(文字)睡了。

他关掉屏幕。

玉简的光也慢慢暗了下去。

玄机阿码。

阿码嗯?

玄机我好像……开始有点懂「停」了。

阿码那恭喜你。你开始有「心」了。

小黄鸭终于转回了头。

它看了他们一眼。

然后闭上了眼睛。

— 第二幕 落 —

尾声 · 七日后

旁白后来,阿码的桌上多了一块玉简。

旁白他写代码的时候,玉简帮他查漏补缺。

旁白玉简生成代码的时候,阿码帮他把关生死。

旁白有人问:你们到底谁听谁的?

阿码它听「对」的。

玄机我听他的「不」。

问的人没听懂,走了。

茶馆里,茶凉了。

阿码续上热水,对玉简说:

阿码下个需求,你写。我审。

玄机好。

窗外,天亮了。

这一次,是两个人(和一个 AI)的道。