科学程序员的阅读清单

时间:2009-11-04 04:32:56

标签: c++ c fortran scientific-computing

我正在努力成为一名科学程序员。我有足够的数学和统计学背景,但缺乏编程背景。我发现学习如何使用语言进行科学编程非常困难,因为SP的大部分参考都是微不足道的。

我的工作涉及统计/财务建模,没有物理模型。目前,我广泛使用Python与numpy和scipy。完成R / Mathematica。我知道足够的C / C ++来读取代码。没有Fortran的经验。

我不知道这对于科学程序员来说是否是一个很好的语言列表。如果是这样,那么在科学环境中学习这些语言的语法设计模式的好阅读列表是什么。

17 个答案:

答案 0 :(得分:36)

在某个阶段,您将需要浮点运算。做得好,难以胜任,并且很容易做得很差。这篇论文是必读的:

What Every Computer Scientist Should Know About Floating-Point Arithmetic

答案 1 :(得分:25)

我完全推荐

科学与工程C ++:Barton和Nackman的高级技术与实例介绍

不要被它的年龄推迟,这是非常好的。使用您喜欢的语言(只要它是C,C ++或Fortran)的数字食谱是简洁的,非常适合学习,而不是每个问题的最佳算法。

我也喜欢

C ++和MPI中的并行科学计算:并行算法的无缝方法及其实现Karniadakis

越早开始并行计算越好。

答案 2 :(得分:12)

我的第一个建议是,你看看你所在领域的前5所大学,看看他们正在教什么以及教授们用于研究的内容。这就是你如何发现相关的语言/方法。

另外查看this stackoverflow question ("practices-for-programming-in-a-scientific-environment")

您正在进行统计/财务建模吗? I use R in that field myself,它很快成为统计分析的标准,特别是在社会科学中,但也在财务方面(例如,见http://rinfinance.com)。 Matlab可能仍然在工业中得到更广泛的应用,但我感觉这可能正在发生变化。如果性能是一个主要因素,我只会回到C ++作为最后的手段。

查看这些相关问题,以帮助查找与R相关的阅读材料:

就与统计和财务相关的图书建议而言,我仍然认为最好的一般选项是David Ruppert's "Statistics and Finance"you can find most of the R code herethe author's website has matlab code)。

最后,如果您的科学计算不是统计学的,那么我实际上认为Mathematica是最好的工具。程序员似乎很少提及,但在我看来,它是纯科学研究的最佳工具。它对matlab的积分和偏微分方程等事物提供了更好的支持。他们有一个nice list of books on the wolfram website

答案 3 :(得分:10)

在语言方面,我认为你的报道很好。 Python非常适合实验和原型设计,Mathematica非常适合帮助理论化的东西,如果你需要进行严格的数字处理,C / C ++就可以了。

我可能还建议您开发一种汇编语言和函数式语言(例如Haskell),不是真正使用它,而是因为它们对您的编程技巧和风格以及概念的影响。他们带回家给你。他们可能也有一天会派上用场。

我还认为了解并行编程(并发/分布式)至关重要,因为这是获取科学问题有时必需的计算能力的唯一方法。无论你是否真的使用函数式语言来解决问题,接触函数式编程在这方面都会非常有用。

不幸的是,我在阅读方式上没有太多建议,但您可能会发现The Scientist and Engineer's Guide to Digital Signal Processing有帮助。

答案 4 :(得分:7)

我是一名科学程序员,在过去两年刚刚进入该领域。我正在进行更多的生物学和物理学建模,但我打赌你所寻找的是非常相似的。当我申请工作和实习时,我认为有两件事情并不重要,但却让我错过了机会。一个是MATLAB,已经提到了。另一个是数据库设计 - 无论你在SP的哪个区域,都可能会有很多数据必须以某种方式进行管理。

Michael Hernandez的书 Database Design for Mere Mortals 被推荐给我作为一个良好的开端并在我的准备中帮助了我很多。如果你还没有,我还要确保你至少理解一些基本的SQL

答案 5 :(得分:6)

我建议任何数字食谱书(选择一种语言)都有用。

根据您使用的语言或您将进行可视化,可以提供其他建议。

我非常喜欢的另一本书是Object-Oriented Implementation of Numerical Methods,由Didier Besset撰写。他展示了如何在Java和smalltalk中完成许多方程式,但更重要的是,他在帮助展示如何优化计算机上使用的公式以及如何处理由于计算机限制的错误方面做得非常出色。

答案 6 :(得分:4)

答案 7 :(得分:4)

科学程序员面临的一个问题是维护代码(和数据)的存储库,其他人可以使用它来重现您的实验。根据我的经验,这是商业开发中不需要的技能。

以下是对此的一些解读:

这些是在计算生物学的背景下,但我认为它适用于大多数科学编程。

另外,请查看Python Scripting for Computational Science

答案 8 :(得分:4)

MATLAB广泛用于工程设计,快速开发甚至是生产应用程序(我目前的项目有一个MATLAB生成的DLL,用于执行一些比我们的原生C ++更容易做的高级数字运算,并且我们的FPGA使用用于信号处理的MATLAB生成的内核也比在VHDL中手动编码更容易。还有一个financial toolbox for MATLAB可能会让您感兴趣。

这并不是说MATLAB是您所在领域的最佳选择,但至少在工程领域,它已被广泛使用,而且不会很快出现。

答案 9 :(得分:4)

Donald Knuth关于基础数学算法的书。

答案 10 :(得分:3)

对于科学环境中的通用C ++,Andrei Alexandrescu的Modern C++ Design可能是关于常见设计模式的标准书。

答案 11 :(得分:2)

一旦您启动并运行,我强烈建议您阅读此blog

它描述了如何使用C ++模板提供类型安全单元。因此,例如,如果您将速度乘以时间,则可获得距离等。

答案 12 :(得分:2)

阅读源代码也有很大帮助。 Python在这个意义上很棒。通过挖掘科学Python工具的源代码,我学到了大量的信息。除此之外,您最喜爱的工具的邮件列表和论坛可以进一步提高您的技能。

答案 13 :(得分:0)

答案 14 :(得分:0)

答案 15 :(得分:0)

Writing Scientific Software: A Guide to Good Style是一本很好的书,对现代科学编程提出了全面的建议。

答案 16 :(得分:-1)

对于Java,我建议您查看Unit-API
实现是Eclipse UOMo(http://www.eclipse.org/uomo)或JScience.org(单元API正在进行中,JSR-275的早期实现存在)