编程不是为了编程而编程(我们为什么要把编程作为一种思考方式)

编程已经改变了。在像FORTRAN和C这样的第一代语言中,程序员的编程压力是将高级概念转换为代码。在现代编程语言中 - 我将使用Python作为示例 - 我们使用函数,对象,模块和库来扩展语言,这不仅使程序更好,而且改变了编程。

编程过去常常是关于转换的:用自然语言表达思想,同时使用一些数学符号,然后编写流程图和伪代码,最后编写程序。转换是必要的,因为每种语言提供了不同的潜在能力。自然语言具有表现力和可读性,伪代码更精确,数学符号简洁,代码可执行。

但翻译的代价是,我们被限制在能用每种语言有效表达的观点的子集里。有些很容易用数学符号表达的思想很难用数学符号表达,而我们在数学中所做的符号操作在大多数编程语言中都是不可能的。

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

编程不是为了编程而编程(我们为什么要把编程作为一种思考方式)(1)

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

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

编程不是为了编程而编程(我们为什么要把编程作为一种思考方式)(2)

编程的重要目的当然就是为了能跑通代码,但它还有更多的意义。那就是通过执行代码的能力使编程成为思考和探索的工具。当我们以程序的形式表达想法时,我们使它们成为可测试验证的;当我们调试程序时,我们也在调试我们的大脑。

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

当我编写这本书的时候,我同时编写代码来检验我自己的理解,同时把这些理解都解释给我的学生们听。学生们也可以来运行代码来去开发一个心智模型,进行修改以测试他们自己的预测,为他们的项目扩展我的代码。

大多数教科书和课堂都靠学生们主要使用纸和铅笔来工作并使用数学这门工具来传授信号处理。使用这种方法,唯一的选项是“自下而上”,从学习复数算术这个并不是最热点的专题开始,并花费数周的时间和许多页纸的篇幅才能达得相关的应用程序这个阶段。

用一种计算方法,我们可以“自顶向下”,从实现最重要算法的库开始,比如快速傅里叶变换。学生可以先使用这些算法,然后学习它们是如何工作的。他们可以看到最重要的想法,比如光谱分解,而不会被细节所蒙蔽。他们可以在真正的应用程序上工作,在第一天,提供动机去更深入。他们可以有更多的乐趣。为了证明这一点,我写了一本名为Cacophony for the whole family的笔记本。如果你点击那个链接,你可以看到代码并听例子。它使用我写的库来模拟一个小学乐队的声音,乐器走调,一些孩子随机地弹奏错误的音符。它的意思是愚蠢(有点卑鄙),但它也展示了我们如何感知声音和解释一个复杂信号的音高方面。

我称之为现代的语言并不是特别新;事实上,Python已经有超过25年的历史了。但是高中和大学还没有广泛地教授这些课程。即使是在采用它们的地方,Python也没有被恰当地使用。

现代编程语言在性质上不同于它们的前辈,我们也只是刚刚开始认识到这种差异的含义。

英文原文:Programming as a Way of Thinking;参与翻译 (3人) : ZICK_ZEON, liyue李月, 硅谷课堂。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页