对于简单但可定制的数学程序,开发的语言是什么?

What is a good language to develop in for simple, yet customizable math programs?

我写这封信是为了寻求一些关于在学习编程中选择语言和行动方案的指导。如果这类问题不适合交叉验证,我很抱歉,如果是这样,请通知我到另一个论坛。

我看过一个接一个的新来的问题,问:"什么是最好的语言开始?"然后它总是会引发一场火焰大战,或者有人会回答,"没有最好的语言,最好选择一种语言并开始学习它。"我的问题比这更集中一些。

首先,我一辈子都在编程,能力非常有限。我最深的训练是C++。在我的EECS学位课程中,我决定永远不要做软件开发人员,因为我不能忍受长时间不与人交流。相反,我意识到我想成为一名数学老师,所以这就是我所走的路。

但是现在我已经走上了这条路,我开始意识到也许我可以开发自己的软件来帮助我在课堂上。如果我想演示欧几里得算法,有什么比拥有一个能分解过程的软件更好的方法呢?学生可以把这个软件作为学习的一部分来运行,而高级学生甚至可以自己开发程序。或者,有了iPad,为什么不有一个让学生自己出勤的应用程序呢?它当然会简化课堂管理的一些需求。

显然已经有很多很棒的东西在数学和教育上,但是我想找到一种更直接的方法来创造我的讲座所特有的东西。如果我正在教一种计算百分比的特定方法,我想创建一个与我的教学风格相一致的应用程序,而不仅仅是另一个要求学生学习两次的计算器应用程序。

我现在在课堂上使用最多的是我的统计类的iWork Numbers/Microsoft Excel。学生可以学习基本的统计函数,并将一些数据转换成图表。

我在R上涂了一点,大学时用的是枫木。我已经开始了OS X/IOS开发的基本教程,实际上已经取得了很好的进展,使OS X应用程序能够获取文本字符串,将其转换为数字,并使用模块化的加法和乘法进行加密。我有时会使用wolfram alpha来节省时间来快速求解方程或基础转换。我知道matlab,mathematica,最近人们告诉我去看看python或者ruby。我也知道基本的HTML,虽然现在已经忘记了,但在大学里我学习了JavaScript和Perl。

如果我继续走obj-c/cocoa的道路,我认为它会有很大的好处。不幸的是,我为Mac制作的任何东西都只能在Mac上使用,所以它对我所有的学生来说都不是通用的。也许学习网络语言会更好。其次,我想知道主要的用途是否是数学的,那么也许我的时间应该花在学习Mathematica编程语言,或者R,或者一些不太基于GUI的东西上,而更多的是基于简单的算法编码,比如python或ruby?

似乎Mathematica已经为不同的数学概念提供了很多演示,所以为什么重新发明轮子也是我的一个问题。我认为总的来说,有更多的控制和设计我需要的东西会很好。然后,如果我真的想做一个"出勤"的应用程序或其他什么,我已经有了编程经验,可以更容易地为我的iPad或MacBook设计一些东西。

与此相关的问题是什么是一种好的语言教给我的学生?ConradWolfram在他的TED演讲中说,检查学生理解的最好方法之一就是让他们写一个程序。但是,如果Mathematica为他们自动进行数学运算,那么我不确定这是否会像你写C语言或传统程序语言时那样,有更深入的经验来为他们自己计算逻辑。

我知道编程需要时间来学习,但我也知道在这一点上,我的目标是不能制造出像"小翅膀"这样的应用程序。有了应用程序商店的便利,我的一些工作可能是额外的收入来源,但我认为自己更像是一个业余爱好者,现在,老师希望软件开发能够帮助我成为恶魔。评价数学概念。

我想我会为OSX/IOS推进obj-c/cocoa,但是如果有人对所有其他可用的东西有更好的指导,那将是非常感谢的。我不认为我会完全进入网络(我喜欢应用程序),但也许有人会建议一种很好的方法,将我在Xcode中生成的东西与通用的网络版本连接起来。例如,如果您在obj-c中提出了一个算法,那么将其转换为ruby并在线运行是最容易的,还是有其他更好的方法?


Mathematica对于你问题的第一部分非常棒。我已经使用互动模式(操纵)向我的大学(和我自己)解释事情。它可以产生非常好的动态图形,并且相当有表现力(尽管您的代码最终可能看起来像线噪声)。它是非常强大的,但它对你的影响远远小于你的想象。这很直观,对教学很有好处。

如果你想用一种"简单"的方法来制作一种特定于领域的教学语言,你可以使用scala。作为第一种编程语言,python似乎让人困惑。目标C在我看来是一个完全随机的选择。

然后是数学。这值这个价。但是任何解释和具有交互外壳的东西可能都比编译语言好。英国广播公司基本?


对于通用数学编程来说,没有什么能比得上哈斯克尔。wiki非常广泛,IRC频道(freenode上的#haskell)非常适合提问。如果您在编译时静态链接二进制文件,那么您应该能够在几乎任何系统上运行您的程序(除了一些例外,例如libgmp)。

一旦掌握了数学符号的窍门,haskell代码读起来(大致上)像是数学符号,因此它可以真正帮助那些有动机编写自己程序的学生把事情联系起来。纯功能风格也可能是有益的,因为它较少关注I/O和数据编组(在应用程序中非常有用,在纯数学中可能较少),更多关注函数和算法的实际创建和改进。您甚至可以像在纸上一样编写函数。

如果你真的想认真的话,你也可以研究一下coq或者agda,但是对于大多数课程来说,这可能有点多。

对于一个哈斯克尔的教育计划的想法,看看这个链接。

参数列表也可以在以下位置找到:使用哈斯克尔作为数学家的十一个理由和《哈斯克尔逻辑、数学和编程之路》一书