2025-04-23:学习

译者序

读书时,导师布置的任务较少,我就横穿上海去了一家开发测评考试系统的初创公司兼职。这家公司如今已发展为国内领先的考试服务提供商。
我在一个 Oracle PL/SQL 仿真评测系统团队中工作。系统为学员提供模拟的 Oracle 环境,系统出题,学员用 SQL 作答,系统再模拟人工判分,给出运行结果分和过程分。那时大模型尚未出现,神经网络还只是我为了修学分而学习的课程内容。
判分引擎由一位华东师范大学数学系的教授设计,他还带领了几名复旦大学数学系的硕士生参与开发。引擎核心需要一个二维的状态转换数组,数组数据来源于 SQL 语法解析。这些学生每天的工作,就是将教授制定的语法规则转化为状态转换数组。具体来说就是,他们常常需要在纸上(有时图表过大,只能铺在地上,人得蹲着)绘制确定有限自动机(DFA),再提取状态值,最终形成数组。这种工作模式,与 19 世纪巴贝奇制作数学用表的情形有些类似,那时候的 Computer 其实指的就是人,本书第 2 章有着生动的描绘。
其中一名学生和我关系较好,他体型偏胖,一会蹲在地上画图,一会又要起身到计算机上录入数据,一天要来回多次。第 4 章中能找到类似的情形,二战期间,计算机操作员就是这样的体力活,加纸带、听声音辨别故障,还经常需要在机器之间跑来跑去。
这种纯人工操作不仅耗费体力,效率低、准确性也难以保证。两组学生协作,完成一条语句的处理往往需要一周时间。我观察后发现,可以使用 bison(一种语法分析器生成器) 处理教授提供的语法规则,程序输出中就包含所需的状态数据,但混杂在大量文本中。经过分析,我发现 bison 输出文本存在规律,只要提炼出从 bison 输出到状态数据的转换规则,问题就能解决。
接下来的一周,我仔细分析了 bison 输出的语法结构,收集各类输出样本及其对应的状态数据,通过测试不断修正转换规则中的细节问题。最终,我写出了完整的转换规则,并再次使用 bison 生成了将 SQL 语法生成状态转换数组的程序。这一过程,和书中第 4 章提到的贝蒂・斯奈德观察地上卡片从而提炼出第一个编译器的过程有相似之处。
这个程序运行效果很好,过去需要多人协作、耗时一周且准确性无法保证的工作,现在只需一个回车不到 0.1 秒就能搞定,准确性 100%。另外,我的朋友,那位数学系硕士生,再也不用吃力地蹲在地上了(好事坏事?)。

世上为什么要有程序员?

以那些教授、学生的专业能力,并非想不到这种解决方案,但可能没有人愿意花费精力,逐字逐句地分析文本规律,反复调整验证。那段时间,我每天从早到晚写代码、调试,累了就上楼休息,直到把所有细节完善好。历史上那些编程巨擘处理过的、有趣的或奇怪的细节,本书中可以找到很多。
我很荣幸参与 Uncle Bob 这本新书的翻译工作。这本书回顾了编程发展史,从查尔斯・巴贝奇、艾达・洛芙莱斯,到冯・诺伊曼、艾伦・图灵、格蕾丝・霍珀、艾兹格·迪杰斯特拉、丹尼斯・里奇等先驱,从代码的早期,到现在 AI 的兴起,讲述了许多重要的人物和事件,还包括了作者自身的很多经历。
本书还揭示了程序员的核心特质,就是细节。在 AI 快速发展、程序员职业面临挑战的当下,这些特质显得尤为重要。阅读本书,能让我们更好地理解编程的发展脉络,汲取先驱们的智慧与力量,在新的时代浪潮中找准自己的方向。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容