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