Mengapa Java tidak digunakan untuk pengembangan aplikasi web modern? [Tutup]

393

Sebagai seorang programmer Java yang profesional, saya sudah mencoba memahami - mengapa kebencian terhadap Java untuk aplikasi web modern?

Saya telah memperhatikan tren bahwa dari startup web modern, sebagian kecil dari mereka tampaknya menggunakan Java (dibandingkan dengan popularitas keseluruhan Jawa). Ketika saya bertanya beberapa hal tentang ini, saya biasanya menerima tanggapan seperti, "Saya benci Jawa dengan penuh semangat." Tapi sepertinya tidak ada yang benar-benar dapat memberikan jawaban yang pasti

Saya juga mendengar komunitas startup web yang sama ini merujuk secara negatif ke pengembang Java - kurang lebih menyiratkan bahwa mereka lambat, tidak kreatif, lama.

Akibatnya, saya menghabiskan waktu bekerja untuk mengambil Ruby / Rails, pada dasarnya untuk mencari tahu apa yang saya lewatkan. Tetapi saya tidak dapat menahan diri untuk berpikir, "Saya bisa melakukan ini lebih cepat jika saya menggunakan Java," terutama karena tingkat pengalaman relatif saya.

Tetapi juga karena saya belum melihat sesuatu yang kritis "hilang" dari Jawa, mencegah saya membangun aplikasi yang sama.

Yang membawa saya ke pertanyaan saya :

Mengapa Java tidak digunakan dalam aplikasi web modern?

  • Apakah itu kelemahan bahasa?

  • Apakah ini stereotip Jawa yang tidak adil karena sudah ada sejak lama (sudah dikaitkan secara tidak adil dengan teknologi yang lebih lama, dan tidak menerima pengakuan atas kemampuan "modern" -nya)?

  • Apakah stereotip negatif pengembang Java terlalu kuat? (Java tidak lagi "keren")

  • Apakah aplikasi yang ditulis dalam bahasa lain benar-benar lebih cepat dibangun, lebih mudah dirawat, dan apakah kinerjanya lebih baik?

  • Apakah Java hanya digunakan oleh perusahaan besar yang terlalu lambat untuk beradaptasi dengan bahasa baru?

Cliff
sumber
142
Saya pikir Anda salah: masih digunakan, itu hanya kehilangan faktor keren.
41
@ Graham Lee: Java pernah keren? Saya pasti melewatkan sesuatu. Yah, kurasa ini kopi dingin, tapi keren? Saya pikir alasan utama adalah bahwa java, terutama kerangka kerja perusahaan Java telah dan masih sangat direkayasa. Anda tidak dapat menganggapnya ringan, Anda hanya menggunakannya karena Anda memerlukan fitur distribusi / penyeimbangan / skalabilitas platform dan ingin menggunakan kerangka kerja untuk frontend yang dikerjakan dengan java, juga, demi homogenitas.
Falcon
20
Mungkin, karena tidak modern ? : P Dan Java tidak pernah keren, hanya karena ia membuang bagian peretasan dari pemrograman.
back2dos
28
@ Falcon Java keren kembali ketika pertama kali diperkenalkan, Sun melakukan pekerjaan besar hyping Java, apakah hype dibenarkan atau tidak tidak ada hubungannya dengan itu menjadi dingin atau tidak, banyak hal keren yang hyped tanpa alasan.
Mahmoud Hossam
11
@ Falcon, Anda harus melihat membuat aplikasi web dengan JSF 2.0 di Java EE 6 dan membandingkannya dengan pengalaman Anda. Kamu mungkin akan terkejut.

Jawaban:

174

Startup modern perlu memasuki pasar sesegera mungkin. Mereka tidak perlu menghabiskan waktu sekitar enam bulan untuk merilis aplikasi web Java mereka.

Twitter misalnya dibangun menggunakan Rails / Ruby tetapi setelah menjadi tidak dapat dihilangkan, mereka bermigrasi ke JVM.

Belum lagi bahwa proses pengembangannya tidak produktif: code -> compile -> deploy ketika sedang dalam frameworks seperti (Rails / Django / Grails): jalankan testing server -> code -> ubah sesuatu dan lihat apa yang terjadi.

Berita baiknya adalah JRebel memungkinkan Anda melihat perubahan kode secara instan.

Chiron
sumber
81
Play Framework juga seperti Ruby on Rails, tetapi untuk Java. Kode -> perbarui browser Anda.
Jonas
34
Coba singkirkan beberapa kesalahpahaman. Java EE bukan satu-satunya hal di sisi server Java karena banyak yang berpikir.
Jonas
22
Facebook juga melakukan hal serupa. Basis kode mereka adalah dalam PHP, tetapi karena masalah kecepatan dan skalabilitas, mereka harus menulis kompiler (HipHop) yang mengkompilasi PHP ke C ++, yang kemudian dikompilasi menggunakan g ++. Sangat lucu bagaimana semua orang berbicara tentang betapa hebat ruby ​​dan PHP dan bahwa semua situs dibangun di sekitar mereka, tetapi kemudian ketika Anda melihat betapa tidak efisiennya mereka, sebagian besar organisasi besar harus beralih ke yang lain. Jika saya ingat dengan benar, Craigs List memiliki banyak kode backend yang ditulis dalam C / C ++ karena alasan ini.
Kibbee
28
1) Menggunakan Eclipse, kompilasi terjadi saat Anda mengetik dan Anda jarang akan melihat. Juga, menjalankan Tomcat dalam Eclipse saya dapat memulai kembali aplikasi dalam waktu kurang dari sedetik. Saya jarang terhalang dengan me-restart aplikasi saya 2) Tidak ada peluru perak, kawan. Ruby atau bahasa apa pun tidak membuat Anda 10x lebih cepat. Masalah dengan Java dev adalah seringnya meningkatkan waktu, tetapi jika Anda tahu apa yang Anda lakukan, Anda bisa bekerja dalam proyek dalam <10 menit.
alex
5
Java dan bahasa statis lainnya, memiliki dua manfaat besar, refactoring hampir tanpa khawatir, dan penemuan API tanpa dokumentasi.
Eran Medan
136

Dalam pengalaman saya, Java untuk aplikasi web berlebihan untuk aplikasi kecil. Blog sederhana dengan satu tabel basis data menampung entri blog, misalnya, dapat dilakukan dengan sesuatu yang lebih sederhana.

Saya biasanya melihat Java melakukan jauh lebih baik dalam aplikasi web yang jauh lebih besar (think bank dan perusahaan asuransi) yang berkomunikasi dengan sejumlah sistem lain (seperti backframe mainframe dan basis data serta sistem pemrosesan bets latar belakang layanan web peer ... semua dalam aplikasi yang sama).

Dari apa yang saya lihat, arsitektur aplikasi web JavaEE biasanya lebih dari yang dibutuhkan untuk aplikasi web kecil / sederhana.

FrustratedWithFormsDesigner
sumber
5
Untuk aplikasi "kecil", ini bahkan lebih benar jika Anda harus (karena ini adalah "standar" dan perusahaan menggunakannya) bekerja dengan server aplikasi monster seperti Websphere, sedangkan Tomcat lebih sering daripada misalnya cukup baik. .. Mengapa oh mengapa saya harus bekerja dengan konsol administrasi yang kacau itu?
Huh
7
@Jalayn: Menurut pengalaman saya itu karena mereka hanya ingin memelihara satu program server aplikasi untuk semuanya, daripada admin WebSphere untuk Tim A, Tomcat untuk Tim B, Glassfish (atau yang lainnya) untuk Tim C ... dan saya dapat mengerti bahwa merasa juga, tapi ya, itu membuat saya frustasi juga.
FrustratedWithFormsDesigner
3
Ini berlaku untuk Java EE, tetapi sekarang ada Kerangka Kerja yang akan membuat aplikasi web Java Anda seringan dan seproduktif Ruby on Rails.
Jonas
9
Java 6 EE baru - terutama profil web - memungkinkan untuk beberapa aplikasi web yang cukup sederhana.
4
@ ThorbjørnRavnAndersen Aplikasi ini mungkin sederhana, tetapi memahami kerangka kerjanya tidak, dan juga tidak memahami alat utama seperti Ant atau Maven. Kurva belajar newbie sangat besar dan penuh dengan lapisan sup akronim, kebingungan antara spesifikasi (misalnya JAX-RS) dan impl (misalnya Jackson) dan banyak lagi. Sangat rumit untuk melakukan sesuatu yang sederhana jika Anda ingin benar-benar memahami apa yang Anda lakukan.
Craig Ringer
135

Saya memprogram aplikasi web java selama 10 tahun sebelum saya beralih ke python, 4+ tahun yang lalu. Saya merasa bahwa saya jauh lebih produktif menggunakan python dan bisa menyelesaikan lebih banyak dalam waktu yang lebih singkat, dan jujur, saya jauh lebih bahagia ketika saya mengembangkan python. Berikut adalah beberapa alasan mengapa saya pikir python lebih baik daripada Java berdasarkan pengalaman pribadi saya, milage Anda mungkin sangat.

Kerangka Web:

Ketika saya pertama kali memulai pemrograman aplikasi web di Java, Struts baru saja keluar, dan itu tidak bagus, tetapi itu adalah hal terbaik yang tersedia. Saya membuat banyak aplikasi struts, dan beberapa di framework lain sepanjang jalan. Setiap kali kerangka baru keluar (Tapestry, Wicket, GWT, stripe, grails, AppFuse, Play, RichFaces, Spring, dll), saya akan mencobanya dan melihat apakah itu lebih baik, dan seringkali hanya sedikit lebih baik , dan terkadang tidak lebih baik sama sekali. Saya harus mengatakan bahwa kerangka permainan adalah langkah ke arah yang benar.

Baterai tidak termasuk:

Salah satu bagian yang paling menjengkelkan di Jawa adalah kenyataan bahwa sebagian besar perpustakaan yang Anda gunakan tidak termasuk dalam java itu sendiri, Anda harus memasukkan satu ton lib pihak ke-3 dari tempat-tempat seperti apache commons. Jika Anda menggunakan sesuatu seperti hibernate dengan perpustakaan besar lainnya, Anda berakhir di neraka ketergantungan Jar, di mana hibernate membutuhkan satu versi jar, dan sesuatu yang lain membutuhkan versi lain. Jika Anda memuat file jar dengan urutan yang salah, Anda kurang beruntung. Anda perlu bergantung pada alat-alat seperti pakar, dan ivy untuk mengelola dependensi Anda, dan ini hanya membawa lebih banyak dependensi ke dalam proyek Anda yang menghasilkan proyek-proyek yang sangat besar. Saya punya beberapa file perang 100MB + file perang untuk aplikasi web paling sederhana.

Terlalu banyak opsi:

Untuk beberapa alasan tampaknya ada terlalu banyak cara berbeda untuk melakukan hal yang sama di Jawa. Ada lebih dari 38 kerangka kerja web yang berbeda untuk java menurut wikipedia ( http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks#Java ) dan 23 ORM yang berbeda ( http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software# Java ) hanya untuk menyebutkan beberapa contoh. Jika Anda melihat bahasa lain mereka memiliki jumlah yang lebih masuk akal. Beberapa orang berpikir bahwa memiliki banyak opsi adalah hal yang baik, tetapi hal itu tidak mengarah pada banyak usaha sia-sia di komunitas pengembang, semua orang menciptakan kembali roda yang sama, dan jika Anda adalah orang baru dalam bahasa yang Anda miliki terlalu banyak opsi untuk dipilih.

Server aplikasi:

Aplikasi web Java sangat berat, dan membutuhkan banyak sumber daya untuk dijalankan. Mereka terutama lapar akan ingatan. Seperti perangkat lunak apa pun, mereka dapat disetel untuk mengurangi jejak sumber daya mereka, tetapi dibandingkan dengan bahasa lain, pengaturan di luar kotak mereka mengerikan. Di masa lalu saya, saya telah menggunakan weblogic, websphere, Jboss, tomcat, dan jetty. Saya hanya menggunakan tiga yang pertama ketika saya dipaksa untuk menggunakan EJB, tetapi bahkan jika Anda tidak menggunakan EJB mereka adalah server aplikasi besar dan kadang-kadang sulit untuk mengkonfigurasi dan mulai berjalan dengan benar. Tomcat dan Jetty jauh lebih baik dan lebih mudah diatur, tetapi masih merupakan sumber daya babi.

Hosting Aplikasi:

Jika Anda tidak menjalankan server Anda sendiri, sangat sulit untuk menemukan hosting bersama untuk aplikasi java Anda dengan harga yang wajar. Alasan utamanya adalah karena aplikasi java memerlukan lebih banyak memori dibandingkan dengan bahasa lain, sehingga tidak masuk akal bagi penyedia hosting bersama untuk menghabiskan RAM berharga mereka menjalankan situs java, ketika mereka bisa menjalankan 5 situs php di tempat yang sama. Itu berarti ada lebih sedikit penyedia yang menawarkan hosting java, yang pada gilirannya berarti biaya yang lebih tinggi untuk menjalankan situs web Anda.

Waktu pengembangan:

Ketika saya berkembang di java, saya mendapati diri saya jauh lebih lambat dari apa yang bisa saya lakukan dengan python. Saya perlu melakukan perubahan, mengkompilasi, memindahkan kembali dan kemudian menguji, dan ini memperlambat proses berulang. Saya tahu ada cara untuk membuat ini lebih cepat, tetapi bahkan yang terbaik, saya merasa jauh lebih lambat dari apa yang bisa saya lakukan dengan python.

Ada juga kode boilerplate jauh lebih sedikit untuk melakukan hal yang sama dengan python, jadi saya menghabiskan lebih sedikit waktu mengembangkan kode juga.

Java hanya terasa berlebihan di banyak bagian, Banyak API dan antarmuka hanyalah cara rumit untuk apa yang ingin Anda lakukan. Dan semua orang dan saudara lelaki mereka mengira mereka adalah arsitek java dan ini menghasilkan sistem rumit besar yang sulit digunakan dan dikembangkan.

IDE:

Ketika saya sedang berkembang di Jawa, saya merasa terjebak dengan IDE, saya hilang tanpa itu. IntelliJ adalah IDE terbaik di pasaran, dan sulit untuk beralih ke python karena tidak ada yang seperti itu untuk python. Jadi alih-alih IDE, saya hanya menggunakan textmate, yang hanya editor teks biasa. Awalnya sulit, tetapi karena itu hanya editor teks, itu adalah aplikasi yang sangat cepat dan responsif. Saya dapat membuka seluruh proyek saya dalam beberapa detik, sedangkan ketika saya ingin membuka proyek dalam IDE itu bisa memakan waktu satu menit atau lebih, dengan mesin dengan ton RAM. Pembuat IntelliJ keluar dengan editor python bernama pycharm, saya membelinya ketika pertama kali keluar, dan itu hebat. Tetapi yang saya sadari adalah bahwa saya tidak memerlukan IDE untuk python, saya baik-baik saja dengan editor teks. Ketika saya kembali bekerja pada aplikasi web Java yang harus saya lakukan dari waktu ke waktu, saya mencoba menggunakan editor teks, tetapi saya belum cukup menguasainya. Saya pribadi membutuhkan IDE untuk Java lebih karena jika saya mengacaukan sesuatu, dibutuhkan waktu lebih lama untuk mengkompilasi ulang dan memindahkan, yang memperlambat saya.

ORM:

Ketika saya pertama kali mulai menggunakan Hibernate sebagai ORM, saya pikir itu hebat, itu punya masalah, dan itu tidak sempurna, tapi itu lebih baik daripada apa yang saya lakukan sebelumnya. Saya senang dengan itu, sampai saya melakukan aplikasi dengan ORANG Django pada proyek python, dan itu membuka mata saya, begitulah cara kerja ORM. Setelah proyek itu saya kembali ke hibernate, dan saya merasa kecewa, dan ingin kembali ke ORM Django. ORM python besar lainnya adalah sqlalchemy, yang mirip dengan ORM Django, tetapi sedikit berbeda. Saya memiliki pengalaman terbatas dengan ORM ROR, tetapi dari apa yang saya ingat, itu cukup bagus juga.

Templat:

Sistem templating web di Jawa tidak begitu bagus, dan saya pikir saya telah mencoba semuanya (ubin, freemarker, kecepatan, dll). Kebanyakan dari mereka hanya menawarkan fungsionalitas dasar dan sulit untuk diajak bekerja sama. Di sisi Python, dua favorit saya adalah template Django dan Jinja2, mereka memiliki semua yang saya butuhkan dalam mesin templating, dan sangat mudah digunakan.

Ken Cochrane
sumber
10
Saya dengan Anda tentang banyak hal, tetapi mengambil beberapa masalah. Kompilasi / uji coba : Gunakan modul web dinamis Eclipse, dan / atau JRebel, dan itu hilang; Bagus. Berat : JBoss AS 7 cukup ringan dan cepat. dan jika Anda tidak ingin EE Anda dapat menggunakan Tomcat atau Jetty yang hampir tidak ada di sana. Pengujian : Arquillian adalah alat uji terbaik yang pernah saya gunakan dalam bahasa APA SAJA, meskipun itu baru saja cukup matang untuk dapat digunakan. Ketergantungan neraka : Cukup gunakan Maven; itu harus menjadi bagian standar dan amanah JAva.
Craig Ringer
Perhatikan bahwa semua hal di atas menambah masalah "baterai tidak termasuk", yang merupakan masalah besar. Terasa seperti Java EE adalah sub-kerangka tempat Anda seharusnya membuat kerangka kerja sendiri untuk kemudian membangun aplikasi Anda. Sangat tidak efisien. Setiap alat juga sangat buggy, dan JSF2 hanyalah alat penghancuran produktivitas pengembang.
Craig Ringer
2
Saya juga berpikir Anda melewatkan titik kritis: Kurva belajar dan bug benar-benar memperlambat segalanya.
Craig Ringer
@CraigRinger Saya belum pernah menggunakan modul web dinamis gerhana atau JRebel, jadi Anda benar, mungkin hilang.
Ken Cochrane
2
Jika Anda menyukai IntelliJ, coba PyCharm - ini didasarkan pada inti yang sama.
Tamlyn
94

Start Up ingin yang mengkilap. Apa pun yang mengkilap adalah: RoR, Groovy, Grails, OOP dengan PHP, Foobar, Wibble, Narf, dll.

Perusahaan ingin stabil, andal, dan dapat diskalakan: Java dan .NET sesuai dengan tagihan itu (bila dilakukan dengan benar).

Penampilan saat ini: Layanan Keuangan. Platform: ColdFusion (pada dasarnya Java Tag Library) dan Java.

Pertunjukan sebelumnya:

  1. Layanan Pengujian Pendidikan - ColdFusion
  2. Asuransi Risiko Tinggi - ColdFusion dan Java
  3. 401k - ColdFusion dan Java
  4. Perjalanan - Java dengan aplikasi ColdFusion internal
  5. Securities - ColdFusion (versi pra-Jawa)

Ini semua adalah situs dengan volume tinggi dan keamanan tinggi. Tidak seorang pun di perusahaan-perusahaan ini yang pernah mempertimbangkan PHP, beberapa memandang RoR dan melihat terlalu banyak masalah. Perusahaan 401k memiliki perusahaan sejenis yang menjalankan aplikasi .NET dengan pengembang yang kompeten, aplikasi ini terus macet setiap minggu. Mereka akhirnya mengubahnya menjadi Jawa dan memperoleh stabilitas.

Satu-satunya orang yang memandang rendah Jawa adalah mereka yang tidak memiliki atau sedikit pengalaman aktual dengannya atau telah terlibat dengan implementasi yang buruk dan sekarang malu-malu. Mereka melihat mengkilap dan membayangkan jika semua anak keren menggunakannya, mengapa tidak saya?

Adrian J. Moreno
sumber
23
"Perusahaan 401k memiliki perusahaan sejenis yang menjalankan aplikasi .NET dengan pengembang yang kompeten, aplikasi itu terus macet setiap minggu. Mereka akhirnya mengubahnya menjadi Java dan memperoleh stabilitas." Lol :), pernah mendengar hal sebaliknya.
Den
12
Yah tentu saja kamu punya. Ada lebih banyak aplikasi web daripada menulis kode, Anda harus tahu cara mengatur server Anda, menulis SQL yang optimal, dan sebagainya. Perusahaan itu memiliki 2 .NET devs dan tidak ada admin server sungguhan. Perusahaan yang membeli perusahaan tempat saya bekerja juga mendapatkan aplikasi itu dalam kesepakatan. Mereka adalah toko besar di Jawa dan karenanya memiliki lebih banyak sumber daya yang tersedia untuk menjamin stabilitas.
Adrian J. Moreno
48
Tampaknya tidak jujur ​​bagi saya bahwa Anda telah menulis kalimat yang dinyatakan sebagai sebab dan akibat. Konversi ke Java = gain stabilitas? Kita semua tahu bukan itu sebabnya. Juga, maaf tentang semua pengalaman ColdFusion;)
Jordan
3
Terlalu adil, investor cenderung ingin melihat citarasa tahun ini. Tapi saya secara pribadi masih tidak bisa memikirkan pilihan yang lebih buruk untuk pengembangan prototipe cepat kecuali dev Java berkualitas tinggi yang tidak mudah ditemukan.
Erik Reppen
9
dev Jawa berkualitas sangat tinggi yang tidak mudah ditemukan - Memang.
luis.espinal
73

Tambahan untuk jawaban FrustratedWithFormsDesigner : Karena saya kira pertanyaan Anda lebih mengarah ke situs yang lebih kecil, ada aspek penting yang perlu Anda pertimbangkan untuk banyak orang: Hosting ada di mana-mana untuk PHP tetapi lebih sulit untuk situs Java atau ASP. Namun ini bukan cacat dari bahasa-bahasa tersebut.

sebastiangeiger
sumber
Saya pikir ini telah berubah, sekarang Anda dapat meng-host aplikasi web Java di GAE tanpa biaya.
Mahmoud Hossam
+1 untuk hosting Java. Meskipun ASP.Net tidak sulit ditemukan dan murah. Saya membayar $ 8 sebulan untuk hosting ASP.Net bersama saya. Di sisi lain, saya ingin mencoba membuat situs di Jawa dan tidak dapat menemukan host bersama yang menjalankan Java dan harus menggunakan VPS tidak menarik minat saya untuk proyek pembelajaran.
Jetti
9
+1 untuk ini. Jauh lebih mudah untuk meng-host banyak situs di server untuk PHP daripada untuk Java dan menambahkan bahwa jauh lebih mudah untuk menemukan solusi web hosting murah untuk PHP daripada untuk Java.
Jonas
Anda benar @ Mark, sudah diperbaiki.
sebastiangeiger
1
@ Kibbee - Arvixe Itulah yang saya gunakan. Saya punya rencana personalASP Pro.
Jetti
70

Java benar - benar digunakan untuk pengembangan aplikasi web modern. Terutama sekali Anda sampai pada ujung spektrum aplikasi web yang agak lebih besar / lebih kompleks / dapat diskalakan.

Jika Anda tertarik dengan alat dan kerangka kerja modern yang produktif, perhatikan:

Tapi saya pikir pengembangan web paling modern pada platform JVM kemungkinan akan dilakukan dalam salah satu bahasa JVM baru daripada menggunakan Java secara langsung, dengan Java hanya menyediakan tulang punggung dalam hal perpustakaan yang mendasarinya dan infrastruktur back-end. Ada banyak pengembangan web yang terjadi di Groovy ( Grails ), Scala ( Lift and Play ), JRuby ( JRuby on Rails ) dan Clojure ( Noir , Ring / Enlive + banyak kerangka kerja kustom) untuk menyebutkan beberapa.

Dengan semua inovasi yang terjadi pada ruang bahasa JVM baru, saya pribadi curiga bahwa Java pada akhirnya akan menjadi "assembler pemrograman sisi server".

mikera
sumber
Vaadin adalah alat yang hebat untuk membuat aplikasi intranet dan perusahaan besar. Kurasa itu tidak cocok untuk startup. Itu kecuali Anda merangkul tampilannya, karena terlalu sulit untuk mengubahnya.
naugtur
7
Sepakat; Java EE 6 sangat bagus segera setelah Anda menjatuhkan JSF2 dan menggunakan sesuatu yang waras dan produktif. Kurva pembelajaran masih sangat besar .
Craig Ringer
1
Anda bisa menambahkan Tapestry5 ( tapestry.apache.org ) ke daftar kerangka kerja web Java modern.
Neeme Praks
@CraigRinger JSF mudah. Komentar Anda berbunyi seperti pertanyaan itu sendiri: kata-kata kasar agama
jwenting
@jwenting Yah, sudah tiga tahun , jadi sedikit meningkat dalam hal dokumentasi dan alat eksternal sejak itu. Pada tumpukan EE 6 ketika saya sedang bekerja dengannya, itu mengerikan, lebih dari itu jika mendukung Glassfish 3 dan AS 7.
Craig Ringer
41

Apakah Google, Amazon, atau LinkedIn dianggap modern?

Java digunakan untuk aplikasi web modern. Jika Anda melihat perusahaan, itu adalah bahasa yang paling banyak digunakan untuk aplikasi web (internal).

Yang mengatakan, Jawa melewati masa itu standar pengembangan web itu mencoba menjadi segalanya untuk semua orang (bisa dibilang masih melakukan). "Don't repeat yourself" adalah tanggapan terhadap xml hell dan siklus pengembangan Java web yang lama. Akibatnya, Java (EJB, Struts, JSF, dll) menjadi dipandang sebagai hal yang semua paradigma baru coba atasi.

Java, bahasanya adalah verbose. Itu adalah pro dan kontra (bagus untuk pemeliharaan, menyebalkan untuk dev). Ada sejumlah fitur bahasa modern yang belum membuatnya menjadi Java yang dapat memangkas waktu pengkodean secara substansial (properti, acara, penutupan, generator, pemahaman daftar, dll). Jadi, ini bisa membuat frustasi ketika datang dari bahasa yang lebih modern. Yang mengatakan, mereka sulit untuk menambahkan ke bahasa dewasa tanpa menjadi sarang tikus yang menjadi C #.

Banyak bahasa yang digunakan dalam pengembangan web modern diketik secara dinamis. Ini memungkinkan tooling yang secara dinamis dapat memuat kembali kode seperti yang tertulis (ini lebih sulit untuk dicapai dalam bahasa statis - jrebel). Karena pengembangan web cocok untuk iterasi yang cepat, pemuatan dinamis adalah kemenangan besar. Ini secara signifikan mengurangi siklus pengembangan pada proyek-proyek greenfield dan membuatnya lebih mudah untuk mendapatkan UI dan UX yang tepat (percobaan dan kesalahan secara alami).

Bahasa statis juga memiliki tempatnya. Untuk logika backend yang kompleks, harus dijalankan selama bertahun-tahun, harus menskala tanpa masalah, harus sangat cepat, dan harus sepenuhnya bebas kesalahan, bahasa yang diketik secara statis (seperti Java atau bahkan C) lebih disukai.

Selain itu, seiring dengan bertambahnya jumlah / omset pengembang dan produk menjadi matang, kemungkinan orang yang bermaksud baik memperkenalkan bug yang meroket. Ketegasan dan disiplin yang diterapkan proyek Java yang dirancang dengan baik (antarmuka, pola, dan air suci untuk vampir php :)) menegakkan membantu mengurangi risiko jangka panjang. Sementara, ini juga dapat dicapai melalui pengujian unit, jaring pengaman yang berasal dari pemeriksaan statis (dan analisis statis seperti findbugs dan dentang) memberikan tingkat cakupan kode bawaan yang sulit untuk ditiru dengan tes tulisan tangan. Jangan salah paham, harus ada tes unit dan tes fungsional, tetapi organisasi nyata tidak pernah mencapai cakupan 100%. Untuk apa yang mereka periksa, analisa statis lakukan.

Jadi, dalam proyek-proyek besar (sebagaimana didefinisikan lebih oleh ukuran tim daripada ukuran kode), di mana ada interoperasi yang kompleks antara potongan kode yang dikembangkan secara independen, bahasa seperti Jawa masih lebih disukai. Contohnya termasuk aplikasi web besar / kompleks seperti yang ada di broker keuangan (ameritrade), pertukaran keuangan (nasdaq, nyse, mungkin london setelah kegagalan .net), perbankan online (hampir semuanya), email (google), lelang (ebay) , dll.

Dari perspektif kinerja dan skala, tidak ada yang berada di puncak platform Java untuk kombinasi skalabilitas dan kinerja untuk aplikasi web (tergantung pada bagaimana Anda menghitung partisi aplikasi Facebook). Twitter, misalnya, harus menulis ulang sebagian besar infrastruktur Ruby-nya di Scala di Java VM untuk mengembalikan paus yang gagal kembali ke laut. Saya pernah mendengar contoh besar lainnya, tetapi mereka menghindari saya sekarang.

Ini juga layak mempertimbangkan keamanan. Sementara plugin browser Java telah menderita kerentanan keamanan yang adil, platform java itu sendiri adalah salah satu platform yang lebih aman dibuat. Aplikasi web Java memiliki reputasi sangat aman. Praktik pengkodean, pustaka, dan arsitektur memiliki kesalahan panjang yang membuat serangan seperti injeksi sql atau buffer overflows menjadi mungkin. Sementara platform web lainnya (rel) memiliki reputasi keamanan yang baik, tidak ada yang melampaui Java.

Intinya, sebagian besar aplikasi web sederhana secara teknis. Untuk sederhana, Java sering berlebihan (seperti di masa lalu ketika kita menulisnya di C :)). Namun, jika webappnya kompleks (backend atau lainnya) atau diperkirakan memiliki 100+ pengembang, Java sulit dikalahkan.

-

Pada catatan pribadi, saya banyak menggunakan Grails karena itu memberi saya yang terbaik dari kedua dunia (hal yang sama dapat dikatakan tentang JRuby yang saya dengar semakin populer di dunia Ruby).

BTW - Saya menemukan peningkatan PHP benar-benar membingungkan. PHP sebagai bahasa adalah setara kasar dengan perl dalam keterbacaan dan VB dalam kualitas hasil. Ini mendorong praktik-praktik mengerikan, nyaris tidak mungkin untuk dipertahankan, perpustakaan pihak ke-3 jarang berfungsi seperti yang diharapkan, dan memiliki sintaks yang akan mendorong Larry Wall ... well ... tembok. Satu-satunya penjelasan yang saya dapat menyulap adalah bahwa ia cocok untuk belajar tambahan (seperti VB). Dengan kata lain, Anda dapat mencapai sesuatu yang bermanfaat mengetahui sedikit tentang pemrograman / administrasi dan Anda dapat memperluas pengetahuan Anda sedikit demi sedikit. Ada banyak yang bisa dikatakan untuk itu dari perspektif adopsi. Namun, bagi siapa saja yang setiap orang harus mendukung atau mengganti salah satu dari miliaran aplikasi VB yang ditulis oleh "programmer" di dunia perusahaan / mfg, Anda mungkin menggelengkan kepala dan merencanakan pensiun Anda. :)

pengguna56365
sumber
3
Mau menguraikan titik "sarang tikus yang menjadi titik C"?
XåpplI'-I0llwlg'I -
1
Saya tidak yakin mengapa Anda mengatakan 'Jangan ulangi diri Anda sendiri' adalah respons terhadap neraka xml dan siklus pengembangan web Java yang lama. ' KERING muncul sebagai konsep dalam komunitas Agile, yang sebagian besar menggunakan bahasa selain Jawa pada saat itu.
Jules
38

Yah, saya baru-baru ini bertemu dengan seorang pria Java yang sangat bersemangat dengan proyek Data Spring baru, karena betapa sedikit kode yang diperlukan untuk mendapatkan akses CRUD dasar untuk DB Anda.

Saya dapat membangun aplikasi CRUD menggunakan Rails (bukan hanya akses db, tetapi juga tampilan dan pengontrol) dengan beberapa perintah.

(Dari atas kepala saya: proyek baru, 1 perancah perintah per entitas, 1 perintah untuk memigrasi database, 1 perintah untuk memulai server.)

Itu tidak ada hubungannya dengan bahasa, itu semua tentang alat. Dan tampaknya bahasa dinamis cenderung memiliki alat dan kerangka kerja yang menghapus banyak kode boilerplate. (Untuk mengganti kekurangan IDE yang kuat yang menghasilkan boilerplate untuk kami.)

Saya juga merasa bahwa bahasa yang dinamis cenderung membuat penulisan alat dan kerangka kerja seperti itu jauh lebih mudah. Saya bisa grok kode untuk mengatakan, Padrino atau Rails (ruby web frameworks) jauh lebih mudah daripada saya bisa grok kode untuk mengatakan Spring Roo. Ini bisa disebabkan oleh fakta bahwa saya tahu Ruby jauh lebih baik daripada saya tahu Java.

Robbie
sumber
24
Secara pribadi saya tidak suka bahasa dinamis. Bahasa statis membuat saya lebih produktif ketika saya bisa melihat semua jenis kesalahan dengan cepat di IDE saya dan menggunakan alat refactoring. Anda harus melihat Play Framework. Ini adalah kerangka kerja Java web yang terinspirasi oleh Ruby on Rails dan membuat Anda produktif dengan Java.
Jonas
4
Kerangka yang kuat, seperti rel juga berarti bahwa jika ada sesuatu yang buruk diimplementasikan maka kebanyakan orang tidak dapat menggantinya dengan sesuatu yang lain, karena komponen itu terlalu ketat dengan kerangka. Sedangkan untuk java, jika saya tidak suka Hibernate, saya bisa menggunakan sesuatu yang lain seperti cabe rawit atau JPA misalnya.
Coyote21
2
Sebagai seseorang yang melawan Django, izinkan saya untuk hanya mengatakan: Coyote21 benar sekali. Anda bisa mendapatkan CRUD dasar dan berjalan dalam lima menit, tetapi begitu Anda mulai menambahkan logika bisnis (ketika catatan ini diperbarui, catatan harus dimasukkan dalam tabel ini, dan ...) ke CRUD, Anda memiliki masalah .
asthasr
Jika Anda menyukai Rails tetapi membutuhkan Java, lihat Seam Forge. Hati-hati, ia menggunakan JSF2, yang mengerikan untuk bekerja dengannya, tapi Forge sendiri cukup bagus.
Craig Ringer
Anda dapat membangun aplikasi CRUD di Jawa menggunakan Roo dalam hitungan menit, hal yang sama dengan Grails (tidak persis Jawa, tetapi masih JVM) Play 1.0 memiliki generator / perancah, saya ingin tahu ke mana
perginya
24

Jawa telah diposisikan dalam beberapa tahun terakhir sebagai "perusahaan". Yang ada di sisi lain dari spektrum apa yang dibutuhkan startup. Dalam pengembangan aplikasi web Anda memerlukan 4 hal - akses basis data tanpa rasa sakit, manipulasi string yang hebat, sintaksis gula dan proses berulang yang cepat untuk membuat banyak perubahan kecil yang dibutuhkan aplikasi Anda.

Kinerja, skalabilitas, dan stabilitas sedikit lebih rendah pada daftar prioritas.

Juga Java adalah bahasa yang sangat tidak terhitung untuk kode. Ia mendapat kemampuan revolusioner untuk menggunakan string dalam pernyataan switch baru kemarin. Dan javascript adalah bahasa yang sangat hacker sehingga setelah mengembangkan frontend Anda, Anda merasa sangat kendala ketika Anda kembali ke java.

Jadi saya kira ini adalah alasan webstartup menghindari java.

Daniel Iankov
sumber
12
akses db tanpa rasa sakit? Spring JDBC atau Hibernate berfungsi dengan baik. Manipulasi string yang hebat? Jangan berpikir manipulasi string lebih dari 5% dalam proyek apa pun. Gula sintaksis? Apa yang Anda maksud dengan itu? Proses berulang yang cepat? Java memilikinya (Tomcat di dalam Eclipse tidak menyakitkan). Java unfun? Satu-satunya hal yang hilang adalah kelas anonim singkat / lambdas / dll. Fitur "menyenangkan" dalam bahasa lain cenderung mengaburkan dan memperjelas hal-hal. String diaktifkan ... ya, saya harus mengakui bahwa itu menyebalkan (namun, sebagian besar waktu, Anda harus menggunakan enum).
alex
4
@alex: Syntax sugarJava praktis tidak dapat digunakan untuk DSL, misalnya, konfigurasi Play dan file rute bukan file Java, itu dalam sintaksis asing yang tidak kurang dari mengatakan pengaturan django.py dan urls.py; tidak ada daftar pemahaman; tipe data penting (misalnya peta, daftar) tidak diimpor secara default; satu-kelas-per-file bodoh benar-benar menghalangi; dan Java API cenderung bertele-tele. Selain itu, Anda tidak dapat menggunakan enum ketika Anda beralih di antara string yang Anda terima dari parameter GET / POST.
Lie Ryan
4
@ alex Menarik. Saya cenderung menggunakan obat generik di mana saja di C # - walaupun melihatnya dari luar, itu mungkin karena peningkatan fungsionalitas para lama - Jadi saya dapat memiliki IRepository<T>dengan IQueryable<T> Where(Expression<Func<T, Boolean> Expression). Saya ingin tahu apakah mereka akan menjadi lebih populer di Jawa ketika mendapat lambdas? Mungkin ini adalah zona nyaman tetapi Java hanya terasa pas - dan sepertinya saya telah diberikan bit yang cukup untuk membangun 50 jenis mobil tanpa jaminan setiap 2 bagian akan cocok bersama.
Dasar
3
Saya tidak percaya bahwa dua orang berpendapat bahwa Tomat di dalam Eclipse tidak menyakitkan dan membuat pengembangan Java efisien. Saya menemukan bahwa itu membuat setiap siklus pengembangan lebih cepat, tetapi membutuhkan pemeliharaan harian, termasuk penyegaran berulang kali, membangun kembali, membersihkan kucing jantan, mempekerjakan kembali, memulai kembali dan kadang-kadang memulai kembali Eclipse dan mengulangi langkah-langkah sebelumnya. Jika mobil saya membutuhkan banyak perawatan, saya tidak akan pernah bisa bekerja.
Brandon
1
@Brandon Saya akan kedua itu. Saya tidak pernah, tidak pernah berjuang dengan masalah konfigurasi di Node atau Python / Django. Saya kehilangan kesabaran dengan RoR. Java codebase yang bergantung pada Ant / Mvn / Spring / Hibernate / eclipse kami adalah mimpi buruk yang terbangun sebelum Anda bahkan sampai ke kode.
Erik Reppen
18

Saat ini saya bekerja di sebuah perusahaan yang memiliki beberapa pengembang "Aku benci Jawa". Ini digunakan untuk mengejutkan saya juga. Saya tentu membenci semua menimbun teknologi yang tersedia dengan Java. Ini membuat pengambilan keputusan terlalu sulit. Ini seperti Ketika Anda memiliki terlalu banyak pilihan, Anda tidak punya pilihan. Anda harus menghabiskan waktu dengan 100-an kerangka kerja untuk benar-benar datang dengan kerangka kerja yang cocok untuk Anda. Arsitektur Servelt standar cukup rumit untuk sebagian besar aplikasi. Ini tidak terjadi dengan Ruby, Django dan lainnya. Mereka lebih merupakan kerangka tunggal daripada bahasa.

Keluhan terbesar yang saya dengar dari pengembang

  1. Sintaksnya terlalu panjang. Hanya untuk mencetak sesuatu kita harus menulis System.out.print. Anda benar-benar tidak dapat menggunakan editor seperti VI dan menulis sepotong kode yang berfungsi dalam beberapa jam.
  2. Kerangka uji lemah. Meskipun kerangka pengujian sangat mirip di Jawa dan Ruby, Ruby mengambil langkah maju dengan membuat hal-hal yang mudah tersedia untuk pengujian. Ini terutama benar jika Anda menggunakan DB secara luas dalam aplikasi Anda. Bahkan banyak kerangka kerja Web tidak berpikir tentang pengujian.
  3. Template itu menyusahkan. Membuat bahasa yang relatif sederhana menjadi Soup Mie.
  4. Tidak keren. Sebagian besar aplikasi Java ditulis di perusahaan besar, yang dikaitkan dengan Birokrasi yang tidak berjalan baik dengan pengembang. Orang tidak berpikir Google ketika mereka memikirkan Java. Google == Python. Itu juga harus dilakukan banyak tanpa buku yang keluar menunjukkan lakukan X dalam Y hari.
  5. Jangan suka mengkompilasi. Bagi kebanyakan pengembang kompilasi adalah fenomena lama satu dekade. Masuk akal di tahun 80-an dengan C tetapi komputer mordern dapat melakukan lebih banyak. Mereka tidak menulis kode dalam bahasa yang dikompilasi. Java adalah salah satu dari sedikit bahasa yang dikompilasi dan digunakan untuk menulis aplikasi web.
  6. Terlalu Banyak Konsep Ups. Meskipun pengembang diam-diam mengadopsi domain Oops. Mereka tidak menyukainya secara penuh. Mereka tidak suka ketika Anda menulis aplikasi dengan 10 kelas dengan setiap kelas hanya melakukan satu hal. Membuat Anda membuka 100-an file dan membayangkan interaksi di 100-an kelas, terkadang dengan kerangka kerja. Menjadikan seluruh kegiatan pemrograman sebagai tugas. Ini bisa benar dengan sebagian besar bahasa tetapi saya telah melihat bahwa Pengembang Java membayar banyak perhatian pada apa yang dilakukan kelas. Ini adalah Java Developers yang sering membuat kode dengan 100-an kelas. Ini bagus dari banyak sudut pandang tetapi pengembang non java membencinya.

Jadi secara keseluruhan Jawa memaksakan kurva curam di awal proyek, yang berarti terlalu banyak uang untuk dilakukan. Tambahkan ke ini sebuah komunitas besar yang melekat pada java, masing-masing berpikir dengan cara yang berbeda dan tidak ada yang benar-benar menusuk kepala seluruh komunitas. Mereka juga tidak melihat pembicaraan dan konferensi yang diadakan oleh komunitas memamerkan semua hal baru yang keren. Tidak ada buku keren baru. Java sepertinya akan turun karena digunakan untuk memecahkan terlalu banyak masalah yang berbeda beberapa tahun yang lalu.

arunmur
sumber
(2) ditangani dengan luar biasa oleh JBoss Arquillian ( arquillian.org ). Banyak sisanya lebih merupakan masalah JSF2 daripada masalah Java. Masalah terbesar IMO adalah kurva belajar dan kerangka kerja yang sangat besar, tetapi jika Anda menghindari JSF2 Anda bisa melakukannya dengan baik.
Craig Ringer
5
Saya suka OOP. Saya juga tahu OOP yang mengapa saya tidak setuju bahwa sebagian besar devs Jawa melakukan terlalu banyak. Anda dapat menulis kelas tetapi jika kode Anda masih berantakan spaghetti kusut, semua yang Anda benar-benar lakukan adalah menemukan cara (kacang) untuk menulis kode prosedural omong kosong dengan struktur tanpa titik melilit apa yang mungkin juga fungsi sederhana atau struct di terbaik.
Erik Reppen
2
"Orang-orang tidak berpikir Google ketika mereka memikirkan Java." ... Saya tentu berpikir tentang Android dan VM Dalvik mereka (yang merupakan Java VM) ketika saya berpikir tentang Google. Saya juga memikirkan hal-hal keren seperti GWT (generasi otomatis JavaScript dari Java). Jika ada satu perusahaan yang "tinggi" di Jawa, itu Google. Lebih dari Apple atau Microsoft. Memang, Oracle dan IBM bahkan lebih terkait dengan Java daripada Google tetapi masih: miliaran perangkat Android yang menjalankan aplikasi Java pada Java VM adalah sesuatu yang agak sulit untuk dipikirkan tanpa membangun tautan Google / Java yang sangat kuat.
Cedric Martin
Banyak kebencian terhadap JSF2 dari @CraigRinger dalam komentar ini. :-) Ada apa denganmu yang membuatmu kesal? Awalnya saya merasa rumit, tetapi begitu saya mulai, saya menyukainya . Tentu saja, saya menggunakan Spring sebelum itu, jadi hal lain akan terlihat seperti peningkatan ... :-)
Brian Knoblauch
1
Saya seorang Pengembang OOP di Jawa dan saya tidak bisa melebih-lebihkan manfaat OOP untuk pengembang. Ya, memang butuh sedikit lebih banyak waktu saat mengembangkan, tetapi tingkat bug yang lebih rendah, dapat dibaca & lebih mudah untuk mempertahankan kode sangat berharga. Belum lagi pengujian unit menjadi lebih mudah dengan OOP yang dilakukan dengan benar.
IntelliData
14

Kerangka kerja untuk melakukan pengembangan web Java memiliki sedikit kurva belajar, mereka sering kali terlalu banyak untuk apa yang Anda butuhkan, dan banyak tipuan yang diperlukan untuk membuat sesuatu berfungsi hanya ... menyakitkan ... untuk dikerjakan.

Saya dulu bekerja untuk sebuah perusahaan yang melakukan pengembangan Spring / Java, dan saya menemukan kerangka kerja yang paling rumit. Saya tidak punya banyak hal yang menyenangkan untuk dikatakan tentang kerangka kerja Spring, kecuali saya punya teman yang pernah melakukan pengembangan Struts dan dia pikir Struts bahkan lebih buruk. Kerangka kerja web tidak seperti melakukan aplikasi desktop atau aplikasi seluler (misalnya: android), dan memiliki banyak ide abstrak yang membutuhkan waktu untuk benar-benar dipahami (walaupun, tentu saja, itu memberi Anda banyak daya dan kemampuan jika Anda Sedang pro dan melakukan sesuatu yang sangat kompleks seperti aplikasi kelas perusahaan). Saya suka pemrograman java untuk perangkat seluler atau desktop, tetapi java untuk aplikasi web? Tidak terlalu banyak.

Saya belum melakukan pemrograman apa pun secara pribadi di Ruby / Rails, tetapi teman saya yang dulu melakukan Struts sekarang melakukan pemrograman web Ruby dan bersaksi bahwa hal-hal yang sulit dilakukan dalam pemrograman web Java memerlukan kode dan kompleksitas yang jauh lebih sedikit untuk dicapai dalam Rubi. Tentu saja ada kurva belajar untuk berbagai sintaks dan aturan bahasa, tetapi untuk membuat prototipe aplikasi, ada kelebihan dalam hal berapa banyak kode yang diperlukan untuk mencapai hasil yang diinginkan. Seperti yang disebutkan orang lain, skalabilitas adalah masalah yang harus dipertimbangkan juga, dan salah satu alasan mengapa aplikasi yang lebih dewasa tidak sering dilihat dalam bahasa yang lebih modern.

Jessica Brown
sumber
+1 untuk kerangka kerja berlebihan Semakin gila, dan Anda menghabiskan semua waktu Anda menulis konfigurasi xml.
Richard
1
+1 untuk kerangka kerja. Tidak hanya kerangka upaya asli P ** s Poor (JSP, STRUTS), kami sekarang memiliki sekitar tiga puluh untuk memilih dari tidak satu pun yang berfungsi serta RoR.
James Anderson
Bukan hanya kerangka kerja. Tingkat kesesuaian yang cabul dengan hal-hal yang tidak masuk akal. Mengekspos banyak properti berarti Anda melakukan kesalahan. Menampar pengambil dan penyetel vanilla pada yang baru saja menambahkan pemanggilan metode tanpa titik dan tidak mengubah apa pun, namun tidak ada pengembang Java yang hanya akan menjuntai properti dari objek seperti itu, karena komunitas memperkuat bahwa itu entah bagaimana lebih salah daripada apa yang sudah mereka lakukan. Tapi serius, XML bukan hal kode ... bagaimana itu bisa bertahan lebih dari 5 menit?
Erik Reppen
14

Turun ke biaya dan tren. Startup Web 2.0 dibuat oleh visioner di bawah 30 yang memiliki lebih banyak talenta daripada uang (tentu saja saya menggeneralisasi, tetapi inilah yang akan Anda lihat "rata-rata"). Dia akan menggunakan bahasa yang dia kenal karena dia melakukan pemrograman (bersama dengan mungkin beberapa teman). Dia kemungkinan besar adalah programmer otodidak.

Java telah ditargetkan sebagai lingkungan perusahaan (oleh Java, maksud saya bahasa, kerangka kerja, dan standar). Ada banyak alat mahal yang ingin dijual oleh perusahaan IBM, Oracles, dan BEA.

Langkah-langkah untuk menjadi mahir di Jawa rumit dan / atau mahal. Saya tahu lanskap berubah di sana, tetapi apakah sudah terlambat?

Setelah startup, traksi meningkat. Merekrut pengembang berbakat sulit. Kebanyakan program "menjadi programmer dalam enam minggu" mengajarkan Java (atau .NET) dan pasar dipenuhi dengan "programmer enam minggu" (anehnya saya telah melihat pengembang dengan resume yang mengatakan pengalaman 7 tahun yang masih menunjukkan pengetahuan tentang enam programmer minggu). Menggunakan lingkungan non-mainstream non-perusahaan dapat menjadi filter alami untuk programmer enam minggu. Dibutuhkan dedikasi dan investasi pribadi untuk mempelajari Ruby atau Scala di luar persyaratan pekerjaan. Ini adalah indikator terbesar bagi saya tentang potensi calon.

Pengetahuan datang dengan pengalaman tetapi seorang programmer yang berdedikasi / bersemangat akan mendapatkan pengetahuan lebih cepat (rata-rata) daripada seseorang tanpa dedikasi / gairah itu. Persis seperti anak yang suka bermain gitar akan menjadi lebih baik lebih cepat daripada anak yang mengambil pelajaran karena ayahnya yang membuatnya.

Michael Brown
sumber
Saya pikir ini adalah poin yang sangat bagus +1
sfrj
1
Saya tidak setuju dengan paragraf yang mengatakan: Dia kemungkinan besar adalah programmer otodidak. Ini tidak benar hari ini, saat ini kebanyakan orang dari 30-an bahwa program adalah programmer yang kompeten dan memiliki setidaknya gelar.
Coyote21
1
??? Saya sedang melukis startup web prototipikal. Saya tidak mengatakan apa-apa tentang mereka yang kompeten. Anda bisa belajar sendiri dan kompeten pada saat yang sama. Saya tidak yakin dengan apa Anda tidak setuju.
Michael Brown
1
Ini adalah jawaban saya. Java adalah satu-satunya teknologi web saat ini yang tidak dirancang sehingga pengembang yang kompeten dapat mengambilnya dan menggunakannya. Bagian kedua dari jawaban Anda adalah apa yang ditulis oleh Paul Graham dalam The Python Pardox
user16764
14

Java terlalu rumit. Saya melakukan banyak pekerjaan PHP dan hanya lebih mudah dan lebih cepat untuk sebagian besar situasi. Kemampuan untuk hanya SSH ke server membuka file php membuat perubahan simpan dan dilakukan sangat bagus. Beberapa aplikasi Java yang telah saya kerjakan selalu membutuhkan restart untuk perubahan yang paling sederhana. (tidak mengatakan itu selalu terjadi dengan apa yang saya delt). Selain itu PHP hosting murah dan tersedia.

Saya juga berpikir apa yang Anda miliki setidaknya dengan PHP adalah banyak pengembang yang menyukai saya memulai 14/15 tahun yang lalu dengan HTML statis. Seiring perkembangannya, kami mulai menambahkan PHP ke situs kami karena itu mudah, sederhana, dan terjangkau. Selama bertahun-tahun bahasanya telah berkembang dan telah mengembangkan kemampuannya jauh melampaui permulaannya yang sederhana dan sekarang berusaha keras untuk menjadi apa yang saya pikir banyak hal yang sebenarnya tidak.

Di sisi lain sebagian besar pengembang PHP yang saya kenal melihat Jawa sebagai gorila 800lb yang terlalu rumit, hampir seperti mengeluarkan truk semi beroda 18 untuk pergi ke toko bahan makanan dan mendapatkan sepotong roti.

Saya sudah mencoba belajar Jawa, kesan pertama saya di mana itu sangat panjang lebar dan mendorong terowongan karpal. Selain itu mulai meninggalkan saya dengan banyak pertanyaan yang mungkin tampak mudah bagi seorang veteran Jawa. OpenJDK, atau Sun? Tomcat, atau Glassfish, atau? Plus tampaknya setiap pengantar ke buku Java mulai Anda menulis kode untuk baris perintah. Saya pikir sebagian besar orang akhir-akhir ini mendapati bahwa tunda tidur.

Cyrus
sumber
3
Saya akan mengambil lebih banyak pilihan dan sedikit lebih banyak kompleksitas daripada lebih dari 9000 metode built-in PHP.
Kaleb Brasee
1
PHP begitu mudah diatur.
Barfieldmv
9
tetapi itu hanya membuatnya sangat sulit untuk menulis kode yang baik ... lebih mudah untuk setup, lebih mudah untuk memulai, kurang membosankan seharusnya tidak menjadi kriteria yang Anda gunakan untuk memilih bahasa. Pemrograman yang baik membutuhkan disiplin, kesabaran dan usaha ... itu pertanda buruk jika Anda tidak memilikinya saat memilih ...
alex
Kecuali mereka berdua bau tetapi satu lebih dari PITA untuk mengatur daripada yang lain.
Erik Reppen
12

Tim saya dan saya saat ini sedang mengembangkan aplikasi web greenfield di Java 6 + Stripes. Dalam setahun terakhir saya juga bekerja pada aplikasi web greenfield lain menggunakan Java 6 + Stapler (kerangka web yang agak tidak dikenal yang dikembangkan oleh Kohsuke Kawaguchi dari Hudson / Jenkins fame).

Java benar-benar digunakan untuk pengembangan web modern. Tentu saja itu tidak memiliki daya tarik "seksi" dari Ruby atau bahasa dinamis lainnya, tapi saya jauh dari yakin bahwa bahasa dinamis adalah hal yang baik setelah proyek mulai berkembang.

Server aplikasi Java modern sangat kompetitif dengan ASP.NET dalam hal kinerja, dan keduanya pesanan lebih cepat daripada VM bahasa dinamis yang saya tahu.

Jangan salah paham ... Saya tidak mengatakan bahwa Java selalu merupakan pilihan terbaik (bukan jarak jauh!) - tetapi tidak juga selalu merupakan pilihan yang salah atau "ketinggalan jaman".

Daniel Pryden
sumber
1
Saya cenderung tidak setuju dengan "lebih cepat". Secara teori mereka seharusnya tetapi ada beberapa situs php besar di luar sana dan hampir semua anekdot tentang masalah kinerja berhubungan dengan MySQql atau basis data lain yang mendasarinya. Di sisi lain, hampir setiap aplikasi J2EE yang saya hubungi membutuhkan penyetelan ekstensif sebelum kinerja bahkan dapat diterima.
James Anderson
1
@ James: apakah Anda memiliki sesuatu selain anekdot yang tidak jelas untuk mendukungnya? Semua situs web top-10 di luar sana berjalan di platform yang dikelola (Amazon di Jawa, Twitter di Scala IIRC, Google di backend kustom Jawa dan C ++) atau mereka memiliki infrastruktur yang sangat disesuaikan (Facebook dan Wikipedia menggunakan PHP, tetapi keduanya memiliki sejumlah besar kode asli khusus untuk kecepatan). Java secara teratur mengungguli bahasa dinamis dalam tolok ukur. Saya bukan fanatik Java, tetapi kinerja bukan masalah Java.
Daniel Pryden
Tidak ada masalah kinerja dengan Java itu sendiri "tidak secepat secepat C tetapi lebih cepat dari yang lain". Namun J2EE, plus frameworks, plus ORM, plus injeksi ketergantungan, plus desain berlebihan hampir dijamin untuk tidak melakukan; ada begitu banyak potensi untuk kemacetan tersembunyi dan interaksi yang tidak terduga
James Anderson
1
@ Dasar: Apa maksudmu? Ada banyak pustaka dan kerangka kerja yang rusak untuk bahasa apa pun. Ya, ada banyak kekar dan dokumentasi yang ketinggalan zaman - tapi itu juga tidak biasa. Sebaliknya, ada beberapa pustaka, kerangka kerja, dan alat yang luar biasa untuk Java. Apakah Anda serius berusaha menyarankan bahwa harus ada satu kerangka kerja ujung ke ujung untuk setiap aplikasi yang pernah ada?
Daniel Pryden
1
@ Dasar: Mundur dari apa? Pada setengah tahun sejak saya pertama kali menulis jawaban ini, saya telah pindah dan saat ini bekerja di Google, dan saya dapat meyakinkan Anda bahwa Java sangat banyak digunakan untuk pengembangan aplikasi web di Google. Tentu saja, kebutuhan Google sangat berbeda dari kebutuhan banyak perusahaan lain, tetapi Java adalah binatang yang sama sekali berbeda ketika Anda menggunakan perpustakaan dan kerangka kerja yang tepat - cukup periksa beberapa hal yang bersumber terbuka oleh Google (Guava, Guice, GWT, Protokol Buffer, dll.).
Daniel Pryden
12
  1. Java lebih kompleks untuk dipelajari daripada PHP / Python / Ruby
  2. Ekosistem Jawa sangat kompleks, sangat besar dan cukup membingungkan bagi pemula
  3. Ada banyak kerangka kerja yang secara historis buruk dengan reputasi negatif yang terkait dengan java, Anda harus tahu kerangka kerja mana yang harus dihindari.
  4. Alat bantu pembuatan Java adalah cara yang rumit (pakar & semut)
  5. Java tidak memiliki sistem modul yang mudah digunakan (OSGI terlalu rumit)
  6. Java IDE seperti Eclipse sementara sangat kuat dengan fitur luar biasa sulit untuk dikonfigurasi untuk pengembangan web yang efektif tanpa banyak pengalaman.
  7. Jika Anda menggunakan selain Tomcat atau Jetty sebagai server maka Anda akan frustrasi dengan waktu startup yang lama dari WebSphere / WebLogic / JBOSS
  8. Java EE memecahkan masalah yang tidak dimiliki banyak orang seperti transaksi terdistribusi

Seorang pengembang baru yang masuk ke pengembangan profesional akan menemukan Java Orde of Magnitude lebih sulit daripada rel, python, atau php untuk melanjutkan sehingga mereka pergi dengan apa yang mudah dipelajari.

Setelah mengatakan semua hal di atas, saya membuat keputusan untuk menggunakan Java untuk Startup saya karena lingkungan Pembangunan Jawa dikonfigurasi dengan benar sangat produktif untuk bekerja di. Dengan dikonfigurasi dengan benar Maksudku.

  1. Waktu mulai kurang dari 10 detik
  2. Ruang kerja gerhana yang dikonfigurasi dengan benar, dengan semua kerangka kerja yang kusut dan dikonfigurasi
  3. Pilihan perpustakaan yang baik (Spring, Spring MVC, Spring Social, Spring Security, JPA, Hibernate, Velocity, .... dll)
  4. Mesin pengembang cepat dengan SSD
  5. Berlangganan Orielly Safari
am
sumber
8
Mari kita perjelas. Bahasa Jawa, tidak sulit dipelajari. Ini semua lapisan omong kosong yang dibangun di sekitar bekerja dengan Java untuk menebus kekurangannya (kata kerja, melindungi Anda dari diri sendiri dan rekan satu tim Anda dengan menjadi tidak fleksibel karena semua jalan keluar, jumlah perpustakaan yang tidak masuk akal yang diandalkan, dll ...) itu adalah PITA untuk mempelajari.
Erik Reppen
2
@ErikReppen Sangat benar. Saya harus bekerja pada proyek Java tetapi memiliki latar belakang. Net. Bahasa dan sintaksisnya semudah yang saya mengerti. Itu adalah verbosity yang benar-benar membuatku gila. Apa yang saya gunakan dalam 1 baris sekarang membutuhkan 5-10 dan (sering) mengedit file konfigurasi XML. Belum lagi tanpa menghabiskan berjam-jam membaca, memilih kerangka kerja "tepat" untuk pekerjaan adalah mimpi buruk - dan itu sebelum Anda mengetahui bahwa skenario Anda dianggap sebagai kasus tepi, tidak didukung dan jika Anda tidak suka itu, tulis ulang. Saya ingin menghabiskan waktu saya untuk menyelesaikan masalah besar
Basic
"Java lebih kompleks" - adakah yang bisa mengingat pesanan parameter untuk PHP strposatau in_array? Dan antarmuka XML DOM PHP konyol (memberikan atribut ke string untuk mengambilnya?). OSGi benar-benar brilian dan tidak tergantung bahasa.
jevon
@jevon: Dokumen PHP sangat bagus dan IDE saya ingin mengingatkan saya. Juga, SimpleXML.
DanMan
12

Sekitar 5 tahun yang lalu, saya dan seorang kolega diberi tugas pemrograman untuk beberapa proyek internal. Tugas yang cukup sederhana yang membutuhkan penguraian perintah.

Saya datang dengan seluruh hal dalam sekitar 80 baris kode java dan rekan saya mengambil satu minggu, sekitar 20 kelas java dan banyak lagi baris kode java untuk melakukan hal yang sama. Tak perlu dikatakan, kodenya diambil.

Ini membuat saya bertanya-tanya. Di mana-mana, kompleksitas dihargai. (Saya bekerja di salah satu perusahaan produk perangkat lunak terbesar.) Java adalah alat pilihan dan pola desain adalah cara untuk kode.

Sekarang, apakah itu pola pikir atau hanya kesombongan yang menolak kesederhanaan. Yah, saya selalu berpikir akal sehat harus menang. Apakah itu perusahaan atau aplikasi web sederhana, kasus penggunaan dasar adalah sama. Itu harus benar dan dapat diverifikasi.

Saya tidak menggunakan java lagi karena beberapa alasan. Tetapi salah satu faktor - kompleksitas, adalah pola pikir yang berlaku dalam satu ton pengembang java ketika datang untuk mengembangkan perangkat lunak.

Adapun penskalaan bahasa dinamis, JVM adalah hasil dari penelitian selama beberapa dekade. Ada banyak hal yang sama terjadi pada Ruby dll.

Scala adalah salah satu bahasa yang menurut saya sangat pintar dan praktis. Bermain! dengan Scala sama bagusnya untuk pengembangan aplikasi web / perusahaan sama seperti di luar sana.

Adapun Ruby dan Rails menjadi hal baru yang mengkilap untuk pemula, sangat sulit untuk menyewa pengembang Rails yang solid. Ini sebenarnya merupakan penghalang bagi setiap start-up sedangkan kebanyakan java devs harus lebih masuk akal secara bisnis.

Ar Wen
sumber
Saya bukan penggemar java tapi itu "kompleksitas" yang Anda rujuk mungkin abstraksi. Abstraksi sangat berguna baik untuk pengujian maupun perawatan (bila digunakan dalam jumlah sedang). Sulit untuk mengatakan dengan pasti tanpa bisa membandingkan kode
Dasar
11

Dalam wawancara baru-baru ini dengan, Joseph Snarr, petunjuk teknis untuk google plus menjelaskan bagaimana aplikasi menggunakan Java Servlets untuk back end dan JavaScript di ujung depan.

Jadi untuk menjawab pertanyaan Anda, Java masih digunakan untuk pengembangan web yang sangat modern. Hanya saja tidak untuk start-up yang telah mendapatkan banyak pers baru-baru ini.

Saya pikir alasan mengapa banyak pemula menggunakan teknologi lain adalah karena mereka lebih seksi dan memiliki dorongan open source yang lebih dipublikasikan di belakang mereka.

Greg Guida
sumber
4
Start-up menggunakan teknologi lain karena mereka ingin menyelesaikannya sekarang. Tidak nanti. Dan mereka melakukannya sekarang dengan 3 orang, bukan 30.
Erik Reppen
Mengutip seseorang hanya dapat memberikan pandangan dan pilihannya tetapi tidak membenarkan bahwa apa pun yang dia pilih adalah keputusan yang tepat.
DivKis01
9

Karena Anda menyebutkan pengembangan web dan Java, banyak orang cenderung lupa bahwa pada awalnya menggunakan Java Applets di browser web tidak tampil dengan baik, tidak hanya itu, tetapi "kotak pasir" untuk applet tidak sepenuhnya dikembangkan dan ada masalah keamanan dengan Java Applets dapat berjalan di browser dan mengakses data mesin lokal (alias masalah keamanan sisi klien). Tentu Java solid di aplikasi backend dan stand-alone tapi saya pikir menghubungkan Java bahasa dengan applet Java (dijalankan di browser) bersama-sama agak mengacaukan beberapa persepsi tentang Java sebagai komponen pengembangan web. Saya tidak berpikir mereka pernah pulih dari itu.

LocoTx
sumber
9
Benar-benar tidak! Sebenarnya Java adalah bahasa yang dominan di dunia sisi server. Applet dipadamkan mungkin dekade lalu.
Chiron
5
Flash melakukan apa yang dicoba oleh Applet. Mulai cepat, unduh cepat, jejak memori rendah.
4
Saya tahu banyak orang yang bahkan tidak bisa membedakan antara Jawa dan Javascript. Meskipun mereka sama sekali tidak berhubungan. Ini adalah hal lain yang memberi Java nama yang buruk.
Kibbee
5
@ Kibbee ... atau memberi Javascript nama yang buruk :)
Matthew Schinckel
9

Pertanyaannya seharusnya "Mengapa Java tidak digunakan oleh startup atau untuk proyek-proyek kecil?". Java tentu digunakan untuk "aplikasi Web modern". Di Google, Java digunakan di backend untuk banyak layanan, dan penutupan yang dikompilasi JS atau GWT digunakan untuk frontend. Masalahnya adalah salah satu dari kecepatan vs skala. Startup harus mendapatkan produk minimum yang layak. Mereka biasanya tim kecil yang terdiri dari 1-3 insinyur, dan menilai kecepatan iterasi dibandingkan kinerja atau pemeliharaan. Berlari melawan masalah skalabilitas atau masalah pemeliharaan kode kode tim adalah masalah "Anda ingin memiliki", yaitu, pada saat Anda mencapai tahap itu, itu pertanda implementasi awal Anda membantu Anda melebihi punuk awal mendapatkan pelanggan atau investasi. Anda dapat menulis ulang aplikasi pada saat itu.

Perusahaan seperti Google dapat membayar kemewahan membangun hal-hal untuk skala di muka, meskipun mereka mungkin membuang-buang waktu mereka menerapkan penskalaan untuk sesuatu yang mungkin tidak mendapatkan pengguna, karena mereka dapat menyerap kerugian.

Setidaknya, itulah pendapat saya, bahwa banyak perusahaan "keren", "keren", "modern" membangun aplikasi kecil dengan tim kecil di mana kecepatan dan kesederhanaan iterasi adalah persyaratan terbesar.

cromwellian
sumber
1
Di mana sumber Anda yang menyatakan bahwa startup tidak menggunakan Java? Harap cadangkan asumsi Anda dengan beberapa fakta.
Walter
7

Aplikasi web tradisional di Jawa, meskipun terstruktur dengan baik, sangat jauh dari "berkembang pesat". Meskipun saya hanya pernah menulis satu aplikasi web lengkap (Java / Tomcat / Struts), itu sangat pemilih, butuh waktu lebih lama dari yang diharapkan untuk debug, dan umumnya menyakitkan ketika menerapkan lapisan logika bisnis. Dalam pertahanan potensial Jawa, itu adalah satu-satunya aplikasi web yang saya tulis di Jawa (meskipun saya sudah terbiasa dengan pemrograman aplikasi tingkat sistem di Jawa), dan saya percaya saya bisa menulis aplikasi web lain sedikit lebih cepat untuk yang kedua kalinya.

Karena itu, saya juga menulis aplikasi dalam PHP dan C #, dan mereka hanya bekerja lebih baik, dan jauh lebih pemaaf daripada Java. Lebih dari itu, Ruby on Rails ditulis khusus untuk pengembangan aplikasi yang cepat, yang, seperti kata Robbie, memungkinkan akses CRUD yang mudah ke database. Masalahnya adalah bahwa sebagian besar situs web yang Anda kembangkan sendiri tidak memerlukan tingkat penyesuaian yang ditawarkan Java (dan mengharuskan Anda untuk melakukan). Selain itu, setiap objek koneksi DB harus ditulis dengan tangan dan tidak mudah untuk di-template. Mungkin ada kerangka kerja yang lebih baik, terutama yang mengambil keuntungan dari fitur dukungan bahasa dinamis baru Java 7 , tapi saya belum melakukan penelitian.

Brian
sumber
3
Anda harus melihat Play Framework. Ini adalah kerangka kerja Java web yang membuat Anda produktif dengan Java dan terinspirasi oleh Ruby on Rails.
Jonas
2
@Jonas, pertimbangkan untuk menulis beberapa posting blog yang bagus menjelaskan semua ini dengan singkat.
@Jonas apa yang dikatakan Thorbjorn! Saya akan membacanya dengan seksama. :)
Brian
@ Thorbjørn: Saya tidak punya blog. Singkatnya: Dengan Play Framework Anda hanya menyimpan kode sumber Java Anda, dan kemudian memperbarui browser web. Kode ini secara otomatis dikompilasi di sisi server menggunakan kompilator Eclipse. JPA digunakan untuk akses basis data. Ini adalah artikel tentang itu. Mainkan! Kerangka Pemakaian
Jonas
2
@ Thorbjørn & Brian: Lihat video di halaman depan situs web framework, ini menjelaskannya dengan sangat baik menurut saya.
Bjarke Freund-Hansen
7

Jawaban sederhana: kurva pembelajaran hingga produktivitas dasar.

Kerangka kerja sistem berbasis seperti RoR cenderung menempatkan "sihir" dalam bahasa / sintaksis. Sangat mudah untuk meningkatkan sintaksis RoR dasar Anda dan membangun aplikasi.

Java adalah bahasa pertama, dan alat dan kerangka kerja muncul kemudian. Jadi, Anda harus belajar Java terlebih dahulu, dan kemudian Anda harus belajar Spring, atau Grails, atau IDE super Anda, atau apa pun. Contoh favorit Ruby, tidak memerlukan setter dan getter. Faktanya adalah, Java IDEs menyingkirkan manual coding juga ... tetapi masih dalam sumber Anda. Manfaat dari pendekatan ini, adalah bahwa di bawah kerangka kerja, ada bahasa yang konsisten yang dapat digunakan oleh semua pengembang Java.

Manfaat ini meragukan bagi startup kecil di mana waktu adalah hal terpenting. Biasanya, mereka melakukan sangat sedikit yang tidak bisa mereka lakukan dengan kerangka out of the box. Sehingga mereka dapat mengambil sistem pilihan RAD mereka dan memiliki aplikasi langsung keesokan harinya.

Tetapi jika Anda melihat Facebook dan Twitter, saat mereka berkembang, mereka menemukan hal-hal yang tidak dapat ditangani oleh kerangka kerja di luar kotak sehingga mereka harus menggunakan teknologi tingkat yang lebih rendah.

Perang suci yang dimiliki oleh pengembang kerangka ini bahwa mereka dapat melakukan apa pun lebih cepat adalah palsu, mereka dapat melakukan banyak hal yang mereka butuhkan lebih sederhana dan dengan sedikit kurva pembelajaran. Dan untuk banyak hal, itu "cukup baik." Gunakan apa yang benar untuk masalahnya.

Lucas McGregor
sumber
6

Tergantung bagaimana Anda mendefinisikan "pengembangan aplikasi web modern". Jika Anda berbicara tentang startup, situs web perputaran cepat, Anda perlu mempertimbangkan bahasa dan kerangka kerja yang dirancang untuk tujuan itu. Jika Anda mencari pengembangan web tingkat perusahaan yang stabil, dapat diskalakan, Anda mencari bahasa dan kerangka kerja yang mendukung cita-cita tersebut. Dalam buku saya, itu adalah dua tujuan yang sangat berbeda. RoR, Groovy, dll. Bagus untuk yang pertama dan Java lebih sesuai, secara umum, untuk yang terakhir.

cdkMoose
sumber
6

Google App Engine mendukung Java, sehingga Anda dapat menulis seluruh aplikasi web di Java, menggunakan Eclipse sebagai antarmuka IDE dan penyebaran, dengan Google API yang didokumentasikan dengan cukup - jadi saya tidak akan mengatakan itu tidak digunakan atau tidak dapat digunakan.

Paul
sumber
5

Dalam startup saya bekerja untuk kami memilih untuk menggunakan Java dan JRuby untuk mengimplementasikan API kami karena mereka saling melengkapi.

Untuk infrastruktur, distribusi proses, dan komunikasi, kami memanfaatkan ketahanan Java, sedangkan untuk implementasi aktual titik akhir API, kami memilih JRuby karena semua panggilan melibatkan JSON dan jauh lebih masuk akal untuk memanipulasi representasi longgar-diketik (JSON) menggunakan longgar. -typed language (Ruby).

Jika kita melihat salah satu kelas JRuby kita menjadi hambatan, kita hanya mengimplementasikannya kembali secara langsung di Jawa (pada dasarnya terjemahan baris demi baris). Ini bisa terjadi cukup sering dengan kelas-kelas yang harus melakukan banyak perhitungan, dan dalam konteks ini JRuby berperilaku seperti bahasa prototipe.

Kami menerapkan pemuat kelas dinamis kami sendiri yang artinya kami dapat mengubah kelas Java dengan cepat tanpa memulai ulang server, dan kami sangat senang dengan pilihannya. Jadi argumen "Anda perlu mengkompilasi dan memulai kembali setiap waktu" tidak terlalu berpengaruh.

Kuncinya adalah untuk menghindari semua hal-hal Java EE - itu besar dan rumit dan anti-gesit.

David Semeria
sumber
5

Saya masih merasa bahwa Java sedang digunakan dalam banyak pengembangan web. Tapi itu biasanya pada jenis pengembangan perusahaan yang lebih berorientasi bisnis-tidak-terutama-teknologi-besar, yang biasanya kurang terbuka daripada startup baru yang harus mendapatkan daya tarik dan mempromosikan pekerjaan mereka sendiri, serta lebih tertarik pada teknologi . Jadi, bahkan jika itu digunakan di banyak situs web perusahaan, Anda mungkin tidak akan pernah tahu, karena mereka tidak akan peduli untuk memberitahu secara publik tentang tumpukan teknologi mereka.

Yang mengatakan, mengomentari semua pertanyaan asli ...

Apakah itu kelemahan bahasa? Dibandingkan dengan bahasa lain seperti Python atau Ruby, Java adalah verbose dan cenderung membutuhkan lebih banyak kode untuk melakukan hal serupa. Tapi itu bukan hanya kemampuan bahasa, juga komunitas di sekitarnya dan jenis pengembang yang menggunakan alat-alat itu. Jadi, sebagian besar modul dan alat di Python, Ruby, PHP, dll adalah open source dan lebih mudah ditemukan daripada di dunia Java, hanya karena ini lebih fokus pada pemberian (dan pengisian) layanan. Misalnya, komunitas Ruby benar-benar berorientasi pada pengembangan web, sehingga setiap pengembang yang dapat menggunakan Ruby akan tahu tentang masalah dan alat yang tersedia untuk proyek web. Itu belum tentu benar untuk pengembang Java, yang bisa saja bekerja pada sistem jenis lain, seperti sistem pelaporan. Tentu saja, pengembang yang baik akan mengejar,

Apakah ini stereotip Jawa yang tidak adil karena sudah ada sejak lama (sudah dikaitkan secara tidak adil dengan teknologi yang lebih lama, dan tidak menerima pengakuan atas kemampuan "modern" -nya)? Jawa sebenarnya tidak setua itu, dan, karena adil, ia sudah sangat membaik. Itu adalah platform yang keren dan relevan sekitar 10 tahun yang lalu. Tapi sejak itu, ada platform baru dengan masalah yang lebih baru dalam pikiran, seperti Ruby on Rails. Sektor inti Jawa terutama adalah dunia perusahaan, dengan masalah yang berbeda, sehingga orang-orang mencari proyek baru di luar yang telah mencari alat yang berbeda. Juga, keuntungan utama dari desain Java, menjadi multiplatform, tidak relevan hari ini seperti sebelumnya.

Apakah stereotip negatif pengembang Java terlalu kuat? (Java tidak lagi "keren") Itu juga benar. Java masih merupakan bahasa untuk belajar "untuk mendapatkan pekerjaan". Jadi, jika Anda tidak peduli, tetapi hanya ingin belajar sesuatu untuk mendapatkan uang, Anda akan berakhir belajar sedikit Jawa dan tidak peduli lagi untuk meningkatkan. Sekali lagi, banyak tentang persepsi dan visibilitas. Ada banyak pengembang Java hebat yang melakukan pengkodean tanpa membagikan pengetahuan mereka, sementara ada banyak pengembang PHP, mungkin tidak sebaik itu, yang menulis blog dan berkolaborasi menjadi open source. Itu mengarah untuk berpikir bahwa pengembang PHP lebih baik daripada Java, karena Anda memiliki umpan balik tertentu tentang mereka.

Apakah aplikasi yang ditulis dalam bahasa lain benar-benar lebih cepat dibangun, lebih mudah dirawat, dan apakah kinerjanya lebih baik? Saya akan mengatakan bahwa mereka lebih cepat dibangun. Prinsip-prinsip bahasa seperti PHP, Python atau Ruby membuatnya cukup baik untuk menghasilkan perangkat lunak yang dapat berubah terus-menerus. Misalnya, pengetikan dinamis membuat lebih mudah untuk mengubah antarmuka. Di Jawa memiliki antarmuka yang terdefinisi dengan baik adalah penting, yang mengarah ke antarmuka yang lebih stabil (dan sulit untuk diubah). Ini sangat penting dalam startup baru, yang masalah utamanya adalah mendapatkan produk sebelum Anda kehabisan uang. Tentang kinerja, sangat mudah untuk salah memahami kebutuhan dan mencoba menggunakan trik sulap untuk mencapai kinerja yang diperlukan, seperti "Java lebih cepat daripada Ruby. Periode" atau "MongoDB adalah skala web".

Apakah Java hanya digunakan oleh perusahaan besar yang terlalu lambat untuk beradaptasi dengan bahasa baru? Secara pasti, setelah memiliki tim pengembang Java yang sudah ada di perusahaan, membuatnya lebih mudah untuk tetap menggunakan bahasa yang sama untuk proyek-proyek baru. Ini dianggap sebagai "taruhan aman", khususnya jika inti perusahaan bukan teknologi. Tapi, bagaimanapun, Java tidak HANYA digunakan pada perusahaan besar, masih ada banyak startup yang menggunakan Java untuk hal-hal keren (Misalnya, FightMyMonster atau Swrve menggunakan Java secara luas), tetapi saya akan mengatakan bahwa kecenderungan umum dalam startup scene adalah menggunakan bahasa lain. Itu juga cara mendapatkan orang, karena kebanyakan orang akan lebih senang bekerja dengan Ruby, Python atau PHP, dianggap lebih "ramah" dan "menyenangkan"

Khelben
sumber
5

Ini benar, tetapi bukan karena Jawa dan ekosistemnya. Itu karena orang-orang itu, ketika menggunakan Jawa cenderung membuat kekacauan besar dan kekejian berat.

Ada cukup banyak kerangka kerja (pegas-mvc, grails, play, dll.) Yang memungkinkan Anda membangun sesuatu dengan cepat. Fakta bahwa orang overengineer sistem mereka adalah masalah yang datang dengan meningkatnya pengetahuan yang didapat orang ketika mereka bekerja dengan ekosistem Jawa - Anda tahu banyak hal lagi, dan Anda memilikinya tersedia (ada alat untuk semuanya), dan "semuanya tampak seperti kuku".

Jika Anda "hacky", Anda dapat melakukan hal yang hampir sama dengan Java seperti halnya dengan bahasa lain, dan inilah penelitian yang menunjukkan bahwa:

Studi 49 programmer: sistem tipe statis tidak berpengaruh pada waktu pengembangan ... http://www.cs.washington.edu/education/courses/cse590n/10au/hanenberg-oopsla2010.pdf

Bozho
sumber
3

Untuk menambahkan sedikit pada apa yang telah dikatakan, saya pikir banyak yang harus dilakukan dengan seberapa cepat Anda dapat beralih dari yang tidak ada (secara harfiah) ke aplikasi web yang fungsional.

Jika semua yang Anda miliki hari ini adalah sebuah ide, pergi dari tempat Anda sekarang ke menulis aplikasi web Anda hampir semudah jatuh, baik Anda memilih penyedia hosting atau infrastruktur Anda sendiri (seperti gambar EC2). Memilih Java, menurut pengalaman saya, biasanya lebih banyak pekerjaan, dan seringkali lebih mahal juga.

Selain itu, jika Anda menggunakan Linux dan PHP / Python / Ruby, alat dan platform ini gratis dan dirancang untuk saling mendukung. Dengan Java, kadang-kadang tampaknya dua dunia (OS dan Java) kadang-kadang tampaknya tidak bekerja secara harmonis satu sama lain.

Matt Ryan
sumber
Kurva pembelajaran benar-benar vertikal. Anda akan menghabiskan beberapa MINGGU pertama hanya mencari tahu apa akronimnya, bagaimana standar terkait dengan implementasinya, bagaimana semuanya berlapis, dll. Kemudian beberapa minggu ke depan mencari tahu mana perpustakaan dan kerangka kerja yang digunakan. Kemudian beberapa minggu berikutnya melaporkan bug di dalamnya ...
Craig Ringer
3

Siapa bilang bukan?

Spring MVC + Spring Data JPA atau Mongo + Thymeleaf untuk templating + coffee-maven-plugin untuk Coffee to JS transpiling dan Anda siap melakukannya.

Martin Spa
sumber
Saya sangat setuju dengan Anda +1
Arshad Ali
3

Banyak yang mungkin mengaitkan Java dan pengembangan aplikasi web dengan kengerian J2EE yang, dibundel dengan server aplikasi J2EE mengerikan dari perusahaan besar biru dan merah, menyamai minggu kerja sebelum dasar "Hello World" online.

Benar, spesifikasi dan implementasi JEE baru-baru ini lebih ringan, tapi saya masih berpikir tiga kali sebelum menyarankan hal seperti ini untuk proyek pengembangan cepat siklus pendek.

Ini masih merupakan cara berbasis standar untuk melakukan pengembangan aplikasi web di Jawa. Alternatif-alternatif itu, banyak di antaranya disebutkan dalam jawaban lain, menyampaikan gambaran yang lebih beragam dan membingungkan dengan terlalu banyak pilihan untuk dibuat.

Bahasa lain menggambarkan solusi turnkey tunggal alih-alih banyak ini. Ini membuat pilihan ini tampak lebih sesuai untuk keperluan ketika Anda memiliki ikan yang lebih penting untuk digoreng.

Asgeir S. Nilsen
sumber
Java EE 6 mungkin "ringan" (kecuali untuk JSF2) tapi itu masih merupakan kurva pembelajaran yang sangat besar, setumpuk besar spesifikasi rumit, dan sistem layered yang sangat rumit. Ringan mungkin, tapi tentu saja tidak sederhana.
Craig Ringer
2

Saya pikir itu digunakan lebih banyak daripada yang Anda pikirkan - penggunaannya hanya di bawah garis air. Ada banyak, banyak ruby ​​di pembungkus rel di sekitar, layanan java mewah. Terutama ketika Anda mulai berurusan dengan apa pun yang mendekati data besar. . .

Wyatt Barnett
sumber