很多人以为学编程就是学语法:变量、循环、函数都背熟了,还是写不出程序。
其实语法只是工具。认字不等于会写作,会语法也不等于会编程。语法能教你写出一个循环,却教不会你"这个问题该用哪种数据来描述"。程序员的功夫,是用数据理解事物。
举个例子:学生信息
初学者容易把"学生"想成一个无限延伸的对象:既然叫 object,那想装什么就装什么。今天加个昵称,明天加个爱好,后天再加一个标签数组。它看起来无所不能,可你要问"学生信息到底包含什么",谁也答不上来,只能一行行去翻代码。
程序员的做法朴素得多:先问这个场景到底要用到哪些字段——学号、姓名、班级、成绩,四个。写下来,就这四个。以后需要新字段,是想清楚了再加,而不是随手往里塞。
写成代码就是这样:
# 这个场景里的“学生”,就是这四个字段
student = {
"id": "20250101", # 学号
"name": "张三", # 姓名
"cls": "高一(3)班", # 班级
"score": 92, # 成绩
}
# 反面写法:想加就加,半年后谁也不知道里面有什么
student = {"id": "20250101", "name": "张三"}
student["nickname"] = "小三儿"
student["hobbies"] = ["篮球", "吉他"]
student["tags"] = ["爱睡觉", "数学好"]
student["extra"] = {"whatever": True}
同样是“学生”,第一个说清了它是什么,第二个只说了它能装什么。
字段甚至还可以更少。如果这个场景只关心成绩排名,那"学生"就是学号加分数,两个字段足够。够用就行,不必把现实中的学生整个搬进代码——初学者最容易犯的错,就是以为代码要还原世界,其实代码只需要描述问题。
这里有个容易被"对象"这个词唬住的地方:这些字段的集合,就是学生对象本身。 对象不是什么魔法实体,不是先有一个空壳、再把数据挂上去展示给你看;它就是这几个字段。字段定了,对象就定了;对它的操作,也不过是对这几个字段的操作。
所以面向对象不是让你造一个万能口袋,而是逼你说清楚"我到底关心哪些数据"。字段有限、含义明确,代码才可能被校验、被序列化、被别人一眼读懂;一个无限膨胀的对象看着灵活,实际是谁也不知道里面装着什么,多改一步都得提着心。
卡住你的是对数据的判断
回到最初的问题:语法负责把字段写下来,但它不会告诉你该有哪些字段。同样一个学生,有人写成四个字段,有人写成三十个,差别不在语法水平,而在对问题的理解。字段的边界,才是真功夫。
所以,背熟语法只是拿到了工具。真正需要练的,是接到需求时先问一句:这里有哪些数据,它们要表示什么,边界在哪里。想清楚这些,语法自然有地方可用;只想语法,就只能一直等一个标准例子。
后记
这篇正文是我第二次让人写出来的。
最初的想法很简单:初学者以为背熟语法就等于会编程,其实程序员是用数据理解事物,语言只是工具。我先让 Kimi K2 写过一版。它写得流畅,篇幅也比现在长得多,但重点跑掉了——大半篇在讲 Excel 用户怎么转型学编程,还铺了一堆数据结构和算法的例子。我想说的那句话,反倒要翻到最后才看得见。
一年多后,我请 DeepSeek 重写,这回把要求写清楚了:我要的是“用数据理解事物”,不是一份转型指南。这一版基本说到了点子上;正文里“学生信息就是四个字段”那个例子也是我提的。
AI 能把句子写顺,但“我到底想说什么”只能自己盯住。这跟正文那句话其实是一回事:语法只是工具,重点在人这边。
2026 年 10 月补记
手敲内容
我算是明白现在互联网上那么多的AI读稿是怎么来的了,都TM是deepseek拉出来的,语言风格太“高中命题作文”了,很怀疑小梁为了省钱,买的中文语料都是高中语文教辅材料。
(高中命题作文:为了一个中心论点,反复堆论据,用最初级的手法往人脑子里灌,有效果,但读起来觉得太刻意)
吐槽结束。