私は現在、大学で「Scientific Computing」という数学のクラスを取っていますが、その教授は、科学計算に使用される最も一般的な言語は C であると教えてくれました。
10 に答える
私のビジネス (素粒子物理学) では、Fortran 77 から C++ と Python にほとんど移行しました。プログラミングに関心のある私たちは皆 c を知っていますが、それはニッチなアプリケーション (組み込み DAQ ボード、専用ドライバーなど) 向けにのみ書かれています。
しかし、c を学べばプログラミングの確固たる基礎が得られるので、教授と議論することはめったに有益ではありません。
たとえそれが正しいとしても、あなたの教授の答えはあなたにうまく役立っているとは思いません。
科学計算およびデータシステムのコンサルタントとしての私の経験では、Cは確かに多く使用されていますが、FortranおよびC++も同様です。Pythonは、これまでで最も一般的に使用されているスクリプト言語です。
これは変わると思います。今の大きな問題は並列コンピューティングであり、これは私が言及した従来の言語では苦痛です(MPIは誰ですか?)。私の推測では、並列化の多くは仮想マシンに移動されます(そして移動されるべきです)。Javaまたは.NET。つまり、並列化はJITの仕事であるべきだと思います。それが、たとえば要塞で可能になるのか、それとも伝統的な言語の1つで可能になるのか、私にはわかりません。IntelはC/C ++用の並列ツールを推進していますが、長期的にはTerracottaのようなものの方が優れているのではないかと思います(科学界でこれを試した人は誰も聞いたことがありません---大規模な資金調達はありますが、そうではありません開いた)。
科学計算の仕事を得るために何を学ぶべきかという質問の場合、私が最初に言うことは、プログラミングスキルよりも科学スキルに雇われる可能性が高いということです(これは、多くの科学的コード。これについて詳しくは、このSOトピックを参照してください)。プログラミングスキル(おそらくHPC)に採用される場合は、この教授の意見では、それほど遠くない将来、新しいプロジェクトでは廃止される可能性があることを考慮してください。ただし、 NumPyを含むPythonを知っていても問題はありません。
私が聞いたことによると、Fortran は科学的な目的では非常に一般的ですが、C は十分に汎用的なため、ほとんどの種類のプログラミングに対して優れたソリューションとなる場合があります。
バイオインフォマティクスと計算生物学では、C が非常に人気があります。
多くの「科学計算」は、Mathematica、Matlab、および他の同様のツールで処理されます。
ええと...内部的には、MatlabはCまたはC ++で書かれていると思いますが、Mathematicaの多くの部分はMathematica自体で書かれています。確かに、歴史的な理由から、またCの固有の特性のために、多くの科学およびハイテクコンピューティングソフトウェアライブラリなどはC /C++で記述されています。
C / C ++は、多くのリアルタイムで高性能なアプリケーションにとって、おそらく生のコンピューティング自体(高級言語では表現できない)ではなく、タイトループのローカル最適化にとって有利な優位性を享受し続けると思います。 、およびさまざまなコンポーネントとのインターフェース用に、それらが物理的な機器であろうと、たとえば並列コンピューティングフレームワークなどのソフトウェア要素であろうと。
dmckeeが指摘したように、cの研究は、プログラミング全般、少なくとも手続き型プログラミングの優れた基盤を提供します。実用性もあるので、現時点では教授の意見に強い裏付けがあります。しかし、やる!教授や長老たちから受けた知恵に敬意を表して挑戦し続け、時には良い禅師のように、目的地ではなく旅行/プロセスのためにあなたを道に導いてくれることを理解しています。
C は本当に多くの科学計算に使用されていますか?
科学計算にはさまざまなものが含まれるため、科学計算にはさまざまなプログラミング言語が使用されます。
従来、科学計算は高性能計算を意味し、ほとんどが線形代数と一部のスペクトル法 (FFT など) に範囲が限定され、ほとんどが Fortran で行われていました。それ以来、科学技術計算の範囲は非常に拡大し、多くの人々が技術計算 (大量のデータ、グラフ プロット、プロトタイピングなど) を同じ見出しに当てはめていると考えているほか、記号計算などの新しい形式の高性能計算を取り上げている人もいます。
Python、R、Mathematica、MATLAB などの言語は、技術計算によく使用されます。C、C++、Fortran などの言語は、依然として数値演算に使用されています。OCaml などの言語は、大規模な記号計算に使用されます。
Cはプログラミングで広く使用されています。私たちのほとんどのプログラマーは、特に大学にいるときはCでコーディングしています。それは私が推測するあなたの教授の好みです:-)
科学者やエンジニア向けのソフトウェアを構築するプロのプログラマーとして、数値計算方法論のほぼすべてが C で書かれていると言えます。C++ と Fortran のポケットがあります。パフォーマンスの点では、適切にコーディングされた C と優れたコンパイラに勝るものはありません。非常に、非常にまれに、組み立てに没頭することがあります。
しかし、世界は大きく変わりました。Python は素晴らしい言語です。最も素晴らしい言語であり、ネイティブ ライブラリを呼び出すことができます。次に、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、およびその他のメタ言語グループがあります。これは科学的プログラミングの別の「ソフト」な世界であり、時間は問題ではなく、答えの存在です。