刚开始学编程的时候,我也很自然地以为,这件事的重点是“学会”。
学会语法。学会框架。学会工具。学会怎么把一个页面写出来,怎么把一个功能接起来。
那时候会觉得,只要我知道得越来越多,理解得越来越清楚,能力应该就会慢慢跟上。可后来真正做起来,我才发现,事情不是这样。
编程当然需要学习。但真正难的,往往不是“知道”,而是:你能不能把东西跑通。
页面能不能起来。接口能不能接上。环境能不能配通。部署能不能成功。报错能不能真的解决。一个你以为自己懂了的东西,能不能在现实里成立。
这一阶段走下来,我越来越觉得,编程真正教会我的,不只是技术。它更像是在训练我面对一件更根本的事:结构。
一、一开始,我以为学编程是在学知识
一开始的理解其实很自然。会觉得编程像很多别的学习一样,重点是先把知识装进来。
比如:先知道 Next.js 是什么,再知道 Vercel 怎么部署,再知道 Supabase 怎么接,再知道环境变量怎么配,再知道路由、组件、接口各自怎么工作。
这种阶段很重要。没有这些,后面很多事情都无从谈起。但问题也恰恰出在这里。
因为“知道一点”,很容易制造一种错觉。会让人觉得,自己好像已经会了。一个概念听懂了,觉得会了。一段教程跟下来了,觉得会了。一篇文章看明白了,觉得会了。
可后来我慢慢发现,这里面有一个很大的落差:知道,并不等于成立。
你以为理解了,但一联调,问题就来了。你以为配置好了,但一部署,问题又来了。你以为只是个小改动,但一牵动依赖,后面又带出新的错误。
这时候才会明白,编程不是只在脑子里完成的事。
二、后来我发现,真正难的不是知道,而是跑通
“跑通”这两个字,看起来很朴素,但它背后其实很重。
因为它意味着:你不再停留在抽象理解里,而是要让一整套东西,在现实条件下真正连起来。
页面写出来,只是开始。接下来还有很多事在等着你:路由是不是对的,数据是不是通的,环境变量有没有配错,第三方服务能不能连上,本地能跑,线上是不是也能跑。
很多时候,真正让人卡住的,不是不会写一行代码。而是你以为事情已经差不多了,现实却告诉你:还没有。
比如页面跑不起来。比如部署失败。比如认证报错。比如依赖冲突。比如本地正常、线上异常。比如一处改动,带出三处连锁反应。
但也正是在这些地方,我慢慢开始明白:编程真正训练我的,不是“我会不会写”,而是“我能不能把一个不成立的东西,一点点修到成立”。
三、报错不是障碍,它是模糊被暴露出来的方式
以前看到报错,会本能觉得那是阻碍。又错了。又不通了。怎么还有问题。
可这阶段走下来,我越来越觉得,报错本身并不是最可怕的。更重要的是,它在暴露什么。
很多时候,报错真正暴露出来的,不是某一行代码写错了。而是:你有一块地方,其实并没有真的想清楚。
可能是逻辑没接好。可能是依赖关系没理顺。可能是配置理解得还不够。可能是你只是“照着做过”,但并没有真正掌握它为什么这样做。
所以后来我对报错的感觉慢慢变了。它当然还是烦,还是会打断节奏,还是会让人疲惫。但它不再只是一个讨厌的东西。
它更像是在提醒我:这里有模糊。这里还不成立。这里需要你把抽象的理解,继续压实。
所以我后来越来越相信一句话:能力不是“懂了”,而是被错误训练出来的。每次报错、修正、部署,都是把模糊压成清楚。
四、系统不会为情绪让路,它只会对结构给出反馈
这一点,可能是编程带给我最深的训练之一。
现实中,很多事情是可以被情绪遮过去的。你可以说自己已经很努力了,可以说今天状态不好,可以说我其实知道,只是还没发挥出来。
但系统不处理这些。系统不会因为你很认真,就默认你写对了。
它只会给出反馈:通了,还是没通。接上了,还是没接上。成立了,还是没成立。
这件事有时很冷。但也正因为这种冷,它反而特别诚实。它逼着我慢慢学会一件事:情绪可以被看见,但情绪不能代替结构。
你可以累。可以烦。可以怀疑自己。这些都很正常。但最后,问题还是要回到结构上来:这段逻辑到底哪里不成立,这个依赖为什么没接上,这个变量为什么没生效。
五、这一阶段,我真正学到的不是更像程序员,而是更少停留在抽象里
如果只是从表面看,这一阶段我当然也学到了很多技术上的东西。学会了更多工具。接触了更多框架。做过了更多部署。踩过了更多坑。
但如果再往深一点看,我觉得这一阶段真正重要的,不是我变得“更像程序员”了。而是我开始更少停留在抽象里。
以前很多时候,一个想法在脑子里说得通,我就容易觉得差不多了。现在不会那么快了。因为我越来越知道,一个东西在脑子里通,和它在现实里通,是两回事。
所以这阶段最珍贵的训练,不只是知识积累,而是:停止满足于“我大概懂了”,开始愿意把一个东西真正做出来、跑起来、修到能成立。
六、slowroot 想守住的,恰恰也是这种“跑通”之后的真实
所以后来我越来越觉得,编程这条线为什么对 slowroot 很重要,不是因为它看起来更技术,或者更厉害。而是因为它特别诚实。
它不断提醒我:不要停留在抽象里。不要停留在“好像明白了”里。不要停留在一种自我感觉良好的理解里。去做。去接现实。去接受反馈。去把那些没成立的地方修出来。
这和 slowroot 一直在意的东西,其实是同一件事。slowroot 不是追求更多概念,也不是不断增加表达。它更在意的是:一个东西,能不能真正成立。
一句话能不能成立。一个判断能不能成立。一个结构能不能成立。一种生活方式能不能成立。一个项目能不能成立。而“跑通”这件事,正好把这种在意压得很实。
不是嘴上说成立了。不是感觉成立了。而是:它真的能跑。真的能接。真的能承受现实。
结尾
一开始,我以为学编程是在学技术。后来我慢慢发现,技术当然重要,但更重要的是,它在训练我面对结构。
从“学会”到“跑通”,这中间隔着的,不只是经验和熟练度。更隔着一种很根本的转变:你愿不愿意离开抽象,进入现实,并接受现实给你的反馈。
这一阶段,编程真正教会我的,不是怎样更像程序员。而是怎样停止停留在“差不多懂了”的位置,把一个不成立的东西,一点点修到成立。
这也许就是我现在更愿意相信的成长方式:不是知道更多,而是让那些原本不成立的东西,在一次次报错、修正、部署、验证之后,慢慢变成真的。
而这,也是我现在理解的 slowroot:不是停在想法里,而是把想法一点点跑进现实。