科学的コードは、一般的なコーディング標準を無視するのに十分な領域ですか?
いいえ、ちがいます。
多くの場合、研究コードは「捨て去られ」、バックグラウンドで開発者ではない人によって書かれますが、学問的な信任は強いものです。私が書いた研究コードのいくつかは、私を泣かせるでしょう。しかし、うまくいきました!
考慮すべきことの1つは、プロジェクトのゲートキーパーが含まれるものを推進することです。大規模なプロジェクトがアカデミック/研究コードプロジェクトとして開始され、最終的には機能しなくなり、混乱になった場合、誰かが率先してリファクタリングする必要があります。
問題を引き起こしていない既存のコードをリファクタリングするには多くの作業が必要です。特に、ドメイン固有であるか、テストがない場合。あなたはいることがわかりますOpenCVのは、スタイルガイドがある完璧ではない場合でも、非常に包括的です。これをすべての既存コードに遡及的に適用しますか?それは..弱い人のためではありません。
すべてのコードが機能する場合、これはさらに困難です。壊れていないからです。なぜそれを修正するのですか?
しかし、これらのプロジェクトは繁栄し、維持され、広く使用されています!
これはある意味での答えです。作業コードは依然として有用であるため、維持される可能性が高くなります。
特に最初は混乱するかもしれません。これらのプロジェクトの一部は、おそらく「一度も再利用する必要はなく、捨てることができる」という1回限りのプロジェクトとして開始されたでしょう。
また、複雑なアルゴリズムを実装している場合、あなた(および科学的な側面に精通している人)はアルゴリズムを概念的によく理解できるため、より大きなメソッドを使用する方が理にかなっていることも考慮してください。私の論文の仕事は最適化に関連していました。メインアルゴリズムロジックを1つの方法として持つことは、それをバラバラにしようとするよりもかなり簡単に理解できます。確かに「メソッドあたり7行」ルールに違反していましたが、別の研究者が私のコードを見て、アルゴリズムへの変更をより迅速に理解できることも意味していました。
この実装が抽象化され、適切に設計されていれば、この透明性は非プログラマーには失われます。
仲間の回答者へ:この質問は、1つ以上の科学分野で計算集約的なタスクを行うためのオープンソースライブラリのコードベースを指します。この質問は使い捨てコードに関するものではありません。答えを書く前に、強調表示されているすべての側面を把握してください。
多くの人は、すべてのオープンソースプロジェクトが「ひどく人気があり、数千/数百万人が使用するライブラリの素晴らしいアイデアを持っている」と考え、すべてのプロジェクトがそのようになるという考えを持っていると思います。
現実には、多くのプロジェクトが開始されて終了します。プロジェクトの途方もなく小さな割合が、OpenCVやVTKなどのレベルに「到達」しています。
OpenCVは、Intelの研究プロジェクトとして始まりました。ウィキペディアでは、「一連のプロジェクト」の一部であると説明しています。最初の非ベータ版のリリースは2006年、つまり最初のリリースから7年後です。当初、目標は完全なコードではなく、意味のあるベータリリースであったと思われます。
さらに、OpenCVの「所有権」が大幅に変更されました。これにより、すべての責任者がまったく同じ標準を採用し、プロジェクトの期間中それらを維持しない限り、標準が変更されます。
また、OpenCVは、Clean Codeからインスピレーションを得たアジャイル宣言が公開される(およびVTKがほぼ10年になる)前に数年間存在したことを指摘する必要があります。VTKは、Clean Codeの公開の17年前に開始されました(OpenCVは9年前の「唯一」でした)。