Pythonでのプログラミングは、C、C ++、Javaよりも高速ですか?[閉まっている]


27

間では、より動的で緩やかに型付けされた言語であるほど、プログラマーの生産性は向上すると広く信じられています。Guido van Rossumは1998年にpythonを使用したプログラミングの生産性について書いており、ウェブ上を検索しています。

構文的には、Pythonコードは実行可能な擬似コードのように見えます。Pythonを使用したプログラム開発は、C / C ++を使用した場合の5〜10倍、Javaを使用した場合の3〜5倍の速度です。多くの場合、アプリケーションのプロトタイプは、C / C ++ / Javaコードを作成せずにPythonで作成できます。多くの場合、プロトタイプは十分に機能し、最終製品として提供されるのに十分な性能を発揮し、開発時間を大幅に節約します。また、プロトタイプの一部または全体をC ++またはJavaに翻訳できる場合もあります。Pythonのオブジェクト指向の性質により、翻訳は簡単なプロセスになります。

この問題は科学的に適切に評価されていますか?ない場合は、おそらくなどの兄弟スクリプト言語ですか?

問題を調査するために時間をかけた研究者や専門家の意見でない限り、答えが難しい可能性がある理由の合理化、類推、または説明を探しているわけではありません。

最初にこの質問をskeptics.SEで尋ねましたが、誰かが私もここで質問すべきだと提案しました。


25
さて、あなたが可能な答えのセットを制限したので、私は最初に答えられるべき別の質問をすることによってコメントをあえてします(imho):「プログラマーの生産性」を測定するための信頼できて安定した測定基準はありますか?
ポールミハリック

1
@Paul Michalik-生産性を調べた研究論文には定義が含まれていると仮定します(そうでなければ、測定するのは本当に難しいでしょう)。したがって、誰かが研究を参照した場合、回答に定義を含めると役立ちます。おそらく、生産性を測定するためのいくつかの異なる完全に受け入れられる方法があります(おそらく推測しています)。
キットサンデ

1
@Paul Michalik-確かに、プログラマーからの本、ブログ、講演、記事で読んだ文のうち、実際に経験的にテストされたものはいくつありますか?生産性を測定する良い方法も悪い方法もあると確信しています。例えば。「コーヒー消費/時間」は、おそらく従来の「コードの行/時間」よりも悪いものです。私は、私たちが見た特定の生産性の主張について判断を保留し、それに基づいてメリットを主張することができます。生産性に関する主張は、単に間違っているだけでなく、人々がメトリックを破壊しようとしていないときに、「コード/時間の行」が何かを測定しいると確信しています。
キットサンデ

1
この記事で興味があるかもしれない:citeseerx.ist.psu.edu/viewdoc/...
DistantEcho

1
@ChrisF-この質問はProgrammers.SEには適用できないと言っていますか?それは確かに懐疑論者に対するものであり、ここにも当てはまるように思えた。私はあなたが、私はこの質問にロバートCartainoによる最近のコメント読んではならないまでという印象の下にあった:skeptics.stackexchange.com/q/1963/631、本質的にそれは両方のコミュニティへの関心のだならば、それは完全に大丈夫だと言うと、他のユーザーからそうするように促されてからやっただけです。質問が賛成票を得ていることを考えると、このコミュニティにも関心があるように思われます。
キットサンデ

回答:


17

スクリプト言語に関するOusterhoutの記事1は、プログラミングのレベルが高いほど、プログラマの生産性が高いことを示唆しています。Boehmが言うように2、それをとると、プログラマーが一定の時間に書くことができる行数は一定であり、言語やそのタイプ(低レベル、システムプログラミング、スクリプト)に依存しないため、その主張を簡単に信じることができます。結果のソースコード行ごとの命令比は、システムプログラミング言語よりもスクリプト言語のほうが1桁(または数桁)優れています。

スクリプト言語は、一般的なタスク(データ構造、文字列操作など)の既製のユーティリティに大きく依存しているため、それらの主な用途は通常、学習しやすく、プログラムを維持するのに効率的な構文を提供することにより、実行速度を遅くして生産性を向上させることですと。最高の実行速度が必要な場合、スクリプト言語に頼ることはありません。

[1]:JK Ousterhout、スクリプト:21世紀の高レベルプログラミング、コンピューター(IEEE)、1998
[2]:B. Boehm、ソフトウェアエンジニアリング経済学、Prentice Hall、1981


9
これは良い答えですが、現代の非スクリプト言語にも、開発を高速化する既製のユーティリティが満載されている傾向があることを忘れないでください。C#が思い浮かびます。PythonがC#よりも多くの事前に用意されたユーティリティが付属していると感じている人は誰でも、たまたまC#よりPythonをよく知っています。実際には、どちらにも「ビルトイン」ユーティリティの広大で比較可能な範囲があります。
ローマンスターコフ

@romkyns、重要なプロジェクトの場合、多くのコードを書く必要があります。レゴブロックがたくさんある場合でも、バイオニクルは魔法のようにまとまりません。

2
@Thorでも、最初にオイルドリル、プラスチック工場、レゴブロック押出機を建設する代わりに、これらのレゴブロックを前もって用意しておくと本当に役立ちます。
ローマンスターコフ

2
c ++とJavaの両方に汎用コンテナーがあり、c ++ 11にはソートアルゴリズムやイテレーターなどの完全な標準ライブラリがあります。Pythonをプログラミングしている人が実質的に有利だとは思いません。さらに、私は自分のプログラミング時間の大部分を、タイピングではなく、それが何をする必要があるかを決めるのに費やしています。ですから、あることをするのに必要な行数を数えるだけでは、その言語でプログラマがどれだけ速くなるかを明確に示す指標ではないと思います。
サムレッドウェイ

7

「特定の単純なプログラムを書く時間」として生産性を測定する場合、言語ではなくプログラマーを実際に評価している言語よりも、プログラマーの経験と素早い心に大きく依存します。

時限コードコンテストは、この種のタスクにとって言語は実際には重要ではないことを示していると思います。このような課題に他の言語よりも簡単に勝つ言語はありません(少なくとも、言語の相対的な人気を考慮すれば)。

特定の言語で記述された「最高のプログラムの有効性」としてパフォーマンスを測定する場合、言語依存性はさらに低くなります。たとえば、Galcon AIコンテストの結果を参照してください。勝者はLispで書かれています。しかし、次のLispエントリは#280にランクされています。これは、優れたAIを効率的に記述するための言語の適合性について何を示していますか?私の意見では、何もありません。「bocsimacko」が最も効果的なアルゴリズムを思いついて実装したことを示しています。記録上、このコンテストの時間は主要な要因ではありませんでした。コードを開発するのに2か月以上かかりました。

最後に、パフォーマンスを「プロジェクトを維持するための長期的なコスト」として測定する場合、私はあなたが何かに取り組んでいると思います。特にあなたが仕事のために最高の人だけを雇い、そしてドルではなく工数でコストを数えるならば。どの言語がこれに最適であるかについては強い意見がありますが、あなたをリンクする明確な証拠はありませんので、この意見は省略します。おそらく、他の誰かがこのタイプのパフォーマンスへのリンクを持っています。


7
「あなたは実際にプログラマではなく、言語を評価している」-これが実際に科学的に行われた場合ではありません。100人のプログラマーを連れて行く。「これらの特定の要件でカレンダーアプリを作成する」などの一般的なプロジェクトを選択します。要件は自動化された単体テストに関連付けられています。50人のプログラマーがC ++でアプリを作成し、50人がPythonで作成します。50人のプログラマーがランダムに選択し、品質の高い開発者が均等に使用されます。結果は、完了までの平均時間と合格した単体テストの数を組み合わせたスコアになります。Pythonの結果の平均をC ++の結果の平均と比較し、... SCIENCE!
モーガンハーロッカー

2
@Profたぶん、あなたがそれぞれの1000を取得する場合...しかし、それでも、特定の考え方と特定のレベルの能力を持つ人々だけがC ++を知っているという事実をどのように制御しますか?
ローマンスターコフ

C ++およびPythonの習熟度テストに合格できる人からのみサンプルをプルすることができます。私の古い教授の多くは非常によく似た研究をしていました。:また、あなたは他の人がここで説明されていることを仮定のカップルを作るprogrammers.stackexchange.com/q/73715/3792
モルガンHerlocker

6

http://page.mi.fu-berlin.de/prechelt/Biblio/jccpprtTR.pdfは、さまざまな言語の生産性を実際に直接比較したことを知っている数少ない研究の1つです。古くなっていますが、興味深いトピックを見つけたら読む価値があります。この比較には多くの重大な欠点がありますが、この記事は非常に正直です。

全体的な結果として、低レベル言語(C、C ++など)は、書き込みに時間がかかり、メモリの消費量がはるかに少なく、実行速度がはるかに速くなります。しかし、非常に高い変動性があります。高レベルのスクリプト言語は、書くのに半分の時間がかかり、アプローチのばらつきが少ない傾向があります。最初は驚くほど、スクリプト言語で何かをする明らかな方法がある傾向があります。

Javaのすべてのパフォーマンスの数値は、大雑把なものであることに注意してください。この論文は、人々がJavaに多くの経験を持ち、JVMが十分に最適化される前に90年代に作成されました。両方の要因が大きな影響を与えるはずです。


1

一般的に言えば、Pythonでプログラムを作成する方が、通常、C、C ++、Javaで同じプログラムを作成するよりも高速です。

また、実行速度が遅くなる可能性があります。

もちろん、特定のアプリケーションは、関連する特定のタスクが「よりネイティブに」サポートされているため、他の言語がより高速になる可能性があります。

この速度/生産性の向上を確認する研究はありませんが(あるコメンターが述べたように、これを正確に測定するのは難しい場合があります)、言語の表現力に関する直接的な研究があります。

言語の表現力とプログラミング速度の間には相関関係があると思う。単純な反復パターンと、Pythonのforループまたはリストの理解がより簡潔になる方法を想像してください。すぐにすばやく入力できるだけでなく、オフバイワンエラー、範囲外のインデックス、コーディングプロセスを大幅に遅くする可能性のあるその他の問題の心配もなくなります。

これは、言語の表現力の比の推定値の表を示しています。それは一粒の塩で取られるべきですが、それが言及する脚注は非常に価値があります。

http://en.wikipedia.org/wiki/Comparison_of_programming_languages#Expressiveness


-5

前回Javaを使用したとき(確かに前のことですが)、ファイルを開いたり書き込んだりするのにコードでいっぱいの画面が必要でした。これをPythonまたはPerlの2、3行と比較すると、どちらが速いかを推測できます。

明らかに、すべての言語には独自の長所と短所がありますが、ほとんどのタスクではPythonの方が高速に記述できます。


6
「ファイルを開いて書き込むのにコードでいっぱいの画面が必要でした」:これを2つのメソッドwrite()を使用してユーティリティクラスに入れるread()と、Javaプロジェクトの残りの部分ではPythonと同様にファイルアクセスが簡潔になります。あなたの例は、PythonとJavaを比較するには制限が少なすぎると思います(Javaはより冗長になる傾向があるとは思いますが)。
ジョルジオ

もちろん、Python、Perl、およびそれ以上の言語は一般的に事前にそのようなことを考えているので、ユーティリティクラスを記述する必要はありません(またはそれほど多くはありません)。ユーティリティクラスの使用にはまだ時間がかかり、実際に実行している内容に応じてJavaとPythonの両方に適用される再利用可能なコードの原則です。
wobbily_col

これは、ファイルを開いて書き込むためにJavaに50〜60行のコードが必要であることを前提としています。これは単に正しくありません。
h22
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.