给所有曾经盯着陌生文档,心里默念 “这什么鬼” 的程序员
 

我至今记得七年前的那个下午。那时我已经能熟练地用 Python 写爬虫、做数据分析,自认为是个 “合格” 的程序员了。然后,我接到了一个需求:用 Django 做一个后台管理系统。

“Django?不就是另一个 Web 框架嘛,跟 Flask 差不多吧。” 我自信满满地打开了官方文档。

三十分钟后,我盯着屏幕上那些陌生的术语 ——MTV模式QuerySetORM映射中间件—— 感觉像在看天书。更让我崩溃的是,我发现自己竟然在抗拒继续往下读。心里有个声音在说:“这太复杂了,我现有的知识够用了,干嘛要学这个?”

我关掉了文档,打开了熟悉的 Flask 项目,用我知道的方式解决了问题 —— 当然,代码比用 Django 多了三倍,维护起来也更麻烦。

后来我才明白,那天下午我经历的,是每个程序员都会反复经历的状态:面对陌生知识的本能抗拒

今天,我想和你们聊聊这件事。为什么我们会抗拒?以及,更重要的是,我们该如何驯服这种陌生感。

一:为什么你的大脑在说 “不”?

1. 进化留下的 “遗产”:节能模式

想象一下,如果你是原始人,在草原上看到一只陌生的动物。你有两个选择:

  • A:花时间研究它,了解它的习性
  • B:立刻逃跑

在进化过程中,选择 B 的人活了下来。因为研究陌生事物需要消耗大量能量,而在资源匮乏的时代,大脑的首要任务是节能。

编程中的陌生概念,对你大脑来说,就像草原上的陌生动物。它的第一反应是:“这看起来很耗能,咱们能不能用已经知道的东西解决?”

这就是为什么你宁愿用 10 行熟悉的复杂代码,也不愿学 1 行陌生的优雅语法。

2. “能力认同” 的威胁

当程序员久了,你会建立起一种 “能力认同感”:“我是 Python 后端工程师”、“我擅长数据处理”、“我的代码风格很优雅”。

新的概念,尤其是那些让你现有技能显得 “过时” 或 “低效” 的概念,会威胁到这种认同。

比如,当你已经能用多线程熟练处理并发时,突然有人告诉你:“现在都用异步 IO 了,你的方法过时了。” 你的第一反应是什么?很可能是:“异步 IO 太新潮了,我的方法经过实践检验,更稳定!”

这不是固执,这是大脑在保护你的 “专业身份”。

3. 被低估的 “入门成本”

每个新概念、新库都有一道 “入门墙”。你看一眼文档,发现:

  • 要安装 3 个依赖包
  • 要配置 5 个环境变量
  • 要理解 7 个新术语

大脑立刻开始计算:“学会这个,我能得到什么?需要付出多少时间?” 如果答案是 “付出很多,短期回报不明”,抗拒就产生了。

我们不是懒,我们只是被 “未知的投入产出比” 吓退了。

二:如何驯服陌生感

好了,知道了为什么抗拒,现在来点实际的。下面是我用了七年,带过上百个学生后总结出的方法。

1:先问 “为什么”,再问 “是什么”

错误姿势:打开官方文档,从第一章开始硬啃。

正确姿势

  1. 停下来问自己:“我为什么需要学这个?”
  2. 找三个具体的使用场景

以我最近学的 FastAPI 为例:

为什么学?

  • 公司新项目要用(外部需求)
  • 听说性能比 Flask 好(好奇)
  • 想写在简历上(职业发展)

使用场景

  1. 下周要写一个用户注册接口
  2. 下个月要做实时消息推送
  3. 想优化现有 API 的响应速度

效果:当你知道了 “为什么”,学习的痛苦感会降低 70%。因为你不再是被动接受,而是主动寻找解决方案。

2:建立 “知识锚点”—— 用已知理解未知

人类无法理解完全陌生的东西,但可以理解 “像 XX 的东西”。

操作步骤

  1. 找到新概念与你已知概念的相似点
  2. 建立类比关系
  3. 逐步区分差异

我的实战案例:学 Docker 时

  1. 初始认知:“这什么鬼,又要学新东西”
  2. 建立锚点:“等等,Docker 容器…… 是不是有点像虚拟机?”
  3. 具体类比
    • 虚拟机 = 租了一整套房子(有卧室、厨房、卫生间)
    • Docker 容器 = 租了一个单间(共用厨房和卫生间,但自己房间是独立的)
  4. 区分差异
    • 虚拟机需要完整的操作系统
    • Docker 共用宿主机内核,更轻量

关键技巧:不要追求完美类比。先抓住一个相似点,让自己 “有地方下手”,细节后面再补充。

3:最小可行学习法(MVL)

不要试图 “掌握” 一个概念,而是先 “能用”。

三步法

  1. 最小例子:只学最核心的 10% 功能,能跑起来就行
  2. 解决问题:用这 10% 解决一个实际的小问题
  3. 逐步扩展:遇到需求再学新功能

FastAPI 学习记录

第一周(每天 30 分钟):

  • 目标:能运行一个返回 “Hello World” 的接口
  • 行动:
    • 安装 FastAPI 和 uvicorn(5 分钟)
    • 抄一个最简单的例子(10 分钟)
    • 运行并访问(5 分钟)
    • 修改返回内容(10 分钟)
  • 成果:我有了一个能运行的 FastAPI 应用

第二周:

  • 需求:需要接收用户参数
  • 行动:学习 Path 参数和 Query 参数
  • 成果:能写带参数的接口

对比

  • 传统方式:花两周看完官方文档,然后开始写代码 → 容易中途放弃
  • MVL 方式:第一小时就有成果,每解决一个问题学一点新东西 → 持续获得成就感

4:创造 “即时反馈” 环境

抗拒的另一个原因是 “不知道学得怎么样”。解决方法是创造即时反馈。

我的做法

  1. 学习时:每学一个小概念,立刻在交互环境(Jupyter Notebook、Python 交互模式)里试

    # 比如学列表推导式
    # 先看例子
    squares = [x**2 for x in range(10)]
    
    # 立刻自己试一个
    # “如果我要生成1-10的立方呢?”
    cubes = [x**3 for x in range(1, 11)]
    print(cubes)  # 马上看到结果
    
  2. 学习后

    • 给自己出 3 个小题目
    • 用刚学的知识解决
    • 或者,尝试教别人(哪怕是对着空气讲)

原理:当你看到 “我学会了,而且能用” 的证据时,大脑会释放多巴胺 —— 学习从痛苦变成奖励。

5:接受 “只懂 20%” 的阶段

这是最重要,也最反直觉的一点。

真相:你不需要完全理解一个概念,才能开始用它。

我的经验

  • 学闭包时,我一开始只知道 “函数里定义函数,内层函数能记住外层函数的变量”
  • 我用这个 20% 的理解,写出了一个记忆斐波那契数列计算结果的函数
  • 三个月后,在调试一个 bug 时,我才真正理解了闭包的作用域链
  • 六个月后,在读框架源码时,我才理解了闭包在设计模式中的应用

行动指南

  1. 允许自己 “一知半解”
  2. 先按理解去用,哪怕用得很笨拙
  3. 在实践中逐步深化理解

三:当你真的学不动时

即使有了方法,也会有学不动的时候。这时候,试试这些:

策略一:承认 “今天不适合学习”

有时候,抗拒是因为你累了、饿了、心情不好。这时候强迫自己学习,效率极低,还会强化 “学习很痛苦” 的印象。

我的规则

  • 如果盯着文档 15 分钟,一个字都看不进去
  • 或者写代码时频繁犯低级错误
  • 那就站起来,去做完全无关的事

关键:这不是放弃,这是战略调整。休息后回来,效率可能是强迫学习的 3 倍。

策略二:寻找 “最小阻力路径”

如果这个库 / 概念让你极度抗拒,问问自己:

  • 有没有更简单的替代方案?
  • 能不能先用熟悉的方式实现,以后再优化?
  • 是不是必须现在学?

案例:我曾经需要处理大量实时数据,同事建议用 Kafka。但我当时对消息队列完全陌生,而且项目时间紧。

我的选择:

  1. 短期:用 Redis 的发布订阅功能(我熟悉 Redis)
  2. 长期:标记 “需要学习 Kafka”,安排在项目结束后

结果:项目按时完成,我在下个季度专门花时间学了 Kafka,现在两个都会。
 

写在最后:学习才是编程领域的唯一核心竞争力,跟不上技术迭代的速度,就只能被淘汰,与君共勉,加油

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐