プロジェクト管理ツールを計画して研究コードに組み込む方法


8

PhDプログラムの3年目に入ります。これまでのところ、私の研究コード(数値逆問題/医療画像処理/画像処理など)は、ほとんどがまとまりのないMATLABスクリプトと関数で構成されており、いくつかのMEXされたC ++とCUDAが含まれています。ルーチンはあちこちでいくつかの追加の速度のために投入されました。MATLABでの作業は(ほとんど)楽しいものでしたが、おそらく完全に諦めることはしません。

この夏、私は国立研究所で「大きな」コードに取り組んでおり、gmakeやその他のコンピューターサイエンスのおもちゃを上手に使用した、油を塗ったオブジェクト指向のバージョン管理されたコードの美しさを見始めています。

私の質問はこれです。これらのツールを私の研究コードにどの程度組み込む必要がありますか?コードの構造と実装の「計画」にどのくらいの時間を費やす必要があるか、それについて考えるのをやめて、適切なルーチンを作成する必要があるか。経験とCV資格を得るために、論文の製品として十分に計画されたオープンソースコードベースを開発する必要があるように感じますが、このプロセスのナビゲート方法がわかりません。ヒント、本/記事/ウェブサイトの推奨事項などはありますか?


1
研究コードを適切な既存のプロジェクトに追加できます。
k20

1
Academia.SEのこの質問への回答には、役に立つかもしれない多くの思慮深いポイントがあります。
クリスチャンクラソン2014

1
バージョン管理は、一人の研究コードにとっても素晴らしいです。2012年に論文のために実行したものを再現し、当時の正確なバグ/改善の欠如を再現する必要がありますか?gitから適切なコミットを取得して実行します。
Peteris 14

回答:


4

私はこれらの質問を検討します:

  1. コードを後で再利用できるかなり汎用的なコードにしたいですか、それとも、再利用する予定のない1つの研究プロジェクトや論文で使用しているほんの少しのコードですか?コードを再利用する予定がない場合は、コードの改善に時間と労力を費やす価値はないでしょう。

  2. 使用しているアルゴリズムとデータ構造について、これらのアルゴリズムとデータ構造を使い続けたいと確信していることを十分に学びましたか?そうでなければ、研究を安定したコードに凍結するのは時期尚早かもしれません。

  3. コードを共有し、他の人にコードを利用してもらい、最終的には他の人にコードの開発をさらに手助けしてもらいたいですか?研究者は、これがコードが研究分野に影響を与えることを確認する最も効果的な方法の1つであることを理解する必要があります。ただし、これを開始するには、かなり堅牢なコードを提供する必要があり、他の人が自分のプロジェクトでコードを利用できるように、オープンソースライセンスでリリースする必要があります。


3

私の質問はこれです。これらのツールを私の研究コードにどの程度組み込む必要がありますか?

あなたが何をしようとしていても、あなたが感じた分だけが報われるでしょう。主にMATLABスクリプトを実行している場合は、バージョン管理とユニットテストで十分です。MEXファイルがある場合、MEXファイルをビルドするたびにコンパイルコマンドのシーケンスを入力するのは壊れやすいので、MEXファイルをコンパイルしてMakefileを作成することは、おそらく自分の正気のためだけにするとよいでしょう。

これらのワークフローツールが使用され、大規模なプロジェクトに組み込まれる理由の1つは、これらのツールへの投資が彼らの目標に見合うものになるためです。例として、論文をサポートする1​​回限りのリサーチコードの場合、CMakeのようなクロスプラットフォームビルドシステムを使用する価値はないでしょう。宣言された目的が、たとえばElementalなどのクロスプラットフォーム互換であることを目的とするライブラリの場合、クロスプラットフォームビルドシステムの使用に時間を費やす方が理にかなっています。

コードの構造と実装の「計画」にどのくらいの時間を費やす必要があるか、それについて考えるのをやめて、適切なルーチンを作成する必要があるか。

これは、解決しようとしている問題にどの程度精通しているか、適切なアルゴリズム、データ構造、プログラミングの実践などによって異なります。ジャーナルの記事ではアウトラインやプリライティングが役立つのと同様に、適切に構造化されたコードを書くには、ある程度のブレインストーミングと疑似コーディングが役立ちます。Steve McConnellによる、コードコンプリートの疑似コードプログラミングプロセスが好きです。また、プロジェクトの種類に応じて、設計フェーズに費やす時間に関する参考資料とガイドラインも示しています。

使い捨てバージョンのルーチンを作成し、短いコードを試すことも非常に役立ちます。ソフトウェア開発における一般的な格言は、常にコードの少なくとも1つのバージョンを破棄することです。

「アジャイル」開発プラクティスは、ソフトウェアカーペントリーでのグレッグウィルソンの研究に基づいて、ほとんどの科学的なソフトウェア開発で最もよく機能する傾向があると信じがちです(免責事項:私は過去に彼らと協力したことがあります)。大まかに言うと、「アジャイル」とは、短期間(たとえば、数日、1週間、おそらく1か月)で到達すると思われる目標を設定し、疑似コーディングを行うことでそれらの目標を達成する方法を計画する必要があることを意味しますそして、設計し、コードを書いて、繰り返します。短いサイクルは、アドバイザーが予期しない方法で作業を拡張してほしいとアドバイスした場合など、変更に対応するのに役立ちます。

経験とCV資格を得るために、論文の製品として十分に計画されたオープンソースコードベースを開発する必要があるように感じますが、このプロセスのナビゲート方法はわかりません。ヒント、本/記事/ウェブサイトの推奨事項などはありますか?

それはすべてあなたが何をしたいかに依存します。ソフトウェア開発に関わるポジションの場合、オープンソースコードベースの開発はGitHubに投稿して参照できるため、役立ちます。とはいえ、それを人々が使用するソフトウェアパッケージにしたい場合は、それを維持するためにある程度の時間を費やす必要があります。あなたはそれをしたくないかもしれません。関連する既存のプロジェクトに研究コードを寄稿することも、本当に良い選択肢です。企業は両方の組み合わせを望んでいるようです。他の人のコードに貢献できる場合、それはあなたがチームプレーヤーであり、他の人のコードを読んでも、それを使って何か便利なことができることを示しています。

参照に関しては、Software Carpentryの参照リーディングリストは科学者向けであり、ソフトウェアエンジニアリングの実践をさらに掘り下げたい場合は、コードコンプリート(前のリンクのリストを参照)に参照が少し増え始めています。日付付きですが、調べるのに役立ちます。彼らが科学計算のベストプラクティスについて発表した論文も参考になります。

Software Carpentryのレッスンも役に立ちます。プログラミングに関してはPythonを中心としているので、細かいことで理解してもかまいませんが、バージョン管理の部分は一見の価値があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.