编程=翻译?

19-02-10 banq
              

本文作者Alvaro Videla,他是FaunaDB的核心开发人员,在瑞士的家中工作,他还是RabbitMQ的核心开发人员,也是构建德国最大约会网站之一的团队的首席开发人员。他是RabbitMQ in Action的合著者。

将现实世界转换为数字抽象需要蒸馏提炼。而且,编程与文学翻译一样,开发者必须了解他们自己存在的偏见。

隐喻Metaphor 是处理新问题和寻找创造性解决方案的有力工具。让我们这里使用一个隐喻:我们如果将编程视为翻译能够从中学到什么?

更具体地说,编程将领域问题(如商店库存,公共图书馆目录,票务预订系统)转换为计算机程序。

当我们将系统从现实世界适应数字世界时,许多因素开始发挥作用。将模拟转换为数字需要离散化,留下一些东西;过滤掉一些东西,或者我们关注一些东西,这些取决于我们的偏见。

传统翻译如何处理偏见问题?程序员可以从中学到什么?

点击标题见原文,大概思想如下:

1. 从根本上说,翻译是一种解释行为。

2. 翻译不仅改变和增加了它的表达,它也影响了原作所用的语言

3. 某个词并不是你认为它的意思,从编程角度来看,在处理遗留代码时,这尤其具有挑战性。作为程序员,我们应该问自己:我们在代码中表示实体的程度如何?如果将来阅读,是否可以理解代码实际上要解决的问题?哪个匹配此代码的可能世界?

4. 在编程中,我们需要引入灵活性元素。我们在平常语言对话过程中具有内在的灵活性、适应和协调我们的对话者我们使用的词语的含义(上下文)。让我们在我们的编程工作中做同样的事情。

Steven S. Skiena曾经不得不设计一种算法来寻找从城市X到城市Y的最便宜的航班。他将这个现实问题转化为程序的第一种方法是使用Dijkstra的最短路径算法。在这里我们看到他的偏见:这是一个图形问题,我将通过使用最短路径来解决它。他的客户很快就清楚地表明,Skiena错过了重要的背景-即航空业规则。他们继续交流,直到Skiena用优先队列解决问题。他不得不抛弃他的偏见并学习新的知识焦点。最终他的解决方案“事实证明,它足够快,可以为用户提供互动响应,”Skiena说。他学到了什么“几乎相同的事情”真正意味着这个问题。

5. 我们需要以一种理解态度来对待编码,即改变和适应是不可避免的。

那么,从翻译提供的框架中看到编程,我们学到了什么?

我们从业务角度看,有很多方法可以将现实世界转化为我们的程序。通过询问客户希望解决我们的问题并有助于我们更快,更直接地满足他们的需求。

从编程的角度来看,我们看到我们的世界会翻译成新版本,可能的愿景投射到同事的脑海中,因为他们试图理解我们的代码试图解决的问题。我们选择了正确的抽象吗?我们是否专注于问题的正确部分?

最后,从道德的角度来看,我们看到将现实世界转化为代码会影响我们计划中代表的现实世界实体以及与之互动的用户。

当我们错误地描绘人们的生活或特征时,代价会很高。

最好的翻译是对正在翻译的原始作品的重要贡献。最好的程序也可以作为关于现实的关键文本。如果是这样,那么程序员有责任帮助改善我们所代表的现实。

              

1