互联网上充斥着"编程已死"、"AI是新软件工程师"、"软件开发将在2030年前过时"等言论。这些预测背后有一个迷人的论点:我们正在经历编程演化的又一次迭代。
低级语言(如汇编)让位于高级语言(如C和Python)。自此,Python程序员可以舒适地忽略汇编层面。类似地,这个论点认为自然语言现在可以取代经典编程语言,成为构建软件的工具。
编程语言之所以会保留下来,是因为它们(与自然语言不同)是形式化的,因此用它们编写的程序构成了一系列完全指定的指令。
当执行命令x = 1+2时,x在执行后总是会获得值3。这对任何软件中的任何命令都适用——关于命令的预期行为没有歧义。正是这个属性让我们能够完全信任软件,知道今天有效的代码明天也会有效,在一台机器上的代码在另一台机器上会表现相同。
另一方面,自然语言中的指令本质上是未充分指定的,即使在指令相关的关注层面上也是如此。例如,如果一个女人让她的丈夫"去超市买些牛奶",丈夫通常会假设动词"买"意味着"购买"而不是"偷窃"。
"构建软件最难的是决定要说什么,而不是怎么说"
——Fredrick Brooks博士,《没有银弹》
我们可以将程序员视为翻译者:一类特殊的翻译者,他们从一种类型的语言(人类的、自然的、未充分指定的)翻译成另一种(形式化的、完全指定的)。
从自然语言移动到完全指定的语言迫使程序员/翻译者对他们手头任务的理解达到更高的清晰度。详细说明(=完全指定)各种情况应如何处理的过程,不仅仅是写出已知内容;它是一个发现和揭示的过程,揭示出源语言未充分指定性质所允许掩盖的所有隐藏假设和后果。
原型、副项目和探索性代码都是氛围编程蓬勃发展的场景,因为用户不关心正在构建产品的许多方面。他们希望某些核心逻辑能够基本工作,而不必考虑许多细节。
使用氛围编程可以如此轻松地生成想法原型,这可以成为巨大的生产力放大器。其原因直接来自我们上面的分析:看到自然语言陈述的完全指定实例可以帮助开发人员、产品经理和客户澄清他们真正想要的是什么——这是探索和发现流程的一部分。
在本文中,我们试图阐述经典编程不会很快消失,也不会被"人类"取代的观点。我们认为,如果我们要保留今天软件产品的许多属性,形式化语言必须是我们用来与计算机交流的语言。
当一个人学习编程时,他们确实学习了一门新语言,但他们在工作中培养的、可以从一门编程语言转移到下一门编程语言的技能,与语言技能相当不同。这些包括(但不限于):
这些是程序员为工作带来的更深层次技能。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。