我应该为计算科学学习哪种语言?


11

我对计算科学的概念完全陌生,并且正在寻找一个良好的起点。

我知道没有客观上最好的语言,但是我想学习一门在计算科学方面毫无疑问地强大和突出的语言-一种被认为具有卓越能力和效率的语言。

首先,我倾向于与原子键合和相互作用有关的建模,需要图形表示/模拟。

在某些领域,某些语言是否倾向于比其他领域更好(即物理与纯数学)?还是基于其他因素选择语言?

我听说过很多名叫Fortran的名字。

有什么建议吗?


1
C ++和Fortran是社区中众所周知的语言。最近,您可以看到动态语言的使用正在增加。通常,您选择的是图书馆而不是语言。
vanCompute

9
我想起了这样的格言,即Real Programmers可以用任何语言编写Fortran。
hardmath

1
这里是有很多答案的一个非常类似的问题:scicomp.stackexchange.com/questions/304/c-vs-fortran-for-hpc
昂德里杰·塞蒂克

1
“我知道没有客观上最好的语言”-确切地说,为什么不学习与语言无关,以便您可以用扔给您的任何语言来写作?
JM

2
你必须精通英语。没有它,您将不会在计算科学中获得任何帮助。
约翰内斯,

Answers:


15

通常,它取决于您可以使用的数字库,这将有助于完成您的任务。C / C ++具有为它们实现的大量数字库,但是作为低级语言并不是最好快速原型化的东西。

我认为要快速寻求解决方案,建议使用Matlab或Mathematica之类的方法。它们具有大型工具集,并且非常高级。最有可能的是,您的实现无法扩展到生产用途,但这可能是尝试不同方法的理想场所。一旦知道要走的路,就总是可以更有效地在C / C ++中实现某些东西。


4
许多人-学术界内部和外部的人-都不真正信任代码,除非它至少具有一些最小的自动化测试套件。我不知道在matlab和mathematica中这种工具的工具是什么样的,但是对于更主流的语言(如Python和C ++),有一些不错的软件包。
cjordan1

3
MATLAB具有MATLAB xUnit,但是Python和C ++具有更多(我认为更好)的测试套件。
Geoff Oxberry

24

蟒蛇!

  1. 直接使用numpy库,小脚本和ipython交互式外壳开始。
  2. 在众多免费书籍和教程的帮助下获得更高级的知识。
  3. 使用scipy作为高性能数值例程的前端和matplotlib进行可视化可提高生产力
  4. 充分利用KrypyFeNiCS其他众多功能强大的科学计算模块
  5. 注意,平面和面向对象的编程之间的平稳过渡以及Python固有的模块化特性使大型项目易于处理。
  6. 只需重写cython中的关键部分,即可使您的代码与C或Fortran一样快。您还可以轻松地包括用Fortran或C编写的例程

我认为这是解决科学计算问题的最佳方法。首先通过小脚本中的玩具示例来解决问题。变得更加系统化,并建立了一套代码。然后使您的代码正常工作!!!最后,如有必要,请进行代码优化。不要重新发明轮子,也不要做过早的优化。

(其他优点:Python是免费提供的-没有许可证问题,大型社区,例如在stackoverflow上,用于单元测试或日志记录的良好编程的模块...)




5

Fortran:Matlab一样,易于学习和使用,并且可以快速产生成果,但仅适用于数值计算

C ++:难以掌握(将花费您数年),但在数值计算(工作安全性)之外使用了很多知识

Python:这些天推荐很多,但是对于非琐碎的工作来说太慢了。您将用C编写所有潜在的计算上的基础内核,然后从Python调用它们,这意味着您必须学习(至少)两种语言


1
我认为Fortran和C ++的学习曲线有些相似。我在这两种方法中都学到了足够的技能,以解决问题的最简单方法,这些方法都需要几个月的时间,每个问题都来自于Java,matlab和c#。根据某些人所知道的语言,我可以看到c ++比fortran更容易学习,因为那里的大多数大型代码都是用过时的版本编写的。
Godric Seer

@Godric:Fortran 2008标准约600页,不到C ++ 11的一半(约1300页)
2013年

1
@stali,是的,但是例如,我使用用Fortran77编写的大约25万行遗留代码。因此,我必须学习77的风格以能够使用它,90-95的风格来对其进行可维护的更改(由于常见的块是令人讨厌的),然后是'08以便在过去的十年中不会被卡住。Fortran是一门古老的语言,在过去的几十年中发生了巨大的变化,除非您从头开始,否则了解它的遗产是不平凡的。
Godric Seer

2
我不同意Python是“对于非平凡的工作太慢”的说法。确实,如果仅使用Python编写矩阵向量乘法(等等),那将是一段糟糕的时光。不过,已经为您完成了对一些更高效语言的抽象:NumPy,Scipy可能拥有您所需要的一切。或其他50,000个软件包中的一个。
NicoSchlömer,

1
@NicoSchlömer我同意“对于非平凡的工作太慢了”。我在Python(Numpy / Scipy)中进行的仿真比Fortran90版本中的相同代码慢大约10倍。我推荐Fortran90或C ++。
fronthem '16

4

简短的答案
通过python了解面向对象代码的基础知识,并通过C了解计算机科学的基础知识。当您至少对这两种其他语言都还不错时,可以学习C ++,因为您几乎可以在C ++中做任何事情并使其快速运行(尽管要花很多时间才能编写)。

更长的答案
因此,这就是问题:对于第一个项目,您将在别人的实验室中研究别人的代码。在这种情况下,它们将成为选择编程语言的人。我个人认为这很棒!

我的意思是,作为一个初学者,您一段时间不会真正从肘部了解您的屁股,尤其是当您不知道自己在做什么时,学习编程会很无聊。因此,拥有来自他人代码的结构和限制是一件好事,而只有来自于实际项目的工作才具有动力和兴奋是一件好事。

尽管如此,无论您的实验室使用什么语言(尤其是Matlab),您都应该学习python,C和C ++。特别是,如果您不是来自计算机科学背景,则必须阅读Kernighan和Ritchie的“ The C Programming Language”。它已经35岁了,给人的独特印象是它的作者正在用打孔卡编程,但这是最稀有的鸟类:一本永恒的计算机科学书籍。这将使很多事情变得更加清晰。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.