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

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

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

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

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

图 1

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

图 2

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

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

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

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

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

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

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

时间: 2024-12-30 19:16:19

值得学习作为训练思维方式的编程的相关文章

CoffeeScript不是一门值得学习的语言

译注:看到这篇文章时发现不论在国内还是国外的网站上都有很多人在争论,很有意思.不过令人汗颜的是有些国人似乎只看了标题就开始吵了起来,如果有兴趣,请耐心看完. ======= 一门不能改变你编程的思维方式的语言是不值得学习的--艾伦·佩利(Alan Perlis) CoffeeScript是一种能够将你用特殊规则书写出的文本转换成一些其他文本的语言,而转换后的文本碰巧就是JavaScript源代码.它经常被描述为将一种编程语言"编译"成JavaScript,就像将其它语言编译成汇编或者J

go语言值得学习的开源项目推荐

谷歌官方维护了一个基于go语言的开源项目列表: https://github.com/golang/go/wiki/Projects 其中有非常多的优秀项目值得学习,有几百行代码适合新手阅读的项目,也有大型如nsq.docker等的项目. 下面推荐几款适合学习的项目: 1.cache2go https://github.com/muesli/cache2go 比较简单的一个缓存库,代码量很少,适合新手学习,可以学习到锁.goroutines等. 2.groupcache https://gith

值得学习的C/C++开源框架(转)

值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力.Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行. 下载链接:http://home.tiscali.cz/~cz210552/webbench.html - 2. Tinyhttpd tinyhttpd是一个超轻量型Ht

是什么让C#成为最值得学习的编程语言

随着 Web.iOS.Android.智能设备的流行,新的编程语言纷纷涌现并表现不俗,如 Ruby,Python,Scala,Go,Node.js,Swift 等.反观已经发展了近20年的 C# 语言(或者这里应该更准确的说是 .Net Framework),因为天生的平台局限,导致很多的 C# 程序员为了生计和前途纷纷转行投入的新语言的怀抱. 就在此时,微软的 .Net Core 横空出世 跨平台:可以在 Windows.MacOS 和 Linux 上运行. 兼容性: .NET Core 通过

目的可疑,但方法非常值得学习的书——leo鉴书56

书中提到写作手法绝对值得学习,为此能够打四颗星. 作者是个买直销产品的.靠写字让别人买自己的东西.当中特别强调了卖的多是太空时代的产品,意思就是读者非常可能并不须要,多半是被眼花缭乱的广告词儿骗了--本书就是讲怎样写相对长篇广告的(作者把这叫文案),以此来看书里写字的初衷就是诱骗读者买那些并不须要的高价玩意. 在书第79页,非常是直白地写到"我要的是让客户掏出血汗钱来购买产品或者服务."至少在我看来血汗钱是用来购买生活必须品的. 尽管说目的可疑.可是写作手法绝对值得学习. 大概算了算从

如何训练自己的编程思路

如何训练自己的编程思路 最近一个周末班的学员,问黄哥你在讲解编程思路训练时,如何想到这个思路的. 首先要解决一个问题,学习编程是学习啥?是纯学习语法吗? 不是,是要学习计算思维,编程思路. 何为计算思维: 计算思维(Computational Thinking)概念的提出是计算机学科发展的自然产物. 第一次明确使用这一概念的是美国卡内基·梅隆大学周以真(Jeannette M. Wing)教授. 计算思维是运用计算机科学的基础概念去求解问题.设计系统和理解人类的行为: 计算思维最根本的内容,即其

目的可疑,但方法很值得学习的书——leo鉴书56

书中提到写作手法绝对值得学习,为此可以打四颗星. 作者是个买直销产品的,靠写字让别人买自己的东西.其中特别强调了卖的多是太空时代的产品,意思就是读者很可能并不需要,多半是被眼花缭乱的广告词儿骗了--本书就是讲如何写相对长篇广告的(作者把这叫文案),以此来看书里写字的初衷就是诱骗读者买那些并不需要的高价玩意.在书第79页,很是直白地写到"我要的是让客户掏出血汗钱来购买产品或者服务."至少在我看来血汗钱是用来购买生活必须品的. 虽然说目的可疑,但是写作手法绝对值得学习. 大概算了算从06年

Linux 程序设计学习笔记----终端及串口编程基础之概念详解

转载请注明出处,谢谢! linux下的终端及串口的相关概念有: tty,控制台,虚拟终端,串口,console(控制台终端)详解 部分内容整理于网络. 终端/控制台 终端和控制台都不是个人电脑的概念,而是多人共用的小型中型大型计算机上的概念. 1.终端 一台主机,连很多终端,终端为主机提供了人机接口,每个人都通过终端使用主机的资源. 终端有字符哑终端和图形终端两种. 控制台是另一种人机接口, 不通过终端与主机相连, 而是通过显示卡-显示器和键盘接口分别与主机相连, 这是人控制主机的第一人机接口.

java学习之第五章编程题示例(初学篇)

1 /* 2 Animal.java 3 */ 4 package animal; 5 6 public abstract class Animal { 7 public abstract void cry(); 8 public abstract String getanimalName(); 9 } 1 //Dog.java 2 package animal; 3 4 public class Dog extends Animal 5 { 6 7 String aa="旺旺"; 8