ほとんどのコメント投稿者が見逃していることは、実際にはあなたの質問にとって非常に重要だと思います-ドメインの専門家と協力して、彼らの理論をテストするためのモデルの実装を構築しているという考えです.
そこにあるソフトウェアエンジニアリングのほとんどは、この体制についてではありません-そして、あなたが言うように、これは、いくつかのビジネスプロセスの実装またはRFCxxxxを実装する必要があるサーバーの構築とは質的に異なるだけです.
科学者に責任あるソフトウェア エンジニアリングの非常に基本的なことを教えようとしている (例: Greg Wilson のSoftware Carpentry ) と、ソフトウェア エンジニアリングの人々に大規模な計算科学について教えている (例: Steve Easterbrook の非常に興味深いブログ)という、両端からこれに取り組んでいる人々がいます。、これは特に関連性があります)。なぜ物事がこの面で原始的なのか、私にはわかりません。どちらもブログロールに関連する同僚へのリンクがあります。
このレジームには、あなたが教えられたかもしれないものとは多くの重要な違いがあります. 1 つには、科学ソフトウェアの全体的な構造は一般に非常に単純ですが、その繊細さは非常に高く、数値の各行は、多くの分野における 10 年間の科学文献の結果である可能性があります。第二に、仕様の全体的な考え方がひっくり返されます。仕様は「現実を正確にモデル化する」ものであり、科学者が持っているのは、科学者がそれを望んでいるモデルです。ある意味で、科学的なコード開発は、ドラフト仕様を実装することと、実際の仕様を模索することの両方です。
@vfilby は正しい考えを持っています - 継続的な顧客の関与 - しかし、それはそれ以上のものです. これが機能するためには、科学者→理論→テスト→解釈→理論の更新というサイクルではなく、科学者→理論→あなたがコード化する→あなたと科学者の両方が自分自身を解釈するというサイクルに入る必要があります。部品→理論および/または実装の更新。ドメイン サイエンティストは、自分が望むものを最適に実装する方法や、モデルの実装結果からモデルの結果を解きほぐす方法をあなたほどよく知りません。一方、彼らはモデルの意味をあなたよりもはるかによく理解し、理論を更新する方法を理解するでしょう.
これは、バランスを取るのが難しい行為です。それが機能するためには、双方が (a) 他の専門分野を尊重し、(b) その他の分野について少し学び、(c) プロジェクト全体に投資する必要があります。この種の学際的なプロジェクトは、成功するよりも失敗することが多いですが、非常に重要です。簡単で確実に機能するヒントがあればいいのにと思います。