web-dev-qa-db-ja.com

Python生産性VS Java生産性

SOについて、私はJavaまたはPythonがGoogle AppEngineでの開発に最適なプラットフォームに関する質問に遭遇しました。多くの人々は、JavaよりPythonを使用することで得られる生産性の向上を自慢していました。 Python対Java生産性の引数について私が言えることの1つは、JavaがPythonと同じように開発をスピードアップする優れたIDEを持っていることです。そのダイナミックな性質のため、この領域には本当に欠けています。

したがって、言語としてPythonを使用することを好むにもかかわらず、特に新しいフレームワークを使用する場合、それがJavaに比べて生産性を大幅に向上させるとは思いません。 Java対Pythonであり、使用できるエディタがVIMの場合、Pythonを使用すると生産性が大幅に向上しますが、 IDEが方程式に取り入れられると、それほど明確ではありません。

Javaのメリットは、多くの場合、言語レベルでのみ評価され、多くの場合は古い仮定に基づいていますが、Javaには、言語自体の外部に多くの利点があります。たとえば、JVM(しばしば批判されますが、大きな可能性を提供します)、優れたIDE、ツール、膨大な数のサードパーティライブラリ、プラットフォームなど.

質問:Python /関連の動的言語は、よく言われる生産性の大幅な向上を本当にもたらしますか? (新しいフレームワークの使用と中規模から大規模のアプリケーションでの作業を考慮して)。

25
toc777

Pythonの主な利点の1つは、「バッテリーを含む」という考え方です。それは、拡張性が高く使いやすい標準ライブラリーです。 Javaでは、テキストファイルを読み取るだけで、数行のコードやネストされたリーダーなどが必要になります。 Pythonではf.read()です。これは間違いなく、特にクイックプロトタイピングにおいて、生産性を大幅に向上させます。 Python言語も一般的に冗長性が低く、これは悪いことではありません(ただし、冗長性と簡潔さの重要性はしばしば強調されすぎると思います)。

ただし、GAEなどのいくつかのフレームワークに既に取り組んでいる場合、違いははるかに小さく、主に言語の個人的な流暢さまでであると思います。ほとんどの場合、選択した構文でフレームワークを配線するだけで、Pythonの優れた標準ライブラリはほとんど役に立ちません。

18
Joonas Pulakka

これが私の2セントです。私の経験では、Pythonは小規模から中規模のプロジェクトに適していますが、大規模なプロジェクトではJavaの方が生産的です。

一般的に、小さなプロジェクトではPython(またはPHP))のような動的に型付けされた言語を使用できます。複雑すぎず、速く実行したいので、できることは多くありません。この場合、Pythonを使用する方が実用的である可能性があります。

ただし、より大きなソフトウェアを開発する必要がある場合は、Javaのような静的に型付けされた言語を好みます。これは、コンパイラーができるだけ多くのチェックを実行することを望んでいるためです。私の経験では、大規模なプロジェクトでは、JavaよりもPythonの方がバグの修正に多くの時間を費やす必要があるため、Java =後で時間を節約できるためです。

20
Giorgio

PythonまたはRubyのようなより強力な言語では、はるかに生産性が向上します。Javaコードの一部がIDEで生成できるかどうかは問題ではありません。読み取りと保守が必要なコードは他にもあります。反復的なコードを調べて重要な部分を見つけるのに時間がかかり、コードを変更するのに時間がかかります。Eclipseが変換できるのはすばらしいことです。

private Date dateOfBirth;

に:

private Date dateOfBirth;
public Date getDateOfBirth() { return dateOfDeath; }
public setDateOfBirth(Date d) { dateOfBirth = d; }

しかし、クラスを開くたびに、そのジャンクが表示され、興味深い部分を見つけるためにそれをすり抜ける必要があります。また、メンテナンス中に、生成されたコードにエラーが発生する可能性があります。

私はむしろ見たいです:

attr :date_of_birth

私にとって、IDEを効果的に使用するためのJavaの必要性は、別の言語を選択する良い理由です。

おそらくもっと強力に、これを比較するRubyコード:

avg = people.filter { |p| p.height > 200 }.collect(:weight).average

同様のJavaコードに対して:

List<Double> weights = new ArrayList<Double>();
for (Person p: people) {
  if (p.getHeight() > 200) {
    weights.add(p.getWeight());
  }
}
return Stats.average(weights);

Rubyコードは、仕様を直接翻訳したものです:200(cm)を超える人の平均体重です。コメントは完全に冗長になります。

Javaコードは、書き込みと読み取りの両方にかなりの作業を必要とします。

ポールグラハムは、この エッセイ でプログラミング言語の簡潔さについて説得力のある主張をしています。大学院レベルの数学をやったので、彼の議論は説得力があり、簡潔さに対する議論は弱いと思います。確かに、偏微分方程式が単純な加算よりも理解しにくいのと同じように、高水準言語の1行は、低レベル言語の1行よりも理解するのが難しい場合があります。しかし、強力な言語の1行は、置換する5行または10行よりも簡単に理解できます。記号の代わりに単語を使用して書かれた数学のテキストを読むことを想像してみてください。

11
kevin cline

これは少し古い質問ですが、$。03を追加します。それはあなたの考え方にも大きく依存すると思います。私は、動的なインタープリター型言語には本当に耐えられません。一方、私は静的型付け言語の大ファンです。確かに、Javaを使用するとより冗長になる可能性がありますが、すべてを言い終えたら、読みやすく、保守しやすいと思います。Python、Ruby、Perlは非常に読みにくいと感じます(私にとって)試しましたが、頭を巻くことができません。つまり、Scalaでコードを書くと、大した問題ではありません。結局のところ、Javaは、Ruby、Python、Perlよりもはるかに強力です。JVMは、魅力的なテクノロジーであり、それの力を利用することを学ぶことはあなたにとって非常に有益であると証明することができます。

7

私は数年前にJavaからPythonに移動しましたが、個人的に私はより生産的だと感じています。@ Joonasが指摘するように、生産性の多くはパッケージ化されたライブラリですが、一部は言語自体に由来します。辞書、リストの内包表記、高次の関数、およびシェルがないとは想像できません。

既にご存知の場合JavaはPythonに堪能になるまでに少し時間がかかります。

7
Dave

Python、Ruby、Javascript、SQLは、Javaなどのコンパイルされた言語よりもはるかに生産的であることがわかります。これらの言語には非常に迅速なフィードバックループがあるためです。コマンドで数行のコードを実行できます。行を追加して、コードが正しいかどうかをすぐに知ることができます。例外がスローされた場合は、すぐにわかります。Javaその結果、フィードバックサイクルが非常に遅くなります。

高速なフィードバックサイクルにより、適切なソリューションにすばやく反復できます。これにより、動的言語の生産性が向上します。

5
Jay Godse

私はより多くのpython最近、Javaプログラマーであり、まったく新しい開発のために、 Pythonではかなり生産性が高くなります。Javaでのかなり単純なことの多くは、ファイル/ストリーム処理、URLからのデータの読み取り、XMLのシリアル化などのように、少し面倒な場合があります。 Javaは多くの場合、Pythonでは1行しかとらないようです。guavaや他のコレクションAPIなどの適切なツールを使用すると、これを実際に助けることができます。 。

pythonの利点の1つは、Javaでサードパーティのライブラリを使用するために必要な多くの機能が同梱されていることです。

そうは言っても、特定の事柄については、特にリファクタリングや大規模なコードベースでの作業などに関して、PythonでできるよりもJavaの方がはるかに生産的です).

3
Paul Sanwald