搜索文章

输入关键词开始搜索

如何正确的理解技术

思考#Three.js#3D#游戏开发#算法#数据结构

这篇文章的起因是最近我在学 Three.js 的时候发现了一个现象:以前我看 Three.js 的书很懵,很多 3D 和图形学的概念看不懂;最近补了一些计算机图形学的基础知识后,回头再看 Three.js 的最后两章,根本不用调试代码,很快就看过去并理解了。

这件事让我重新思考了一个问题:到底什么是”理解技术”?为什么同样是写代码,有的人能快速上手新技术,有的人学了很久还在门外?

问题:工人和工程师的区别

在我看来,绝大部分软件开发从业者,其实都和工人无异。因为大家:

  • 都是在各种封装好的引擎、框架之上,做一些功能的堆叠、简单流程逻辑的编写
  • 遇到问题,直接从网上查询别人想好的方案,然后复制实现
  • 对于从事的技术缺乏好奇心,没有深入去了解其运行原理
  • 对于计算机软硬件的工作机制不了解
  • 缺乏某个特定领域的深度钻研(比如游戏从业者,没钻研过计算机图形学相关的领域)

这种工作方式的问题在于:你只是在”使用”技术,不是在”理解”技术。一旦框架换了、需求变了、或者遇到框架没覆盖的场景,就会卡住。

原因:为什么这种状态很危险

这样的从业者,面临三个实际风险。

第一,行业红利退潮时没有应对策略。现在只是依托于行业红利过得比较好而已,一旦发生变化(比如行业下行、技术栈迁移、AI 替代基础编码),根本来不及转向。

第二,缺乏技术深度,上限很低。没有形成核心竞争力,应届生一两年就能追上来。你会的 API 调用、框架配置,别人也能快速学会,这些都是”可复制的技能”,不构成壁垒。

第三,可替代性强,只能靠加班维持议价权。因为技能不稀缺,所以对工作内容和工作时间没有议价权,只能通过多干活来证明价值,这正是 35 岁中年危机的根源。

怎么办:什么样的技术值得深入

答案是:本质类的技术

即 CS 四大基础学科:计算机组成原理、数据结构与算法、操作系统、计算机网络。

计算机应用层的技术是学不完的,而且变化和淘汰很快。今天流行的框架,三年后可能就没人用了。但是掌握了本质技术,再去学习这些应用技术,是很快的——因为所有应用技术都是本质技术的具象化。

软件开发 = 数据结构 + 算法 + 协议

这句话不是口号,是一个判断标准。你学的任何一个新技术,都可以拆解成这三个维度去理解。如果拆不出来,说明你还停留在”使用”层面,没有真正”理解”。

怎么判断自己有没有”理解”

这次学 Three.js 的经历给了我一个很直观的检验方法。

之前我学 Three.js 的时候,是在”使用”层面:跟着教程调 API,能把东西渲染出来就觉得自己学会了。但一遇到材质、着色器、光照模型这些稍微底层一点的内容,就完全看不懂。

后来我花时间补了计算机图形学的基础——渲染管线是怎么工作的、顶点着色器和片元着色器各负责什么、光照模型背后的数学是什么。补完这些之后,回头再看 Three.js 的书,很多之前卡住的地方一下就通了。

这说明一件事:掌握本质,就能一通百通。具体的实现都是一样的,都是基于本质的一个具象化而已。如果学一个新技术觉得很费劲,大概率不是这个技术难,而是你的底层基础有缺口。

竞争力的本质是什么

能人所不能。

不是说你要超越所有人,而是说你在当前工作环境中,能做到大部分人做不到的事,那么就能在当前环境保持竞争力了。

这个判断标准和”掌握本质技术”是打通的:因为大部分人都停留在”工人”层面,只会用框架、只会复制方案,所以只要你往下挖一层,理解了运行原理,你就已经比大部分人有竞争力了。

关于中年危机

如果只是做业务开发,或者常规的基础开发,是肯定到不了专家级别的,都会面临中年危机。

但你看做芯片的,博士起步,哪里存在什么中年危机?有中年危机,归根到底还是你不具备稀缺性。

这让我反过来问自己一个问题:如果我在某个兴趣方向能达到博士的水平(不是说学历,而是说深度),那么是否就可以安然度过中年危机了?

后续怎么做

想清楚道理之后,需要落到具体行动上。我给自己的几条规则:

  • 学任何新技术,不只学 API 用法,必须追问它背后的原理是什么。挖到本质学科(数据结构、算法、计算机系统、图形学等)那一层为止。
  • 选一个方向做深度钻研,目标是做到”能人所不能”。不追求什么都懂,但要有一个别人很难短期追上的领域。
  • 用”能否拆解成数据结构 + 算法 + 协议”来检验自己是不是真的理解了。拆不出来就继续挖。
  • 遇到问题不要只搜方案,先搞清楚问题的原理机制,再决定怎么解决。复制来的方案解决不了原理层面的问题。