科学的環境でのプログラミングの実践?[閉まっている]


91

バックグラウンド

昨年、私は大学の物理学研究グループでインターンシップをしました。このグループでは、ほとんどの場合、LabVIEWを使用して、セットアップの制御、データの取得、データの分析を行うプログラムを作成しました。最初の2つの目的については、これで問題なく動作しますが、データ分析については、それは本当に苦痛です。その上、誰もがほとんど独学でしたので、書かれたコードは一般にかなり混乱していました(すべての博士がすぐにすべてをゼロから書き直すことに決めたのも不思議ではありません)。バージョン管理は不明であり、IT部門からの厳格なソフトウェアおよびネットワーク規制のためにセットアップすることは不可能でした。

さて、実際には驚くほどうまくいきましたが、自然科学の人々はどのようにソフトウェア開発をしていますか?

ご質問

具体的な質問:

  • 科学的ソフトウェアの開発、特にデータ分析にどの言語/環境を使用しましたか?どんな図書館?(たとえば、プロットには何を使用しますか?)
  • プログラミングの重要な背景のない人々のためのトレーニングはありましたか?
  • バージョン管理やバグ追跡などはありましたか?
  • 個々の科学者(特に物理学者は頑固な人々です!)の邪魔になりすぎずに、プログラミングのためのまともな環境を作成しようとするとどうなりますか?

これまでの回答のまとめ

これまでの回答(またはそれらに対する私の解釈):(2008-10-11)

  • 最も広く使用されていると思われる言語/パッケージ:
  • バージョン管理はほぼすべての回答者によって使用されています。バグ追跡やその他のプロセスはそれほど一般的ではありません。
  • Software Carpentryコースは、プログラミングと開発のテクニックを科学者に教えるための良い方法です。
  • 物事を改善するには?
    • 人々に厳密なプロトコルに従うことを強制しないでください。
    • 自分で環境を設定し、他の人にメリットを示しましょう。彼らが自分でバージョン管理、バグ追跡などの作業を始めるのを助けます。
    • 他の人のコードを確認することは役立ちますが、誰もがそれを高く評価するとは限らないことに注意してください。

回答:


27

科学的なソフトウェアの開発に使用した言語/環境、特に データ分析?どんな図書館?(たとえば、プロットには何を使用しますか?)

私はかつてSciPyの主要企業スポンサーであるEnthoughtで働いていました。私たちは、カスタムソフトウェア開発についてEnthoughtを契約した企業の科学者と協力しました。Python / SciPyは、科学者にとって快適な環境のようです。ソフトウェアのバックグラウンドを持たない科学者であれば、C ++やJavaを使用するよりも、始めるのはそれほど怖いことではありません。

Enthought Pythonの配布はなど、3Dのvisualationをプロット、解析を含むすべての科学技術計算ライブラリが付属しています

プログラミングの重要な背景のない人々のためのトレーニングはありましたか?

EnthoughtはSciPyトレーニングを提供しており、SciPyコミュニティはメーリングリストでの質問への回答に関して非常に優れています。

バージョン管理、バグ追跡などはありましたか?

はい、そしてはい(SubversionとTrac)。私たちは科学者と共同で(そして通常は彼らから離れて)作業していたため、バージョン管理とバグ追跡が不可欠でした。一部の科学者にバージョン管理の利点を内在化させるには、いくらかの指導が必要でした。

個々の科学者の邪魔をせずに、プログラミングのためのまともな環境を作成しようとするにはどうすればよいでしょうか(物理学者は頑固な人々です!)。

ツールチェーンに慣れていることを確認してください。事前に投資する必要がありますが、より親しみやすいもの(Excel)を支持して却下する傾向が少なくなります。ツールが失敗した場合(そして失敗する場合)、メーリングリスト、ユーザーグループ、組織内の他の科学者やソフトウェア開発者など、支援を求める場所があることを確認してください。物理学をやり直すためにそれらを取り戻すためのより多くの助けがある。


21

コースSoftware Carpentryは、科学的コンピューティングを行う人々を特に対象としており、ソフトウェアエンジニアリングの基本とレッスン、およびそれらをプロジェクトに最適に適用する方法を教えることを目的としています。

バージョン管理、デバッグ、テスト、スクリプティング、その他のさまざまな問題などのトピックをカバーしています。

講義は8、9回くらい聞いたので、すすめたいと思います。

編集:講義のMP3も利用できます。


16

核・素粒子物理学はこちら。

  • 主要なプログラミング作業がで主に行われるために使用されるFortranの使用CERNLIB(PAW、Minuitの、...)とGEANT3を、最近ではほとんどとC ++で行われているROOTのGeant4。特別に使用される他の多くのライブラリとツールがあり、LabVIEWはあちこちでいくつかの使用を見ています。
  • このビジネスの終わりにデータを取得することは、かなり低レベルの作業を意味することがよくありました。多くの場合Cで、場合によってはアセンブリでも、ハードウェアの機能が向上するにつれ、これはなくなりつつあります。一方、現在、多くのボードはFPGAで構築されており、ゲートをいじる必要があります...
  • ワンオフ、グラフィカルインターフェースなどは、ほとんどすべてを使用しています(Tcl / Tkは以前は大きく、最近はPerl / TkとPython / Tkが増えています)。これには、主に粒子物理学コミュニティ内に存在する多数のパッケージが含まれます。 。
  • コードを書く人の多くは正式なトレーニングをほとんどまたはまったく受けておらず、プロセスは口頭の伝統によって非常に不均一に伝達されますが、ほとんどのソフトウェアグループリーダーはプロセスを真剣に受け止め、この領域の不足を補うために必要なだけ読んでいます。
  • メインツールのバージョン管理は至る所にあります。しかし、多くの個々のプログラマーは、小さなタスクのためにそれを無視しています。正式なバグ追跡ツールは、夜間ビルド、ユニットテスト、回帰テストと同様に、あまり一般的ではありません。

物事を改善するには:

  1. 地元のソフトウェアリーダーの良い面をつかむ
  2. 自分の領域で使用したいプロセスを実装し、許可したプロセスも使用するように奨励します。
  3. 待つ。物理学者は経験的な人々です。それが役に立てば、彼らは(やがて!)気づくでしょう。

物事を改善するためのもう1つの提案。

  1. 少し時間をかけて、直接作業する人を支援してください。コードを確認します。アルゴリズムの複雑さ/コード生成/ DRY、または一部の教授がFortranの本を一度に投げて「うまく動かす」と言ったために彼らが学んだことのない基本的なことについて説明します。プロセスの問題について説明します。彼らは賢い人であり、あなたが彼らにチャンスを与えれば、彼らは学ぶでしょう。

11

これは少し正接するかもしれませんが、うまくいけば関連しています。

私は以前、ナショナルインスツルメンツのR&Dで働いていました。そこでは、NI RF&コミュニケーションツールキット用のソフトウェアを書きました。私たちはLabVIEWをかなり使用しました、そしてここに私たちが従った実践があります:

  1. ソース管理。NIはPerforceを使用しています。私たちは通常のことをしました-開発/トランクブランチ、継続的インテグレーション、作業。
  2. 自動テストスイートを作成しました。
  3. 信号処理と通信のバックグラウンドを持った人が何人かいました。以前は定期的なコードレビューとベストプラクティスドキュメントを使用して、コードが適切であることを確認していました。
  4. コードのレビューにも関わらず、「ソフトウェアの連中」のように、効率のためにこのコードの一部を書き直さなければならない場合がいくつかありました。
  5. 頑固な人についてあなたが何を意味するのか私は正確に知っています!コードのパフォーマンス向上の可能性を指摘することは直接的な侮辱だと思っていた人たちがいました。言うまでもなく、これには優れた管理が必要です。私はこれらの人々に対処する最良の方法はゆっくりと行くことであり、変更を強く要求せず、必要に応じて汚い仕事をする準備をすることだと思いました。[例:彼らのコードのテストスイートを書く]。

9

私は正確に「自然な」科学者ではありません(私は交通機関を研究しています)が、データ分析用に自分のソフトウェアをたくさん書いている学者です。私はできる限りPythonで記述しようとしますが、既存のソフトウェアツールの拡張またはカスタマイズに取り組んでいるときに、他の言語を使用せざるを得ない場合があります。私の分野ではプログラミングトレーニングはほとんどありません。ほとんどの人は独学するか、以前または専門分野外で行われたクラスからプログラミングスキルを学びました。

私はバージョン管理の大ファンです。論文のコードはすべて、ホームサーバーで実行しているVaultを使用しました。現在、部門にSubversionサーバーをセットアップさせようとしていますが、少なくとも最初は、私だけがそれを使用するのではないかと思います。私はFogBugsで少し遊んでみましたが、バージョン管理とは異なり、それが一人のチームにとってそれほど有用であるとは思いません。

他の人にバージョン管理などを使用するように勧めることに関しては、それは本当に私が今直面している問題です。私は大学院生に、私のために行っている研究プロジェクトでそれを使用するように強制し、自分の研究にそれを使用するよう奨励することを計画しています。私がプログラミングを含むクラスを教える場合、おそらく学生たちにもそこでバージョン管理を使用するように強制するでしょう(リポジトリにあるものでそれらを評価する)。私の同僚と彼らの大学院生に関する限り、私が実際にできることは、サーバーを利用可能にし、穏やかな説得に頼り、良い例を示すことです。率直に言って、現時点では、ソース管理よりも定期的なバックアップを行うことが重要だと思います(一部の人々は、研究データの唯一のコピーをUSBフラッシュドライブに持ち歩いています)。


7

1.)スクリプト言語は、より良いハードウェアのために、最近ほとんどのことで人気があります。Perl / Python / Lispは軽量アプリケーション(自動化、軽い計算)で広く使用されています。Unix / Linuxが好きなので、仕事(計算EM)で多くのPerlを目にします。パフォーマンスに関しては、C / C ++ / Fortranが通常使用されます。並列計算では、プログラムを暗黙的に実行するのとは対照的に、通常、EMで実行を手動で並列化します(つまり、レーダーの断面積を計算するときにジョブをルックアングルで分割します)。

2.)ここでは、人々をミックスに投入します。私たちが持っているコードの多くは非常に乱雑ですが、科学者は通常、そのようなことを気にしない散在脳の束です。理想的ではありませんが、提供するものはあり、人員不足です。私たちは徐々に良くなっています。

3.)SVNを使用します。ただし、バグ追跡ソフトウェアはありません。特定のバグがどこにあるかを伝えるtxtファイルは、私たちにとってそれとほぼ同じです。

4.)科学者のためのベストプラクティスを実装するための私の提案:ゆっくり実行してください。科学者として、私たちは通常、製品を発送しません。 科学の誰もが、クリーンで保守可能なコードを持っていることで名を馳せません。彼らは通常、そのコードの結果から認識を得ます。彼らは、ソフトウェアプラクティスの学習に時間を費やす正当性を確認する必要があります。新しい概念をゆっくりと紹介し、それらを理解してもらいます。彼らは科学者なので、独自の経験的証拠がバージョン管理などの有用性を確認した後、彼らは常にそれを使い始めます!



5

私は物性物理学の分野で働いており、古典モデルや量子モデルを構築している物理学者です。

言語:

  • C ++-非常に用途が広い:あらゆる用途に使用でき、速度も良いが、MPIに関しては少し不便になる可能性がある
  • オクターブ -補足的な計算に適しています。非常に便利で生産的です。

ライブラリ:

  • Armadillo / Blitz ++ -C ++用の高速配列/行列/キューブ抽象化
  • Eigen / Armadillo-線形代数
  • GSL-Cで使用する
  • LAPACK / BLAS / ATLAS-非常に大きくて高速ですが、便利ではありません(そしてFORTRANで書かれています)

グラフィック:

  • GNUPlot-それは非常にきれいで端正な出力を持っていますが、時には生産的ではありません
  • 起源 -プロットするための非常に便利

開発ツール:

  • Vim +プラグイン-私にとってはうまくいきます
  • GDB -C / C ++で作業する場合の優れたデバッグツール
  • Code :: Blocks-しばらく使用してみましたが、かなり快適ですが、私の意見ではVimの方がまだ優れています。

c ++がcよりも実行速度が遅い場合は、間違って使用しています。「もちろん、それは簡単ですが、それは別の問題です。:: c ++で約7年間作業しているが、常に新しいことを学んでいる::
dmckee ---元モデレーターの子猫

私は本当にC ++の大ファンであることに気づいていますが、それがCやFortranよりも「はるかに遅い」かもしれないことを理解することは困難です。UPCやC CUDAなどのHPC用のCバリアントを含めない限り。
Suugaku

4

私は英国の大学で物理学者として働いています。

おそらく、研究の分野が異なれば、プログラミングの重点も異なることを強調しなければなりません。(dmckeeのような)素粒子物理学者は、ほぼ独占的に計算モデリングを行い、大規模なソフトウェアプロジェクトで共同作業を行う可能性があります。私はほとんどの科学者が後者の陣営に分類されると思います。コーディングスキルは通常、物理学では有用であると見なされますが、必須ではありません。物理学/数学のスキルはプログラマにとって有用であると見なされますが、必須ではありません。これを考慮して...

  • 科学的なソフトウェアの開発に使用した言語/環境、特に データ分析?どんな図書館?(たとえば、プロットには何を使用しますか?)

通常、データ分析とプロットは、「Excel plus」と考えることができるIGOR ProORIGINKaleidegraphなどの一般的なデータ分析パッケージを使用して行われます。これらのパッケージには通常、自動化に使用できるスクリプト言語が含まれています。より専門的な分析は、一般的にはずっと前に書かれたであろう仕事に専用のユーティリティを持っているかもしれません、誰もそのためのソースを持っていないし、かなりバギーです。より技術的なタイプの中には、言及されている言語を使用するものもあります(Python、R、Gnuplotを使用したMatLabによるプロット)。

制御ソフトウェアは通常LabVIEWで行われますが、実際には多少珍しいDelphiを使用しています。

  • プログラミングの重要な背景のない人々のためのトレーニングはありましたか?

グリッドコンピューティング、3Dビジュアライゼーション、学習ブーストなどのセミナーに参加しました。学部生として、ExcelとMatLabのVBAを学びましたが、C / MatLab / LabVIEWの方が一般的です。

  • バージョン管理、バグ追跡などはありましたか?

いいえ、個人的な開発設定はありますが。私たちのコードベースは、同期ツールで最新に保たれている「サーバー」上の共有フォルダーにあります。

  • 個々の科学者の邪魔をせずに、プログラミングのためのまともな環境を作成しようとするにはどうすればよいでしょうか(物理学者は頑固な人々です!)。

一歩ずつ!共有フォルダーをもう少し堅固なものに置き換えようとしています。おそらく、現在の同期ツールの動作を模倣するSVNクライアントを見つけることが役立つでしょう。

全体的に言えば、ほとんどの自然科学プロジェクトでは、一般的に時間をかけて研究を行う方がよいと思います。


ご意見をお寄せいただきありがとうございます。私は「時間は研究に費やす方が一般的により良い」と同意しますが、バージョン管理やプログラミングの基本的なトレーニングなどの欠如のために多くの時間が失われることが多いため、科学者はこの問題を過小評価していると思います。
onnodb 2009年

4

元学者物理学者であり、現在は産業物理学者である英国:

科学的なソフトウェアの開発に使用した言語/環境、特に データ分析?どんな図書館?(たとえば、プロットには何を使用しますか?)

私は最近、MATLABを主に使用しています(視覚化関数や数学に簡単にアクセスできます)。私はFortranIDLをよく使用していました。私はC(しかし、私はCのライターというよりは読者です)、Excelマクロ(醜くて紛らわしい)を使用しました。私は現在、JavaとC ++を読み取ることができる必要があります(しかし、実際にはそれらをプログラムすることはできません)。Pythonもハッキングしました。私自身のエンターテインメントのために、C#でプログラミングを行っています(主に移植性/低コスト/きれいなインターフェイスを取得するため)。私は提示されたほとんどすべての言語でFortranを記述できます;-)

プログラミングの重要な背景のない人々のためのトレーニングはありましたか?

ほとんどの(すべての?)学部物理学コースには、通常C、Fortran、またはMATLABで小規模なプログラミングコースがありますが、それが本当の基本です。ある時点でソフトウェアエンジニアリングのトレーニングを実際に受けたいと思っています(改訂管理/テスト/中規模システムの設計)

バージョン管理、バグ追跡などはありましたか?

最近Subversion / TortoiseSVNを使い始めました。過去に私が作業したグループは、リビジョン管理を使用しています。正式なバグ追跡ソフトウェアを使用している学術グループは知りません。私はまだどんな系統的なテストも使用していません。

個々の科学者の邪魔をせずに、プログラミングのためのまともな環境を作成しようとするにはどうすればよいでしょうか(物理学者は頑固な人々です!)。

学部レベルでいくつかのソフトウェアエンジニアリングのアイデアを紹介してから、それらを大学院レベルで実践することで強化し、上記のソフトウェア大工コースのようなリソースへのポインタも提供します。

学術物理学者のかなりの割合がソフトウェアを作成することになると思いますが(すべてではありませんが)、ソフトウェア工学のアイデアを少なくとも紹介する必要があります。


4

科学的なソフトウェアの開発に使用した言語/環境、特に データ分析?どんな図書館?(たとえば、プロットには何を使用しますか?)

Python、NumPy、およびpylab(プロット)。

プログラミングの重要な背景のない人々のためのトレーニングはありましたか?

いいえ、しかし私はマルチメディア研究室で働いていたので、ほとんどすべての人がコンピューターサイエンスのバックグラウンドを持っていました。

バージョン管理、バグ追跡などはありましたか?

はい、バージョン管理用のSubversion、バグ追跡用のTracおよびwiki。TOSがプロジェクトに適合する場合は、http: //www.assembla.com/から無料のバグトラッカー/バージョン管理ホスティングを入手できます。

個々の科学者の邪魔をしすぎずに、プログラミングのためのまともな環境を作成しようとするとどうなりますか(物理学者は頑固な人々です!)。

インフラストラクチャがセットアップされ、適切に維持されていることを確認し、ソース管理の利点を売り込もうとします。


3

私は英国の大学の統計学者です。一般に、ここの人々はRをデータ分析に使用します。C/ Perlを知っていれば、習得はかなり簡単です。その真の力は、対話式にデータをインポートおよび変更できる方法にあります。多数のCSV(またはExcel)ファイルを取得してマージし、他のファイルに基づいて新しい列を作成し、それをGLM、GAM、またはその他のモデルに投入するのは非常に簡単です。プロットも簡単で、まったく新しい言語(PGPLOTやGNUPLOTなど)の知識は必要ありません。もちろん、組み込みの機能(平均値、標準偏差などの単純なものから)を利用できるという利点もあります。ニューラルネットワーク、スプライン、GLプロットへの道)

これを言っても、いくつかの問題があります。非常に大きなデータセットを使用すると、Rが非常に遅くなる可能性があり(50,000x30を超えるデータセットで実際にこれを確認しただけです)、それが解釈されるため、この点でFortran / Cの利点を得ることができません。しかし、(非常に簡単に)RにCおよびFortran共有ライブラリを(netlibのようなものから、または自分で作成したものから)呼び出させることができます。したがって、通常のワークフローは次のようになります。

  • 何をすべきかを考え出す。
  • Rでコードのプロトタイプを作成します。
  • いくつかの予備分析を実行します。
  • 遅いコードをCまたはFortranに書き直して、Rから呼び出します。

それは私にとって非常にうまくいきます。

私は私の部門で(> 100人の)バージョン管理を使用している唯一の人です(私の場合はgithuib.comでgitを使用しています)。アウトとzipファイルを渡すことで満足です(うん。)

私の提案は、買収のためにLabViewを引き続き使用し(そしておそらく、同僚に買収のためのツールセットについて同意させ、すべての人が利用できるようにすること)、その後、データをCSV(または同様のもの)にエクスポートすることに移行することです。 Rで分析を行います。この点で、ホイールを再発明することにはほとんど意味がありません。


2

科学的なソフトウェアの開発に使用した言語/環境、特に データ分析?どんな図書館?(たとえば、プロットには何を使用しますか?)

私の学部の物理学部はLabVIEWクラスを教え、研究プロジェクトで幅広く使用しました。

もう1つの選択肢は、MATLABです。この場合、私は経験がありません。どちらの製品にも対応策があります。それぞれに独自の利点/欠点があります。解決する必要のある問題の種類によっては、1つのパッケージが他のパッケージよりも望ましい場合があります。

データ分析に関しては、どんな種類のナンバークランチャーも使用できます。理想的には、言語Xでハード計算を実行し、Excel、MathcadMathematica、またはフレーバーデュジュールプロットシステムが何であれ、出力を適切にフォーマットしてプロットできます。ここで標準化を期待しないでください。

バージョン管理、バグ追跡などはありましたか?

振り返ってみると、そうではありませんでした。すべてを壊し、それを修正するために何時間も苦労するようなものはありません!

一般的なコードには必ずソース管理を使用してください。より一般的な方法でコードを書くことを個人に奨励します。これは実際にコーディングのベストプラクティスです。本当に、彼らに基本を習得させるために、彼らにコンピュータサイエンスのクラスを教えてもらうべきです。

個々の科学者の邪魔をせずに、プログラミングのためのまともな環境を作成しようとするにはどうすればよいでしょうか(物理学者は頑固な人々です!)。

データ集録(DAQ)とデータ分析は明確に分かれています。つまり、DAQで標準化して、科学者が選択したプログラムのデータを操作できるようにすることが可能です。


2

別の良いオプションはScilabです。LabVIEWのグラフィックモジュールがあり、独自のプログラミング言語があり、たとえばFortranやCのコードを埋め込むこともできます。大企業を含む公共および民間部門で使用されています。そしてそれは無料です。

バージョン管理については、リポジトリを管理および定義する自由が増えるため、一部はMercurialを好みます。しかし、私はそれについての経験がありません。

プロットにはMatplotlibを使用します。間もなくアニメーションを作成する必要があり、MEncoderを使用して良い結果が得られました。以下はオーディオトラックを含むです。

最後に、モジュール化することをお勧めします。これは、コードの主要部分を異なるファイルに保持することを試みているため、コードの改訂、理解、保守、および改善が容易になります。たとえば、ファイルの完全性テスト用のPythonモジュール、画像処理シーケンス用のPythonモジュールなどを作成しました。

印刷行を使用する代わりに、コード内の設定可能なブレークポイントで変数の内容を確認できるデバッガーを使用して開発することも検討する必要があります。私はEclipse for PythonとFortran開発を使用しました(ただし、Fortranショートプログラムをコンパイルする際に誤ったバグが発生しましたが、構成が間違っている可能性があります)。PythonEric IDEを使用し始めています。SVNでバージョン管理をデバッグ、管理することができます。コンソールが組み込まれています。自転車修理マン(別のものを使用することもできます)でリファクタリングを行うことができます。Unittestなどがあります。Pythonの軽量な代替手段としてIDLEが含まれています。バージョン2.3以降のPythonで。

いくつかのヒントとして、私もお勧めします:

  • 1文字の変数を使用しません。見た目を検索したい場合は、どこでも結果が得られます。まともなIDEでこれが簡単になると主張する人もいますが、その場合は、IDEに永続的にアクセスできるかどうかに依存します。ii、jj、kkを使用しても十分ですが、この選択は言語によって異なります。(たとえば、コードのコメントがエストニア語で作成されている場合、二重母音はあまり役に立ちません)。

  • 最初からコードにコメントする。

  • 重要なアプリケーションの場合、以前の言語/コンパイラバージョン(メジャーリリース)に依存し、より安定しており、デバッグが優れていることがあります。もちろん、後のバージョンでより最適化されたコードを使用したり、バグを修正したりできますが、私は2003ではなくFortran 95、3.0ではなくPython 2.5.4を使用することなどについて話しています。(特に、新しいバージョンが下位互換性を損なう場合。)通常、多くの改善により多くのバグが発生します。それでも、これは特定のアプリケーションケースに依存します。これは個人的な選択であり、多くの人々がこれに反対する可能性があることに注意してください。

  • 冗長な自動バックアップを使用してください!(バージョン管理付き)。


2

間違いなく、Subversionを使用して、ソースコードの最新の作業中の安定したスナップショットコピーを保持してください。これには、自社開発のソフトウェアツール用のC ++、Javaなど、および1回限りの処理用のQuickieスクリプトが含まれます。

「孤独なカウボーイ」開発方法論に科学と応用工学を強く傾けて、リポジトリをトランク、タグなどに整理する通常の方法-気にしないでください!科学者とそのラボの技術者は、ノブを回したり、電極を小刻みに動かしたり、真空リークを追跡したりします。Python / NumPyと言ったり、いくつかの命名規則に従うなど、全員に同意してもらうには十分な仕事です。彼らに難解なソフトウェア開発者の慣習や慣習に従ってもらうことを忘れてください。


2

ソースコード管理では、明確な単一点(SPOT)により、Subversionなどの集中管理システムが科学的使用に優れています。変更をログに記録し、ファイルのバージョンを呼び出すことができるので、どこにあるかを追跡する必要がなく、記録を保持する上で非常に有利です。GitMonotoneのようなツール:ああ、なんてことだと思いますか?Higgsボソンが通り過ぎたとき、または超新星が爆発したときに、新しいセンサーをいじるときに使用されたハックジョブスクリプトのバージョンの明確な記録があると、幸福につながります。


分散バージョン管理システムを使用したことがありますか?
Andrew Grimm、

1
ほぼすべての分散システムは、集中型システムと同じくらい簡単です。(SVNのように)リビジョン番号の代わりに(Git用語で)コミットIDを記録するだけです。
Phil Miller、

2

科学的なソフトウェアの開発に使用した言語/環境、特に データ分析?どんな図書館?(たとえば、プロットには何を使用しますか?)

私が数値とセンシティフィック関連のものに使用した言語:

  • C(開発が遅い、デバッグが多すぎる、再利用可能なコードを書くことはほとんど不可能)
  • C ++(そして私はそれを嫌うことを学びました-開発はCほど遅くはありませんが、苦痛になる可能性があります。テンプレートとクラスは最初はかっこよかったですが、しばらくすると、私は常にそれらと戦っており、回避策を見つけることに気付きました言語設計の問題
  • Common Lisp。これは問題ありませんでしたが、Sciコンピューティングでは広く使用されていません。Cとの統合は簡単ではありませんが(他の言語と比較した場合)、機能します
  • スキーム。これは私の個人的な選択になりました。

私のエディターはEmacsですが、構成ファイルの編集などの迅速な作業にはvimを使用します。

プロットのために、私は通常テキストファイルを生成し、それをgnuplotに送ります。

データ分析では、通常、テキストファイルを生成し、GNU Rを使用します。

私はここで多くの人々がFORTRAN(ほとんど77、90ほど)を使用しており、多くのJavaといくつかのPythonを使用しています。それらは好きではないので、使用しません。

プログラミングの重要な背景のない人々のためのトレーニングはありましたか?

私はCSを卒業しているので、これは私には当てはまらないと思います-しかし、私が働いている場所では正式なトレーニングはありませんが、人々(エンジニア、物理学者、数学者)は互いに助け合っています。

バージョン管理、バグ追跡などはありましたか?

バージョン管理は絶対に重要です!私は自分のコードとデータを、世界の2つの異なる側面にある3つの異なるマシン、つまりGitリポジトリーに保管しています。私は常にそれらを同期しています(バージョン管理バックアップを持っているので!)バグ管理はしていませんが、それを始めるかもしれません。しかし、私の同僚はBTSやVCSをまったくしていません。

個々の科学者の邪魔をせずに、プログラミングのためのまともな環境を作成しようとするにはどうすればよいでしょうか(物理学者は頑固な人々です!)。

最初に、私は彼らに可能な限り多くの自由を与えます。(私が働いている大学では、UbuntuまたはWindowsをインストールするか、自分のOSをインストールするかを選択できました。自分でインストールすることを選択しました。私は彼らからのサポートがなく、何が起こっても責任があります。セキュリティの問題を含め、私のマシンは、マシンで私がやりたいことは何でもします)。

次に、彼らが慣れているものを見て、それを機能させます(FORTRANが必要ですか?設定します。C++が必要ですか?問題ありません。Mathematica?OK、ライセンスを購入します)。次に、生産性を高めるために「追加のツール」について学びたい人の数を確認します(「異なる」ツールとは言わないでください。「追加」と言ってください。だれも「失う」または「聞かせない」とは思わないでしょう。行く」など)。編集者から始めて、VCSを使用して作業を同期したいグループがあるかどうかを確認します(家にいてSVNまたはGIT経由でコードを送信できます-それは素晴らしいことではありませんか?)など。課さないでください-これらのツールがいかにクールであるかの例を示してください。Rを使用してデータ分析を行い、それがいかに簡単かを示します。素敵なグラフィックスを表示し、それらの作成方法を説明します(ただし、簡単な例から始めてください)


2

F#は、数学的構造との強力なセマンティックのつながりを考えると、科学関連の操作を実行するための潜在的な候補として提案するでしょう。

また、ここで書かれているように、その測定単位のサポートは、数学モデルと実装ソースコード間の適切な変換を保証するために非常に理にかなっています。


1

まず最初に、スクリプト言語を使用して間違いなく多くの余分なことを説明する必要がないようにします(たとえば、手動のメモリ管理は-ほとんどの場合、低レベルでパフォーマンスに敏感なものを記述している場合は問題ありませんが、コンピュータをアップグレードされた関数電卓として使用したいと考えています。また、ドメインに固有のものがあるかどうかを確認します(統計のRと同様)。これには、ユーザーが精通している概念をすでに使用していて、特定の状況(Rの場合は標準偏差の計算、統計検定の適用など)に特化したコードがあるという利点があります。

より一般的なスクリプト言語を使用したい場合は、Pythonを使用します。それのために行っている2つのことは次のとおりです。

  • 実験できるインタラクティブシェル
  • 明確な(ただし、長い場合もあります)構文

追加の利点として、それはあなたがそれでやりたいことのほとんどのためのライブラリを持っています。


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