为什么是SageMath?

丹·德雷克

首先,我想说一下我是如何使用SageMath的:首先,我把它用于我自己的研究,也用于我的教学——我在微积分和微分方程课程中使用过它,下学期将在离散数学课程中使用它。大多数时候我在讲课时用它来做示范,但总有一天我希望能把圣哲数学融入家庭作业中。

免费啤酒意味着:

我可以把它安装在我想要的任何地方--我的办公室电脑,我的笔记本电脑,讲堂里的电脑,任何地方。我花了整整零时间在想我正在做的是不是网站许可证允许的,想知道我们什么时候能得到下一个版本,等等。
免费意味着我的学生可以使用它。在我读研究生的那所大学里,我们用Matlab和Mathematica来学习我们的工程微积分课程。在第一个星期里,我会在计算机实验室里走来走去,假装没听见大家说“如果你想在家里使用它,就去[盗版软件最受欢迎的网站/服务]下载它。”有了SageMath,*我*说,“如果你想在家里使用,就去SageMath.org下载。”
因此,那些原本打算盗版软件的学生,通过不做非法的事情(并冒着安装恶意软件的风险)而获益,但诚实的学生也从中受益。每个人都可以下载和使用SageMath,所以我可以从课堂上取一个演示,然后发布,然后*每个人*他们可以在课后看它并与之互动,而不是仅仅看着我摆弄它。 当然,Mathematica有他们的“播放器”应用程序,但是有了SageMath,我的学生可以轻松地为自己修改演示,这对Mathematica播放器来说是不可能的。
免费也意味着毕业并进入工业领域的学生可以继续使用SageMath。Maplesoft可能不会有兴趣起诉一个将Maple放在笔记本电脑上并且其大学拥有网站许可证的学生,但是如果你的公司正在开发一个产品,并且使用了Maple的盗版副本,他们将不会高兴。

Python的意思是:

您已经熟悉了一种最好的、最流行的编程语言,它适用于所有平台,并且在整个行业中无处不在。我的数学课上的学生不是数学专业的学生,他们将在工业领域工作,通过学习一点Python来获得一些东西。

语音+Python中的自由意味着:

当学生遇到一个bug时,他们也许能够修复它。与其让他们安静地坐着,耐心等待别人帮他们解决问题,好学生有合理的机会参与解决问题。在当今的教育中,我们鼓励学生成为“主动学习者”,等等;有人说“基于发现的学习”。对于一个学生来说,发现一个错误,意识到它是一个错误,并着手解决它,这是非常符合这些教育哲学的精神的。

对于高水平学生:

数学或类似领域的高年级学生可以在更有意义的层面上参与修复错误,因为他们可能了解正在使用的算法,或者对修复损坏代码的编程有足够的了解。SageMath是为专业水平的实际应用而设计的,因此对于这些学生来说,改进SageMath是一种现实经验,对毕业后的学生很有用。(你愿意雇佣谁?一个完成所有任务的人,还是一个说“我修复了一个被成千上万人使用的大型软件项目的bug并添加了特性”的人
而且,现在本科生的研究非常火爆,萨基数学让学生们能够快速地准备和运行。那些还不是很熟练的程序员的学生必须花大量的时间学习,比如说C,然后浪费大量的时间在指针运算上。SageMath允许那些对数学比malloc()更感兴趣的学生花更多的时间思考数学,而花更少的时间找出代码出现错误的原因。

SageMath笔记本服务器意味着:

笔记本电脑允许网络透明,所以我只需要让SageMath正常工作*一次*,然后在教室里使用网络浏览器。在讲堂里使用共享计算机,安装东西是件痛苦的事——但你完全可以依靠安装的web浏览器。(如果这台电脑只有IE6,就像这里的很多人一样,那么使用Firefox很容易。)这也意味着,如果我让SageMath在一台快速的计算机上运行,那么从其他任何地方访问它时,我就可以享受到这台计算机的好处。

泰德·科桑

威廉:“如果不是太麻烦,如果你有时间的话,你能考虑把一些影响你决定的因素,你为什么选择SAGE,其他竞争对手的表现如何,以及SAGE在实现你所期望的目标方面还有什么不完美的地方吗?”
为什么我选择了非常规的推理课程。我们的计算机工程技术学位是一个半计算机科学和半计算机工程的混合学位,全面强调应用。该项目的教师队伍由2名计算机科学家、2名工程师和1名技术专家组成,该学位旨在培养的学生是一名多面手。我是一名技术专家,这使我能够观察到面向算法的计算机科学方法和面向数学的工程方法来解决问题。
我注意到工程类课程使用MathCad和MatLab这样的软件是非常有优势的,但是在看到CS类如何使用编程语言解决问题之后,MathCad和MatLab这样的工具对我来说似乎没有足够的通用性。我最终决定尝试Mathematica,因为它的设计更一般,尽管工程师们不太明白为什么我会选择它而不是传统的面向工程的软件应用程序:-)我与Mathematica合作了两年多,我喜欢它的数学能力和笔记本用户界面,但是我发现它的编程功能有点难以使用,特别是与我们开始在一些CS类中使用的Python相比。除此之外,我是一个Linux用户,我们的许多学生也是。我发现Mathematica对Linux的支持非常差,我经常遇到需要解决或解决的问题。
当我们开始我们的远程学习计划时,我们选择尽可能多地以开源软件为基础,这也是我决定为Mathmatica找到一个开源替代方案的时候。我认为大多数搜索数学软件的人很快就会找到这张“计算机代数系统”的对比页,我也一样:https://en.wikipedia.org/wiki/computer_代数系统的比较
在排除了所有的专有应用程序之后,我选择了要评估的应用程序的短列表包括Axiom、Mathomatic、Maxima、SAGE和Yacas。那时,我深受Mathamatica的GUI笔记本前端以及MathCad等应用程序的GUI前端的影响。因此,当我评估这个列表中的每个应用程序时,我认为拥有一个漂亮的GUI前端在我的需求列表中是最高的。我最终决定使用运行在TeXmacs内部的Maxima和Python向前推进,有一段时间我认为我已经找到了我想要的东西。Maxima似乎能够处理我的大部分数学需求,Python也能够处理我的大部分计算需求,尽管当时我只是一个新手Python开发人员。在TeXmacs,我也获得了在一个用户界面中包装多种软件工具的经验,我喜欢这种方式所提供的灵活性。然而,我与德州马克公司合作得越多,它就越显得“古怪”。除此之外,我开始希望maxima和Python能够比在TeXmacs中更紧密地合作。我不情愿地决定我需要继续寻找。
对我来说幸运的是,就在这一点上,我经历了一种关于Python的启示。在Python之前我学到的语言是Java,我从C语言开始学习Java。对我来说,Java打开了一个我以前不知道存在的编程新世界,尤其是当我观察到计算机科学家使用它的方式时。然而,当我决定学习Python时,我在Java方面的经验限制了Python的能力。随着我对Python的深入研究,我开始发现Python甚至比Java在C语言中更先进;当我从C语言转到Java语言时,我感觉自己已经从用锤子手动敲打钉子转变成了使用气动钉枪。然而,当我开始掌握像Python这样的动态语言所蕴含的惊人力量时,它开始感觉像是从用钉子枪钉板到指着魔杖,然后让它们出现在一块木板上,只需轻轻一甩手腕。我开始用一种全新的方式来研究Python,我开始用一种全新的方式来解决这个问题。这就是Python在我开始了解如何正确使用它时给我的感觉。我发现自己想更频繁地进入这种思维状态,并保持更长的时间。我也开始相信,我们应该鼓励学生接受这种想法。
正是有了这个新的视角,我重新评估了我之前编制的数学应用程序列表,当我再次审视SAGE时,我对它刮目相看。与其他工具相比,我在其他工具中更能有效地管理这些工具在。我也在改变我的想法:使用丰富的图形化前端输入数学与使用类型化源代码输入数学的价值。当我使用Mathematica时,我通常通过图形笔记本的前端输入几乎所有的输入,因为我认为它在某种程度上优于以ASCII文本输入。我在使用TeXmacs时继续这样想,但随着我进一步研究SAGE的文档,并开始更多地使用它,我开始形成这样的观点:在Python源代码级别工作效率更高,因为停留在Python源代码级别往往会使人的思想处于“亮起”状态我刚才提到的。因此,我从认为教新手数学软件的最佳方法是尽可能地将源代码隐藏在GUI前端之后,转而提出一种方法来教新手如何尽可能容易地编程,以便他们能够有效地使用源代码接口。
总之,我知道这个答案有些抽象,但我就是这样做的:—)
至于SAGE本身在实现我所期望的目标方面还不够完美,我仍在学习如何正确使用SAGE(我也在学习如何正确使用Python),所以我还没有准备好提供建议,但我可能会在将来提出一些建议针对程序员/数学新手。我将尝试开发一个这样的教程,但如果我可以定期在这个电子邮件列表中问一些关于SAGE和数学的愚蠢问题,那会很有帮助。
谢谢,
特德