How to Think Like a Programmer 视频笔记
很多人一提到“学编程”,脑子里马上浮现的是:晦涩的语法、复杂的工具、动不动就一屏红色报错。久而久之,很容易把“我搞不定这些东西”误解成“我不适合编程”。但这段视频《How to Think Like a Programmer》想说的,其实是另一件事:编程真正难的,不在语言,而在「怎么想问题」。语言只是最后一步,把你已经想清楚的东西翻译给一台特别笨但很听话的电脑。
为什么“学编程”这么容易劝退?
原视频先花了一段时间,安慰(顺便劝退一批)初学者:
-
看起来跟别的技能不一样 其他技能就算没学会,至少“看得懂大概”, 编程一上来就是一屏幕英文单词 + 符号,看着就想关掉窗口。
-
语言名词很吓人 “对象”“指针”“闭包”“多态”…… 一堆术语像是在考专业八级,初学者很难相信自己可以掌握这些东西。
-
开发环境很吓人 IDE、终端、黑窗口、红报错。 初学者连“我到底是哪里搞错了”都说不清,更别说自己查文档。
-
绝大多数人一开始都是“狂失败” 写十行 code、错九次,最后好不容易跑通,结果发现需求理解错了…… 这种体验反复叠加,很容易得出结论:我不适合编程。
-
更惨的是:随处可见的“坑爹建议” 很多建议听起来很燃,但对零基础的人并不友好。
一句话总结这一部分: 你受挫,不是因为你“天赋不行”,而是这门课的入场门槛设计得很糟糕。
常见的“坑爹入门建议”
视频列了几条常见建议,并且一个个“拆台”:
-
「先做个简单的游戏,比如俄罗斯方块」
-
问题是:
- 俄罗斯方块一点也不“简单”,
- 涉及图形渲染、输入处理、碰撞检测、状态管理……
-
对零基础来说,这更像是一个“大型挫败项目”。
-
-
「先学 C++,毕竟工业界都用」
-
问题是:
- C++ 功能强大,但也意味着“坑多、细节多、历史包袱重”。
- 对初学者来说,在还没学会走路之前就被要求跑马拉松。
-
-
「用某某“可视化工具”,可以先不用写代码」
-
问题是:
- 你可能做出了点什么,但完全不知道背后发生了什么。
- 一旦离开工具,就不会思考问题本身,只会问“这个按钮在哪”。
-
-
「最好的方式是找一个你想解决的真实问题」
-
听起来非常合理,也很鸡汤:
“找一个你真正关心的问题,你就会有无限动力。”
-
问题是:
- 真实问题往往很复杂,包含了你现在还完全不会的一整套东西。
- 结果是:因为“问题太大”,你连第一步都迈不出去。
-
总结来说,这一部分的观点是:入门阶段,目标应该是“训练思维”,而不是“做一个酷炫项目”。
他真正希望初学者早点知道什么?
视频里有一个明显的小标题:“What I wish I’d been taught” 大意是:如果能重新来过,他希望一开始有人告诉自己这些话。
-
编程不等于“学语言”
- 语言只是“把想法告诉电脑”的方式,
- 真正的核心是:你有没有把问题想清楚。
-
具体用什么语言,其实没那么重要
- 大多数主流语言在基础概念上都很像: 变量、条件、循环、函数……
- 你一旦搞懂“在脑子里怎么解决问题”, 换一种语言,只是换一套语法壳子。
-
编程不靠死记硬背
-
记不住所有 API 很正常,日常开发也是:
“不会就查文档。”
-
真正需要记住的,是解决问题的套路,不是每一个函数名。
-
-
大部分编程工作,跟高等数学无关
- 除非走到图形学、机器学习、数值分析这类领域,
- 否则更多是逻辑思考、数据处理、业务建模。
- “我数学不好,所以不能学编程”——这是个非常常见但不必要的恐惧。
-
编程的本质 ——「帮电脑理解问题」
- 电脑非常笨,只会按你说的做。
-
所以真正的挑战在于:
- 你有没有把规则想清楚?
- 你能不能说得足够细、足够明确?
一句话总结:所谓编程,就是要把问题解释得连电脑都听得懂。
Language 只是“最后一步”:先学会想,再学会写
在“Code isn’t about language”这部分,视频强调了几个关键点:
-
「编码」之前,其实只有几个核心概念
- 他说:几乎所有语言,围绕的就是寥寥几个核心概念。
- 这些概念在不同语言里名称可能略有不同,但本质类似。
-
对初学者来说,更重要的是:
“我在解决这个问题的时候,需要哪些概念?” “它们之间怎么配合?”
-
先在自然语言里解决问题,再翻译成代码
-
很多新手一上来就问:
“这里应该写什么代码?”
-
更好的顺序是:
- 先用中文/伪代码,把步骤写出来;
- 检查是否涵盖了所有情况;
- 再去查:这些步骤在某种语言里怎么写。
-
-
“我不会写代码”,往往是“我没想清楚问题”
- 你以为自己不会写某行代码,
- 其实是你连要做什么都没想明白。
- 视频也提到:专家也会犯这个错,只不过他们更快意识到自己卡在“理解问题”而不是“写代码”。
5. “Comments are Code”:把注释当成思维工具
视频里有一段有趣的观点:
「Comments explain code to other programmers? NO! Code explains the comments to the computer.」
可以这样理解这句话:
-
先写“注释版的程序”
-
想象你在给未来的自己写说明书:
- 第一步要干什么
- 然后检查什么条件
- 如果失败该怎么办
-
这些本质上就是程序的完整逻辑描述。
-
-
再把注释一点点翻译成真正的代码
- 每一条注释,对应一小段实现。
-
这样做的好处是:
- 你在写代码前就已经把逻辑串成了一个闭环;
- 中途卡住时,回头看注释,就能知道“下一步本来应该干嘛”。
-
注释不仅给“别人”,也给未来的你
- 很多时候,“别人”就是三个月后的你自己。
- 你会感谢当时那个认真写注释的自己。
换个说法:注释是你和自己(包括未来的自己)对话的文字稿,代码只是把这份对话翻译给电脑。