返回 登录
2

作为训练思维方式的编程

原文:Programming as a Way of Thinking
作者:Allen Downey
翻译:王江平

现代编程语言的强大之处在于其具有强大的表现力、可读性、简洁性、精确性和可执行性的能力。
——艾伦.唐尼 于2017年4月26


Credit: K.lee Wikimedia

从编程语言产生到现在,编程方式有了翻天覆地的改变,在fortran和c等第一代编程语言中,程序员的负担是把高层次的概念转化为代码。在现代编程语言中(以python语言作为示例),使用函数、对象、模块和库来扩展语言, 不仅仅是使程序更好, 而且会改变程序的编程方式。

编程可以理解为:用自然语言表达思想, 用数学符号处理它们, 然后写出流程图和伪代码, 最后写一个程序。翻译是必要的, 因为每种语言都提供不同的功能。自然语言是富于表现力和可读性的,伪代码更精确,数学符号是精简,编码是可执行的。

但翻译的代价是,我们只局限于我们可以用每种语言有效表达的想法的子集。一些易于计算的想法很难用数学符号书写, 而开发者在数学中所做的符号操作在大多数编程语言中是不可用的。

现代编程语言之所以强大,在于其具有强大的表现力、可读性、简洁性、精确性和可执行性的能力。这意味着我们可以消除中间语言, 只需要使用一种语言来探究、学习、传授和思考。


图片描述


图 1

图2显示了用Python实现相同的算法。它比前文的伪代码更短,因为它使用的单词多于符号,所以我认为它更易读。此外,与伪代码不同, 我们还可以对其进行运行、结果显示和调试。


图2


图 2

当然,使程序能够运行是整个编程的要点,但不止这点。执行代码的能力使编程成为一种思考和探索的工具。当我们将思想表达为程序时,我们会使代码变成可测试的;当我们调试程序时,我们也在调试我们的大脑。

像Python这样的语言也是学习和教学的理想选择。例如, 我最近写了一本关于数字信号处理 (dsp) 的书。我使用Python 编写一个简单的库和 Jupyter (它是一个软件开发环境) 构成的在线笔记本, 它将文本、代码和结果结合起来, 包括图像和声音剪辑。

当写这本书时, 我写了代码来测试我的理解并同时向学生们解释。学生们可以运行代码来开发一个智能模型, 进行修改以测试他们的预测, 并扩展我的代码用于他们的项目。

大多数教科书和课程用数学来讲授信号处理,学生们主要用纸和铅笔工作。使用这种方法, 唯一的选择是 “自下而上”, 从复数的算术开始, 这不是最激动人心的话题, 而是花费数周和多个页面来获取相关的应用程序。

通过计算方法, 我们可以 “自上而下”,从实现最重要的算法库开始,如快速傅立叶变换。同学们可以先使用这些算法,然后学习其工作原理。他们可以看到最重要的想法,如光谱分解,而不被细节蒙蔽。在第一天,他们就可以将其应用于实际工作,这就提供了更深的动力。而且他们可以有很多乐趣。为了演示,我写了一个Jupyter笔记,叫做“Cacophony for the whole family”。它用我写的库来模拟小学乐队的声音, 乐器走调,一些孩子随机播放错误的音符。这或许是愚蠢的,但它展示了我们如何感知声音和解释复杂信号的音调。

我所说的现代编程语言不是指最新的编程语言,事实上,Python已面世25年。但还没有在高中和大学广为传授。即使在被采用的地方,也常是使用其风格,而不使用它的强大。

现代编程语言与之前的编程语言着本质的区别,但我们仅仅认识到这种差异而已。

评论