私は現在、 "Scientific Computing"と呼ばれる数学クラスを取っています。教授は、Cが、よく、科学計算に使用される最も一般的な言語であり、この教授の正確さについて疑問を持っています。Cは多くのScientific Computingに実際に使用されていますか?
答えて
私のビジネス(粒子物理学)では、Fortran 77からC++とPythonに直接移行しました。 ケアについては、すべてのプログラミングについて知っていますが、ニッチアプリケーション(埋め込みDAQボード、専用ドライバなど)用に書かれています。
しかし、Cを学ぶことはプログラミングの確固たる基盤を提供し、教授と議論することはめったに有益ではありません。
"教授と議論することはめったに有益ではない... ... lol –
+1私は似たようなものを書いていただろう(訓練で粒子物理学者から来た;-)。 –
Fortranは科学的な目的では非常に一般的ですが、Cは一般的な目的であるため、ほとんどのプログラミングにとっては良い解決策です。
あなたの教授の答えは正しいとは思えません。
私の経験では、科学計算とデータシステムのコンサルタントとしてCは確かに多く使われていますが、FortranとC++もそうです。 Pythonは、最も一般的に使用されるスクリプト言語です。
これは変更されると思います。大きな問題は並列コンピューティングであり、これは私が言及した伝統的な言語では苦痛です(MPIの誰ですか?)。私の推測では、多くの並列化がJavaや.NETなどの仮想マシンに移行する予定です。つまり、並列化はJITの仕事でなければならないと私は思っています。それが例えばFortress、または伝統的な言語の1つで可能になるかどうかはわかりません。インテルはC/C++のためにparallel toolsを押していますが、テラコッタのようなものが長期的にはより良いかもしれないかどうか疑問に思っています(科学的なコミュニティで誰かがそれを試していると聞いたことはありません---大きな財政はありますが、 )。
あなたが科学計算で仕事を得るために学ぶべきことが何であれ、私が言う最初のことは、あなたのプログラミングスキルよりもあなたの科学的スキルに雇われる可能性が高いということですこれについては、this SO topicを参照してください)、多くの科学的なコードの申し訳ありません状態。 がのプログラミングスキル(おそらくHPC)のために雇われる場合は、この教授の意見では、それほど遠くない将来の新しいプロジェクトでは廃止されるかもしれないと考えてください。しかし、NumPyを含むいくつかのPythonを知っても害はありません。
これは興味深い概念です。今の私のビジネスではそうではありません---私たちの大事なことの大半は、IOバインドやそれに近いものです(データテーブルを調べたり、複数の段階で結果を書いたりしています)。今は、入力ファイルごとに並列化し、疎結合のクラスタで実行します。私のクリスタルボールは曇っているので、いつ変化するかは言えません。 – dmckee
Mathematica、Matlabなどのツールでは、多くの「科学計算」が処理されます。
まあ、MatlabはCやC++で書かれていますが、Mathematicaの多くの部分はMathematica自身で書かれています。歴史的な理由から、そしてCの本質的な特徴のために、多くの科学的およびハイテクコンピューティングソフトウェアライブラリなどがC/C++で書かれています。
C/C++は、リアルタイムコンピューティングや高性能アプリケーションの多くで、未処理のコンピューティング自体(高水準言語では表現できません)ではなく、ローカル物理的な機器であるか、例えば並列コンピューティングフレームワークなどのソフトウェア要素であるかを問わず、様々な構成要素とのインタフェースのために、必要とされている。
dmckeeが指摘したように、cの研究は、大規模で、少なくとも手続き型プログラミングでのプログラミングのための良い基礎を提供します。実用的なアプリケーションもありますので、教授の意見には現時点で強い支持があります。しかし、やって!あなたの教授や長老たちから受け取った知恵に挑戦し続けます。時には良い禅師のように、彼らは目的地ではなく旅行やプロセスのために道を歩きます。
Matlabのすべての線形代数は、Fortranで構築されたLAPACKに委譲されています。したがって、Matlabを使用することにより、Fortranのコンパイル済みコードを時間のかかる操作のほとんどに暗黙的に使用することができます。 –
@TimLin FWIW、MATLABのFFTルーチンは、例えばOCamlソースコードによって生成されたCコードです。 –
Cはプログラミングで広く使用されています。私たちのほとんどは、特に大学にいるときにC言語でコーディングするプログラマーです。
バイオインフォマティクスと計算生物学では、Cは非常に普及しています。
Cは多くのScientific Computingに実際に使用されていますか?
サイエンティフィックコンピューティングは多くの異なるものを網羅しており、その結果、科学計算には多くの異なるプログラミング言語が使用されています。
従来、科学計算は高性能コンピューティングを意味し、大部分の線形代数といくつかのスペクトル法(例:FFT)に範囲が限定され、Fortranでほとんど行われました。それ以来、技術計算(例えば、マスキングデータ、グラフプロット、プロトタイピング)が同一の見出しの下にあり、他の人々がシンボリック計算などの新しいハイパフォーマンスコンピューティングを手に入れようとしていることを考えると、
Python、R、Mathematica、MATLABなどの言語は、技術計算によく使用されます。 C、C++、Fortranなどの言語は、依然としてナンバー・クリニングに使用されています。 OCamlのような言語は、大規模な記号計算に使用されます。
異なるラボや研究機関で働いていた経験から、コンピュータ言語を学ぶことは、プログラミングの基礎と紹介だけを提供すると言います。 CやJavaは、紹介として拾うための好都合な言語になるので、あなたの教授はある程度拡張するのは正しいです。
あなたの知識を1言語で他の言語にも適用できることは、計算/開発作業環境で成功するための鍵です。あなたが異なる企業/研究所/ラボグループを通って移動するときに、それぞれが言語/ソフトウェアで独自の設定を持つことに気付くでしょう。ある特定の言語の構文を覚えようとするよりも、新しいことを素早く学ぶことが重要です。
もちろん、プロジェクトに使用する言語を選択する場合は、必要なライブラリが1つを選択します。
科学者とエンジニアのためのプロのプログラマーとして、私たちの数値計算方法のほとんどがC言語で書かれていると言えるでしょう。私たちにはC++とFortranのポケットがあります。パフォーマンス面では、よくコード化されたCと良いコンパイラを打つのは難しいです。非常に、非常に時折、私たちは組立に浸るかもしれません。
しかし、世界は大きく変わっています。 Pythonはすばらしい言語です.IMHOという言葉が一番いいし、ネイティブライブラリと呼ぶこともできます。次にRにはソースのインタプリタ言語がありますが、数値メソッドの膨大なライブラリがすべてCまたはC++でコンパイルされています。次に、openCLや多くのバインディングなどの新しいハードウェアアクセラレーションされたメソッドをすべて追加します。CやFortranはもはや唯一の答えではありません。しかし、伝統的なCPUの数を考えると、CとASMはクラス最高です。
はい、MPIを伴うANSI Cです。
時には、「客観的C」を使用したいと思うこともあります。つまり、関数を大きなクラスのメソッドに入れ、そのすべてのサンプルを別のコアで実行します。これはC++ではなく、 "C with objects"であることに注意してください。メソッドオブジェクトモデル以外のC++機能は使用されていません。これは、同じ古いCを「合理的なオブジェクトモデル」にラッピングし、中間層などを使用できるようにしています。
上記の良い例:LAMMPS。
Charm ++は、「現代的な方法で良い古いC」を得るもう1つの良い方法です。
科学言語の他の丘には、LISP、Haskellおよび他のメタラングループがあります。これは、時間が問題ではないが、答えの存在、科学プログラミングの他の "ソフト"世界です。
- 1. Scientific Computing :: OpenMPまたはPthreads
- 2. MarkupExtension.ProvideValue - IServiceProviderは実際に使用されていますか?
- 3. どのC++リファクタリングを実際に使用していますか?
- 4. 実際にChannelUrlはいつ使用されますか?
- 5. savedInstanceStateは実際にいつ使用されますか?
- 6. XQUERYは実際にどのように使用されていますか?
- 7. EntityFrameworkはC#で実際にどのように使用されていますか?
- 8. 実際に名前付きパイプにQLocalSocketが使用されていますか
- 9. Stack Overflowで実際に使用されているOpenIDソリューションは何ですか?
- 10. 実際に使用されているfwidth glsl関数は何ですか?
- 11. Wami Recorderは実際にどのように実装されていますか?
- 12. Ember.Map:キーは実際に注文されていますか?
- 13. なぜJavaは低遅延に使用されますが、C#は実際にはありませんか?
- 14. なぜ非常に多くのApacheプロセスが実行されていますか?
- 15. プログラムファイルはどこに保存されていますか? (.apkファイルではなく、実際にインストールされたファイル)
- 16. 私のプログラムは実際にリンクされているライブラリに依存していますが、ライブラリからの関数は使用されていませんか?
- 17. 実際のプロジェクトで使用されているFlexのビューステートは
- 18. 実際にハッシュテーブルを使用していますか?
- 19. InputStreamを使用しているときにディスクに実際のファイルが格納されていますか?
- 20. PythonのStringIOは実際に何のために使用されていますか?
- 21. ウェブサービスで実際にMySQLセーブポイントを使用していますか?
- 22. Tango/Unity:Tango3DRExtractWholeMesh()は実際にはまだ実装されていませんか?
- 23. Scalaではprotected [session]は何を意味していますか? (実際には一種の多くの)
- 24. Apache Camel:実際に何がルーティングされていますか?
- 25. 実際に接続されていない場合、どのようにmGoogleApiClient.connect()を使用しますか?
- 26. C#を使用して、コンピュータに接続された実際のファックス機からファックスを送信します。
- 27. C#GUIは多くのRAMを使用しますか?
- 28. Extには多くのアソシエーションストアがロードされていません
- 29. DownloadManagerを使用してエミュレートされたストレージではなく、実際のSDカードにファイルをダウンロードします。
- 30. このC#アクションメソッドコードは実際に301リダイレクトを実行していますか?
また、http://stackoverflow.com/questions/38239/practices-for-programming-in-a-scientific-environmentにも興味があります。 – dmckee
[This](http://scicomp.stackexchange.com/questions/5159/do-i-need-to-learn-c)および[類似の質問](http://scicomp.stackexchange.com/questions/5135)/soft-question-where-does-python-fit-the-picture)は、[Computational Science](http://scicomp.stackexchange.com)でよく議論されます。このスレッドで不具合を起こした人は、一見価値があります。 – Damien