这是编程环境,而不是编程语言

2020-08-30 03:01:32

根据我们共同组成的单个工具(如命令行实用程序、部署管道、容器和服务,以及最明显的编程语言)来讨论我们构建软件的方式是很常见的。编程语言似乎在我们编写软件的所有方面都得到了最高级别的审查。在过去的十年里,我认为我们看到了编程语言创新的健康复兴,这是由诸如Rust、Go、OCaml、Zig和SWIFT这样的语言推动的,这些语言通过实用的软件包为工业编程世界带来了新的想法。

但是,虽然编程语言在学术上很有趣,但我认为我们更迫切需要编程环境的创新。

编程环境不是我们工作流程中的单个组件,而是工具协同工作所实现的总和。该环境包含编程语言,但也包括调试体验、依赖项管理、我们如何与其他开发人员通信(源代码内和源代码外)、我们如何跟踪和观察生产中的代码,以及从设计API到从失败中恢复的所有其他内容。

编程语言演变的故事也是一个关于好的编程环境应该赋予开发人员哪些能力的想法不断涌现的故事。许多语言之所以流行,不一定是基于它们作为伟大语言的优点,而是因为它们与一些理解软件并编写更好的软件实现的新的、强大的能力相结合。

C语言为(当时的)高级程序带来了实用的可移植性。从字面上讲,C将编程环境从特定于处理器的汇编代码提升为通用语言。传统非常强大,以至于我们今天在生产中使用的大多数语言要么是C的直接后代,要么继承了它们的大部分语法,比如花括号描述的块和结构、分号语句结束符和带括号的函数调用。

JavaScript在浏览器之外很受欢迎,几乎完全是因为它的生态系统的优点、它的工具以及由repl实现的微不足道的调试体验。JavaScript的编程环境完全是交互式的、可视化的和实时的,不需要笨重的调试设备。这种交互性的影响是显而易见的,因为我的许多开发人员朋友开始在Web上编程,这显然是因为这是编写产生我们可以看到和共享的输出的程序的最简单方式。

Go的名气和主要设计目标之一就是编译速度。与其前身C++相比,Go编译速度更快。当你做一些快速的东西时,人们开始以不同的方式使用它。

Erlang具有高级的、并发的、消息传递运行时,为构建高可用性、高可靠性的系统提供了更好的方法。它诞生于电信行业,但已经在许多其他关键服务行业找到了归宿。

精心设计的编程环境是软件行业的宝藏。当我们因为“工具”、“IDE体验”或“工作流程”而选择一种语言时,我们真正要做的是判断我们想要在其中生活和成长的编程环境。

在对新语言的投资和社区进行实验的意愿之间,有大量的创造性能量被投入到发明更好的语言上。我认为,如果我们同样深入地投资于重新思考我们编写这些程序的上下文,那将会对我们很有帮助。我们应该问这样的问题:

虽然专业的图片编辑器和视频游戏可以在浏览器中运行,但为什么我们还在终端中使用打印线条的repl呢?

编译时/运行时的区别有意义吗?在软件开发和部署过程中,我们是否可以更好地控制开发人员何时执行他们的代码?

对于像NPM这样的大型开源社区,我们今天拥有的工具有足够好的基础吗?我们如何改进编程环境和我们的工具,以最大限度地利用拥有数亿个库和数十亿行代码的软件包存储库?

有些人试图创建更好的编程环境。Repl.Repl.它为浏览器带来了通用的开发。像Light Table这样的实验将源代码与其输出更紧密地结合在一起。Jupyter笔记本是编写和共享专注于迭代过程的代码的独特方式。

但这些也是围绕语言构建的工作流和工具,而这些语言从来都不是为这种交互体验而设计的。我认为,如果我们建立一种文化,将编程环境视为创造性创新的成熟场所,我们将看到一类新的软件开发工具出现,它们最大限度地利用了当今的机器和网络,并允许我们编写以前无法编写的新型软件。

如果你喜欢这篇文章,你可能也会喜欢我的下一个帖子,关于引领科技行业的变革。

我在我的时事通讯上分享这样的新帖子。如果你喜欢这个帖子,你应该考虑加入这个名单。