这是一篇对 Ryan Potts 的访谈,他和 Jeremy Walker 聊了聊 Delphi、他作为 Exercism 贡献者学到的东西,以及他在至今仍然“离线”的行业中编程的经历。
你好 Ryan。谢谢你抽时间和我聊。你是 Exercism 上 Delphi 轨道的维护者。你是怎么开始接触 Delphi 的?
我在我父亲创办的一家公司工作,这家公司从 80 年代就开始开发软件,最初用的是 Microsoft Pascal,后来用 Borland 的 Turbo Pascal。我 1996 年来到这家公司工作,当时公司正收到一些需求,要开发能在 Windows 上而不是 DOS 上运行的软件。很巧的是,Borland 前不久刚发布了 Delphi 1。这对我们来说再合适不过,因为多年来开发的单元大部分都还能继续使用。我们再也不用为了支持 Windows 而用 VB 或 VC 从头重写一遍了。
那你现在每天还在用 Delphi 吗?
是的。我工作的地方生产用于汽车行业研发测试和小批量测试的设备,测试轮胎、汽车座椅、安全气囊充气装置,也做碰撞测试。生产出来的所有系统都被全球好几家汽车制造商以及它们的供应商使用。
我做的软件用来控制这些不同类型的设备。我开发 UI,设计测试中自动化部分的测试流程,集成各种输入和输出点,既有模拟的也有数字的。它必须尽可能友好易用,这样只受过很少培训的人用起来也能比较顺手。
我的工作完全不需要 Web 编程。我做的一切都是在 Windows 上用 Delphi。偶尔我得用 C++ 写一个小“自定义命令”,然后把它上传到数据采集处理器板。这是一台插在计算机 PCI 插槽里的并行计算机,有自己的 CPU、内存和操作系统。
和一个完全不做 Web 编程的人聊天很有意思。在今天这感觉挺少见的,不过我怀疑这只是我日常听到的信噪比,而不是行业的真实写照。
是啊,参与 Exercism 让我得以稍微窥见计算机行业“另一半”的生活。我学到了很多,包括测试驱动开发(TDD)、GitHub 的使用,以及如何参与开源项目。我学到的东西有很多都提升了我工作中的产出质量。
这真是太好了。Exercism 最让我喜欢的一点,就是那种“另一半如何生活”的氛围,让你意识到自己所有的盲区,学到你根本不知道存在的东西。我猜当一名轨道维护者让这种学习更进一步了?
确实。我现在写的测试比以前多。并不总是严格意义上的 TDD,有时测试是后写的而不是先写的。不过,它影响了我组织代码的方式,我会去掉不必要的依赖,让测试更容易。
我花很多时间审阅 problem-specifications 代码仓库里的 issue 和 PR,我们就是在那里用与语言无关的方式定义 Exercism 练习的。我从讨论中学到了很多。有时一个建议的改动表面上看起来很简单,但随后的讨论会暴露出问题。我变得更有耐心了。它还教会我在工作中的技术问题上寻找其他可能的角度。
我也对指导有了更多了解,尤其是明白“为什么”而不只是“怎么做”的重要性。我和另外几位程序员一起工作。虽然我比他们大多数人年轻,但我在公司待的时间比他们长,我常常能指出安排机器操作顺序时更高效的做法,或者解释为什么某件事要按特定方式来做。
除了 Exercism 之外,你还是 Delphi MVP,这相当厉害!这是怎么来的?你所在的 Delphi 社区活跃吗?
在建立 Delphi 轨道的初期,我联系了 Embarcadero 的 Jim McKeeth 先生,看我们能不能拿到 Delphi 的开源许可证。这样我们就能用 Delphi 开发新的练习,也能让人们通过 pull request 来贡献。在我们的通信过程中,Jim 邀请我加入了 Embarcadero MVP 计划。
Delphi Praxis 是我熟悉的一个在线社区。Google+ 上流量很大,但它正在走向衰落,所以我们得另找地方。
你有没有用 Delphi 做过别人可以看看的开源应用?
有!Exercism 的 Windows CLI 安装程序是开源的,完全用 Delphi 写成。它会自动判断学生需要哪个版本的 Exercism CLI(32 位还是 64 位),然后下载 CLI、解压,并放到正确的位置。这个安装程序已经被下载了 15000 次,我挺自豪的!
这是了不起的成就!作为一个几乎不做(甚至完全不做)互联网编程的人,你在用 Delphi 制作这个安装程序时遇到了哪些挑战?
这个安装程序最初是用 C# 写的。它已经过时了,我就想看看能不能改进它。我以前从没尝试过这样的事,但我知道 Delphi 有完成这项工作的工具。我先研究原来的 C# 代码,弄清背后发生的事件顺序,然后试着用 Delphi 完成同样的任务。我在 Embarcadero 的文档网站上找到了一些示例代码,它们解释了如何正确地把可用的组件串起来,做成一个 REST 客户端。我还发现了 Delphi 附带的一个好用的小工具,叫 REST Debugger。它让我可以输入并测试让安装程序正常工作所需的各种 HTTP 调用。等这些调用能跑通后,调试器会生成所需组件的副本,我好把它们粘贴到代码里。
对于想更深入参与 Exercism 的人,也许是希望成为维护者的人,你能讲讲你的经历吗?
我是一个本地聚会小组的成员,它叫 Akron Code Club。我们大约每月聚一次,通常会两两结对,做一道群里提议的代码 kata。在 2016 年 8 月的聚会上,我们开始做 Exercism 提供的练习。在我使用 Exercism 和其他一些教学网站的过程中,我觉得如果更多这类在线编程网站能提供 Delphi 或 Pascal 作为选项就好了。在浏览了 Exercism 网站和 Exercism 的 GitHub 代码仓库之后,我发现 Exercism 一直乐于添加新的语言轨道。我不太确定怎样联系 Katrina 最好。我想我是 2016 年 8 月通过 Gitter 联系了她,提议加入 Delphi。大约两个月后我收到了一封道歉的回复,那时我才意识到她不用 Gitter。总之,她问我是否还有兴趣参与添加 Delphi Pascal 轨道,如果有,她就会推动这件事。
现在有一个代码仓库可以用来申请新的语言轨道,你也可以随时在 exercism/exercism 代码仓库里提 issue,联系项目的维护者。
太好了。谢谢你和我聊天,也谢谢你在 Exercism 上的所有付出!
不客气!这很有意思。我很享受参与其中,为 Exercism 尽我所能。在动手中学习!