和朋友的讨论中,有了一个想法。

从AI与人的合作关系来说,编程工作可以不严谨的看做三个大类。“数学的”,“物理的”和“管理的”。

这三个分类并不表示这三个学科,只是借用了这方面的名词。

“数学”不仅仅是数学的运用,而是一切依赖抽象知识,进行组合和逻辑推演实现的任务,典型的例如计算机算法的实现,以及那些真正的数学问题的计算机方法。这方面计算机可以帮上很大的忙,因为人的记忆力总是有限,这个限制会严重的影响人发现方法和目标之间的关联。数学家陶哲轩曾盛赞 AI 对于数学研究的帮助,他举例说有个数学问题的解决方法其实在六十年代的论文中就出现了,但是数学家们一直没有发现这两者之间的关联,直到 AI 帮助人类找到了这个解法。这里面其实也包含了大量不归属于数学学科的问题,但是它们都是在搜索并建立逻辑关联,包括规则的设计和实现。

“物理”泛指那些分析并理解客观规律,遵循这些规律解决问题的情况,典型如具身智能,如自动驾驶,这些问题对于 AI 来说,一个重要的挑战是,我们不能通过设计内在的规则来改变外在的规则。实际上这类问题对于 AI 来说一直是比较困难的。今天的机器人会空翻,会跳舞,但是在一个陌生的厨房里洗菜切菜,后者进入一个凌乱的房间打扫整理,仍然是很大的挑战。

“管理”指大量的信息梳理和流程规划,这种工作 AI 的表现严重依赖于使用 AI 的人水平如何。如 OA 系统或者更广泛的,单纯实现业务规则的应用开发,这种工作如果人类的思路清晰,可以明确的编写文档给 AI 分配任务,并且可以及时发现 AI 生成的结果是否包含错误,能够不断迭代和优化人与 AI 的协作过程,就会出现工作效率指数级上升的喜人现象。但是另一方面说,如果人类本身就是个盲目而乐观的用户,相信“有了AI人就不用会写程序”,他可能也就止步于AI企业演示的那些神奇项目的表现。比如我在一个 AI 开发工具的官网上看到,他们宣传“一句话生成贪食蛇游戏”,我相信他们没有夸大,今天的 AI ,一句话生成贪食蛇,一句话生成扫雷,并不是什么特别不可思议的事情。但是另一方面,软件开发要解决的“管理”问题,有大量是在既有知识之外的,是人类要去分析,思考,写出详细准确的规划,交待给 AI,让它去完成它训练有素,擅长完成的那部分。

在我的职业生涯中,已经经历了很多此“有了XX技术,就不用再懂底层技术,也可以做软件开发”的潮流,高级编程语言、虚拟机、4GL、RAD等等,我都经历过,曾经我也相信科技的发展可以让软件开发职业变得更容易。

实际上,我的体验是,技术工具的发展,使外行更容易进入并参与软件开发工作,特别是前面提到的“数学”和“管理”类型的开发任务,但是如果要成为一个合格的职业工作者,我们仍然要学会足够多的知识,我们要能够实现足以与职业身份相配的专业素养,才能有长远的发展。我曾经相信过很多不用再学习的知识,后来仍然要重新补课,我在我工作几年后,我买了本《x86汇编》,我对这个印象深刻,因为读书的时候想到那个时候刚刚通过Python的浮点数误差了解到了 IEEE-754 标准。更晚一点,我在某次住院期间读完了 SICP ,后来我的《LISP解释器的构造与解释》,书名就是在向这本书致敬。在这之后的某一天,我突然读懂了微积分,我记得那是个萧瑟的夜晚,我一时竟不知道该向谁说。一个数学系的学生,到四十岁才敢说自己读懂了微积分,怎么看都不是一个自豪的事情。只是比起努力逃避难关的那些年,用学习和努力去面对问题,对我才是唯一能得到解脱的选择。今天我还在读《Basic Algebra》,这也是一本本科教材,跟我大一的《高等代数》难度差不多,但是我现在觉得这是值得的。计算器的广泛发展,并没有消灭数学家,只是数学家不再做 computer 的工作了而已,我相信 AI 的发展也不会消灭那些需要了解底层知识的开发工作,它只是让更普遍的人可以方便的拥有管理信息的能力了。