我正在努力成为一名科学程序员。我的数学和统计背景足够,但在编程方面缺乏经验。我发现很难学习如何使用语言进行科学编程,因为大多数SP的参考资料都是琐碎的。
我的工作涉及统计/金融建模,没有涉及物理模型。目前,我广泛使用Python与numpy和scipy。我也熟悉R/Mathematica,具备阅读C/C++代码的能力,但没有Fortran的经验。
我不知道这是否是一位科学程序员所需的好编程语言列表。如果是,那么有哪些适用于科学领域的语言语法和设计模式的阅读清单呢?
我正在努力成为一名科学程序员。我的数学和统计背景足够,但在编程方面缺乏经验。我发现很难学习如何使用语言进行科学编程,因为大多数SP的参考资料都是琐碎的。
我的工作涉及统计/金融建模,没有涉及物理模型。目前,我广泛使用Python与numpy和scipy。我也熟悉R/Mathematica,具备阅读C/C++代码的能力,但没有Fortran的经验。
我不知道这是否是一位科学程序员所需的好编程语言列表。如果是,那么有哪些适用于科学领域的语言语法和设计模式的阅读清单呢?
我强烈推荐
Barton 和 Nackman 所著的《Scientific and Engineering C++: An Introduction with Advanced Techniques and Examples》。虽然有些年代久远,但内容非常优秀。如果你喜欢用 C、C++ 或 Fortran 编程语言,那么 Numerical Recipes 就是一部非常全面且能让你从中学到很多东西的优秀指南,但并不总是为每个问题选择了最佳算法。
此外,我也很喜欢 Karniadakis 所著的《Parallel Scientific Computing in C++ and MPI: A Seamless Approach to Parallel Algorithms and their Implementation》,越早开始学习并行计算就越好。
就统计和金融方面的书籍推荐而言,我认为最好的选择仍然是 David Ruppert 的 "Statistics and Finance"(你可以在这里找到大部分 R 代码,作者的网站上有 MATLAB 代码)。
最后,如果你的科学计算不涉及统计学,那么我认为Mathematica是最好的工具。在程序员中似乎很少提到它,但在我看来,它是纯科学研究的最佳工具。它比matlab更好地支持积分和偏微分方程等事项。他们在wolfram网站上有一份很好的书籍列表。MATLAB广泛应用于工程设计、快速开发甚至生产应用(我的当前项目有一个MATLAB生成的DLL,用于执行一些高级数字计算,比在我们的本地C++中更容易实现;我们的FPGA也使用MATLAB生成的核进行信号处理,这比手动在VHDL中编码要容易得多)。此外,还有一个金融工具箱对您可能感兴趣。
这并不意味着MATLAB是您领域的最佳选择,但至少在工程领域,它被广泛使用且不会很快消失。
好的,这是我一直在使用的书单:
《使用OpenMP:可移植共享内存并行编程(科学和工程计算)》
Donald Knuth: 《半数值算法,计算机程序设计艺术第二卷》
此外,我最近发现自己更喜欢使用R而不是Python。