91

バックグラウンド

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

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

質問

いくつかの具体的な質問:

  • 科学ソフトウェア、特にデータ分析の開発に使用した言語/環境は何ですか? どのライブラリ?(たとえば、プロットには何を使用しますか?)
  • プログラミングのバックグラウンドがあまりない人向けのトレーニングはありましたか?
  • バージョン管理やバグ追跡などはありましたか?
  • 個々の科学者 (特に物理学者は頑固な人々です!) の邪魔をせずに、プログラミングのための適切な環境を作ろうとするのはどうですか?

これまでの回答のまとめ

これまでの回答 (または私の解釈): (2008-10-11)

  • 最も広く使用されていると思われる言語/パッケージ:
    • LabVIEW
    • パイソン
      • SciPyNumPyPyLabなどを使用 (ダウンロードとリンクについては Brandon の返信も参照してください)
    • C/C++
    • MATLAB
  • ほぼすべての回答者がバージョン管理を使用しています。バグ追跡やその他のプロセスはあまり一般的ではありません。
  • ソフトウェア大工コースは、科学者にプログラミングと開発のテクニックを教える良い方法です。
  • 物事を改善するには?
    • 厳格なプロトコルに従うことを強制しないでください。
    • 自分で環境を設定し、そのメリットを他の人に示します。バージョン管理やバグ追跡などの作業を自分で開始できるように支援します。
    • 他の人のコードをレビューすることは役に立ちますが、誰もがそれを評価するわけではないことに注意してください。
4

20 に答える 20

27

科学ソフトウェアの開発に使用した言語/環境は何ですか? データ分析?どのライブラリ?(例: プロットには何を使用しますか?)

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

Enthought Python ディストリビューションには、解析、プロット、3D ビジュアライゼーションなどを含むすべての科学計算ライブラリが付属しています。

プログラミングのバックグラウンドがあまりない人向けのトレーニングはありましたか?

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

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

はい、はい (Subversion と Trac)。私たちは科学者と協力して (通常は科学者からリモートで) 作業していたため、バージョン管理とバグ追跡が不可欠でした。一部の科学者にバージョン管理の利点を理解させるには、ある程度の指導が必要でした。

個々の科学者 (特に物理学者は頑固な人々です!) の邪魔をせずに、プログラミングのための適切な環境を作ろうとするのはどうですか?

彼らがツールチェーンに精通していることを確認してください。事前に投資が必要ですが、より使い慣れたもの (Excel) を優先して拒否する傾向が少なくなります。ツールが失敗した場合 (そして失敗する場合があります)、組織内のメーリング リスト、ユーザー グループ、他の科学者、ソフトウェア開発者など、助けを求める場所があることを確認してください。彼らが物理学をやり直すための助けがあればあるほど、より良い結果が得られます。

于 2008-09-19T06:48:29.360 に答える
22

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

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

8〜9回くらい聞いたことがありますので、お勧めだと思います。

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

于 2008-09-01T19:14:14.180 に答える
16

ここで核/素粒子物理学。

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

物事を改善するには:

  1. 地元のソフトウェア リーダーの良い面に乗る
  2. 自分の領域で使用したいプロセスを実装し、受け入れた人にもそれを使用するように勧めます。
  3. 待って。物理学者は経験主義者です。それが役に立てば、彼らは (最終的には!) 気付くでしょう。

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

  1. あなたが直接一緒に働いている人を助けるために少し時間を割いてください. コードを確認します。アルゴリズムの複雑さ/コード生成/DRY、または教授が一度 Fortran の本を投げつけて「機能させる」と言ったために学んだことのない基本的なことについて教えてください。プロセスの問題について彼らに教え込みます。彼らは頭が良く、機会を与えれば学ぶでしょう。
于 2008-09-01T18:36:42.507 に答える
11

これは少し関係ないかもしれませんが、関連性があることを願っています。

以前はナショナル インスツルメンツの R&D で働いており、NI RF & Communication ツールキット用のソフトウェアを作成していました。私たちは LabVIEW をかなり使用しました。

  1. ソース管理。NI は Perforce を使用しています。私たちは通常のことを行いました - dev/trunk ブランチ、継続的インテグレーション、作業。
  2. 自動化されたテスト スイートを作成しました。
  3. 信号処理と通信のバックグラウンドを持つ人が何人か参加しました。以前は、定期的なコード レビューとベスト プラクティス ドキュメントを使用して、コードが基準を満たしていることを確認していました。
  4. コード レビューにもかかわらず、私のような「ソフトウェアの連中」が、効率化のためにこのコードの一部を書き直さなければならない場合がいくつかありました。
  5. 頑固な人の言いたいことはよくわかります!コードの潜在的なパフォーマンスの改善を指摘することは、直接的な個人的な侮辱であると考えていた人々がいました! 言うまでもなく、これには優れた管理が必要です。これらの人々に対処する最善の方法は、ゆっくりと進み、変更を強く求めるのではなく、必要に応じて汚い仕事をする準備をすることだと思いました. [例: コードのテスト スイートを作成する]。
于 2008-09-01T18:36:10.700 に答える
9

私は厳密には「自然」科学者ではありませんが (輸送を研究しています)、データ分析用の独自のソフトウェアを多数作成している学者です。できる限り Python で書くようにしていますが、既存のソフトウェア ツールの拡張やカスタマイズに取り組んでいるときに、他の言語を使わざるを得ないことがあります。私の分野では、プログラミングのトレーニングはほとんどありません。ほとんどの人は、独学でプログラミング スキルを習得しているか、以前に受けたクラスや専門分野以外のクラスからプログラミング スキルを学びました。

私はバージョン管理の大ファンです。学位論文のすべてのコードには、自宅のサーバーで実行されている Vault を使用しました。今、私は部門に Subversion サーバーをセットアップするように依頼しようとしていますが、少なくとも最初は、それを使用するのは私だけになると思います。私は FogBugs を少しいじってみましたが、バージョン管理とは異なり、1 人のチームにはほとんど役に立たないと思います。

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

于 2008-09-01T18:34:17.617 に答える
7

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

2.) 私たちはここで人々をミックスに投げ込むだけです. 私たちが持っているコードの多くは非常に厄介ですが、科学者は通常、そのようなことを気にしない散漫な集団です。理想的ではありませんが、提供するものがあり、深刻な人手不足です。徐々に良くなっています。

3.) SVN を使用します。ただし、バグ追跡ソフトウェアはありません。バグ固有のバグがどこにあるかを示す txt ファイルは、私たちにとってほぼ同じくらい良いものです。

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

于 2009-02-28T06:44:36.257 に答える
6

「すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと」を読むことを強くお勧めします。私が定期的に遭遇する問題の多くは、浮動小数点プログラミングの問題に起因しています。

于 2008-09-02T21:48:23.333 に答える
5

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

言語:

ライブラリ:

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

グラフィック:

  • GNUPlot -- 非常にクリーンできちんとした出力が得られますが、それほど生産的ではない場合があります
  • 原点-- プロットに非常に便利

開発ツール:

  • Vim + プラグイン -- 私にとってはうまく機能します
  • GDB -- C/C++ を使用する場合の優れたデバッグ ツール
  • Code::Blocks -- しばらく使ってみて、とても快適だと思いましたが、私の意見では、Vim の方が優れています。
于 2010-07-29T20:47:54.277 に答える
4

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

Python、NumPy、pylab(プロット)。

プログラミングの重要なバックグラウンドを持たない人々のためのトレーニングはありましたか?

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

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

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

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

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

于 2008-09-01T18:53:06.713 に答える
4

イギリスの大学で物理学者として働いています。

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

  • 科学ソフトウェアの開発に使用した言語/環境は何ですか? データ分析?どのライブラリ?(例: プロットには何を使用しますか?)

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

制御ソフトウェアは一般的に LabVIEW で行われますが、実際には少し変わった Delphi を使用しています。

  • プログラミングのバックグラウンドがあまりない人向けのトレーニングはありましたか?

グリッドコンピューティング、3D ビジュアライゼーション、Boost の学習などに関するセミナーに参加したことがあり、両方の大学で開催されました。学部生として、Excel と MatLab の VBA を教えられましたが、C/MatLab/LabVIEW の方が一般的です。

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

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

  • 個々の科学者 (特に物理学者は頑固な人々です!) の邪魔をせずに、プログラミングのための適切な環境を作ろうとするのはどうですか?

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

全体として、ほとんどの自然科学プロジェクトでは、一般的に研究に時間を費やす方が良いと思います!

于 2009-03-21T21:41:06.550 に答える
4

元学術物理学者で現在は産業物理学者のイギリス人:

科学ソフトウェアの開発に使用した言語/環境は何ですか? データ分析?どのライブラリ?(例: プロットには何を使用しますか?)

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

プログラミングのバックグラウンドがあまりない人向けのトレーニングはありましたか?

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

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

Subversion / TortoiseSVN を比較的最近使い始めました。私が過去に一緒に仕事をしたグループは、リビジョン コントロールを使用していました。正式なバグ追跡ソフトウェアを使用している学術グループを私は知りません。私はまだ体系的なテストを一切使用していません。

個々の科学者 (特に物理学者は頑固な人々です!) の邪魔をせずに、プログラミングのための適切な環境を作ろうとするのはどうですか?

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

私は学術物理学者のかなりの割合がソフトウェアを書いていることを期待しています (すべてではありませんが)。

于 2008-09-19T18:39:14.383 に答える
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 で分析を行います。この点で車輪を再発明する意味はほとんどありません。

于 2008-11-27T11:41:25.003 に答える
2

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

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

于 2008-09-16T03:34:19.040 に答える
2

ソース コード管理の場合、Subversionなどの集中型システムは、明確な単一の真実 (SPOT) により、科学的な使用に優れています。変更のログ記録と、何かを見つける場所を追跡せずに任意のファイルのバージョンを呼び出す機能には、記録保持の大きな利点があります。GitMonotoneのようなツール: なんてこった、その後に続くと想像できるカオス! ヒッグス粒子が通過したときや超新星が爆発したときに、新しいセンサーをいじりながら、どのバージョンのハック ジョブ スクリプトが使用されたかを明確に記録しておくことは、幸福につながります。

于 2008-09-16T03:38:56.190 に答える
2

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

バージョン管理については、リポジトリの管理と定義の自由度が高いため、Mercurialを好む人もいます。しかし、私はそれについての経験がありません。

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

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

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

いくつかのヒントとして、次のこともお勧めします。

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

  • 最初からコードにコメントを付けます。

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

  • 冗長化された自動バックアップを使用してください! (バージョン管理あり)。

于 2009-05-26T21:51:39.997 に答える
2

科学ソフトウェアの開発に使用した言語/環境は何ですか? データ分析?どのライブラリ?(例: プロットには何を使用しますか?)

私の学部の物理学科では、LabVIEWの授業を行い、研究プロジェクトで広く使用していました。

他の選択肢はMATLABで、私は経験がありません。どちらの製品にもキャンプがあります。それぞれに長所/短所があります。解決する必要がある問題の種類によっては、あるパッケージが他のパッケージよりも適している場合があります。

データ分析に関しては、好きな種類の数値計算ツールを使用できます。理想的には、言語 X で難しい計算を行い、Excel、MathcadMathematicaなど、さまざまな種類のプロット システムで適切にプロットするように出力をフォーマットできます。ここで標準化を期待しないでください。

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

振り返ってみると、そうではありませんでした。すべてを壊し、何時間もかけて修復するのに勝るものはありません!

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

個々の科学者 (特に物理学者は頑固な人々です!) の邪魔をせずに、プログラミングのための適切な環境を作ろうとするのはどうですか?

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

于 2008-09-16T13:37:28.870 に答える
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 を使用してデータ分析を行い、それがいかに簡単であったかを示します。素敵なグラフィックを見せて、どのように作成したかを説明してください (ただし、簡単な例から始めて、

于 2009-11-07T13:25:22.713 に答える
2

F# は、数学的構造と意味的に強く結び付いているため、科学関連の操作を実行するための有力な候補としてお勧めします。

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

于 2010-03-30T08:16:44.323 に答える
1

私はこの分野の専門家ではありませんが、これがMATLABが作成された目的であることは常に理解しています。ソース管理のために MATLAB を SVN と統合する方法もあります。

于 2008-09-01T18:36:38.797 に答える
1

まず第一に、余分なことをたくさん説明する必要がないように、スクリプト言語を使用することは間違いありません (たとえば、手動のメモリ管理は、低レベルでパフォーマンスに敏感なものを書いている場合はほとんど問題ありませんが、単にアップグレードされた関数電卓としてコンピュータを使用したい場合、それは間違いなくやり過ぎです)。また、ドメインに固有のものがあるかどうかを調べてください (統計のRのように)。これには、ユーザーが慣れ親しんでいる概念を既に使用しており、特定の状況に特化したコードがあるという利点があります (たとえば、R の場合は標準偏差の計算、統計テストの適用など)。

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

  • 実験できる対話型シェル
  • 明確な (長い場合もありますが) 構文

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

于 2008-09-01T18:40:13.653 に答える