05 / 历程
成长历程
从一段只能猜数字的脚本,到能迭代、能交付、能被别人接手的项目。 下面这些都留有痕迹:代码目录、设计文档、训练日志。
路径图
三条轨道,一条时间轴
三条轨道的区分不是按难易,而是按知识形态:能被讲授的(学科)、能被交付的(工程)、 能被怀疑的(通识)。纵轴不表示掌握程度,所以这张图不该被当成进度条来读。
博兰尼把知识分成可言说与不可言说两类:课程给的是前者,项目逼出后者。 图上刻意留着大片空白——空白不是没做事,而是还没有被验证的部分。 按波普尔的标准,一个说法若不能被反例推翻,它就不该被算作知识; 所以未验证的进度留在空白里,而不是画成已完成。
时间线
两年,八个节点
-
2025.09 · 大一上
从「智能猜数游戏」开始
第一段真正写完的程序,是大学信息课上的课程实验:输入、校验、提示大小、结束条件,全部自己补齐。 它不好看,但让我确认了一件事——把一个闭环跑通,比背下所有语法更有推进力。
-
2025.12 · 大一上
第一次系统梳理专业方向
写了一份约 2500 字的职业生涯发展报告,把人工智能岗位的能力模型拆开, 再逐项对照自己缺什么。这是第一次意识到:能力是可以被拆成条目的,拆开之后才好逐项补。
-
2026.01 · 大一上
Python 期末:两周内的集中补课
用一套期末题把一学期的语法、文件读写与异常处理完整过了一遍。 结论很朴素:语言本身不难,难的是把需求翻译成数据结构。
-
2026.05 — 06 · 大一下
RainbowCat:第一个完整项目
一个独立开发的基于 Pygame 的 2D 横版射击游戏,从 v2.0.1 迭代到 v2.1.0。 功能先跑通,随后遇到主文件膨胀、硬编码分散的问题,于是补了一份重构设计文档, 把模块切开;收尾时又写了交接文档——因为那时的我已经看不懂两周前的自己。
- 按职责拆分主文件,收敛散落在各处的硬编码
- 事件处理改为集中分发,暂停、Boss 战、游戏结束各自独立状态
- 交接文档记录启动性能瓶颈、资源加载顺序与已知问题
-
2026.08 · 暑假
两条并行的实践线
一边搭起基于 crawl4ai 的网页抓取环境,处理分页、去重与正文提取; 一边在独立的数学建模环境里做时间序列的格兰杰因果检验。 两件事的共同点是:结果必须先能被质疑,才值得被引用。
-
2026.09 · 大二上
FileSeek:把自己的痛点做成工具
与其每次写一次性脚本翻目录,不如做成可安装的包。 FileSeek 打包为 v0.1.3,注册
fileseek命令行入口, 依赖里带 sentence-transformers——检索走语义路线,而不是文件名匹配。- 打包为 pip 可安装包,用
console_scripts暴露命令行入口 - 检索依赖 sentence-transformers 生成向量,按语义召回
- 单独建虚拟环境,依赖与系统环境隔离
- 打包为 pip 可安装包,用
-
2026.09 — 10 · 大二上
PyTorch:从记住 API 到能验证结论
系统学了一遍 PyTorch 的训练流程,chp3 的项目笔记约 2 万字,逐块拆解数据、模型、损失、优化器与训练循环。 到 chp4 做 MLP 猫狗二分类时,重点已经不是跑通,而是确认这个结果能不能被复现。
- 固定
set_seed(1),把种子覆盖到随机数、权重初始化与 DataLoader worker - 逐轮记录损失与验证准确率,而不是只看最终值
- 30 个 epoch 两次训练的损失与验证准确率完全一致,连
num_workers=4的随机裁剪序列都可复现
- 固定
-
2026.09 — 至今
读与写:把理解变成可检验的东西
在 Obsidian 里积累了 20 篇哲学笔记,同时在上电路课。 我对「读懂」的定义是能写出一个反例——写不出,说明只是熟悉了措辞。
说明:以上时间取自本地文件的实际修改记录,部分条目为学期区间,不是精确的日志时间。
量级
留下的东西
下面三个数字只统计能落在磁盘上的东西:项目版本目录、笔记正文字数、笔记篇数。 它们不代表水平,只是把"做过"变成一个可以被检查的起点。
我刻意不写竞赛名次、不写「N 年经验」这类说法—— 前者无法核实,后者只是把时间长度当成了能力的替代品。
- 2 有版本迭代的自建项目
- 2 万字 PyTorch 项目笔记
- 20 哲学读书笔记
沉淀
从这些事里得到的三条
先跑通,再优化
RainbowCat 的重构发生在功能完整之后,而不是之前。 在没有可用版本时讨论架构,多半是在为想象中的需求设计。
文档是交付的一部分
交接文档不是流程负担,它逼我把「当时为什么这么写」写清楚。 写不清楚的地方,通常就是自己也没想明白的地方。
可复现才算完成
训练结果如果能被随机性改变,那它就不是结论,只是一次观测。 先固定变量,再谈效果。