「Computational Scientist」には、紙/ LaTeXおよび概念実証の実装で数値分析を行う人、汎用ライブラリを作成する人、特定のクラスの問題を解決するアプリケーションを開発する人、およびそれらを利用するエンドユーザーが含まれるアプリケーション。これらのグループに必要なスキルは異なりますが、「フルスタック」にある程度精通していることには大きな利点があります。このスタックの重要な部分であると思うものについて説明します。そのレベルで働く人々はもちろん、より深い知識を持つべきです。
ドメイン知識(物理学および工学の背景など)
誰もが解決しようとしている問題のクラスの基本を知っている必要があります。PDEで作業する場合、これはいくつかのクラスのPDE(ポアソン、弾性、非圧縮性および圧縮性のナビエストークスなど)にある程度精通していることを意味します。特に、「正確に」エラー(これは、局所保存とシンプレクティックインテグレーターに関するメソッド選択を通知します)。アプリケーションに関係するいくつかの機能と分析タイプ(リフトとドラッグの最適化、故障の予測、パラメーターの反転など)について知っておく必要があります。
数学
誰もが自分の問題領域に関連するメソッドのクラスについてある程度一般的な知識を持っている必要があります。これには、スパース対デンス線形代数の基本特性、「高速メソッド」の可用性、空間的および時間的離散化手法の特性、および離散化手法が適切であるために必要な物理的問題の特性の評価方法が含まれます。あなたが主にエンドユーザーである場合、この知識は非常に高いレベルになります。
ソフトウェアエンジニアリングとライブラリ
抽象化技術とライブラリ設計にある程度精通していることは、計算科学のほとんどすべての人にとって有用です。概念実証の方法に取り組んでいる場合、これによりコードの構成が改善されます(他の誰かがそれを堅牢な実装に「変換」しやすくなります)。科学アプリケーションで作業している場合、これによりソフトウェアの拡張性が高まり、ライブラリとのインターフェイスが簡単になります。エラーをできるだけ早く検出し、エラーメッセージができるだけ情報を提供するように、コードを開発する際は慎重に対処してください。
道具
ソフトウェアでの作業は、計算科学の重要な部分です。選択した言語、エディターサポート(タグ、静的分析など)、およびデバッグツール(デバッガー、valgrind)に習熟していると、開発効率が大幅に向上します。バッチ環境で作業する場合は、ジョブを送信して対話型セッションを取得する方法を知っておく必要があります。コンパイルされたコードを使用する場合、コンパイラ、リンカー、およびMakeなどのビルドツールの実用的な知識が多くの時間を節約します。バージョン管理は、一人で作業している場合でも、すべての人にとって不可欠です。GitまたはMercurialを学び、すべてのプロジェクトに使用してください。ライブラリを開発する場合は、言語標準を合理的に完全に理解する必要があります。そのため、ほとんど常にポータブルコードを初めて作成します。
ラテックス
LaTeXは、科学出版とコラボレーションの事実上の標準です。LaTeXの習熟度は、結果を伝えたり、提案に協力したりするために重要です。図の作成をスクリプト化することは、再現性とデータの出自にとっても重要です。