Apakah pemrograman dalam Python lebih cepat daripada di C, C ++ atau Java? [Tutup]

27

Ada kepercayaan luas di kalangan bahwa semakin dinamis dan longgar mengetik bahasa, semakin produktif programmer di dalamnya. Guido van Rossum menulis tentang produktivitas pemrograman menggunakan python pada tahun 1998 dan mencari di web saya masih melihat orang-orang yang mereferensikan klaim ini:

Secara sintaksis, kode Python terlihat seperti kode pseudo yang dapat dieksekusi. Pengembangan program menggunakan Python 5-10 kali lebih cepat daripada menggunakan C / C ++, dan 3-5 kali lebih cepat daripada menggunakan Java. Dalam banyak kasus, prototipe aplikasi dapat ditulis dalam Python tanpa menulis kode C / C ++ / Java. Seringkali, prototipe cukup fungsional dan berkinerja cukup baik untuk dikirim sebagai produk akhir, menghemat waktu pengembangan yang cukup besar. Di lain waktu, prototipe dapat diterjemahkan sebagian atau seluruhnya ke C ++ atau Java - sifat berorientasi objek Python membuat terjemahan menjadi proses yang mudah.

Apakah masalah ini telah dievaluasi secara ilmiah? Jika tidak untuk maka mungkin untuk bahasa scripting saudara seperti , atau ?

Saya tidak mencari rasionalisasi, analogi, atau penjelasan mengapa ini berpotensi sulit untuk dijawab, kecuali pendapat para peneliti atau pakar yang telah meluangkan waktu untuk menyelidiki masalah ini.

Saya awalnya menanyakan pertanyaan ini di skeptics.SE , dan seseorang menyarankan saya harus menanyakannya di sini juga.

Kit Sunde
sumber
25
Nah, karena Anda telah membatasi sekumpulan jawaban yang mungkin, saya hanya berani berkomentar dengan mengajukan pertanyaan lain yang harus dijawab terlebih dahulu (imho): Apakah ada metrik yang andal dan mapan untuk mengukur "produktivitas seorang programmer"?
Paul Michalik
1
@ Paul Michalik - Saya akan berasumsi bahwa setiap makalah penelitian yang melihat produktivitas akan memiliki definisi termasuk (kalau tidak akan sangat sulit untuk mengukur). Jadi, jika seseorang mereferensikan penelitian, akan sangat membantu jika mereka memasukkan definisi dalam jawaban. Mungkin ada (saya menduga) beberapa cara berbeda yang dapat diterima untuk mengukur produktivitas, mungkin "Waktu yang diperlukan untuk melewati sejumlah orang yang belum terjangkau" akan menjadi salah satunya.
Kit Sunde
1
@ Paul Michalik - Tentu, tetapi berapa banyak pernyataan yang Anda baca di buku, blog, ceramah, dan artikel dari programmer benar-benar diuji secara empiris? Saya yakin ada cara yang lebih baik atau lebih buruk untuk mengukur produktivitas. Contohnya. "Konsumsi kopi / waktu" mungkin akan menjadi lebih buruk daripada bahkan "Baris kode / waktu" klasik. Saya akan menahan penilaian atas klaim produktivitas spesifik yang pernah kita lihat dan dapat mendebat manfaat berdasarkan hal itu. Klaim produktivitas tidak hanya salah, saya yakin "garis kode / waktu" mengukur sesuatu ketika orang tidak mencoba menghancurkan metrik.
Kit Sunde
1
Anda mungkin tertarik pada artikel ini: citeseerx.ist.psu.edu/viewdoc/…
DistantEcho
1
@ ChrisF - Apakah Anda mengatakan bahwa pertanyaan ini tidak berlaku untuk Programmers.SE? Ini tentu untuk skeptis, dan sepertinya cocok di sini juga. Saya mendapat kesan bahwa Anda tidak boleh sampai saya membaca komentar baru-baru ini oleh Robert Cartaino tentang pertanyaan ini: skeptics.stackexchange.com/q/1963/631 yang pada dasarnya mengatakan bahwa tidak apa-apa jika itu menarik bagi kedua komunitas, dan Saya hanya melakukannya setelah diminta oleh pengguna lain untuk melakukannya. Mempertimbangkan bahwa pertanyaannya semakin meningkat, sepertinya ini juga menarik bagi komunitas ini.
Kit Sunde

Jawaban:

17

Artikel 1 Ousterhout tentang bahasa scripting menunjukkan bahwa semakin tinggi level pemrogramannya, semakin produktif sang programmer. Jika kita ambil itu, seperti yang dikatakan Boehm 2 , jumlah baris yang dapat ditulis oleh programmer dalam waktu tertentu adalah konstan dan tidak tergantung pada bahasa atau jenisnya (level rendah, pemrograman sistem, skrip), orang dapat dengan mudah mempercayai klaim tersebut. Instruksi yang dihasilkan-per-sumber-kode-baris-rasio dapat menjadi urutan besarnya (atau beberapa) lebih baik dengan bahasa skrip daripada dengan bahasa pemrograman sistem.

Karena bahasa scripting sangat bergantung pada utilitas siap pakai untuk tugas-tugas umum (misalnya struktur data, manipulasi string), penggunaan utamanya biasanya untuk meningkatkan produktivitas dengan biaya kecepatan lari yang lebih lambat dengan menyediakan sintaks yang mudah dipelajari dan efisien untuk memelihara program dengan. Seseorang tidak menggunakan bahasa scripting ketika kecepatan eksekusi puncak diperlukan.

[1]: JK Ousterhout, Scripting: Pemrograman Tingkat Tinggi untuk Abad 21 , Komputer (IEEE), 1998
[2]: B. Boehm, Ekonomi Rekayasa Perangkat Lunak , Prentice Hall, 1981

Jawa
sumber
9
Meskipun ini adalah jawaban yang bagus, jangan lupa bahwa bahasa non-skrip modern juga cenderung dikemas dengan utilitas siap pakai yang membuat pengembangan cepat. C # terlintas dalam pikiran. Siapa pun yang merasa Python datang dengan lebih banyak utilitas pra-kalengan daripada C # kebetulan mengenal Python lebih baik daripada C #. Pada kenyataannya mereka berdua memiliki berbagai utilitas "built-in" yang luas dan sebanding.
Roman Starkov
@romkyns, untuk proyek non-sepele Anda perlu menulis banyak kode. Bahkan jika Anda memiliki banyak batu bata Lego, Bionicles tidak secara ajaib bersatu.
2
@Tor tapi itu benar-benar lebih membantu untuk memiliki batu bata Lego di muka, daripada harus membangun bor minyak, pabrik plastik dan extruder blok lego terlebih dahulu.
Roman Starkov
2
baik c ++ dan Java memiliki wadah generik, dan c ++ 11 memiliki lib standar penuh untuk algoritma pengurutan dan iterator dll. Saya tidak yakin bahwa seseorang yang memprogram python akan mendapat keuntungan yang substansial. Selain itu saya menghabiskan sebagian besar waktu pemrograman saya untuk mengerjakan apa yang harus saya lakukan, bukan mengetik. Jadi saya pikir hanya menghitung jumlah baris yang diperlukan untuk melakukan sesuatu bukanlah indikator yang jelas tentang seberapa cepat Anda seorang programmer dalam bahasa itu.
Sam Redway
7

Jika Anda mengukur produktivitas sebagai "waktu untuk menulis program sederhana yang spesifik" maka itu tergantung lebih banyak pada pengalaman programmer dan pikiran cepat daripada bahasa yang Anda benar-benar mengevaluasi programmer, bukan bahasa.

Saya percaya kontes kode waktu menunjukkan bahwa bahasa tersebut tidak terlalu penting untuk tugas-tugas semacam itu. Tidak ada satu bahasa yang memenangkan tantangan seperti itu lebih mudah daripada yang lain (setidaknya tidak jika Anda mengizinkan popularitas relatif bahasa).

Jika Anda mengukur kinerja sebagai "keefektifan program terbaik" yang ditulis dalam bahasa tertentu, maka itu semakin tidak tergantung pada bahasa. Lihat misalnya hasil kontes AI Galcon . Pemenangnya ditulis dalam Lisp. Entri Lisp berikutnya, bagaimanapun, adalah peringkat # 280. Apa yang dikatakan di sini tentang kesesuaian bahasa untuk menulis AI yang hebat secara efisien? Menurut saya, tidak ada. Itu hanya memberitahu kita bahwa "bocsimacko" datang dan menerapkan algoritma yang paling efektif. Sebagai catatan, waktu bukanlah faktor utama dalam kontes ini - orang memiliki lebih dari dua bulan untuk mengembangkan kode mereka.

Terakhir, jika Anda mengukur kinerja sebagai "biaya jangka panjang untuk mempertahankan suatu proyek" maka saya pikir Anda tertarik pada sesuatu. Terutama jika Anda hanya mempekerjakan orang-orang terbaik untuk pekerjaan itu, dan menghitung biaya dalam jam kerja daripada dolar. Saya memiliki pendapat yang kuat tentang bahasa mana yang terbaik untuk ini, tetapi tidak memiliki bukti kuat untuk menghubungkan Anda dengan saya akan mengabaikan pendapat ini. Mungkin orang lain memiliki tautan untuk jenis kinerja ini.

Roman Starkov
sumber
7
"Anda benar-benar mengevaluasi programmer, bukan bahasa" - Tidak jika ini benar-benar dilakukan secara ilmiah. Ambil 100 programmer. Pilih proyek umum seperti "Tulis aplikasi kalender dengan persyaratan khusus ini". Persyaratan yang terkait dengan pengujian unit otomatis. 50 programmer menulis aplikasi dalam C ++, 50 dalam Python, dipilih secara acak sehingga pengembang berkualitas merata. Hasilnya akan berupa skor yang menggabungkan waktu rata-rata hingga selesai dengan jumlah unit tes yang lulus. Bandingkan rata-rata hasil Python dengan rata-rata hasil C ++ dan ... ILMU!
Morgan Herlocker
2
@Prof. Mungkin jika Anda mendapatkan seribu masing-masing ... tapi tetap saja, bagaimana Anda mengontrol fakta bahwa hanya orang dengan pola pikir tertentu dan tingkat kemampuan tertentu yang akan tahu C ++?
Roman Starkov
Anda bisa membuat sampel hanya menarik dari orang-orang yang dapat lulus tes kecakapan dalam C ++ dan Python. Banyak profesor lama saya melakukan studi yang sangat mirip. Anda juga membuat beberapa asumsi yang didiskusikan orang lain di sini: programmers.stackexchange.com/q/73715/3792
Morgan Herlocker
6

http://page.mi.fu-berlin.de/prechelt/Biblio/jccpprtTR.pdf adalah salah satu dari sedikit studi yang saya ketahui yang melakukan perbandingan langsung aktual antara produktivitas dalam berbagai bahasa. Itu sudah tua, tetapi layak dibaca jika Anda menemukan topik yang menarik. Perbandingan memiliki sejumlah kekurangan utama yang artikelnya sangat jujur.

Hasil keseluruhannya adalah bahwa bahasa tingkat rendah (misalnya C, C ++) membutuhkan waktu lebih lama untuk ditulis, dapat menggunakan lebih sedikit memori, dan dapat berjalan lebih cepat. Tetapi dengan variabilitas yang sangat tinggi. Bahasa scripting tingkat tinggi cenderung memakan waktu setengah untuk menulis dan kurang variabilitas dalam pendekatan. Pada tingkat yang awalnya mengejutkan, cenderung ada cara yang jelas untuk melakukan sesuatu dalam bahasa scripting.

Perhatikan bahwa semua angka kinerja untuk Jawa harus diambil dengan sebutir garam - kertas diproduksi pada 90-an sebelum orang memiliki banyak pengalaman dengan Jawa, dan sebelum JVM dioptimalkan dengan baik. Kedua faktor tersebut harus memiliki dampak yang signifikan.

btilly
sumber
1

Secara umum, menulis sebuah program dengan Python biasanya akan lebih cepat daripada menulis program yang sama di C, C ++, Java.

Ini juga cenderung berjalan lebih lambat.

Tentu saja ada aplikasi tertentu yang bahasa-bahasa lain mungkin lebih cepat karena tugas-tugas tertentu yang terlibat didukung secara 'lebih asli'.

Meskipun saya tidak mengetahui adanya penelitian untuk mengkonfirmasi peningkatan kecepatan / produktivitas ini (seperti yang disebutkan oleh seorang komentator, ini mungkin sulit untuk diukur secara tepat), telah ada penelitian langsung ke dalam ekspresi bahasa.

Saya pikir ada beberapa manfaat korelasi antara ekspresi bahasa dan kecepatan pemrograman. Bayangkan saja pola iterasi sederhana dan bagaimana Pythonic for-loop atau daftar pemahaman bisa lebih ringkas. Tidak hanya itu dapat langsung diketik lebih cepat, tetapi juga menghilangkan kekhawatiran kesalahan satu-per-satu, indeks di luar batas, dan masalah lain yang secara signifikan dapat memperlambat proses pengkodean.

Ini menunjukkan tabel perkiraan untuk rasio ekspresi bahasa. Meskipun harus diambil dengan sebutir garam, catatan kaki yang disebutkannya sangat bermanfaat.

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

jon_darkstar
sumber
-5

Terakhir kali saya menggunakan Java (beberapa waktu lalu diakui) butuh layar penuh kode untuk membuka dan menulis ke file. Bandingkan dengan beberapa baris dalam Python atau Perl, dan Anda bisa menebak mana yang lebih cepat.

Jelas bahasa semua memiliki kekuatan dan kelemahannya sendiri, tetapi untuk sebagian besar tugas, Python akan lebih cepat menulis.

wobbily_col
sumber
6
"butuh layar penuh kode untuk membuka dan menulis ke file": Masukkan ini ke dalam kelas utilitas dengan dua metode write()dan read()dan di sisa akses file proyek Java Anda akan sama ringkasnya seperti di Python. Saya pikir contoh Anda agak terlalu terbatas untuk membandingkan Python dan Java (meskipun saya setuju bahwa Java cenderung lebih verbose).
Giorgio
Tentu, tetapi Python, Perl, dan bahasa yang lebih tinggi umumnya sudah memikirkan hal-hal itu sebelumnya, jadi Anda tidak perlu menulis kelas utilitas (atau tidak sebanyak mereka). Menggunakan kelas utilitas masih membutuhkan waktu, dan merupakan prinsip kode yang dapat digunakan kembali yang berlaku di atas Java dan Python tergantung pada apa yang sebenarnya Anda lakukan.
wobbily_col
Ini mengasumsikan bahwa Java membutuhkan 50 - 60 baris kode hanya untuk membuka dan menulis file. Ini sama sekali tidak benar.
h22