Produktivitas Python VS Produktivitas Java

24

Pada SO saya menemukan pertanyaan tentang platform, Java atau Python mana yang terbaik untuk dikembangkan di Google AppEngine. Banyak orang membual tentang peningkatan produktivitas yang diperoleh dari menggunakan Python di Jawa. Satu hal yang akan saya katakan tentang argumen produktivitas Python vs Java, adalah Java memiliki IDE yang sangat baik untuk mempercepat pengembangan sedangkan Python benar-benar kurang dalam bidang ini karena sifatnya yang dinamis.

Jadi meskipun saya lebih suka menggunakan Python sebagai bahasa, saya tidak percaya itu memberikan peningkatan produktivitas dibandingkan dengan Java terutama ketika menggunakan kerangka kerja baru. Jelas jika itu adalah Java vs Python dan satu-satunya editor yang dapat Anda gunakan adalah VIM maka Python akan memberi Anda dorongan produktivitas yang sangat besar tetapi ketika IDE dimasukkan ke dalam persamaan, itu tidak begitu jelas.

Saya pikir kelebihan Java sering semata-mata dievaluasi pada tingkat bahasa dan sering pada asumsi tanggal tetapi Jawa memiliki banyak manfaat eksternal untuk bahasa itu sendiri, misalnya JVM (sering dikritik tetapi menawarkan potensi besar), IDE yang sangat baik dan alat, sejumlah besar ketiga perpustakaan pesta, platform dll.

Pertanyaan, Apakah Python / bahasa dinamis terkait benar-benar memberikan peningkatan produktivitas besar yang sering dibicarakan? (dengan pertimbangan diberikan untuk menggunakan kerangka kerja baru dan bekerja dengan aplikasi sedang hingga besar).

toc777
sumber
2
Lihatlah IDE PyCharm. Tetapi juga, saya percaya ada beberapa kerangka kerja baru untuk GAE yang mengubah kode Java menjadi JavaScript untuk digunakan di ujung depan, yang bisa jadi merupakan peningkatan produktivitas yang besar.
Andrew M
14
IDE atau tidak, Anda masih harus menulis 10 baris Java untuk beberapa hal yang dapat dilakukan (well) dalam satu baris Python.
2
Jangan malu cintamu pada Jawa. Anda telah mempelajari beberapa trik (IDE, perpustakaan, dan kerangka kerja) yang memungkinkan Anda menendang puntung. Rangkullah itu. Anda tidak perlu izin dari kami untuk menjadi luar biasa. Jika Java membuat Anda produktif, maka itu sudah cukup.
Scant Roger
1
1) Potensi JVM sangat terbatas . Sengaja. Ini bukan "buruk", itu hanya, yah, membatasi. 2) IDE hanya dapat membantu jika semua yang Anda lakukan adalah mengintegrasikan ratusan komponen yang ada (yang merupakan jenis pemrograman yang valid dan terhormat, tetapi bukan satu-satunya). Ketika datang untuk mengimplementasikan algoritma yang kompleks, Python jauh lebih produktif daripada Java (bahkan hal-hal seperti fungsi lambda dan daftar pemahaman membuat perbedaan besar).
SK-logic
1
Jika produktivitas Anda meningkat secara signifikan oleh IDE Anda, maka kemungkinan ada sesuatu yang sangat salah dengan Anda, atau platform pemrograman Anda. (Smalltalk adalah pengecualian ini, karena ia menciptakan sistem yang sepenuhnya reflektif untuk pemrograman).
Marcin

Jawaban:

18

Salah satu keunggulan utama Python adalah filosofi "termasuk baterai": perpustakaan standar yang luas dan mudah digunakan. Di Jawa, hanya membaca file teks memerlukan beberapa baris kode, pembaca bersarang dan semacamnya. Dengan Python f.read(). Ini pasti akan menjadi peningkatan produktivitas besar terutama dalam pembuatan prototipe cepat. Bahasa Python juga umumnya kurang bertele-tele, yang bukan merupakan hal yang buruk (meskipun saya pikir pentingnya verbositas vs keringkasan sering terlalu ditekankan).

Namun, jika Anda sudah mengerjakan beberapa kerangka kerja, seperti GAE, maka saya berharap perbedaannya akan jauh lebih kecil, dan terutama hingga kefasihan pribadi seseorang dalam bahasa tersebut. Anda sebagian besar hanya akan menggunakan kerangka kerja bersama dengan sintaks pilihan Anda, dan di sana pustaka standar Python yang bagus tidak banyak membantu.

Joonas Pulakka
sumber
Saya benar - benar perlu belajar cara menggunakan GAE. Adakah seri tutorial online yang akan Anda rekomendasikan? Saya kenal dengan Python, tetapi tidak memiliki petunjuk tentang GAE. Terima kasih!
@Sergio: code.google.com/appengine/docs :-)
Joonas Pulakka
4
Atau Anda dapat menambahkan Apache Commons IO dengan garis konfigurasi Maven dan kemudian membaca file dalam satu baris juga. Baterai termasuk pendekatan adalah pedang bermata dua bagi saya.
jiggy
@ jiggy: Saya setuju sedikit banyak; Baterai Python hampir selalu bermanfaat dan seringkali mencukupi, tetapi jelas perpustakaan standar tidak dapat memenuhi semua keperluan yang mungkin, jadi Anda harus kembali ke perpustakaan kadang-kadang.
Joonas Pulakka
2
Membaca file teks di java: List<String> lines = Files.readAllLines(Paths.get("file.txt"), Charset.forName("UTF-8"));. Lumayan! (Ini adalah java 7 yang belum dirilis pada 11 Maret).
assylias
19

Ini 2 sen saya. Dalam pengalaman saya Python baik untuk proyek-proyek kecil hingga menengah sedangkan untuk proyek-proyek besar saya lebih produktif dengan Java.

Secara umum, saya dapat menggunakan bahasa yang diketik secara dinamis seperti Python (atau PHP) untuk proyek yang lebih kecil: tidak terlalu rumit, Anda ingin menyelesaikannya dengan cepat dan tidak ada terlalu banyak yang bisa salah. Dalam hal ini, saya menemukan bahwa Python bisa lebih praktis untuk digunakan.

Namun, ketika saya harus mengembangkan perangkat lunak yang lebih besar, saya lebih suka bahasa yang diketik secara statis seperti Java karena saya lebih suka kompiler untuk melakukan sebanyak mungkin pemeriksaan untuk saya. Pengalaman saya adalah bahwa dalam proyek yang lebih besar saya harus menghabiskan lebih banyak waktu memperbaiki bug dengan Python daripada dengan Java, jadi saya tidak repot-repot jika diperlukan sedikit lebih banyak untuk menulis kode di Jawa karena ini akan menghemat waktu nanti.

Giorgio
sumber
6
+1, sepenuhnya setuju. Saya suka menggunakan Python dan bahasa serupa pada proyek yang lebih kecil di mana saya dapat membungkus kepala saya di seluruh ruang lingkup mereka tanpa banyak kesulitan. Masalahnya muncul pada proyek yang lebih besar di mana Anda harus menyimpulkan antarmuka antara komponen. Ini, dikombinasikan dengan dukungan refactoring yang lebih lemah membuat saya kurang percaya diri dalam memproduksi sistem yang besar, stabil, dan dapat dipelihara. Banyak tes harus ditulis dan dipelihara, hanya untuk menebus kurangnya analisis statis yang dilakukan oleh kompiler. Ketika sampai pada titik ini, manfaat dari iterasi awal cepat hilang dalam pemeliharaan.
bunglestink
Saya menggunakan keduanya, dan saya suka keduanya. Saya sangat setuju dengan Anda.
Daniel Baktiar
11

Saya jauh lebih produktif dalam bahasa yang lebih kuat seperti Python atau Ruby. Tidak masalah jika beberapa kode Java dapat dihasilkan oleh IDE. Ada lebih banyak kode untuk dibaca dan dipelihara. Dibutuhkan lebih banyak waktu untuk mengarungi kode berulang dan menemukan bagian-bagian penting, dan lebih banyak waktu untuk mengubahnya. Tidak masalah Eclipse dapat mengonversi

private Date dateOfBirth;

untuk:

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

tetapi setiap kali saya membuka kelas saya akan melihat sampah itu dan harus melewatinya untuk menemukan bagian yang menarik. Juga, selama pemeliharaan, kesalahan dapat dimasukkan ke dalam kode yang dihasilkan.

Saya lebih suka melihat:

attr :date_of_birth

Bagi saya, perlunya IDE untuk bekerja secara efektif dengan Java adalah alasan yang baik untuk memilih bahasa lain.

Mungkin lebih kuat, bandingkan kode Ruby ini:

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

terhadap kode Java serupa:

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

Kode Ruby adalah terjemahan langsung dari spesifikasi: berat rata-rata orang yang lebih tinggi dari 200 (cm). Sebuah komentar akan sangat berlebihan.

Kode Java membutuhkan kerja keras untuk menulis dan membaca.

Paul Graham membuat argumen yang meyakinkan untuk singkatnya bahasa pemrograman dalam esai ini . Setelah melakukan beberapa matematika tingkat pascasarjana, saya menemukan argumennya menarik, dan argumen terhadap singkatnya lemah. Tentu saja satu baris dalam bahasa tingkat tinggi mungkin lebih sulit untuk dipahami daripada satu baris dalam bahasa tingkat rendah, seperti halnya persamaan diferensial parsial lebih sulit untuk dipahami daripada penambahan sederhana. Tetapi satu baris dalam bahasa yang kuat lebih mudah dipahami daripada lima atau sepuluh baris yang digantikannya. Bayangkan membaca teks matematika yang ditulis menggunakan kata-kata, bukan simbol.

kevin cline
sumber
Saya tidak menggunakan Python, tetapi menggunakan C # yang memiliki properti otomatis. Berapa banyak pekerjaan dalam Python untuk menambahkan logika ke dalamnya (katakanlah menembakkan suatu peristiwa atau logika validasi)?
mlk
@mlk - Pernyataan "attr" berasal dari Ruby. Di Ruby, sangat mudah untuk melampirkan perilaku ketika properti diatur.
kevin cline
Dalam python, semua atribut kelas secara otomatis bersifat publik, sehingga sebagian besar waktu Anda akan mengaksesnya secara langsung.
Zhehao Mao
3
Python tidak perlu getter atau setter - buat dateOfBirthpublik. Jika logika perlu ditambahkan nanti di get atau set, tambahkan a _dateOfBirthuntuk menyimpan data, lalu buat propertynama dateOfBirthdengan metode get dan set. Kode panggilan tidak perlu diubah sama sekali dengan Python. Java hanya menggunakan accessors karena tidak memiliki konsep "properti".
Izkata
1
Dengan Java 8 dan stream, kode bobot rata-rata Anda dapat ditulis seperti itu:people.stream().filter(p -> p.getHeight() > 200).mapToDouble(Person::getWeight).average().orElse(0);
vitro
7

Saya pindah dari Jawa ke Python beberapa tahun yang lalu dan secara pribadi merasa bahwa saya lebih produktif. Seperti yang ditunjukkan oleh @Joonas, banyak produktivitas berasal dari perpustakaan paket. Tetapi beberapa di antaranya berasal dari bahasa itu sendiri. Saya tidak bisa membayangkan tidak memiliki kamus, pemahaman daftar, fungsi urutan yang lebih tinggi & shell.

Perlu diingat bahwa jika Anda sudah mengenal Java, perlu waktu untuk menjadi fasih berbahasa Python.

Dave
sumber
7

Ini sedikit pertanyaan lama tapi saya ingin menambahkan $ 0,03 saya. Saya pikir itu sangat tergantung pada cara Anda berpikir juga. I untuk satu benar-benar tidak tahan bahasa dinamis, ditafsirkan. Saya, di sisi lain, penggemar berat bahasa yang diketik secara statis. Tentu, menggunakan Java bisa lebih verbose tapi saya merasa lebih mudah untuk membaca dan memelihara setelah semuanya dikatakan dan dilakukan. Saya menemukan Python, Ruby, dan Perl sangat sulit dibaca (untuk saya). Aku tidak bisa membungkus kepalaku walaupun aku sudah mencoba. Yang mengatakan, saya bisa menulis kode dalam Scala baik-baik saja dan itu bukan masalah besar. Saya pikir itu tergantung pada apa yang Anda merasa nyaman. Pada akhirnya Jawa akan jauh lebih kuat; lebih dari Ruby, Python, atau Perl. JVM adalah teknologi yang menarik dan pembelajaran untuk memanfaatkan kekuatannya bisa sangat bermanfaat bagi Anda.

Nodey The Node Guy
sumber
1
Setuju, tentu saja Anda dapat meretas dengan Python dengan sangat cepat tetapi bisa menjadi mimpi buruk untuk debug nanti atau menambahkan fitur baru, itulah sebabnya mengapa sering disebut "bahasa prototipe" dan itulah yang menurut saya berguna untuk (atau untuk iklan) jenis skrip hoc)
programmx10
2
kapan akhir hari itu akan datang? Kami telah menunggu sekitar 20 tahun dan Java masih belum memiliki fungsi kelas satu atau fasilitas meta-pemrograman apa pun. Sementara itu C # telah maju pesat. Selama setahun terakhir saya mulai menulis kode Groovy alih-alih Jawa dan produktivitas saya meningkat pesat. Kode Groovy jauh lebih kecil dan lebih mudah dipahami daripada kode Java yang sesuai karena kebisingannya hilang.
kevin cline
@Kevin Cline - Saya tahu apa yang Anda katakan - Saya telah menjadi pengembang NET selama enam tahun terakhir atau sesuatu. Saya tidak berbicara hanya tentang produktivitas tetapi waktu kompilasi belaka, konkurensi, dan hal-hal multicore. Java dan JVM (Groovy, Scala, dll.) JVM adalah hal terpenting di sini yang belum tentu Java itu sendiri.
Nodey The Node Guy
2
@ programmx10 Pemeliharaan kode Python Anda tergantung pada bagaimana Anda telah menulisnya. Jika Anda membuat semuanya menjadi satu kludge besar maka tentu saja Anda tidak akan bisa men-debug-nya. Jika, di sisi lain Anda telah mengatur kode Anda dengan baik dan memisahkan fungsionalitas Anda ke dalam modul dan kelas, maka dapat dengan mudah mempertahankan (jika tidak lebih mudah) daripada kode Java.
Zhehao Mao
5

Saya menemukan bahwa Python, Ruby, Javascript dan SQL jauh lebih produktif daripada bahasa yang dikompilasi seperti Java karena bahasa-bahasa tersebut memiliki umpan balik yang sangat cepat. Anda dapat menjalankan beberapa baris kode pada baris perintah dan segera tahu apakah kode itu benar atau tidak. Jika itu melempar pengecualian, Anda langsung tahu. Dengan Java, Anda harus mengkompilasi, mengemas, dan menggunakan yang sering membutuhkan waktu beberapa menit untuk sistem besar, dan ini menghasilkan siklus umpan balik yang sangat lambat.

Siklus umpan balik cepat memungkinkan Anda dengan cepat beralih ke solusi yang baik, dan itulah yang membuat bahasa yang dinamis lebih produktif.

Jay Godse
sumber
penerapan istilah yang hebatfeedback loop
amfibi
3

Saya telah melakukan lebih banyak python baru-baru ini dan telah menjadi programmer java untuk waktu yang lama, dan untuk pengembangan baru, saya pikir saya sedikit lebih produktif dalam python. banyak hal yang cukup sederhana di java bisa sedikit membosankan, seperti pemrosesan file / stream, membaca hal-hal dari URL, serialisasi XML, dll. dengan "membosankan", maksud saya apa yang membawa Anda 5 baris kode di java sepertinya sering ambil hanya satu dengan python. menggunakan alat yang tepat, seperti jambu atau API koleksi lain, benar-benar dapat membantu dengan ini.

Saya kira saya mengatakan bahwa salah satu keuntungan dari python adalah ia mengirim dengan banyak fitur yang Anda butuhkan untuk menggunakan perpustakaan pihak ke-3 di Jawa untuk mendapatkan.

semua yang dikatakan, untuk hal-hal tertentu saya akan jauh lebih produktif di java daripada saya bisa di python, terutama ketika datang ke refactoring dan bekerja dengan basis kode besar, dll.

Paul Sanwald
sumber
1
Java adalah semua tentang perpustakaan, dengan Python mereka memiliki banyak metode, seperti halnya PHP, ke tempat yang sulit untuk mengingat semuanya, dengan Java Anda hanya mencari perpustakaan yang sesuai dan kemudian Anda setidaknya memiliki pilihan sebagai untuk apa yang Anda gunakan
programmx10
1
@ programmx10 Apa yang kamu bicarakan? Python memiliki banyak perpustakaan untuk semua hal. Lihat saja dokumentasi untuk perpustakaan standar. Pustaka python dipisahkan menjadi modul, seperti pustaka Java dipisahkan menjadi paket.
Zhehao Mao