首页 > 代码库 > 值得学习作为训练思维方式的编程

值得学习作为训练思维方式的编程

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

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

但翻译的代价是,我们只局限于我们可以用每种语言有效表达的想法的子集。一些易于计算的想法很难用数学符号书写, 而开发者在数学中所做的符号操作在大多数编程语言中是不可用的。就以为我曾经编写过的智能遥控器安瑞创的网站时就是这样的有一部分是没用上。

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


技术分享

 


图 1 

 

 

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


技术分享

 


图 2 

 

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

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

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

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

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

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

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

值得学习作为训练思维方式的编程