91

背景

去年,我在一所大学的一个物理研究组实习。在这个小组中,我们主要使用LabVIEW来编写程序来控制我们的设置、进行数据采集和分析我们的数据。对于前两个目的,这工作得很好,但对于数据分析来说,这是一个真正的痛苦。最重要的是,每个人大多都是自学成才,所以写的代码通常很乱(难怪每个博士很快决定从头开始重写所有东西)。由于 IT 部门严格的软件和网络规定,版本控制是未知的,并且无法设置。

现在,事情的发展出乎意料地好,但是自然科学领域的人是如何进行软件开发的呢?

问题

一些具体的问题:

  • 您使用什么语言/环境来开发科学软件,尤其是数据分析?有哪些图书馆?(例如,你用什么来绘图?)
  • 是否有针对没有任何重要编程背景的人的培训?
  • 你有版本控制和错误跟踪之类的东西吗?
  • 您将如何尝试为编程创造一个体面的环境,而又不妨碍个别科学家(尤其是物理学家是固执的人!)

到目前为止的答案摘要

到目前为止的答案(或我对它们的解释):(2008-10-11)

  • 似乎使用最广泛的语言/包:
  • 几乎所有受访者都使用版本控制;错误跟踪和其他过程不太常见。
  • 软件木工课程是向科学家教授编程和开发技术的好方法。
  • 如何改善事物?
    • 不要强迫人们遵守严格的协议。
    • 自己搭建环境,把好处展示给别人。帮助他们自己开始使用版本控制、错误跟踪等。
    • 查看其他人的代码会有所帮助,但请注意,并非每个人都可能会欣赏这一点。
4

20 回答 20

27

您使用什么语言/环境来开发科学软件,尤其是。数据分析?有哪些图书馆?(例如,你用什么来绘图?)

我曾经为SciPy的主要企业赞助商Enthought工作。我们与与 Enthought 签约进行定制软件开发的公司的科学家合作。Python/SciPy 似乎对科学家来说是一个舒适的环境。如果您是没有软件背景的科学家,那么开始使用 C++ 或 Java 就没有那么令人生畏了。

Enthought Python 发行版附带所有科学计算库,包括分析、绘图、3D 可视化等。

是否有针对没有任何重要编程背景的人的培训?

Enthought 确实提供SciPy 培训,并且 SciPy 社区非常擅长回答邮件列表上的问题。

你有版本控制、错误跟踪之类的东西吗?

是的,是的(Subversion 和 Trac)。由于我们与科学家合作(通常远离他们),版本控制和错误跟踪是必不可少的。一些科学家需要一些指导才能内化版本控制的好处。

您将如何尝试为编程创造一个体面的环境,而又不妨碍个别科学家(尤其是物理学家是固执的人!)

确保他们熟悉工具链。这需要预先投资,但这会让他们不太愿意拒绝它,转而选择更熟悉的东西(Excel)。当工具失败时(他们会失败),确保他们有一个可以寻求帮助的地方——邮件列表、用户组、组织中的其他科学家和软件开发人员。越多的帮助让他们回到物理领域就越好。

于 2008-09-19T06:48:29.360 回答
22

软件木工课程专门针对从事科学计算的人员,旨在教授软件工程的基础知识和课程,以及如何最好地将它们应用于项目。

它涵盖了版本控制、调试、测试、脚本和各种其他问题等主题。

我已经听了大约 8 或 9 个讲座,并认为这是强烈推荐的。

编辑:讲座的 MP3 也可用

于 2008-09-01T19:14:14.180 回答
16

核/粒子物理在这里。

  • 主要的编程工作过去主要在Fortran中使用CERNLIB (PAW, MINIT, ...) 和GEANT3完成,最近主要是在 C++ 中使用ROOTGeant4完成。还有许多其他专门使用的库和工具,LabVIEW在这里和那里看到了一些用途。
  • 在我从事这项业务时,数据采集通常意味着相当低级的工作。通常在 C 中,有时甚至在汇编中,但随着硬件变得更有能力,这种情况正在消失。另一方面,现在许多板子都是用需要门旋转的FPGA构建的……
  • 一次性、图形界面等几乎可以使用任何东西(Tcl/Tk曾经很大,而且我最近看到了更多的 Perl/Tk 和 Python/Tk),包括一些主要存在于粒子物理社区中的包.
  • 许多编写代码的人几乎没有或根本没有接受过正规培训,并且口头传统的过程非常不均衡,但大多数软件组负责人都认真对待过程并尽可能多地阅读以弥补他们在这方面的不足。
  • 主要工具的版本控制无处不在。但是许多个人程序员因为他们的小任务而忽略了它。正式的错误跟踪工具不太常见,夜间构建、单元测试和回归测试也是如此。

改善事情:

  1. 站在当地软件领导者的一边
  2. 实施您想在自己的领域使用的流程,并鼓励您允许的人也使用它。
  3. 等待。物理学家是经验丰富的人。如果有帮助,他们会(最终!)注意到。

另一个改进的建议。

  1. 花一点时间帮助任何与你直接合作的人。查看他们的代码。告诉他们算法复杂性/代码生成/DRY 或任何他们从未学过的基本知识,因为某位教授曾经向他们扔过一本 Fortran 书并说“让它工作”。向他们灌输流程问题。他们是聪明人,如果你给他们机会,他们就会学习。
于 2008-09-01T18:36:42.507 回答
11

这可能有点切线,但希望是相关的。

我曾经在 National Instruments 的研发部门工作,在那里我为 NI RF & Communication 工具包编写软件。我们经常使用 LabVIEW,以下是我们遵循的实践:

  1. 源代码控制。NI 使用 Perforce。我们做了常规的事情——开发/主干分支、持续集成、工作。
  2. 我们编写了自动化测试套件。
  3. 我们有一些具有信号处理和通信背景的人。我们曾经定期进行代码审查和最佳实践文档,以确保他们的代码符合要求。
  4. 尽管进行了代码审查,但在某些情况下,像我这样的“软件人”不得不重写其中的一些代码以提高效率。
  5. 我完全知道你所说的固执的人是什么意思!我们曾经有人认为指出代码中潜在的性能改进是对个人的直接侮辱!不用说,这需要良好的管理。我认为与这些人打交道的最好方法是慢慢来,不要急于改变,如有必要,准备好做肮脏的工作。[示例:为他们的代码编写一个测试套件]。
于 2008-09-01T18:36:10.700 回答
9

我不完全是一个“自然”科学家(我研究交通),而是一个为数据分析编写很多自己的软件的学者。我尝试尽可能多地使用 Python 编写代码,但有时我在扩展或定制现有软件工具时不得不使用其他语言。在我的领域几乎没有编程培训。大多数人要么是自学成才,要么是从以前或学科外的课程中学习编程技能。

我是版本控制的忠实粉丝。我使用在我的家庭服务器上运行的 Vault 来获取我论文的所有代码。现在我正试图让部门建立一个 Subversion 服务器,但我猜我将是唯一一个使用它的人,至少一开始是这样。我玩过一些 FogBugs,但与版本控制不同,我认为这对单人团队几乎没有那么有用。

至于鼓励别人使用版本控制之类的,这确实是我现在面临的问题。我计划强迫我的研究生在他们为我做的研究项目中使用它,并鼓励他们将它用于自己的研究。如果我教一门涉及编程的课程,我可能会强迫学生在那里也使用版本控制(根据存储库中的内容对他们进行评分)。就我的同事和他们的研究生而言,我真正能做的就是提供一个服务器,依靠温和的说服和树立一个好榜样。坦率地说,在这一点上,我认为让他们进行定期备份比让他们进行源代码控制更重要(有些人在 USB 闪存驱动器上携带他们研究数据的唯一副本)。

于 2008-09-01T18:34:17.617 回答
7

1.) 由于硬件更好,如今脚本语言在大多数情况下都很流行。Perl/Python/Lisp 流行于轻量级应用程序(自动化、轻量级计算);因为我们喜欢 Unix/Linux,所以我在我的工作(计算 EM)中看到了很多 Perl。对于性能方面的东西,通常使用 C/C++/Fortran。对于并行计算,我们通常在 EM 中手动并行化运行,而不是让程序隐式执行(即在计算雷达横截面时通过视角拆分作业)。

2.) 我们只是把人们混入其中。我们拥有的很多代码都非常混乱,但科学家通常是一群不介意这类事情的杂乱无章的人。不理想,但我们有东西要交付,而且人手严重不足。我们正在慢慢好起来。

3.) 我们使用 SVN;但是,我们没有错误跟踪软件。对我们来说最好的是一个 txt 文件,它告诉您特定的错误在哪里。

4.) 我对科学家实施最佳实践的建议:慢慢来。作为科学家,我们通常不运送产品。 科学界没有人因拥有干净、可维护的代码而出名。他们通常会从该代码的结果中获得认可。他们需要看到花时间学习软件实践的理由。慢慢引入新概念并尝试让他们遵循;他们是科学家,所以在他们自己的经验证据证实了版本控制之类的东西的有用性之后,他们就会开始一直使用它!

于 2009-02-28T06:44:36.257 回答
6

我强烈推荐阅读“每个计算机科学家都应该知道的关于浮点运算的知识”。我经常遇到的很多问题都来自浮点编程问题。

于 2008-09-02T21:48:23.333 回答
5

我是一名物理学家,从事凝聚态物理领域的工作,建立经典和量子模型。

语言:

图书馆:

  • Armadillo/ Blitz++ -- C++ 的快速数组/矩阵/立方体抽象
  • 本征/犰狳——线性代数
  • GSL——与 C 一起使用
  • LAPACK / BLAS / ATLAS -- 非常大和快,但不太方便(用 FORTRAN 编写)

图形:

  • GNUPlot——它的输出非常干净整洁,但有时效率不高
  • 原点——绘图非常方便

开发工具:

  • Vim + 插件——它对我很有用
  • GDB - 使用 C/C++ 时的出色调试工具
  • Code::Blocks——我用了一段时间,觉得它很舒服,但我认为 Vim 仍然更好。
于 2010-07-29T20:47:54.277 回答
4

您使用什么语言/环境来开发科学软件,尤其是。数据分析?有哪些图书馆?(例如,你用什么来绘图?)

Python、NumPy和 pylab(绘图)。

是否有针对没有任何重要编程背景的人的培训?

不,但我在多媒体研究实验室工作,所以几乎每个人都有计算机科学背景。

你有版本控制、错误跟踪之类的东西吗?

是的,Subversion用于版本控制,Trac用于错误跟踪和 wiki。如果他们的TOS适合您的项目,您可以从http://www.assembla.com/获得免费的错误跟踪器/版本控制托管。

您将如何尝试为编程创造一个体面的环境,而又不妨碍个别科学家(尤其是物理学家是固执的人!)。

确保基础设施已建立并得到良好维护,并尝试推销源代码控制的好处。

于 2008-09-01T18:53:06.713 回答
4

我在一所英国大学担任物理学家。

也许我应该强调,不同的研究领域对编程的重视程度不同。粒子物理学家(如 dmckee)几乎只做计算建模,并且可能在大型软件项目上进行合作,而像我自己(凝聚态)这样的领域的人相对不经常编写代码。我怀疑大多数科学家都属于后者。我想说的是,编码技能通常被视为对物理学有用,但不是必不可少的,就像物理/数学技能被视为对程序员有用但不是必需的一样。考虑到这一点...

  • 您使用什么语言/环境来开发科学软件,尤其是。数据分析?有哪些图书馆?(例如,你用什么来绘图?)

通常数据分析和绘图是使用通用数据分析包完成的,例如IGOR ProORIGINKaleidegraph,可以被认为是“Excel plus”。这些包通常具有可用于自动化的脚本语言。更专业的分析可能有一个专门的实用程序来完成这项工作,通常是很久以前写的,没有人有来源,而且有很多错误。更多技术人员类型可能会使用已经提到的语言(Python、R、MatLab 和 Gnuplot 用于绘图)。

控制软件通常在 LabVIEW 中完成,尽管我们实际上使用的是有点不寻常的 Delphi。

  • 是否有针对没有任何重要编程背景的人的培训?

我参加过我去过的两所大学举办的关于网格计算、3D 可视化、学习 Boost 等的研讨会。作为本科生,我们学习了 Excel 和 MatLab 的 VBA,但 C/MatLab/LabVIEW 更常见。

  • 你有版本控制、错误跟踪之类的东西吗?

不,尽管人们确实有个人发展设置。我们的代码库位于“服务器”上的共享文件夹中,该文件夹通过同步工具保持最新。

  • 您将如何尝试为编程创造一个体面的环境,而又不妨碍个别科学家(尤其是物理学家是固执的人!)

一步一步来!我正在尝试用更可靠的东西替换共享文件夹,也许找到一个模仿当前同步工具行为的 SVN 客户端会有所帮助。

我想说的是,总的来说,对于大多数自然科学项目,时间通常最好花在研究上!

于 2009-03-21T21:41:06.550 回答
4

前学术物理学家和现在的工业物理学家英国:

您使用什么语言/环境来开发科学软件,尤其是。数据分析?有哪些图书馆?(例如,你用什么来绘图?)

这些天我主要使用MATLAB(易于访问可视化函数和数学)。我以前经常使用FortranIDL。我使用过 C(但我更像是读者而不是 C 的作者)、Excel 宏(丑陋且令人困惑)。我目前需要能够阅读 Java 和 C++(但我不能真正用它们编程),而且我也破解了 Python。为了我自己的娱乐,我现在正在用 C# 进行一些编程(主要是为了获得可移植性/低成本/漂亮的界面)。我几乎可以用我所使用的任何语言编写 Fortran ;-)

是否有针对没有任何重要编程背景的人的培训?

大多数(全部?)本科物理课程都会有一个通常在 C、Fortran 或 MATLAB 上的小型编程课程,但它是真正的基础。我真的很想在某个时候接受过一些软件工程方面的培训(修订控制/测试/设计中等规模系统)

你有版本控制、错误跟踪之类的东西吗?

我最近开始使用 Subversion / TortoiseSVN。我过去合作过的小组都使用了修订控制。我不知道任何使用正式错误跟踪软件的学术团体。我仍然不使用任何类型的系统测试。

您将如何尝试为编程创造一个体面的环境,而又不妨碍个别科学家(尤其是物理学家是固执的人!)

我会尝试在本科阶段介绍一些软件工程思想,然后在研究生阶段通过实践来加强它们,同时提供一些资源的指针,比如上面提到的软件木工课程。

我预计很大一部分学术物理学家将编写软件(尽管不一定全部),他们迫切需要至少介绍软件工程的想法。

于 2008-09-19T18:39:14.383 回答
3

我是英国一所大学的统计学家。通常这里的人使用 R 进行数据分析,如果您了解 C/Perl,则相当容易学习。它的真正威力在于您可以交互式地导入和修改数据。很容易获取大量 CSV(或 Excel)文件并将它们合并,基于其他列创建新列,然后将其放入 GLM、GAM 或其他模型中。绘图也很简单,不需要了解一门全新的语言(例如 PGPLOT 或 GNUPLOT。)当然,您还具有拥有一堆内置功能的优势(从简单的东西,如均值、标准差等)神经网络、样条曲线和 GL 绘图的方法。)

说了这么多,有几个问题。对于非常大的数据集,R 可能会变得非常慢(我只在 >50,000x30 的数据集上真正看到过这种情况),并且由于它是被解释的,因此您在这方面没有获得 Fortran/C 的优势。但是,您可以(非常容易地)让 R 调用 C 和 Fortran 共享库(来自 netlib 之类的库或您自己编写的库。)因此,通常的工作流程是:

  • 弄清楚该怎么做。
  • 在 R 中对代码进行原型设计。
  • 运行一些初步分析。
  • 将慢速代码重写为 C 或 Fortran 并从 R 中调用。

这对我来说非常有效。

我是我部门中唯一使用版本控制的人之一(超过 100 人)(在我的情况下使用带有 githuib.com 的 git。)这相当令人担忧,但他们似乎并不热衷于尝试它出来并满足于传递 zip 文件(恶心。)

我的建议是继续使用 LabView 进行采集(并且可能试图让您的同事就采集工具集达成一致,并使所有人都可以使用),然后将数据导出为 CSV(或类似文件)和在 R 中进行分析。在这方面重新发明轮子真的没有什么意义。

于 2008-11-27T11:41:25.003 回答
2

当然,使用Subversion来保留源代码的最新、正在进行的和稳定的快照副本。这包括用于自制软件工具的 C++、Java 等,以及用于一次性处理的快速脚本。

随着科学和应用工程对“孤独牛仔”开发方法的强烈倾向,将存储库组织成主干、标签和其他任何东西的通常做法 - 不要打扰!科学家和他们的实验室技术人员喜欢旋转旋钮、摆动电极和追踪真空泄漏。让每个人都同意就足够了,比如 Python/ NumPy或遵循一些命名约定;忘记试图让他们遵循神秘的软件开发人员实践和惯例。

于 2008-09-16T03:34:19.040 回答
2

对于源代码管理,由于具有明确的单点真实性 (SPOT) , Subversion等集中式系统更适合科学使用。记录更改并能够调用任何文件的版本,而无需追查在哪里找到东西,具有巨大的记录保存优势。GitMonotone之类的工具:哦,天哪,我能想象随之而来的混乱!当希格斯玻色子经过或超新星爆炸时,在玩弄新传感器时,清楚地记录使用了哪个版本的黑客作业脚本,这将带来幸福。

于 2008-09-16T03:38:56.190 回答
2

您使用什么语言/环境来开发科学软件,尤其是。数据分析?有哪些图书馆?(例如,你用什么来绘图?)

我的本科物理系教授LabVIEW课程,并在其研究项目中广泛使用它。

另一种选择是MATLAB,我没有经验。两种产品都有阵营;每个都有自己的优点/缺点。根据您需要解决的问题类型,一个包可能比另一个包更可取。

关于数据分析,你可以使用任何你想要的数字处理器。理想情况下,您可以使用 X 语言进行硬计算,并将输出格式化为在 Excel、MathcadMathematica或任何风格的 du jour 绘图系统中很好地绘制。不要指望这里的标准化。

你有版本控制、错误跟踪之类的东西吗?

回想起来,我们没有,如果我们这样做,对我们所有人来说都会更容易。没有什么比打破一切并努力几个小时来修复它!

绝对对任何常见代码使用源代码管理。鼓励个人以更通用的方式编写代码。这实际上只是编码最佳实践。真的,你应该让他们教(或上)计算机科学课,这样他们就可以获得基础知识。

您将如何尝试为编程创造一个体面的环境,而又不妨碍个别科学家(尤其是物理学家是固执的人!)

数据采集​​ (DAQ) 和数据分析之间有明显的区别。这意味着,可以对 DAQ 进行标准化,然后允许科学家在他们选择的程序中使用数据。

于 2008-09-16T13:37:28.870 回答
2

另一个不错的选择是Scilab。它有图形模块 à la LabVIEW,它有自己的编程语言,你也可以嵌入 Fortran 和 C 代码,例如。它被用于公共和私营部门,包括大型工业公司。它是免费的。

关于版本控制,有些人更喜欢Mercurial,因为它提供了更多管理和定义存储库的自由。但是,我没有这方面的经验。

对于绘图,我使用Matplotlib。我很快就要制作动画了,而且我已经看到使用MEncoder取得了不错的效果。这是一个包含音轨的示例。

最后,我建议模块化,也就是尽量将主要的代码片段保存在不同的文件中,这样代码的修改、理解、维护和改进会更容易。例如,我编写了一个用于文件完整性测试的 Python 模块,另一个用于图像处理序列等。

您还应该考虑使用调试器进行开发,该调试器允许您检查代码中可设置断点处的变量内容,而不是使用打印行。我已经使用 Eclipse 进行 Python 和 Fortran 开发(虽然我在用它编译 Fortran 短程序时遇到了一个错误的错误,但它可能是一个错误的配置)并且我开始使用Eric IDE for Python。它允许你使用SVN调试、管理版本控制,它有一个嵌入式控制台,它可以用 Bicycle Repair Man 进行重构(它也可以使用另一个),你有 Unittest 等。Python 的一个更轻的替代品是IDLE,包括从 2.3 版开始使用 Python。

作为一些提示,我还建议:

  • 不使用单字符变量。当你想搜索外观时,你会得到无处不在的结果。一些人认为一个像样的 IDE 可以让这更容易,但是你将依赖于对 IDE 的永久访问。即使使用 ii、jj 和 kk 就足够了,尽管这个选择取决于你的语言。(例如,如果代码注释是用爱沙尼亚语进行的,那么双元音就不​​那么有用了)。

  • 从一开始就注释代码。

  • 对于关键应用程序,有时最好依赖较旧的语言/编译器版本(主要版本),更稳定和更好的调试。当然,您可以在以后的版本中使用更优化的代码、修复错误等,但我说的是使用 Fortran 95 而不是 2003、Python 2.5.4 而不是 3.0 等等。(特别是当新版本破坏了向后兼容性时。)许多改进通常会引入许多错误。不过,这将取决于具体的应用案例!请注意,这是个人选择,很多人可能会反对。

  • 使用冗余和自动备份!(带有版本控制)。

于 2009-05-26T21:51:39.997 回答
2

您使用什么语言/环境来开发科学软件,尤其是。数据分析?有哪些图书馆?(例如,你用什么来绘图?)

我用于数字和与科学相关的东西的语言:

  • C(开发慢,调试太多,几乎不可能写出可重用的代码)
  • C++(我学会了讨厌它——开发不像 C 那样慢,但可能会很痛苦。模板和类最初很酷,但过了一段时间我意识到我一直在与它们作斗争并寻找解决方法语言设计问题
  • Common Lisp,还可以,但没有广泛用于 Sci 计算。不容易与 C 集成(如果与其他语言相比),但可以
  • 方案。这一个成了我个人的选择。

我的编辑器是 Emacs,尽管我确实使用 vim 来快速完成编辑配置文件之类的工作。

对于绘图,我通常会生成一个文本文件并将其输入 gnuplot。

对于数据分析,我通常会生成一个文本文件并使用 GNU R。

我看到这里有很多人使用 FORTRAN(大部分是 77,但也有一些 90),还有很多 Java 和一些 Python。我不喜欢这些,所以我不使用它们。

是否有针对没有任何重要编程背景的人的培训?

我认为这不适用于我,因为我毕业于 CS——但我工作的地方没有正式培训,但人们(工程师、物理学家、数学家)确实互相帮助。

你有版本控制、错误跟踪之类的东西吗?

版本控制绝对重要!我将我的代码和数据保存在三台不同的机器中,在世界的两个不同方面——在 Git 存储库中。我一直在同步它们(所以我有版本控制备份!)我不做错误控制,尽管我可能会开始这样做。但我的同事根本不做 BTS 或 VCS。

您将如何尝试为编程创造一个体面的环境,而又不妨碍个别科学家(尤其是物理学家是固执的人!)

首先,我会给他们尽可能多的自由。(在我工作的大学里,我可以选择让别人安装 Ubuntu 或 Windows,或者安装我自己的操作系统——我选择安装我自己的。我没有得到他们的支持,我对发生的任何事情负责我的机器,包括安全问题,但我对机器做任何我想做的事)。

其次,我会看看他们习惯了什么,并让它工作(需要 FORTRAN?我们会设置它。需要 C++?没问题。Mathematica?好的,我们将购买许可证)。然后看看他们中有多少人想学习“额外的工具”来帮助他们提高工作效率(不要说“不同的”工具。说“额外的”,这样就不会有人会“失去”或“让去”或其他什么)。从编辑开始,看看是否有小组想使用 VCS 来同步他们的工作(嘿,你可以呆在家里通过 SVN 或 GIT 发送你的代码——这不是很好吗?)等等。不要强加——展示这些工具有多酷的例子。使用 R 进行数据分析,并向他们展示它是多么容易。展示漂亮的图形,并解释你是如何创建它们的(但从简单的例子开始,

于 2009-11-07T13:25:22.713 回答
2

我建议 F# 作为执行科学相关操作的潜在候选者,因为它与数学结构有很强的语义联系。

此外,它对度量单位的支持,如此处所写,对于确保数学模型和实现源代码之间正确转换非常有意义。

于 2010-03-30T08:16:44.323 回答
1

我不是这方面的专家,但我一直明白这就是MATLAB的目的所在。还有一种方法可以将 MATLAB 与 SVN 集成以进行源代码控制

于 2008-09-01T18:36:38.797 回答
1

首先,我肯定会使用脚本语言来避免解释很多额外的东西(例如,如果你正在编写低级、性能敏感的东西,手动内存管理 - 大部分 - 没问题,但对于那些只是想将计算机用作升级的科学计算器,这绝对是矫枉过正)。此外,看看是否有特定于您的域的内容(如统计数据中的R)。这具有已经使用用户熟悉的概念并具有针对特定情况的专门代码的优势(例如,在 R 的情况下计算标准偏差、应用统计测试等)。

如果您希望使用更通用的脚本语言,我会选择 Python。它要做的两件事是:

  • 您可以在其中进行试验的交互式外壳
  • 其清晰的(虽然有时很长)语法

作为一个额外的优势,它具有用于您想要使用它做的大多数事情的库。

于 2008-09-01T18:40:13.653 回答