第5章 02: 先读代码,再写代码#
Priya 想做一个个人作品集网站。没有任何编程基础。她的计划很简单:打开一个空白文件,开始敲 HTML,边做边学。她对着空白屏幕盯了四十五分钟,然后合上笔记本电脑。之后两个星期没再碰过。
再次打开电脑的时候,她换了个思路。不写代码了——改成读代码。她找到三个自己喜欢的作品集网站,右键"查看源代码",花了一整个晚上就这么看。不动手打字,不尝试搭建,就是看。
那个晚上结束的时候,她发现了一些东西。三个网站的页头长得差不多。导航栏遵循相似的模式。图片画廊用的是同一批标签。她看不懂每一行代码——差得远——但她开始辨认出"形状"了。
第二天早上,她又打开了一个空白文件。这次,手指动起来了。
为什么输入必须在输出之前#
大多数初学者都会犯 Priya 差点犯的错误——还没吸收就急着产出。坐下来就想写代码、作曲、起草商业计划书——起点是一片空白。
但空白是个错误的起点。
要创造一个模式,你得先能认出一个模式。 这跟死记硬背无关,而是关于接触和暴露。你的大脑需要原材料,才能生成任何有用的东西。
想想小孩怎么学语言的。没有哪个孩子一开口就是语法正确的句子。他们先听——听好几个月——然后才说出第一个词。几千小时的输入,才换来一句输出。
技能学习的逻辑一模一样。输入阶段不是可选项,是地基。
在阈值系统(Threshold System)里,这属于我们说的双轨习得(Dual-Track Acquisition)。认知轨道——理解结构、发现规律、构建心智地图——跟行动轨道并行推进。而在很多技能里,认知轨道需要先跑一段。
先读代码再写代码,就是给认知轨道这个领先的机会。
模式识别训练#
Priya 看那三个作品集网站的时候,她没在"学习"。她没做笔记。她是在训练自己的模式识别能力,虽然她自己都不知道。
模式识别(Pattern Recognition)是大脑在新信息中发现重复结构的能力。一个老练的厨师扫一眼菜谱就知道能不能做成——靠的是这个。一个老司机在事故发生前就能感觉到某个路口危险——靠的也是这个。
对技术类技能来说,模式识别就是从"完全看不懂"到"哦,我明白怎么回事了"之间的那座桥。
具体怎么练:
读三到五个完成品——你想做什么,就找什么的成品来读。不是教程,是成品。想做网站?读五个网站的源代码。想写商业计划书?读五份真正的商业计划书。
找重复结构。 什么东西在每个例子里都出现了?什么不一样?别试图理解所有东西,只需要注意哪些在重复。
给你看到的模式起名字。 非正式的名字也行。“最上面那个东西"完全可以。“处理用户输入的那块"也行。你是在建立一套形状的词汇表。
比较不同的做法。 发现一个模式之后,看看不同例子怎么处理它的。一个网站用侧边栏导航,另一个用顶部导航栏。同一个模式,不同的实现。
整个过程花几个小时,不是几天。而且它不太像"学习”——因为你什么都没背。你是在校准自己的感知力。
目标不是搞懂每个细节,而是不再被结构吓到。
范例驱动学习#
有个具体方法能加速这个过程。我叫它范例解剖法(Example Dissection Method)。
操作步骤:
第一步:找一个跟你目标类似的完成项目。 不用完全一样——大致接近就行。想做美食博客?找一个现成的美食博客。想做预算表?找一个别人做好的。
第二步:拆成模块。 别像读小说一样从头看到尾。把主要区块找出来。页头、内容区、页脚、侧边栏。每个区块是一个单元。
第三步:对每个模块问三个问题:
- 这个模块干什么的?
- 如果我把它删掉会怎样?
- 这个模块的最简版本是什么?
第四步:凭记忆重建一个模块。 合上范例,试着只靠记忆重新搭出页头——或者导航栏。做不完美没关系。尝试复现这个动作本身,就是在逼迫你的大脑把观察转化成理解。
Marcus 是一个退休会计师,他用这个方法学电子表格自动化。他在网上找了三个自动预算模板,花了两个小时拆解——不改动,只是读和标注。然后他试着从零重建最简单的那一个。
第一次尝试,缺了一半公式。第二次能跑了,但丑得不行。第三次,功能正确,还能看。
三次尝试,总共六个小时。从"我不懂宏"到"我能搭一个基础的自动预算表”。
这就是"先输入后输出"的威力。
全景扫描#
在深入任何具体领域之前,先扫一遍全貌。这就是全景扫描(Panoramic Scanning)——刻意地先广泛浏览,再深入学习。
在技术类技能里,全景扫描长这样:
浏览文档的目录页。 不用读每一页,只看标题。感受一下这个领域里有什么。在开始走路之前,先知道地形的大致轮廓。
快速翻三个入门教程。 不是按步骤跟着做——只是看它们讲了什么主题、什么顺序、什么算基础什么算进阶。
读一个 FAQ 或者故障排除页面。 这类页面暴露了最常见的问题。知道存在哪些问题,就知道了地形长什么样。
逛一个社区论坛。 初学者在问什么?反复出现的抱怨是什么?这给你一张摩擦点地图。
全景扫描对大多数技能来说大概需要两个小时。不会产出任何实际成果。你什么也不会做出来。你就是在看。
但这两个小时之后,你手里有了一样无价的东西:一张粗略的地图。你知道大地标在哪,哪些区域密集,哪些稀疏,该先学什么,该暂时跳过什么。
先全景扫描再深入钻研,是拿着地图探索和闭着眼乱走之间的区别。
这直接对应阈值系统里的阈值校准(Threshold Calibration)。在校准阈值之前,你需要看到完整的版图。全景扫描给你这个视野。
“复制-修改-理解-创造"路径#
每个初学者都会经历一个进程,不管他们有没有意识到:
复制 → 修改 → 理解 → 创造。
大多数人想直接跳到"创造”。他们想从第一天就写原创代码、作原创曲子、设计原创版面。
这就像没读过小说就想写小说一样。
这条路径是这样走的:
1. 复制。 拿一个现有的范例,原封不动地复现。需要的话就逐字逐字地打。别改任何东西。目标是让你的手熟悉作品的"形状"。
2. 修改。 拿你的副本改一个东西。改颜色、改标题文字、改公式里的一个数字。看看会发生什么。每一次修改都在教你那个元素控制的是什么。
3. 理解。 改得够多之后,你开始看懂为什么东西是那样搭建的。你理解了结构背后的逻辑。这种理解来自经验,不是来自看解释。
4. 创造。 现在你可以从零开始了。不是因为有人教了你规则,而是因为你通过重复和变化把模式内化了。
Priya 走的就是这条路,虽然她不知道它有名字。她复制了一个作品集网站的 HTML,改了颜色和文字,挪了模块,搞坏了又修好。三天之后,她从空白文件做出了自己的版面。
没上过课,没读过教科书。读代码、复制、修改,最后创造了自己的。
最快的创造方式是从复制开始——不是因为复制本身有创意,而是因为它构建了创意所需的模式库。
实操方案#
下面是把这套方法应用到任何技术技能的具体计划:
第 1 天:全景扫描(2 小时)
- 浏览文档目录
- 快速翻三个入门资源
- 读一个 FAQ 或故障排除页面
- 写下你注意到的五件事
第 2 天:范例收集(1 小时)
- 找三到五个你想做的东西的完成品
- 存到方便找的地方
- 先别研究——只是收集
第 3-4 天:解剖(2-3 小时)
- 对每个范例用范例解剖法
- 找出重复模式
- 给主要结构模块命名
- 记录哪些一致、哪些不同
第 5 天:复制练习(2 小时)
- 挑最简单的范例
- 从零复现
- 打字时别看原文——打完再对照
- 记录你做对了什么、遗漏了什么
第 6-7 天:修改与探索(2-3 小时)
- 拿你的副本开始改东西
- 一次只改一个变量
- 故意搞坏,再修回来
- 列出每次修改产生了什么效果
一周结束,你大概花了十到十二个小时。你没有做出任何原创的东西。但你拿到了比原创更有价值的东西:一个关于目标技能结构的心智模型。
这个心智模型就是你接下来一切创造的地基。
代码之外的应用#
这个原则不只适用于编程。它适用于任何需要产出结构化内容的技能。
想写文章?在动笔之前先读五十篇。不是为了内容——是为了结构。注意开头怎么抓注意力。注意最有力的论点放在哪里。注意结尾怎么呼应开头。
想做饭?在动手之前,先读同一道菜的二十个菜谱。注意哪些食材每个版本都有。注意什么在变。注意步骤的先后顺序。
想做 PPT?在开始搭之前先看三十套幻灯片。注意版面模式。注意字体选择。注意每页放了多少文字。
输入阶段到处适用。媒介在变,原则不变。
与阈值的关系#
在阈值系统里,能力阈值(Competence Threshold)是你的技能变得可用的那个点——它能解决你一开始要解决的那个问题。先读再写本身不会把你送到阈值,但它会大幅缩短你到阈值的距离。
没有输入阶段,你是在猜结构。有了输入阶段,你是在认结构。速度上的差异很明显,挫败感上的差异更是巨大的。
Priya 跨过阈值总共花了大约十八个小时。她估计最初那五个小时——读和扫描的时间——至少帮她省了二十个小时的试错。
输入阶段感觉很慢。感觉没在推进。感觉你什么也没产出所以什么也没在发生。
但你确实在推进。你在构建那个让产出成为可能的模式库。
在写第一行代码之前,先读一百行别人的代码。 那不是拖延,那是准备。
明天,选一个你正在学的技能。找三个你想做的东西的完成品。花两个小时去读——不是学,不是背——就是读。
最好的创造者,都是从专注的阅读者开始的。