私の質問はこれです。これらのツールを私の研究コードにどの程度組み込む必要がありますか?
あなたが何をしようとしていても、あなたが感じた分だけが報われるでしょう。主にMATLABスクリプトを実行している場合は、バージョン管理とユニットテストで十分です。MEXファイルがある場合、MEXファイルをビルドするたびにコンパイルコマンドのシーケンスを入力するのは壊れやすいので、MEXファイルをコンパイルしてMakefileを作成することは、おそらく自分の正気のためだけにするとよいでしょう。
これらのワークフローツールが使用され、大規模なプロジェクトに組み込まれる理由の1つは、これらのツールへの投資が彼らの目標に見合うものになるためです。例として、論文をサポートする1回限りのリサーチコードの場合、CMakeのようなクロスプラットフォームビルドシステムを使用する価値はないでしょう。宣言された目的が、たとえばElementalなどのクロスプラットフォーム互換であることを目的とするライブラリの場合、クロスプラットフォームビルドシステムの使用に時間を費やす方が理にかなっています。
コードの構造と実装の「計画」にどのくらいの時間を費やす必要があるか、それについて考えるのをやめて、適切なルーチンを作成する必要があるか。
これは、解決しようとしている問題にどの程度精通しているか、適切なアルゴリズム、データ構造、プログラミングの実践などによって異なります。ジャーナルの記事ではアウトラインやプリライティングが役立つのと同様に、適切に構造化されたコードを書くには、ある程度のブレインストーミングと疑似コーディングが役立ちます。Steve McConnellによる、コードコンプリートの疑似コードプログラミングプロセスが好きです。また、プロジェクトの種類に応じて、設計フェーズに費やす時間に関する参考資料とガイドラインも示しています。
使い捨てバージョンのルーチンを作成し、短いコードを試すことも非常に役立ちます。ソフトウェア開発における一般的な格言は、常にコードの少なくとも1つのバージョンを破棄することです。
「アジャイル」開発プラクティスは、ソフトウェアカーペントリーでのグレッグウィルソンの研究に基づいて、ほとんどの科学的なソフトウェア開発で最もよく機能する傾向があると信じがちです(免責事項:私は過去に彼らと協力したことがあります)。大まかに言うと、「アジャイル」とは、短期間(たとえば、数日、1週間、おそらく1か月)で到達すると思われる目標を設定し、疑似コーディングを行うことでそれらの目標を達成する方法を計画する必要があることを意味しますそして、設計し、コードを書いて、繰り返します。短いサイクルは、アドバイザーが予期しない方法で作業を拡張してほしいとアドバイスした場合など、変更に対応するのに役立ちます。
経験とCV資格を得るために、論文の製品として十分に計画されたオープンソースコードベースを開発する必要があるように感じますが、このプロセスのナビゲート方法はわかりません。ヒント、本/記事/ウェブサイトの推奨事項などはありますか?
それはすべてあなたが何をしたいかに依存します。ソフトウェア開発に関わるポジションの場合、オープンソースコードベースの開発はGitHubに投稿して参照できるため、役立ちます。とはいえ、それを人々が使用するソフトウェアパッケージにしたい場合は、それを維持するためにある程度の時間を費やす必要があります。あなたはそれをしたくないかもしれません。関連する既存のプロジェクトに研究コードを寄稿することも、本当に良い選択肢です。企業は両方の組み合わせを望んでいるようです。他の人のコードに貢献できる場合、それはあなたがチームプレーヤーであり、他の人のコードを読んでも、それを使って何か便利なことができることを示しています。
参照に関しては、Software Carpentryの参照リーディングリストは科学者向けであり、ソフトウェアエンジニアリングの実践をさらに掘り下げたい場合は、コードコンプリート(前のリンクのリストを参照)に参照が少し増え始めています。日付付きですが、調べるのに役立ちます。彼らが科学計算のベストプラクティスについて発表した論文も参考になります。
Software Carpentryのレッスンも役に立ちます。プログラミングに関してはPythonを中心としているので、細かいことで理解してもかまいませんが、バージョン管理の部分は一見の価値があります。