30 秒看懂
Ron Minsky 与 Jane Street 的开发者教育者 Aaron Bauer 讨论教学、开发工具,以及 AI 对学习和代码审查的影响。Bauer 介绍如何设定可观察的学习目标、降低认知负荷,并围绕测试、设计和审查生成代码重新设计实习培训,同时承认有效的 AI 辅助学习方式仍在探索中。
- 1现场教学与主动学习Minsky 和 Bauer 都看重现场讲授对注意力的吸引,Bauer 建议用问题和练习穿插其中。
- 2开发者教育者Jane Street 将工程实践与课程设计和教学专长结合,支持公司独特的工具和工作流程。
- 3测量工作流程的变化Bauer 的编辑器遥测数据显示,每位用户跳转到定义的次数略高于预期,提示有必要研究工程师如何理解代码。
- 4当模型可以完成练习Bauer 认为,亲自实现至少一次技术方法,有助于建立日后评估生成代码所需的理解。
- 5可观察的学习目标具体目标说明学习者结束后能够做什么,既指导练习,也有助于评估教学项目。
- 6重建实习培训新课程强调测试、设计、与利益相关者沟通和代码审查,并持续调整任务规模与节奏。
要点建议
- 现场讲授能够帮助学生集中注意力,配合主动练习和讨论时尤其如此。
- 及时反馈和反复练习有助于学习者纠正误解。
- 开发者教育者可以将技术实践与持续投入的教学工作结合起来。
- 生成看似合理的代码成本降低,使理解、测试和审查成为核心问题。
- 学习目标应描述可观察的能力,并指导练习和评估。
- AI 时代的练习必须兼顾亲手实践带来的理解、真实工具使用,以及学习者能够审查的任务规模。
按章节阅读整理后的全文
从天文学到教学
Bauer 通过天文学发现编程,并研究人机协同解决问题。他随后到 Carleton 任教。
Ron Minsky 介绍了 Jane Street 的软件工程师兼开发者教育者 Aaron Bauer。Bauer 的工作结合了编程和教授其他工程师,这种结合可以追溯到他最初接触计算机的时候。
Bauer 说,自己小时候就对计算机着迷,但编程看起来很难。参加新墨西哥州为期六周的暑期科学项目时,他用望远镜观测数据和 Python 计算小行星轨道。他发现自己最喜欢的部分是编程。
他所在小镇的高中没有开设 AP 计算机科学,于是他参加了北卡罗来纳州一名退休教师教授的在线课程。读研究生之前,他回到暑期科学项目担任助教,编写练习并讲授二叉搜索树。这段经历让他爱上了教学。
Minsky 指出,科学计算与计算机科学之间有着悠久的联系。Bauer 回忆自己曾使用 Fortran 模拟小行星或彗星撞击,代码源自模拟原子爆炸的程序。他们讨论了科学工作中复杂计算与务实、领域驱动编程的结合。
一门计算机图形学课程促使 Bauer 申请博士项目,尽管他后来发现许多渲染研究已经转向业界。他的研究最终涉及游戏设计和计算机科学教育,博士论文研究了科学游戏 Foldit 中的人机协同解决问题。
Bauer 说,Foldit 将玩家对整体几何结构的直觉与自动化局部优化结合起来。玩家往往没有生物化学背景,却帮助解决了实验室多年未解的结构问题,后来还设计了新蛋白质。他推测这些已知结构会被用于 AlphaFold 的训练,但并不声称直接了解其数据集。
他的研究生研究还涉及认知心理学:人们如何学习、思考和运用技能。由于希望以教学为主要工作,他加入了明尼苏达州的 Carleton College。在两个学季的面对面教学后,疫情使接下来的四个学季转为线上。
在线教学与现场课堂
疫情期间的教学促使 Bauer 尝试翻转课堂和互动方式。两位嘉宾讨论讲授、记笔记和在纸上推理。
Bauer 最初借鉴自己参加过的纯文本在线 AP 课程,以照顾网络条件有限的学生。反馈很快表明,适合他的方法并不适合所有人。他尝试了翻转课堂、同步课程和小组合作。
在翻转课堂中,学生课前观看准备好的讲座,课堂时间用于练习、讨论和一对一辅导。Bauer 最终更倾向于在课堂中混合互动活动和讲授,而不是完全依赖翻转模式。
Minsky 认为现场讲授常常被低估:讲课也是一种能吸引人的现场表现。Bauer 同意,现场讲者能集中学生注意力并鼓励记笔记,但他也提醒,连续讲一个小时可能让学生失去兴趣。他支持主动学习,在讲课中暂停提问、讨论或做短题。
两人讨论记笔记如何帮助学生加工和提炼内容,即使以后从不重新阅读笔记也是如此。两人都记得有说法认为手写比打字更有帮助,但没有引用具体研究。Bauer 补充说,学生和教师之间的屏幕也会带来干扰。
Minsky 讲述自己如何在纸上教孩子编程。没有计算机运行代码,孩子必须推理表达式的含义,而不是不断尝试修改直到程序运行。Bauer 同意,纸上练习能促使初学者思考程序行为。
反馈与掌握式学习
重返课堂后,录像和自动反馈仍然有用。Bauer 讨论反复尝试和谨慎使用模型反馈。
回到教室后,Bauer 继续录制课程。在 Carleton,学生仍然来上课,而缺课时可以看录像,或回看带时间戳的讲解。两人指出,不同学校或讲师的情况可能不同。
他也保留了自动测验和作业反馈。一两周后才收到反馈时,学生可能已经进入下一个主题,反馈就太晚了。自动检查允许反复尝试,也支持有限形式的掌握式学习:学生可以持续练习,直到证明自己掌握了技能。
Minsky 回忆,高等数学有时要过几个月才真正明白。Bauer 说,掌握式学习在年幼学生中通常应用得更彻底;大学课程则需要更有针对性地使用,并设定截止日期。他的每周测验允许多次尝试并保留最高成绩,题目和答案顺序会打乱,让理解比穷举更实际。
谈到大语言模型反馈,Bauer 认为它有潜力辅助代码风格等范围明确的任务,与测试和代码检查工具配合使用。但他也警告,模型反馈可能产生误导性的误报,因此需要向学生谨慎说明,或降低错误率。
Jane Street 的开发者教育者
公司设立结合技术实践与教育的岗位。Bauer 和 Minsky 讨论招聘及不断增长的培训需求。
Bauer 为了离家人更近搬到布鲁克林,并发现 Jane Street 正在招聘一个不寻常的教育者兼程序员岗位。Minsky 解释,公司已经投入资源教授独特的交易领域、语言和工具,但希望找到具备持续教学专长、同时在相同环境中从事工程实践的人。
岗位原本的设想是约一半时间编程、一半时间做教育工作,包括设计课程、授课和帮助同事提高教学能力。Minsky 说,招聘同时具备这些能力的人比预期困难。Bauer 指出,有经验的教育者往往在学术界工作,未必愿意在业界承担大量工程工作。
Bauer 说,把教育作为核心职责可以让人持续投入。需求还在增长:新员工要学 OCaml,有经验的员工要学习语言变化,所有人还需要了解新的 AI 工具。公司也希望寻找编程语言和机器学习领域的教育者。
Minsky 希望工程师能够在 OCaml 和 Python 等工具之间自如切换,而不是局限于一种语言。Bauer 建议将教育者嵌入技术团队,包括 AI 辅助团队;Minsky 指出,不同技术岗位也能拓宽教育者群体的经验。
编辑器是工程师的工作中心
编辑器集成了代码审查和其他工具。大型差异、索引和 Python 笔记本带来技术挑战。
Bauer 在工具与编译器部门的编辑器团队工作,负责支持 VS Code、Emacs、Neovim、代码索引和 OCaml 语言服务器。一个项目让工程师更容易在 Jane Street 的功能管理工具 Iron 中拆分和安排工作,分别进行审查。
Minsky 解释,在 Jane Street,“feature”根据上下文大致相当于一个 commit 或 pull request。Iron 支持类似堆叠 pull request 的链式结构,但此前编辑差异不够方便。不同的工具选择形成了独特的开发和审查文化。
在 Jane Street,编辑器是工程师的工作中心:代码审查、版本控制和其他操作都集成其中,并可用键盘导航。审查通过编辑器中的评论进行,审查者也可以直接修复问题。Minsky 指出,对习惯独立 pull request 界面的人来说,这种协作方式可能有些陌生。
Bauer 介绍了通用编辑器面临的规模问题。非常大的差异可能使 VS Code 的差异算法挂起,阻塞其他差异视图。集成可能违反编辑器对缓冲区的假设,使搜索出现异常;更丰富的 OCaml 索引则可能占用太多内存,导致可用机器无法容纳索引。
Python 笔记本是另一个难题。不同笔记本工具各有局限,推出缺少旧功能的替代品可能导致团队需要同时维护多个系统。笔记本中的代码也可能难以作为库共享;在遇到性能和易用性问题后,团队正在探索自有方案。
内部开发与上游合作
团队权衡定制方案与共享开源工具。语言和并发机制的整合增加了复杂度。
Minsky 担心内部开发过多,但当外部笔记本不符合公司需求时,他也看重对工具的控制权。另一方面,团队正在用上游方案替换部分定制 Emacs 功能。Bauer 说,上游代码受益于其他用户和维护者,也能更好地兼容标准扩展。
编辑器原生语言与 Jane Street 的 OCaml 扩展之间的边界仍很棘手,特别是 Emacs 中的异步工作。Bauer 希望减少别扭的依赖关系和潜在死锁。Minsky 指出,即使各语言本身的并发模型都不错,跨语言组合并发系统仍然困难。
AI、编辑器与理解代码
遥测数据帮助研究工作流程的变化。两人讨论审查辅助工具和更具参与感的编程模型使用方式。
自主式 AI 正在改变开发工具,但 Bauer 仍认为编辑器是有用的工作中心。工程师可能亲自输入更少的代码,却仍要检查差异、审查变更、跳转到定义并理解生成的内容。
Bauer 正在使用编辑器和语言服务器的遥测数据了解实际工作流程如何变化,而不是凭空猜测。他原本以为模型写更多代码后,每位用户跳转到定义的次数会减少;数据显示次数反而略有增加,也许是因为人们需要阅读更多代码。他把这看作观察和可能的解释,而非定论。
Minsky 说,创建看似合理的变更已便宜得多,但验证仍然困难,甚至可能更难:生成的代码看起来很精致,却仍可能存在严重问题。他希望有更好的理解工具,包括大语言模型解释和定义、推断类型、测试结果等传统证据。
Bauer 尝试了 Claude Code 的学习输出模式,它有时会留下一项任务让人完成。停下来阅读生成的代码并亲手实现一部分,帮助他建立心智模型。他希望探索在生成过程中培养理解的工作流程,而不只是事后提供解释。
Bauer 将审查生成代码比作审查别人已经完成的变更:与逐步编写代码不同,审查者必须根据结果重新构建心智模型。Minsky 认为这与记笔记有相似之处,并提出主动参与可能有助于理解。
他们还考虑了新的审查辅助工具。Minsky 想象为特定变更生成定制可视化;Bauer 建议把代码分成逻辑片段,预先准备解释供审查时调用。这些都是有待探索的想法,并非已部署的方案。
当 AI 能完成工作时如何教学
Bauer 和 Minsky 讨论练习、有益的挣扎以及难以取舍的练习规模。他们探索将模型作为辅导工具。
Bauer 介绍了一场测试工作坊,内容包括基于性质的测试和对测试时间的确定性控制。当大语言模型可以编写使用新库的示例时,教育者必须决定哪些知识不可或缺,哪些只是样板代码。到目前为止,他认为亲自实现一次技术方法,有助于建立评估日后生成代码所需的理解。
工具变化迅速,两人尚未确定如何教授有效的 AI 使用方法。Minsky 担心学习者需要通过钻研材料来学习,而现在他们可以让模型立即解决大多数练习。既适合学习者、又难以让模型一次解决的任务范围可能非常狭窄。
Bauer 遇到了权衡的另一面:大到需要对生成代码开展实质工作的任务,也可能大到无法在规定时间内审查和完善。他预计人们会尝试结合使用模型和不使用模型的活动,让每项活动服务于明确的学习目的。
对于 OCaml Boot Camp,Bauer 考虑让模型提问、提供框架但将大部分实现留给学习者,或者充当提供提示的辅导员。Minsky 强调要保留学习者进行艰难思考的机会。Bauer 将此与自己早期的自动辅导研究联系起来:这种耐心的工具可以在助教办公时间之外提供帮助。
训练营与学习目标
Bauer 介绍入职培训、后续专题课程和可观察目标的价值。认知负荷和主动学习影响课程设计。
新工程师通常先参加 OCaml Boot Camp:通过一系列练习构建客户端—服务器应用,学习核心库,并接受导师的代码审查。之后的 Production Boot Camp 介绍部署、监控和配置。两者合计约占入职后的前两周。
Bauer 说,教材在具体功能或需求的背景下引入概念,而不是先介绍工具,再寻找它能解决的问题。这让学习者有理由使用工具,也为理解提供了切入点。
第一年,工程师还可以参加有关测试、OCaml 性能、调试、高级函数式编程、Bonsai 和市场数据的专题课程。Bauer 预计会采用课程目录的方式,由经理或团队选择相关内容,并在需要时提供自学材料。
Minsky 问如何平衡实用工具和概念性知识。Bauer 说,有经验的同事在日常工作中已经会解决困难问题,因此预设谜题可能不如针对可用工具的引导练习有价值。概念仍然重要,但更完整的理解往往在将工具应用于真实工作问题时形成。
Minsky 回忆 Bauer 曾问测试工作坊的学习目标是什么。Bauer 将学习目标定义为学生在活动结束后能够做到什么的可观察变化。“理解基于性质的测试”过于模糊;针对指定类型的输入编写一个基于性质的测试,则更加具体且可衡量。
具体目标既决定该包含什么,也决定该省略什么。教育者可以设计练习,让学生实践预期能力,再确定需要哪些讲解、代码和背景知识。Minsky 补充说,检查学生是否能完成这些事情,也是在评估教学项目本身。
Bauer 将认知负荷的理念应用于 OCaml Boot Camp。旧版同时引入 OCaml、新编辑器、版本控制和代码审查。调整后的顺序从简短的 OCaml 练习开始,再分别介绍编辑器和版本控制,最后将它们结合起来。
主动学习是另一项原则。新的实习生教材采用小组讨论、设计活动和与利益相关者交谈的练习,让学生互动并动手处理材料,而不只是听别人讲。
重建实习课程
实习项目和培训现在更加重视设计、测试与审查。Bauer 讨论早期迭代的经验及未来调整。
实习课程之所以改变,是因为 AI 工具可以用一条提示完成过去为期四周的入门项目。Bauer 说,项目正在变得更加开放和贴近现实,涉及设计及需求收集;单纯产出代码作为能力信号的价值比以前低了。
新教材也教授如何有效使用大语言模型工具及其可能的失败方式。练习需要足够复杂,让模型不能立即给出完整方案;同时又要足够小,使实习生有时间检查输出。测试获得了更多关注,包括为数据库驱动的应用编写高质量测试套件。
实习生会分析好的和不好的设计文档,并向扮演利益相关者的全职员工练习收集需求。过去实习生很少参与代码审查,现在这成为工作的一部分。实习中期的三天培训使用预先准备的变更、参考评论、小组讨论和同伴审查,之后导师会发送真实功能供他们审查。
被问到改版进展如何时,Bauer 说团队正在学习。如果练习要求实习生生成多到无法完善的代码,就会削弱他们应对代码负责并仔细审查的课程主旨。规模过大、问题过多的审查示例同样会让重要问题难以发现。
他很看重新的互动结构:实习生以四人为一组,定期讨论模型的使用方式和生成测试中发现的问题,导师也经常参与。他预计未来会调整任务规模、节奏,以及对不同进度学习者的期望。
早期版本首先强调多任务和 vibe coding;团队认为这会定下不合适的基调,于是将高质量测试移到开头。Bauer 预计,随着经验积累,团队会提供更成熟的工作流程指导。小组讨论帮助参与者交流有效方法;两人也指出,工具变化迅速,对不同用户的表现可能不同。
同频道的其他文章
1:48:29EN → 简体中文
1:05:45EN → 简体中文
1:25:00EN → 简体中文
1:16:29EN → 简体中文
27:39EN → 简体中文
4:41EN → 简体中文