Java di 20: Bagaimana itu mengubah pemrograman selamanya

Mengingat seperti apa dunia pemrograman pada tahun 1995 bukanlah tugas yang mudah. Pemrograman berorientasi objek, untuk satu, adalah paradigma yang diterima tetapi jarang dipraktikkan, dengan banyak dari apa yang diteruskan sebagai apa yang disebut program berorientasi objek menjadi sedikit lebih dari kode C yang digunakan >>sebagai pengganti printfdan classsebagai gantinya struct. Program yang kami tulis hari-hari itu secara rutin membuang inti karena kesalahan aritmatika penunjuk atau kehabisan memori karena kebocoran. Kode sumber hampir tidak dapat di-porting di antara berbagai versi Unix. Menjalankan biner yang sama pada prosesor dan sistem operasi yang berbeda adalah pembicaraan yang gila.

Java mengubah semua itu. Sementara kode C prosedural yang bergantung pada platform, dialokasikan secara manual, akan terus bersama kami setidaknya selama 20 tahun ke depan, Java membuktikan bahwa ini adalah pilihan, bukan persyaratan. Untuk pertama kalinya, kami mulai menulis kode produksi nyata dalam bahasa berorientasi objek lintas platform, pengumpulan sampah, dan; dan kami menyukainya ... jutaan dari kami. Bahasa yang muncul setelah Java, terutama C #, harus menghilangkan standar baru yang lebih tinggi untuk produktivitas developer yang dibuat oleh Java.

James Gosling, Mike Sheridan, Patrick Naughton, dan programmer lain di Sun's Green Project tidak menemukan sebagian besar teknologi penting yang dibawa Java ke penggunaan luas. Sebagian besar fitur utama yang mereka masukkan dalam apa yang kemudian dikenal sebagai Oak menemukan asalnya di tempat lain:

  • Kelas Objek dasar tempat semua kelas diturunkan? Smalltalk.
  • Pemeriksaan tipe statis yang kuat pada waktu kompilasi? Ada.
  • Beberapa antarmuka, warisan implementasi tunggal? Objective-C.
  • Dokumentasi sebaris? CWeb.
  • Mesin virtual lintas platform dan kode byte dengan kompilasi just-in-time? Smalltalk lagi, terutama dialek Sun's Self.
  • Pengumpulan sampah? Pelat.
  • Tipe primitif dan struktur kontrol? C.
  • Sistem tipe ganda dengan tipe primitif non-objek untuk kinerja? C ++.

Namun, Jawa memang merintis wilayah baru. Tidak ada pengecualian seperti yang dicentang yang ada dalam bahasa lain sebelum atau sesudahnya. Java juga merupakan bahasa pertama yang menggunakan Unicode dalam tipe string asli dan kode sumber itu sendiri.

Tetapi kekuatan inti Java adalah ia dibangun untuk menjadi alat praktis untuk menyelesaikan pekerjaan. Ia mempopulerkan ide-ide bagus dari bahasa-bahasa sebelumnya dengan mengemasnya kembali dalam format yang familiar bagi pembuat kode C rata-rata, meskipun (tidak seperti C ++ dan Objective-C) Java bukanlah superset ketat dari C. Memang justru kemauan ini untuk tidak hanya menambahkan tetapi juga menghapus fitur yang membuat Java jauh lebih sederhana dan lebih mudah dipelajari daripada turunan C berorientasi objek lainnya.

Java tidak (dan masih tidak) memiliki structs, unions, typedefs, dan headerfile. Bahasa berorientasi objek tidak terbelenggu oleh persyaratan untuk menjalankan kode lama tidak membutuhkannya. Demikian pula, Java dengan bijak menghilangkan ide-ide yang telah dicoba dan ditemukan dalam bahasa lain: pewarisan implementasi berganda, aritmatika pointer, dan operator overloading yang paling mencolok. Selera yang bagus ini pada awalnya berarti bahwa bahkan 20 tahun kemudian, Java masih relatif bebas dari peringatan "di sini, jadilah naga" yang mengotori panduan gaya untuk pendahulunya.

Tetapi dunia pemrograman lainnya belum berhenti. Ribuan bahasa pemrograman telah meningkat sejak kami pertama kali memulai pemrograman Java, tetapi sebagian besar tidak pernah mencapai lebih dari sebagian kecil perhatian kolektif sebelum akhirnya menghilang. Apa yang menjual kami di Java adalah applet, program kecil yang berjalan di dalam halaman Web yang dapat berinteraksi dengan pengguna dan melakukan lebih dari sekedar menampilkan teks statis, gambar, dan formulir. Saat ini, kedengarannya tidak terlalu banyak, tetapi ingat - pada tahun 1995, JavaScript dan DOM tidak ada, dan bentuk HTML yang menggunakan skrip CGI sisi server yang ditulis dalam Perl adalah yang paling canggih.

Ironisnya, applet tidak pernah bekerja dengan baik. Mereka benar-benar terisolasi dari konten pada halaman, tidak dapat membaca atau menulis HTML seperti yang pada akhirnya dapat dilakukan oleh JavaScript. Batasan keamanan mencegah applet berinteraksi dengan sistem file lokal dan server jaringan pihak ketiga. Pembatasan ini membuat applet hanya cocok untuk game dan animasi sederhana. Bahkan bukti konsep yang sepele ini terhambat oleh kinerja buruk mesin virtual browser awal. Dan pada saat kekurangan applet diperbaiki, browser dan pengembang front-end telah lama melewati Java. Flash, JavaScript, dan baru-baru ini HTML5 menarik perhatian kami sebagai platform yang jauh lebih efektif untuk menyampaikan konten Web dinamis yang dijanjikan Java kepada kami, tetapi gagal ditayangkan.

Namun, applet adalah yang menginspirasi kami untuk bekerja dengan Java, dan apa yang kami temukan adalah bahasa yang bersih yang menghaluskan banyak sisi kasar dan titik sakit yang telah kami perjuangkan dalam alternatif seperti C ++. Pengumpulan sampah otomatis saja sudah sepadan dengan harga tiket masuknya. Applet mungkin terlalu banyak mengetik dan kurang terkirim, tetapi itu tidak berarti Java bukanlah bahasa yang sangat bagus untuk masalah lain.

Awalnya dimaksudkan sebagai pustaka klien lintas platform, Java menemukan kesuksesan nyata di ruang server. Servlet, Halaman Server Java, dan serangkaian pustaka yang berfokus pada perusahaan yang secara berkala digabungkan dan diberi merek ulang dalam satu akronim yang membingungkan atau yang lainnya memecahkan masalah nyata bagi kami dan bisnis. Selain kegagalan pemasaran, Java mencapai status hampir standar di departemen TI di seluruh dunia. (Cepat: Apa perbedaan antara Java 2 Enterprise Edition dan Java Platform Enterprise Edition? Jika Anda menebak bahwa J2EE adalah penerus JEE, Anda mendapatkannya terbalik.) Beberapa dari produk yang berfokus pada perusahaan ini berada di sisi kelas berat dan menginspirasi keterbukaan alternatif sumber dan suplemen seperti Spring, Hibernate, dan Tomcat, tetapi ini semua dibangun di atas fondasi matahari terbenam.

Bisa dibilang satu-satunya kontribusi paling penting dari open source ke Java dan keahlian pemrograman yang lebih luas adalah JUnit. Pengembangan yang digerakkan oleh pengujian (TDD) telah dicoba sebelumnya dengan Smalltalk. Namun, seperti banyak inovasi lain dari bahasa tersebut, TDD tidak mendapatkan perhatian dan adopsi yang luas hingga tersedia di Jawa. Ketika Kent Beck dan Erich Gamma merilis JUnit pada tahun 2000, TDD dengan cepat naik dari praktik eksperimental beberapa pemrogram ke cara standar untuk mengembangkan perangkat lunak di abad ke-21. Seperti yang dikatakan Martin Fowler, "Tidak pernah di bidang pengembangan perangkat lunak yang begitu banyak berhutang oleh begitu banyak baris kode begitu sedikit," dan beberapa baris kode itu ditulis di Java.

Dua puluh tahun sejak awal, Java bukan lagi pemula yang suka berkelahi. Ini telah menjadi petahana yang mengakar dari pemberontak bahasa lain. Bahasa yang lebih ringan seperti Ruby dan Python telah membuat terobosan signifikan ke wilayah Java, terutama di komunitas startup di mana kecepatan pengembangan diperhitungkan lebih dari sekadar ketahanan dan skala - trade-off yang dimanfaatkan Java sendiri pada hari-hari awal ketika kinerja mesin virtual sangat tertinggal kode yang dikompilasi.

Jawa, tentu saja, tidak tinggal diam. Oracle terus menggabungkan teknologi yang telah terbukti dari bahasa lain seperti generik, autoboxing, enumerasi, dan, yang terbaru, ekspresi lambda. Banyak programmer pertama kali menemukan ide ini di Java. Tidak setiap programmer mengetahui Java, tetapi apakah mereka mengetahuinya atau tidak, setiap programmer saat ini telah terpengaruh olehnya.

Artikel terkait

  • Review: Perbandingan 4 besar Java IDE
  • Jawa selamanya! 12 kunci dominasi abadi Java
  • Java vs. Node.js: Pertarungan epik untuk berbagi pikiran pengembang