将编程作为一种思维方式

现代编程语言的强大之处在于它们具有表达力强、可读性高、简洁、精确且可执行的特点

加入我们科学爱好者的社区!

本文发表于《大众科学》的前博客网络,反映了作者的观点,不一定代表《大众科学》的观点


编程已经改变了。在第一代语言(如 FORTRAN 和 C)中,程序员的负担是将高层次的概念转化为代码。使用现代编程语言(我将以 Python 为例),我们使用函数、对象、模块和库来扩展语言,这不仅使程序更好,而且改变了编程的本质。

编程过去是关于翻译的:用自然语言表达想法,用数学符号处理它们,然后编写流程图和伪代码,最后编写程序。翻译是必要的,因为每种语言都提供不同的功能。自然语言具有表达性和可读性,伪代码更精确,数学符号简洁,而代码是可执行的。

但是翻译的代价是,我们只能局限于我们在每种语言中能有效表达的那些想法子集。一些在计算上很容易表达的想法,在数学符号中却很难编写,而我们在数学中进行的符号操作在大多数编程语言中是不可能实现的。


关于支持科学新闻报道

如果您喜欢这篇文章,请考虑通过以下方式支持我们屡获殊荣的新闻报道 订阅。通过购买订阅,您将帮助确保有关塑造我们当今世界的发现和想法的有影响力的故事的未来。


现代编程语言的强大之处在于它们具有表达力强、可读性高、简洁、精确且可执行的特点。这意味着我们可以消除中间语言,并使用一种语言进行探索、学习、教学和思考。

图 1

例如,图 1 显示了在流行教科书中使用的伪代码表达的广度优先搜索 (BFS) 算法。作者设计这种语言的目的是使其比当时(1989 年)的大多数编程语言更简洁、更易读。

图 2 显示了用 Python 编写的相同算法。它比伪代码短几行,并且因为它使用的单词多于符号,我认为它更易读。此外,与伪代码不同,我们可以运行它、显示结果并调试它。

图 2

当然,运行程序是编程的全部目的,但它还有更多意义。执行代码的能力使编程成为思考和探索的工具。当我们把想法表达为程序时,我们就使它们可测试;当我们调试程序时,我们也在调试我们的大脑。

像 Python 这样的语言也非常适合学习和教学。例如,我最近写了一本关于数字信号处理 (DSP) 的书。我使用 Python 编写了一个简单的库,并使用 Jupyter(一种软件开发环境)来编写在线笔记本,这些笔记本结合了文本、代码和结果,包括图像和声音片段。

在编写这本书时,我编写了代码来测试我的理解,同时向学生解释。学生可以运行代码来建立一个心理模型,进行更改来测试他们的预测,并为他们的项目扩展我的代码。

大多数教科书和课程都使用数学来教授信号处理,学生主要使用纸和笔进行练习。使用这种方法,唯一的选择是从“自下而上”开始,从复数的算术开始,这不是最令人兴奋的主题,并且需要数周和许多页才能达到相关的应用。

使用计算方法,我们可以“自上而下”开始,从实现最重要算法(如快速傅里叶变换)的库开始。学生可以先使用算法,然后再学习它们的工作原理。他们可以看到最重要的思想,例如频谱分解,而不会被细节蒙蔽。他们可以在第一天就从事实际应用,从而激发他们深入研究的动力。而且他们可以获得更多的乐趣。为了演示,我写了一个名为“全家的不和谐音乐”的 Jupyter 笔记本。如果您单击该链接,您可以看到代码并收听示例。它使用我编写的库来模拟一所小学乐队的声音,乐器音调不准,并且有些孩子随机演奏错误的音符。这本意是傻傻的(而且有点刻薄),但它也展示了我们如何感知声音并解释复杂信号的音调的各个方面。

我所称的现代语言并不是特别新颖;实际上,Python 已经有 25 年以上的历史了。但是它们尚未在高中和大学中得到广泛教授。即使在采用它们的场合,它们也经常以一种没有利用其功能的方式使用。

现代编程语言在性质上与它们的前身不同,但我们才刚刚开始意识到这种差异的含义。

在另一篇文章中,我将介绍更多使用 Python 进行思考、探索、学习和教学的方法。 

 

© . All rights reserved.