“计算科学家”有点宽泛,因为它包括使用纸/LaTeX 和概念验证实现进行数值分析的人,编写通用库的人,开发解决某些类别问题的应用程序的人,以及使用这些问题的最终用户应用程序。这些组需要的技能是不同的,但是对“全栈”有一定的了解有很大的优势。我将描述我认为这个堆栈的关键部分,在那个级别工作的人当然应该有更深入的知识。
领域知识(例如物理和工程背景)
每个人都应该知道他们正在解决的问题类别的基础知识。如果您研究 PDE,这意味着您对几类 PDE(例如 Poisson、弹性以及不可压缩和可压缩的 Navier-Stokes)有一定的了解,尤其是哪些属性对于“精确”捕获很重要,以及哪些属性可以达到离散化错误(这会告知有关局部守恒和辛积分器的方法选择)。您应该了解应用程序感兴趣的一些函数和分析类型(升力和阻力优化、故障预测、参数反演等)。
数学
每个人都应该对与他们的问题领域相关的方法类有一定的了解。这包括稀疏与密集线性代数的基本特征、“快速方法”的可用性、空间和时间离散化技术的属性以及如何评估物理问题的哪些属性需要离散化技术适合。如果您主要是最终用户,那么这方面的知识可能非常高。
软件工程和图书馆
熟悉抽象技术和库设计对计算科学领域的几乎每个人都有用。如果您使用概念验证方法,这将改进您的代码的组织(使其更容易被其他人“翻译”成一个健壮的实现)。如果您从事科学应用程序,这将使您的软件更具可扩展性,并使与库的交互更容易。在开发代码时要采取防御措施,以便尽早检测到错误并且错误消息尽可能提供信息。
工具
使用软件是计算科学的重要组成部分。熟练使用您选择的语言、编辑器支持(例如标签、静态分析)和调试工具(调试器、valgrind)大大提高了您的开发效率。如果您在批处理环境中工作,您应该知道如何提交作业和获取交互式会话。如果您使用已编译的代码,那么了解编译器、链接器和 Make 等构建工具的工作知识将节省大量时间。版本控制对每个人来说都是必不可少的,即使您独自工作。学习 Git 或 Mercurial,并将其用于每个项目。如果您开发库,您应该完全合理地了解语言标准,以便您几乎总是在第一次编写可移植代码,否则当您的代码没有在他们的时髦环境中构建时,您将被用户支持请求所淹没。
乳胶
LaTeX 是科学出版和协作的事实标准。熟练使用 LaTeX 对于能够传达您的结果、就提案进行协作等非常重要。编写图形创建脚本对于可重复性和数据来源也很重要。