ベストアンサー
これをチェックしてくださいpythonmeme
回答
いくつかの理由:
- ある時点で、人間の脳は速度の改善を認識できません。 PythonコードをCで再実装し、実行速度が200倍になると、ユーザーは元のコードが0.01秒で実行されたかどうかさえ気付かないでしょう。おそらく、元のコードが0.1秒で実行されたかどうかさえ気付かないでしょう。秒。 0.1秒と0.0005秒の違いは、ほとんどの人にとって事実上認識できません。実際に識別できる人でも、まったく目立たないように感じます。
- 速度は、使用方法によって大きく異なります。本当の問題は、多くの人が時期尚早の最適化の問題に苦しんでいるということです。はい、Pythonは遅いですが、Pythonが原因でコードが実際に遅いわけではない可能性があります。コードが特定の問題に対処するために間違ったデータ構造とアルゴリズムを使用しているため、遅いです。Cのようなコンパイル言語を使用すると、問題が隠されるだけです。はい、高速ですが、非効率的なアルゴリズムでのみ高速になります。正しいデータ構造とアルゴリズムを使用すると、実装する言語や最終的に処理するデータの量に関係なく、スケーリングが行われます。より高速な言語は短期間の利益しか生み出しません。O(n!)アルゴリズムは、Cで実装したとしても、依然としてO(n!)アルゴリズムです。本当に知識のあるエンジニアはこれを知っており、十分に高速なアプリケーションを作成できます。正しい構造とアルゴリズムを使用しているため、実装言語に関係なく、適切に拡張できます。
- Pythonは、主に「接着」言語であり、今後もそうなる可能性があります。接続は非常に優れています。オリジナルではなかったソフトウェアllyはお互いに直接働くことを意味しました。また、通常は手作業で行われるタスクの自動化にも優れています。とにかく主な作業は他の場所で行われるため、これらの目的では十分に高速です。 Cのような「より高速な」言語の場合、このタイプの接着作業は非常に遅く、コードにエラーが発生しやすいため、努力する価値すらありません。実行速度の向上は、それを機能させるために費やされた開発者の無駄な時間によって相殺されます。これが、人気が続いている大きな理由の1つです。
- 一部のボトルネックは、実装言語の直接制御の範囲外です。 IOは一般的なものです。私は今、Pythonのすべてが十分に高速であるアプリケーションを扱っています。物事が遅くなるのは、データベースにクエリを実行するためにネットワークにアクセスしたときだけです。私のプロファイリングは、Pythonコードの最も遅い部分でさえ、ネットワークIOの待機に費やされた時間と比較して完全に重要ではないことを示しています。私は現在、データベースへのアクセスを減らす方法を見つけようとしています(クライアント側のキャッシュ、データに対する冗長な健全性チェックの回避など)。アセンブラでアプリケーションを作成したとしても、これは問題になります。 Pythonでこの問題を修正することは、標準ライブラリに(非常に堅牢な)プロファイリングライブラリが付属しているため、実際にはより速く簡単です。多くの「高速」コンパイル言語は、伝統的にこれをそのままでは提供しません。
話の教訓は、開発者の時間はほとんどの場合、マシンの時間よりも優先されます。ホールド、スローネスは通常、外部ライブラリまたはサービスに簡単に最適化できる特定のボトルネックを特定できます。何かが本当に本当に外部のライブラリやサービスに最適化できない場合は、驚くほどまれです。同様に、ほとんど存在しません。
1つの例外は、アプリケーションに必要なものが最初からわかっている場合です。可能な限りリアルタイムのパフォーマンスに近く、コードの大部分はコンピューティング中心になります。良い例は、ビデオゲームやDCCアプリケーションです。これらは、可能な限りリアルタイムに近い方がよいでしょう。そうしないと、ユーザーがいなくなります。
ただし、そうでない場合を除いて、多くの開発者は、プロトタイピングのみを目的としても、Pythonの生産性の向上を好みます。