编程≠数学,编程的核心其实不是数学,而是逻辑

362 阅读4分钟

大多数编程和数学关系不大

非程序员对“程序员必须懂数学”的误解,主要源于两种偏差:

  1. 历史偏差:计算机科学最早起源于数学领域,像图灵机、布尔代数这些基础知识是纯数学的结晶。这让人下意识觉得编程必须是数学密集型工作。
  2. 文化偏差:大众经常接触的编程故事(比如黑客、AI科学家、硅谷创业者)突出展示了算法、密码学、数据科学等需要高数学水平的领域,但忽略了绝大多数程序员做的日常工作并不涉及复杂数学。

现实:大部分编程是工具性工作

实际上,编程中所需的数学能力,大部分停留在初中或高中水平,甚至很多场景连这都不需要。以下是几个具体例子:

1. 前端开发:UI/UX设计与实现

  • 数学水平:高中几何(可能都用不上)。
  • 核心技能:HTML、CSS、JavaScript这些技能要求的更多是对浏览器渲染机制的理解,善于实现视觉效果和用户交互。
  • 例子
    • 布局系统(比如 flexbox)或动画的实现,不需要深入计算,只需要理解工具的用法。
    • “用CSS实现一个动画菜单”的挑战,和数学无关,更多是逻辑和创意的组合。
  • 有人可能会说“动画涉及曲线”,但现代开发框架已经封装了绝大多数公式,比如 cubic-bezier,开发者只需要调参。

2. 后端开发:数据处理与API开发

  • 数学水平:逻辑推理和简单代数。
  • 核心技能:理解网络协议、数据库操作、并发模型,而非数学运算。
  • 例子
    • “设计一个RESTful API”,这个过程需要的更多是规范化思维,而不是计算能力。
    • 数据库查询优化是基于SQL语法规则,而不是概率论或高等代数。
  • 数据库索引设计可能依赖树形结构的理论,但这些算法通常已经由数据库系统(如MySQL)封装好。程序员只需要“知道存在这样的算法”,不需要自己写出来。

3. 移动端开发:应用实现

  • 数学水平:仅涉及基本的几何知识(偶尔处理屏幕坐标)。
  • 核心技能:熟悉开发框架(如React Native、Swift)、理解用户界面和硬件约束。
  • 例子
    • 实现一个购物车应用,涉及的是如何调用API、存储用户数据、处理UI,而不是设计矩阵运算或者做数值分析。

编程中和数学关系密切的领域

当然,编程中确实有少数领域需要很高的数学水平,但这些只是极少数,且远离普通程序员的日常开发工作。这些领域包括:

  1. 算法开发:比如在AI中实现优化算法、深度学习模型,这需要微积分、线性代数和概率论。
  2. 图形编程:比如游戏引擎或计算机图形学,涉及矩阵运算、3D变换、渲染公式。
  3. 金融科技:比如量化交易模型、风险控制算法,可能需要统计学和随机过程的理论。
  4. 密码学:需要理解数论、模算术、椭圆曲线加密等高等数学。

这些领域的工作对数学的要求很高,但从业者也只占编程总人数的一小部分(估计不到10%)。此外,即使在这些领域,开发者往往是基于现成的库或工具,而不是从零开始设计算法。


打破一个“幻想”:为什么数学好的程序员≠好程序员?

  1. 编程核心是解决问题,而不是做数学题
    大多数编程问题更像是“修理工”的工作,比如排查一个Bug、优化一个接口、设计一段代码的架构。这些任务依赖的是逻辑、经验和直觉,而非复杂的计算能力。

  2. 抽象能力和数学能力没有直接关系
    编程的真正难点是对问题进行抽象化,而数学好的人不一定就擅长抽象。比如,数学竞赛选手可能能解复杂的方程,但不一定能设计出一个易维护的系统架构。

  3. 工具已经简化了数学的作用
    编程中真正需要数学的地方(比如图形学、机器学习),现代工具和库已经封装了复杂的计算。你可能需要知道公式的意义,但很少需要从头推导公式。


最具争议的观点

即使是那些需要数学的领域,数学也往往是“手段”而不是“目的”。

  • 在AI领域,真正重要的是对数据的理解和模型调试的经验,而不是数学公式本身。会套公式的人很多,但能选对公式的人少。
  • 在游戏开发中,游戏体验(比如关卡设计、用户感受)比纯粹的数学建模重要得多。某种意义上,懂设计的开发者可能比数学家更有价值。