JavaRush /Java Blog /Random-ID /Rehat kopi #131. Peran Java dalam pengembangan aplikasi w...

Rehat kopi #131. Peran Java dalam pengembangan aplikasi web dan seluler. Pemrograman fungsional - pro dan kontra

Dipublikasikan di grup Random-ID

Peran Java dalam pengembangan aplikasi web dan seluler

Sumber: DZone Java adalah salah satu bahasa pemrograman yang paling banyak digunakan. Ini secara aktif digunakan dalam pengembangan aplikasi perusahaan, web dan seluler. Java memiliki aplikasi di industri teknologi terkemuka, mulai dari Ilmu Data hingga AR/VR. Meskipun pengembangan perusahaan di Java adalah kasus penggunaan paling populer untuk bahasa ini, aplikasi web dan seluler juga dianggap sebagai salah satu area di mana Java digunakan. Rehat kopi #131.  Peran Java dalam pengembangan aplikasi web dan seluler.  Pemrograman fungsional - pro dan kontra - 1Mari kita lihat mengapa pengembangan Java menjadi begitu populer di web dan perangkat seluler selama dua dekade terakhir. Salah satu alasan utama menggunakan Java untuk web dan seluler adalah karena Java merupakan bahasa pemrograman berkinerja tinggi. Ini memastikan aplikasi Anda dapat berjalan dengan cepat dan tanpa kesalahan pemrosesan apa pun. Ada juga alasan lain:

1. Sumber terbuka

Menjadi bahasa pemrograman open source, Java memiliki sejumlah keunggulan. Pertama, mengurangi biaya proses pengembangan aplikasi. Kedua, pengembang dengan mudah mengubah bahasa dan sering memperbaruinya karena bersifat open source. Selain itu, Java memiliki sintaks yang mudah dibaca sehingga memudahkan pengembangan aplikasi untuk web dan perangkat seluler. Terakhir, pengembang dapat menggunakan basis kode bahasa yang ada dan memperbaikinya.

2. Lintas platform

Keuntungan lain dari pemrograman di Java adalah bahasanya lintas platform. Pengembang dapat menulis kode di Windows dan menjalankannya di macOS dan Linux. Prinsip “tulis sekali, jalankan di mana saja” berlaku di sini. Hal ini memudahkan pengembang bekerja pada sistem yang berbeda dan menyederhanakan proses pengujian pada mesin yang berbeda. Misalnya, pengembang dapat menguji apakah suatu program akan berjalan dengan benar pada ukuran layar dan sistem operasi yang berbeda.

3. Ramah seluler

Java adalah teknologi populer untuk aplikasi seluler. Pengembang aplikasi Android terutama menggunakan bahasa Java karena mudah diimplementasikan, memiliki fitur keamanan, dan kemampuan lintas platform. Android memerlukan bahasa yang canggih untuk menskalakan aplikasi, namun Java menawarkan kemampuan penskalaan yang luar biasa. Ini juga menyederhanakan proses pengujian aplikasi Android. Semua ini menunjukkan bahwa ini adalah bahasa pemrograman yang andal dan dinamis untuk membuat aplikasi seluler.

4. Alat dan perpustakaan

Salah satu keunggulan Java yang paling signifikan adalah kompatibilitasnya dengan berbagai alat. Framework seperti Spring, Hibernate, Struts, Spark dan lainnya sangat menyederhanakan proses pengembangan. Semua alat ini menawarkan berbagai fitur untuk membuat aplikasi interaktif dan dinamis. Perpustakaan seperti Apache Commons, Perpustakaan Standar Java, Maven, Jackson, dll. memungkinkan pengembang menambahkan fungsionalitas tanpa menulis kode dari awal.

5. Komunitas yang aktif

Ada lebih dari 7,6 juta pengembang Java di dunia. Mereka terus-menerus memperbarui bahasa pemrograman dan menambahkan fitur-fitur baru ke dalamnya. Karena Java diperbarui setiap 6 bulan, pengembang mempunyai kesempatan untuk belajar dengan cepat dan menciptakan produk yang lebih baik. Anda juga dapat memanfaatkan komunitas Java untuk menemukan jawaban atas berbagai pertanyaan.

Kebangkitan Java dalam Pengembangan Aplikasi Web

Sejak diciptakan pada tahun 1995 oleh Sun Microsystems, bahasa Java telah menjadi salah satu prioritas dalam industri pemrograman. Saat ini, perusahaan dari seluruh dunia menggunakan bahasa pemrograman ini untuk membuat aplikasi web. Google, Netflix, Spotify, dan Pinterest hanyalah beberapa perusahaan yang menggunakan Java dalam teknologi mereka. Para ahli memperkirakan bahwa lebih dari 60% perusahaan yang bekerja di bidang TI menggunakan Java dalam satu atau lain bentuk. Selain itu, bahasa ini tetap menjadi bahasa pemrograman yang populer karena diadopsi di bidang pengembangan web lainnya, seperti komputasi awan, media sosial, pengembangan perusahaan, AR, VR, dan banyak lagi. Ini adalah bahasa pemrograman yang luar biasa dan kuat untuk digunakan di perusahaan yang sekarang membutuhkan arsitektur berbasis cloud. Jika digabungkan dengan JavaScript, Java memungkinkan Anda membuat aplikasi web berkinerja tinggi yang dapat berjalan di platform apa pun.

Kebangkitan Java dalam Kasus Penggunaan Modern

Selain pengembangan web dan pengembangan seluler, Java telah berhasil meraih kesuksesan di dunia teknologi modern. Saat ini, Java adalah bahasa pemrograman yang sangat berguna untuk aplikasi ilmiah. Ia menawarkan lingkungan yang aman, cepat dan portabel untuk komputasi ilmiah. MATLAB adalah salah satu perpustakaan terpopuler untuk aplikasi ilmiah berbasis Java.
  • Java juga berguna dalam pengembangan aplikasi ilmiah front-end dan back-end. Anda dapat menggunakan Struts dan Java Server Pages untuk pengembangan front-end dan Java Core untuk pengembangan aplikasi ilmiah back-end.

  • Java juga berguna untuk analisis data. Hal ini memungkinkan pengembang untuk membuat solusi analisis data menggunakan berbagai perpustakaan dan alat. Saat ini, Java telah menemukan aplikasinya di segmen Internet of Things. Ini adalah teknologi kunci dalam sistem tertanam seperti kartu pintar dan sensor. Oleh karena itu, perusahaan menggunakan bahasa pemrograman ini dalam industri otomasi rumah. Selain itu, secara aktif digunakan dalam pengembangan teknologi perangkat streaming dan Smart TV.

  • Platform data besar Hadoop ditulis dalam Java. Karena merupakan bahasa sumber terbuka dan berorientasi objek, ini merupakan landasan bagi aplikasi Big Data. Bahasa pemrograman seperti Scala dapat dengan mudah dijalankan di Java Virtual Machine dan mempermudah analisis big data.

  • Game adalah industri yang sedang berkembang dan berkembang pesat di mana Java banyak digunakan untuk berbagai aplikasi game. Misalnya, ia menawarkan dukungan untuk jMonkeyEngine, mesin pengembangan game 3D open source terbesar. Selain itu, Dalvik Virtual Machine (DVM) terutama didukung oleh Java dan digunakan untuk membuat game interaktif untuk Android.

Pemrograman fungsional - pro dan kontra

Sumber: Dev.to Meskipun saya masih skeptis terhadap teknologi asing, saya menyadari manfaat pemrograman fungsional. Di bawah ini adalah daftar perkiraan keuntungan yang menggambarkan paradigma pemrograman ini. Rehat kopi #131.  Peran Java dalam pengembangan aplikasi web dan seluler.  Pemrograman fungsional - pro dan kontra - 2

Konkurensi Aman

Pendekatan fungsional mendorong konkurensi yang aman, yaitu kemampuan untuk menjalankan pekerjaan di thread terpisah tanpa menyebabkan konflik thread atau tabrakan modifikasi. Alasannya adalah tidak seperti pendekatan objek, Anda tidak membagikan objek yang statusnya dapat diubah selama pemrosesan. Ada pintu masuk dan keluar, dan pintu masuknya tidak berubah karena Anda. Di Java, meskipun Anda menggunakan objek “thread-safe”, Anda tidak dapat menjamin bahwa objek tersebut akan memiliki nilai yang sama saat metode Anda dipanggil. Pada contoh di bawah, kita dapat melihat bahwa loop yang memproses elemen satu per satu dapat dengan mudah diproses secara paralel menggunakan fungsi lambda di dalam thread.
for( String item : items ) {
   process(item);
}
Dan sekarang menjadi:
items.parallelStream().forEach( item -> process(item) );

I/O cepat

Pemrograman fungsional mendukung pendekatan yang berbeda dari multithreading. Ini berarti kita tidak lagi memiliki thread terpisah yang menunggu respons I/O seperti panggilan database. Artinya, kami memaksimalkan penggunaan CPU dan bandwidth. Untuk aplikasi berkinerja tinggi, ini merupakan keuntungan yang jelas. Hal ini diimplementasikan dengan gagasan bahwa pemanggilan fungsi dapat mengembalikan Masa Depan, yang bukan merupakan hasil sebenarnya dari pemanggilan tersebut, namun merupakan janji untuk mengembalikan hasilnya pada suatu saat di masa depan. Suatu saat di masa depan, nilai kembalian diperoleh yang menjalankan fungsi tersebut. Ini berarti bahwa thread prosesor tidak menunggu panggilan database atau REST selesai dan dapat melakukan hal lain.

Ekspresi yang singkat

Pengembang perangkat lunak ingin dapat mengekspresikan ide-ide kompleks dengan anggun. Pemrograman fungsional memungkinkan Anda melakukan ini secara ringkas. Misalnya, konstruksi umum seperti perulangan for dapat digantikan dengan thread, yang mengabstraksi operasi umum for yang digunakan perulangan. Tidak ada keraguan bahwa penambahan fungsi dan thread Lambda ke Java telah memperluas kemampuan untuk mengekspresikan ide-ide yang sebelumnya tidak mungkin dilakukan.

Mengapa tidak menjadi fungsional?

Sekadar mengulangi hal di atas: ada banyak manfaat dari pengkodean fungsional, jadi artikel ini tidak mencoba menggeneralisasi semuanya ke dalam satu kasus dan mengatakan bahwa Anda sebaiknya melakukan pemrograman fungsional atau sebaliknya. Keputusan ini harus dibuat dengan pemahaman yang jelas tentang alasan transisi dan potensi permasalahannya.

Selalu sulit untuk memahaminya secara intuitif

Saat menulis kode, apakah Anda mencoba berkomunikasi dengan komputer? Jika komunikasi dengan komputer sangat penting bagi Anda, mengapa tidak menulis dalam kode mesin? Tentu saja hal ini sangat sulit, sehingga diciptakanlah bahasa komputer untuk mempermudahnya. Mereka juga mengizinkan pemrogram untuk membuat ekspresi yang dapat dipahami oleh pemrogram lain. Ketika perangkat lunak menjadi lebih besar dan kompleks, kita memerlukan strategi untuk mengelola kompleksitas. Kami mencapai ini melalui abstraksi dan penyembunyian informasi. Kelas yang Anda gunakan di Java untuk mengirim email cukup kompleks, namun antarmuka kelas ini sederhana. Ini menyembunyikan implementasi rinci, hanya memperlihatkan kepada kita sisi eksternal dari kontrol. Fitur bahasa seperti kurung kurawal dan tanda kurung siku memberi tahu kita struktur seperti pernyataan kondisional dan loop. Hanya sekarang kita memindahkan loop, atau lebih tepatnya rekursi, dan kondisi ke dalam fungsi:
for( String item : items ) {
    System.out.println(item);
}
Ternyata:
items.foreach( item -> System.out.println(item) );
Pendekatan streaming dan lambda jelas lebih pendek. Anda dapat mengekspresikan fungsi yang sama dengan lebih sedikit kode. Masalahnya adalah kita sekarang menyembunyikan perilaku sebenarnya di dalam metode yang perlu kita ketahui. Loop di Java menggunakan kata kunci. Di sisi lain, fungsi lambda dapat mengimplementasikan berbagai bentuk rekursi, dan hanya namanya di sini yang menunjukkan fungsinya. Misalnya:
boo.fooble( item -> System.out.println(item) );
Anda tidak bisa lagi hanya membaca kode untuk memahami strukturnya. Hal ini menyulitkan pelacakan alur eksekusi. Fitur lainnya adalah rangkaian fungsi, di mana hasil dari satu fungsi merupakan masukan fungsi berikutnya tanpa menetapkan variabel perantara.
boolean result = boo
    .fooble( /*some code*/ )
    .bobble( /*some code*/)
    .goober( /*some code*/);
Ini mungkin masuk akal bagi penulis kode ini karena dia tampaknya telah menulis setiap fungsi dan mengetahui fungsinya. Namun, bagi mereka yang baru mengenal kode ini, ini tidak memberi tahu Anda banyak tentang parameter, proses, atau nilai kembalian dari setiap fungsi. Tetapi jika Anda menulis hal yang sama pada sesuatu yang memberikan tipe, Anda akan mendapatkan:
Car car = boo.fooble( /*some parameters*/);
Tyre tyre = car.bobble( /*some parameters*/);
int pressure = tyre.goober( /*some parameters*/);
Ini mungkin bukan analogi yang sempurna, karena parameter dan fungsi anonim bukanlah hal yang sama, namun intinya di sini adalah kalimat panjang dengan hasil dan parameter yang tidak diketahui sulit dibaca tanpa pemahaman yang lebih mendalam tentang fungsi yang dijelaskan di bawah ini. Jadi ada kemungkinan bahwa pemrograman fungsional sangat ekspresif dalam segmen kode yang sangat pendek, namun tidak dapat dipahami oleh orang yang baru mengenal perangkat lunak tersebut. Inti dari kelas dan antarmuka adalah untuk menyembunyikan data, untuk membuat potongan kode yang dapat digunakan kembali yang tidak memerlukan pengembang untuk memahami atau bahkan melihat implementasinya. Mereka ada agar pengembang dapat mengerjakan sistem yang besar dan kompleks tanpa kesulitan. Ini adalah cara mudah untuk mengatur kode yang terkait dengan entitas tertentu. Namun, saya memiliki sedikit pemahaman tentang bagaimana pemrograman fungsional membantu menyusun proyek-proyek besar yang kompleks. Mungkin ada alasan subjektif untuk hal ini.

Untuk mengesankan orang lain dengan keahlian Anda

Beberapa pengembang perangkat lunak merasa tidak percaya diri dengan keterampilan mereka sehingga mereka mencoba untuk mengesankan dengan menulis kode rumit yang tidak perlu. Sebagai pengembang senior, saya tidak terlalu mengagumi pengembang perangkat lunak lain yang mencoba menulis kode cerdas. Tentu saja, hal ini tidak hanya berlaku pada pemrograman fungsional; hal yang sama dapat terjadi dalam gaya pengkodean apa pun. Namun saya telah memperhatikan kesombongan intelektual tertentu di antara para pendukung pemrograman fungsional. Intinya adalah pengembang perangkat lunak tidak bekerja dalam ruang hampa. Kode “pintar” ini perlu dipelihara, dan jika sulit dipahami, maka akan sulit dibaca dan diubah, serta sulit di-debug. Saat mengelola tim, kami memiliki orang-orang di semua tingkatan, jadi hal paling cerdas untuk dilakukan adalah menulis kode dengan cara yang dapat dipahami oleh semua orang yang terlibat. Inilah sebabnya kami memiliki nama variabel panjang yang jelas, jadi kami membatasi panjang metode. Kode “Cerdas” akan memakan waktu ekstra, jadi tidak terlalu pintar untuk menulisnya. Saya percaya bahwa pemrograman fungsional menggunakan argumen yang sama tentang ekspresi ringkas dan kuat yang dibuat Perl bertahun-tahun yang lalu. Pendukung Perl bangga dengan ekspresifnya, cara mereka menulis program yang sangat kuat hanya dalam beberapa baris kode. Itu benar. Masalahnya adalah mereka sulit untuk dipahami. Mungkin pemrograman fungsional juga jatuh ke dalam perangkap yang sama.

Karena ini mode baru

Selalu ada teknologi atau paradigma baru yang “panas”. Teknologi, bahasa, dan pendekatan baru terus bermunculan. Kita harus terus-menerus menantang diri kita sendiri dan mempelajari hal-hal baru. Menjadi pengembang perangkat lunak berarti memajukan teknologi. Namun sebagai pengembang perangkat lunak, kita harus mengevaluasi sendiri teknologi apa yang kita perlukan untuk menciptakan suatu produk. Mempelajari teknologi baru yang populer hanya karena populer bukanlah penggunaan waktu yang bijaksana. Ini tidak berarti bahwa Anda tidak boleh mempelajari pemrograman fungsional, namun Anda harus mengevaluasi pro dan kontra dari paradigma ini untuk aplikasi yang Anda tulis.

Karena ini adalah satu-satunya cara yang benar

Berkali-kali sebelumnya, saya melihat pengembang mempromosikan pendekatan ini atau itu sebagai satu-satunya pendekatan yang benar. Namun seperti yang dikatakan seorang teman kepada saya, pekerjaan yang berbeda memerlukan alat yang berbeda. Misalnya, saya pribadi menggunakan Python dan PyTorch untuk kecerdasan buatan, meskipun ada banyak alat dan teknologi lain, masing-masing memiliki kelebihan dan kekurangannya masing-masing. Ada alasan bagus untuk mempertimbangkan pemrograman fungsional sebagai opsi untuk layanan yang memerlukan skalabilitas signifikan. Hal ini disebabkan oleh keamanan konkurensi yang ditawarkan oleh pendekatan ini. Namun Anda juga harus menyadari biaya dan potensi risikonya. Beberapa tahun yang lalu saya memiliki pengalaman serupa dengan injeksi ketergantungan dan Spring dianggap yang terbaik untuk pekerjaan itu. Ketika saya bertanya kepada para pendukung Spring apa manfaatnya, mereka tidak memberikan jawaban yang jelas. Saya melihat hal serupa sekarang dengan beberapa penganut pemrograman fungsional yang tampaknya terlibat dalam semacam kampanye keagamaan daripada evaluasi teknologi yang tidak memihak. Omong-omong, injeksi ketergantungan adalah ide bagus dan sekarang saya dapat dengan jelas mengidentifikasi manfaatnya. Demikian pula, menurut saya kekhawatiran saya tentang pemrograman fungsional berkaitan dengan cara penggunaannya, bukan apakah pendekatan tersebut berguna dan valid.

Kesimpulan

Inti dari artikel ini bukanlah untuk memberikan jawaban yang jelas atas pertanyaan apakah Anda harus melakukan pemrograman fungsional. Intinya adalah bagaimana Anda mengevaluasi setiap teknologi atau pendekatan baru. Hal utama: jangan biarkan ego menghalangi penilaian objektif Anda. Pengembangan perangkat lunak bukanlah bukti kemampuan intelektual atau kualitas pribadi Anda. Ini tentang menciptakan nilai di dunia nyata. Jika pemrograman fungsional membantu Anda, gunakanlah.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION