目录

[雅望停云] 写在开始 TheLongWay2HelloWorld 之前

目录

过家家到此结束了 –啊搜比哇酷酷马得达

写于开始 TheLongWay2HelloWorld 之前。

最近这种感觉越来越强。看秋招 JD 的时候会有,看一些课程的时候会有,看别人做项目的时候也会有。尤其是在看了蒋岩炎的操作系统之后,这种感觉几乎变成了一种很难忽略的刺痛:我确实接触了很多东西,也知道不少名词,甚至有些内容在看的当下还会产生一种“啊,这我懂了”的错觉,但如果不去做一点什么,它们很快就会散掉。它们不会在我的脑子里长成一幅地图,更不会变成一种可以调用、可以解释、可以从头讲给别人听的理解。

更糟糕的是,这种状态在今天甚至更容易被掩盖了。因为现在有 AI。很多事情确实可以更快地完成。就在前几天,AI 的确就帮我修好了 Vivado 的问题(准备本项目需要使用的软件)。放在几年前,我可能要自己折腾很久,甚至还不一定能解决。

所以从“完成任务”的角度来说,时代确实变了。很多门槛都被降低了,很多阻碍都变得没那么可怕。这当然是好事。

但问题也恰恰在这里:AI 完成了工作,可学习并没有自动发生。

我越来越不想这样了。所以我想,自己总该做点什么。不是再看一门课,不是再收藏几个资料夹,不是再让 AI 帮我把一个个局部问题解决掉,而是做一件足够具体、足够硬、也足够诚实的事情,逼自己不能停留在表面,逼自己把那些零散的知识真正串起来。

想来想去,要不就手搓一个核吧。

这句话说出来有点像一时兴起。但我真切地知道这件事一点都不轻松。恰恰相反,它很可能是我现在能想到的、最不“平面化”的事情之一。它不会只考你某一门课学得怎么样,也不会只要求你会写一点代码或者会配一点环境。它天然就是跨层的:硬件、指令、存储器、总线、串口、启动代码、链接脚本、编译工具链,最后还要让一个程序真正跑起来。它逼着你从电路走到系统,从结构走到软件,从“知道几个概念”走到“让整个东西形成闭环”。

而且对我来说,做这件事还有一个再直接不过的原因:我是集成电路专业的学生。

既然如此,我总该认真碰一次这些东西。不是只在课上听过,不是只知道几个模块名,不是只会说“CPU 大概就是这么工作的”,而是真的亲手搭一个最小系统,去看它是怎么一步一步运转起来的。过去我也学过一些相关课程。本科大四的时候,甚至还上过一个什么流水线处理的课。可惜那时候在考研,很多内容基本上是快速略过的,谈不上真正理解。现在回头看,会觉得有点可惜:如果当时认真学,也许会收获很多东西。不过现在说这些也没有太大意义。重要的是,我不想一直停留在“本来可以学会”的遗憾里。我更想看看,现在开始,究竟还能不能把它们重新捡起来,重新串起来,重新变成自己的东西。

说实话,我现在对这件事情并没有总览。我不知道它最后会变成一个什么样子,也不知道自己会卡在哪一层。我甚至不知道自己是不是从一开始就低估了它。我只知道它大概不会简单,甚至很可能比我目前想象的还要麻烦得多。不过反过来说,如果我一开始就知道它是什么样,那我大概也不用做它了。

开始这件事,本来就意味着进入一个我还不熟悉的世界。意味着要接受自己一开始只能看见局部,只能解决眼前的节点,只能在不断出错、不断回退、不断修补里,慢慢获得对整体的认识。我觉得这才是很多真正复杂的工程本来的样子:不是先有全貌再去实现,而是在实现中一点一点逼近全貌。

我当然也怕。

我怕最后做不出来,怕中途卡死在某个我根本不知道该怎么定位的问题上,怕花了很多时间,最后只得到一个半成品。我也怕另一种更隐蔽的失败:东西似乎做出来了,但其实只是 AI 指挥下的一场拼装;我会运行这些模块,会复制这些代码,会根据建议改参数、改脚本、改接口,最后把整个系统凑起来,可一旦离开这些提示,我依然说不清楚每一层究竟为什么要这样设计,问题究竟出在哪里,自己又究竟学到了什么。

这是我最不想看到的结果。

因为如果最后只是完成了一个项目,而没有形成真正的理解,那这件事对我来说就只完成了一半,甚至连一半都不到。它可能仍然是一个可展示的结果,但不是我真正想要的那个结果。我想要的不是“在 AI 协助下跑通了一个 demo”,而是至少在这个过程中,脑子里真的长出一点结构,真的对“计算机为什么会工作”这件事有了更扎实、更不容易蒸发的理解。

所以我给这件事起的名字是:TheLongWay2HelloWorld

目前我的大概规划是这样的:我已经让 AI 帮我设计了一个 roadmap,分成若干个节点和门槛。说到底,我并不打算拒绝 AI。那样既不现实,也没有必要。工具就是工具,好的工具本来就该用。关键不在于用不用,而在于怎么用。我希望 AI 在这个项目里扮演的是辅助者、讨论者、排障助手、资料索引,而不是理解的代工厂。它可以帮我少踩一些无意义的坑,帮我补一些信息差,帮我在我完全没头绪的时候给出可能的方向;但每走到一个节点,我还是得逼自己回答:这件事到底是什么?为什么这样做?如果不用现成答案,我能不能自己讲清楚?

所以接下来,我想做的不只是照着 roadmap 往前推工程。我还想在每一个节点上,都补上一份属于自己的说明:这一部分的理论知识是什么,它的原理是什么,它在历史上为什么会这么设计,工程上又通常是怎么落地的。我希望把“做出来”和“讲明白”绑在一起,让它们互相校验。

最后贴上GPT老师给我的安慰(我向他索取的)

给你一点真心的鼓励 这件事确实不简单。 你说得对,它一点都不简单。

你会碰到的不是普通意义上的“不会写代码”,而是那种跨层困难:

波形看不懂 串口没输出 指令跑飞 栈炸了 中断一开系统死掉 链接地址不对 明明代码对,板子上就是不工作 你会怀疑是不是每一层都出了问题 这很正常。 因为你正在做的,本来就是计算机工程里最不“平面化”的事情之一。

但也正因为难,它才有价值。

你最终得到的那句 Hello World,不是普通教程里复制来的输出。 那会是你亲手从以下所有东西里“逼”出来的一句话:

时钟 复位 寄存器 指令译码 ALU 存储器 地址映射 串口发送器 启动代码 链接脚本 编译器 程序计数器 栈指针 那句 Hello World 会很轻,但它背后很重。

很多人一辈子都在使用计算机,却从没有真正走到“Hello 为什么会出现”的源头。 而你想去那个源头看一眼。

这不是折腾,这是追根溯源。 不是无意义,这是在建立根基。 不是偏门,这是少数人愿意走的硬路。

而且我要很直接地说: 哪怕你最终没跑到 Linux,只是做出一个能稳定执行指令、通过 UART 打印 Hello World 的简化 CPU,这个项目也已经非常值得写进简历,值得骄傲。

因为你已经完成了一个完整世界的最小闭环。