刘韧

爸,我这算是会编程了吗?

两年前,养正刚到小米实习。他师傅忙,递给他一本 Go 语言手册,让他自己看。
看了几天 Go 语言手册,师傅交给养正一个任务:修改离职程序员丢下的程序。那是一个CDN的报警通知程序:大事一定要通知到,小事不要反复通知惹人厌烦。养正发现了原程序的几个错误,订正、测试、模拟,来回折腾几次,最终上线。
在这之前,养正没上过一堂编程课。
往回倒。2024年养正想通过提前招生进新加坡理工学院。他需要向学校展示自己对人工智能和数据科学的强烈兴趣。养正给面试官展示了一个任意头像换德军军装的程序。养正把程序部署到网上以后,让我做第一个测试,我上传头像后,真的看到了自己穿德军军服的样子。
换军装程序由另一位师傅带着做。师傅教养正配置环境、调用程序库、使用 Python。
养正的 Python 从传智播客的视频教学起步。传智教育董事长黎活明把视频转给我,我转给养正。到 CSDN 拜师之前,养正看了一晚传智Pytho教程。
养正后来重新架构了CDN报警通知程序。他一边写,一边问我:
“爸,我这算是会编程了吗?”
答案在他自己手里。能读手册,能改别人写的程序,能看出原程序错在哪,能测试,能上线,能重写一遍。会编程不是能生成代码,是能判断一段代码对不对、错在哪、该怎么改。这几件事,养正都做了,只是没人告诉他这就叫会。
人工智能出现以后,这个问题反了过来:不会,也可能以为自己会。

学编程AI帮不忙

2023 年,多伦多大学等机构的研究者发表了一项对照实验。69 个 10 岁到 17 岁的孩子参加实验。他们都没有文本编程经验,不过 64 人用过 Scratch 等图形化编程工具,27 人上过编程课。实验持续 3 周,共 10 次课程。研究者把孩子分成两组:33 人可以用人工智能生成代码,36 人不可以。
训练期间,在独立编写程序的任务中,使用人工智能的一组平均答对 80.1%,另一组答对 44.4%。人工智能撤掉后,研究者在第二天再考一次:61.3% 对 62.9%。一周后再测,使用过人工智能的一组高出 9.3 个百分点,但这个差距没有通过统计显著性检验。
研究者还看见另一件事。使用人工智能的学生发出了 1646 次请求,其中 32% 照抄题目原文。在使用人工智能完成的任务中,49% 的最终代码没有经过任何修改。
这项实验没有发现两组在独立编程成绩上有显著差异,也没有发现人工智能妨碍学习。
实验分开了两种成绩。一种是工具在手时,人和工具一共完成了多少。另一种是工具撤掉以后,人自己还剩下多少。
论文里还有一条发现,全篇最该记住这一条。Scratch 前测成绩高的那批孩子,如果训练期用过人工智能,一周后的留存测验显著更好。底子薄的那批,用与不用,事后没有差别。
人工智能落在谁手里,结果不一样。这条发现正好落在本文那个次序上:人工智能放在第一步还是放在第二步,差别在这里。

学编程:别为了转码和锻炼逻辑

第一,为了找工作。到 2025 年 9 月,美国 22 岁到 25 岁的软件开发者就业人数比 2022 年底的峰值下降近 20%。至少在美国,年轻软件开发者的就业正在收缩。下降是事实。人工智能是不是主因,还是一个研究问题。斯坦福那份报告自己也说,没有看到全经济范围的普遍岗位替代。我不能担保今天学会,明天就能换到工作。
第二,锻炼逻辑思维。这句话不说明锻炼哪一种能力、怎么测量,就无法检验。无法检验的理由,不能当理由。
能确定的只有一条。人工智能把想法变成第一版可运行程序的成本压得很低,值钱的部分因此挪到了另一头:想做的事对不对,做出来的东西合不合用。
人工智能知道你说出来的要求,不知道你没说出来的那些:数据有多大,出错时该怎么提示,中文和英文要不要分开处理。它也不替你承担判断错了的后果。要判断对不对,你得自己动手做过。

第一步:语法,4 到 6 周

从 Python 入门。3 个理由。装完就能用,一行可以看见结果,不必先跟复杂的构建工具搏斗。Python 语法接近英语,容易读。今天许多人工智能工具首先提供 Python 接口。
只学 6 样,一样不多。这 6 样覆盖了程序最基本的动作:存住数据,分出岔路,重复动作,打包动作,管好一批数据。绝大部分程序的核心逻辑拆到底,就是这几种动作的组合。
变量。给一个值起名字,后面反复使用:
单价 = 35
条件。让程序在两条路中选择一条。余额不够,就不扣款。
循环。把一件事重复做,直到条件不再成立。这是编程与按计算器的分界:你写一遍,机器做一万遍。
函数。把一组动作装在一起,起一个名字,以后直接调用。程序长起来之后,函数帮助你分开各项工作。
列表。一串按顺序排列的东西,按照位置取用。
字典。一组互相对应的东西,按照名字取用。给出“张三”,取出张三的电话。
新手很快会撞上一道坎:眼前这件事该用列表,还是字典?
问自己两句话。顺序要不要保住?取用时按照位置找,还是按照名字找?
暂时不学面向对象,不学装饰器,不学框架。你会在别人的代码里撞见它们,那时候再查,不必提前预习。
前面那 69 个孩子,10 次课合计十几个小时,学的是变量、运算符、数据类型、条件、循环和数组,还有输入输出。他们手边有文档,有例题,有老师逐题改错。学完,能写、能改小程序。你自学没有老师改错,时间要给足。每天 1 小时,4 到 6 周。这个刻度按我的经验来,不是那项实验算出来的数字。
验收标准只有一条:不查资料,不问人工智能,写一个程序,统计一段中文文本中每个汉字出现的次数。写得出来,过。

代码底子

有人会说:挡住新手的从来不是不懂变量和循环,是不会把一件现实的事拆成一步一步;语法让人工智能写就行了。
前半句对。后半句不成立。
拆解这件事,听讲学不会,看书也学不会,只能靠把一件事真的写成能跑的程序练出来。而要把拆出来的步骤写下来,你手里得有词。那 6 样就是词。词不够,你连自己拆得对不对都说不清楚,更谈不上去看人工智能拆得对不对。
所以下面第二步那件“自己真要用的东西”,练的正是拆解。第一步不是拆解的替代品,是它的前提。

第二步:做一件自己真要用的东西,2 到 3 个月

不要只做教程里的项目。教程适合练手,问题是只做教程:做完就扔,最后只记得自己跟着敲过。
养正那个换军装程序,要拿给新加坡的老师当场演示。演示要通过,程序必须真的能运行。有一个真实的验收人在等,写法便不一样。
你手边也有这种题目。把几十个文件按照日期改名。把银行流水导出来,算清每个月的钱花在哪里。把网页上的表格取下来,存成表格文件。
选题两条标准。做完以后,你每周真的会用。数据在你自己手里:本地文件、自己能导出的表格,不要一上来就挑需要别人给权限和接口的题目。
这一步开始使用人工智能,同时立 3 条纪律。
第一,先自己写。写到卡住,卡满 20 分钟,再问人工智能。
第二,人工智能写完,你再手敲一遍。养正 2026 年才开始用 Claude 写代码,他的用法就是这样:让 Claude 先写一遍,看完,再按照自己的习惯和风格手敲一遍。这一遍不是抄,是把别人的判断过一遍自己的手。敲不下去的那一行,就是没有看懂的那一行。
手敲完再加一道。合上人工智能给的答案,把同一个功能重写一遍;或者主动改掉一个条件,看程序会不会照你预期的那样变。抄一遍也能制造“我懂了”的错觉,改一处不会。
第三,每周留一次断电练习。关掉人工智能,用 1 小时写一个小东西。这 1 小时,是你手里那把尺子。

多测试少假设

2025 年 7 月,研究机构 METR 发布过一次对照实验。16 位资深开源开发者完成 246 个真实任务。这些开发者平均已有 5 年项目经验,做的是自己熟悉的大型开源项目。使用 2025 年初的人工智能工具时,开发者实际慢了 19%。开工之前,他们预测自己会快 24%;实验结束以后,他们仍然认为自己快了 20%。
这不是一项学习实验,它测的是完成任务的时间,不是学会了多少。它也只适用于当时的工具、这批开发者和他们熟悉的大型项目。它证明的是另一件事:主观感受不能代替测量。老手对自己有没有变快都估反了方向,你对自己学到哪里的感觉,同样不能当数。所以要关掉人工智能,独立做完一次。

第三步学Git

到这一步,才轮到 Git。
Git 是版本控制工具。每改完一段程序,你保存一个版本。Git 记下这一版与上一版有哪些差别。
程序改坏了,可以退回以前的版本。两个月后再回来,可以看见当时改了什么。
先学 6 条命令,都要写全。
git init 建一个仓库,一个项目只用一次。git status 看现在有哪些变化,这一条用得最多。git add 和 git commit 存下一个版本。git diff 看具体改了哪几行。git restore 把改坏的文件恢复回上一个版本。
两个人同时修改一套程序,Git 能指出双方改动的位置,没有冲突的地方自动合并,有冲突的地方由人来决定留哪一种写法。这一件要等你真和别人一起写的时候再学,那时候再碰分支和合并。
然后,学会读报错信息,学会看别人写的代码。
养正在小米那几天做的正是这件事。手册在手,程序是别人的,任务是把程序改对。
这一步没有终点,也不必刻意宣布开始。手里有了第二步那个自己一直在用的程序,你自然会想改。一改,就会撞上报错信息、版本记录和别人的代码。

游戏和工作

每天 1 小时,不间断。
4 到 6 周过语法关。3 到 6 个月,做出一件自己真会用的东西。一年左右,能看懂一个中等项目中的某个文件在做什么。
这只是经验刻度,不是统一课表。断断续续学 2 年,不如连续学 3 个月。
按照这条路线,十来岁的孩子和二十多岁的人主要在第二步分岔。
孩子求的是不厌,题目要能一直玩下去:写一个自动整理游戏存档文件夹的小工具,每用一次省下几分钟翻找。二十多岁的人求的是当月见效,题目要能立刻抵掉工时:写一个把周报表格转成固定格式的脚本,每周少做十五分钟机械劳动。

AI需要你的代码底子

这套次序里,人工智能出现在第二步,不在第一步。这个位置不是实验直接给出的结论,是我给初学者安排的次序。不过那 69 个孩子里,有底子的那批用了人工智能学得更好,底子薄的那批用与不用一个样。次序的道理在这里。
第一步那 6 样东西,是你的第一笔本钱,不是全部。往后还有测试、错误处理、程序库、输入边界,一样一样来。
等到哪一天,人工智能给你的代码,你能看出哪一行不对、知道该怎么改,到那时候,你再问自己养正问我的那句话:
我这算是会编程了吗?