Keterampilan yang paling dibutuhkan dalam pengembangan Java saat ini
Sumber:
Medium Java tetap menjadi salah satu bahasa pemrograman paling populer dan paling banyak diminati, meskipun usianya sudah hampir seperempat abad. Oleh karena itu, masuk akal untuk berasumsi bahwa popularitas Java akan terus meningkat dan pengembang Java akan melihat permintaan yang lebih besar dari perusahaan di masa depan.
Untuk menciptakan produk berkualitas, pengembang harus mengikuti perkembangan alat Java terbaru dan meningkatkan keterampilan dan pengetahuan teknis mereka. Di bawah ini kami menyajikan enam keterampilan penting yang diperlukan untuk pengembang Java.
1. Pengetahuan yang sangat baik tentang Java 8
Meskipun versi Java yang lebih baru sudah banyak digunakan, semua calon pengembang Java memerlukan pengetahuan dan pengalaman mendalam dengan Java 8. Beberapa fitur Java 8 yang paling berguna meliputi:
- Metode standar dan statis untuk membuat antarmuka dengan implementasi metode.
- Antarmuka fungsional yang hanya memiliki satu metode abstrak dan membantu pengembang menghindari penambahan metode abstrak lainnya.
- Ekspresi Lambda yang membantu menciptakan antarmuka fungsional.
- Java Stream API untuk mengaktifkan eksekusi paralel dan berurutan.
- Metode baru di Collection API.
Semua fitur ini menjadikan Java 8 sangat diperlukan untuk pemrograman fungsional. Pemrograman fungsional memberikan konkurensi dan singkatnya kode, serta membantu membuat aplikasi beban tinggi dengan kode yang dioptimalkan. Java 8 juga menjadi dasar pengoptimalan kode asli, memungkinkan pengoptimalan pengembangan dalam bahasa lain seperti Scala, Kotlin, dan Grails.
2. Pengalaman dalam pengujian
Pengujian unit di Java adalah topik yang agak kontroversial. Beberapa pengembang berpendapat bahwa menulis pengujian unit hanya membuang-buang waktu, namun kami sangat yakin bahwa keterampilan pengujian unit adalah suatu keharusan bagi setiap pengembang Java profesional. Pengujian unit memungkinkan Anda menguji setiap blok kode dan memastikan bahwa produk akhir berfungsi tanpa kesalahan. Oleh karena itu, jika seorang pengembang ingin meningkatkan keterampilan dan pengetahuannya, ia perlu mempelajari cara menggunakan alat pengujian yang paling populer dan efektif. Kerangka pengujian utama yang perlu Anda pahami adalah perpustakaan JUnit 5. Alat lainnya meliputi:
- Kerangka Robot
- Mockito
- KekuatanMock
Selain pengujian unit, pengembang Java tidak boleh melupakan metode pengujian lainnya (pengujian sistem, pengujian penerimaan, dan pengujian integrasi). Hal ini memungkinkan Anda melakukan pengujian komprehensif terhadap perangkat lunak dan memastikan tidak ada kesalahan, bug, atau kegagalan kritis. Hal utama yang perlu diingat tentang pengujian adalah bahwa perubahan kecil akan membawa hasil yang besar. Jika Anda tidak ragu untuk meluangkan waktu dan tenaga dalam pengujian unit, Anda akan kagum dengan peningkatan kualitas pekerjaan Anda.
3. DevOps
Meski tidak diwajibkan, mempelajari DevOps dan prinsip-prinsipnya dapat bermanfaat bagi Anda sebagai pengembang dan perusahaan tempat Anda bekerja. Fleksibilitas dan pengorganisasian proses DevOps memungkinkan perusahaan mengoptimalkan kualitas produk mereka dan menyederhanakan operasi. dan juga meningkatkan transparansi proses. DevOps di Java pada dasarnya adalah penerapan DevOps untuk pengembangan Java. Ini termasuk:
- Pengiriman dan integrasi berkelanjutan.
- Bekerja dengan layanan mikro, bukan monolit.
- Infrastruktur sebagai kode.
- Pengujian otomatis.
DevOps adalah bidang yang luas dan memerlukan banyak waktu dan sumber daya untuk mempelajarinya. Namun jika Anda seorang pengembang Java, mempelajari DevOps akan bermanfaat karena memungkinkan Anda menjadi insinyur DevOps di masa depan. Jika Anda tidak ingin menjadi insinyur DevOps atau perusahaan Anda tidak tertarik, tidak apa-apa juga. Perlu diingat bahwa DevOps menjadi semakin populer di komunitas Java.
4. Pengetahuan tentang perpustakaan dan API Java.
Karena Java adalah salah satu bahasa pemrograman terkemuka di dunia, tidak mengherankan jika Java memiliki banyak sekali API dan perpustakaan yang tersedia untuk digunakan. Alat-alat ini sangat menyederhanakan proses pengembangan dan memungkinkan pengembang dengan cepat membuat perangkat lunak yang andal. Di bawah ini kami telah mencantumkan seperangkat alat dasar yang diketahui dan dapat digunakan dengan percaya diri oleh pengembang Java mana pun. Alat-alat berikut membantu Anda dengan cepat membangun aplikasi dan mengelola data serta penyimpanannya secara efektif:
- Gradle (alat untuk membangun aplikasi);
- Maven (sedikit ketinggalan jaman tapi masih populer, juga digunakan untuk membangun aplikasi);
- Paket Standar Java 8;
- Kerangka Musim Semi;
- JPA ORM (Hibernasi, TopLink);
- Basis data NoSQL (MongoDB, Cassandra).
Sedangkan untuk API, untuk bekerja dengan inti Java API, pengembang harus memiliki pengetahuan yang baik tentang OpenJDK, Android, Oracle, dan IS2T. Keuntungan besar dari alat ini adalah semuanya dilengkapi dengan dokumentasi yang terperinci dan informatif. Selain itu, pengembang selalu bisa mendapatkan dukungan komunitas, yang juga merupakan keuntungan besar.
5. Pengetahuan yang percaya diri tentang Spring dan Spring Boot
Spring Framework adalah kerangka kerja yang paling umum digunakan untuk mengembangkan aplikasi berbasis Java, jadi penting bagi pengembang untuk mengetahui cara bekerja dengannya. Salah satu manfaat utama Spring adalah injeksi ketergantungan, yang memungkinkan Anda membuat aplikasi yang digabungkan secara longgar dan memberikan lebih banyak fleksibilitas kepada pengembang. Spring juga sangat ringan, mendukung konfigurasi XML, anotasi, dan pemrograman deklaratif. Jadi jika Anda ingin menguasai keterampilan pengembangan Java, Anda juga harus menguasai penerapan Spring. Spring Boot adalah iterasi Spring yang menyediakan alat praktis untuk menyebarkan aplikasi dengan cepat. Dapat dikatakan bahwa Spring Boot menggunakan Spring sebagai basis dan membangun fitur-fiturnya sendiri di atasnya. Meskipun Spring berfokus pada fleksibilitas, Spring Boot membantu mengurangi kode dan menyederhanakan proses pengembangan. Ini menawarkan fitur-fitur unik kepada pengembang, membantu membangun aplikasi mandiri, dan secara keseluruhan lebih mudah diluncurkan dan dikelola. Spring Boot sangat bagus untuk layanan mikro dan aplikasi yang perlu dibangun dengan cepat, karena membuatnya cepat dan mudah untuk menyiapkan dan menjalankan aplikasi untuk berbagai lingkungan (produksi, pengujian, kualitas, CI/CD). Spring dan Spring Boot telah diperluas dengan kemampuan pemrograman React, yang merupakan tren hangat lainnya di komunitas pengembang. Spring 5, misalnya, kini memiliki WebFlux untuk menerapkan pendekatan reaktif terhadap pemrograman dan menyelesaikan sistem terdistribusi yang kompleks.
6. Pengalaman dengan Big Data
Big Data adalah tren berkembang yang harus diikuti dan diadopsi oleh pengembang untuk memenuhi permintaan pasar. Alat utama yang biasa digunakan oleh pengembang Java profesional adalah:
- Apache Spark
- Apache Kafka
- Hadoop (untuk pemrosesan batch)
Apache Spark adalah platform pemrosesan Big Data terdistribusi yang menyediakan pengikatan asli untuk Java. Kerangka kerja ini menjadi sangat populer karena fitur dan kinerjanya dan saat ini merupakan alat data besar yang paling disukai di komunitas Java. Apache Spark dapat berjalan dalam mode mandiri cluster dan untuk ini Anda hanya memerlukan lingkungan Apache Spark dan JVM (untuk setiap mesin di cluster). Spark juga sangat cepat dan memiliki Spark API yang sangat ramah pengguna. Hadoop merupakan platform penyimpanan data yang juga terkenal di kalangan pengembang Java. Meskipun Hadoop tidak secepat Spark, Hadoop tetap menjadi salah satu alat paling populer untuk menangani data besar. Hal ini juga disebabkan oleh fakta bahwa Hadoop (dan solusi serupa) memiliki sejumlah besar plugin yang memungkinkan Anda memecahkan masalah pemrosesan Big Data secara efisien dan secara umum mengoptimalkan kinerja Hadoop (termasuk dukungan untuk pemrosesan aliran waktu nyata).
7 Tip Opsional Java untuk Menghilangkan Kekacauan Kode
Sumber:
Medium “Saya punya rekan yang belum tahu tentang keberadaan Opsional,” tulis salah satu pengembang Java di Reddit. Bisakah kita menganggap bahwa Opsional meningkatkan “keterbacaan” kode? Apakah layak menggunakannya sepanjang waktu? Di manakah penggunaan Opsional yang sama sekali tidak diperlukan? Karena banyak pengembang yang masih belum mengetahui cara menggunakan Opsional dengan benar, saya akan memberikan 7 contoh penyalahgunaan Opsional dan apa yang harus dilakukan untuk mengatasinya.
1. Jangan gunakan Opsional untuk pemeriksaan nol
Menggunakan Opsional alih-alih centang nol hanya menambah kekacauan. Tidak ada manfaat dari ini. Ini juga merupakan kesalahan untuk menggunakan Opsional dan metode
isPresent dan
get . Pengembang percaya bahwa
get harus berfungsi seperti yang diharapkan. Mereka kemudian menambahkan
isPresent dan kembali ke pemeriksaan nol. Ingatlah bahwa Opsional tidak memperbaiki pemeriksaan nol Anda. Lain kali Anda melihat
isPresent dan
dapatkan (atau
ElseThrow ) ubah potongan kode ini. Gunakan pemetaan dan
orElse untuk menghapus pemeriksaan nol standar, dan gunakan Opsional dengan lebih selektif. Inilah salah satu contoh yang bagus:
var user = userService.getCurrentUser();
if(user == null) {
return "(unknown)";
}
var username = user.getUsername();
if (username == null) {
return "(unknown)";
}
return username;
vs
var user = userService.getCurrentUser();
if(user.isEmpty()) {
return "(unknown)";
}
var username = user.orElseThrow().getUsername();
if (username == null) {
return "(unknown)";
}
return username;
vs
return userService.getCurrentUser()
.map(User::getUsername)
.orElse("(unknown)");
Anda bisa memulai dengan target Opsional. Tujuan Opsional adalah untuk mewakili nilai opsional yang hilang. Kemudian kembali ke masalah Anda dan lihat apakah itu berhasil untuk Anda. Cara lain untuk menangani pemeriksaan nol adalah dengan menggunakan anotasi.
Nullable atau
NotNull seharusnya berfungsi dengan baik. Benar, mereka dapat mencemari kode Anda, dan mereka hanya melindungi pada waktu kompilasi. Untuk memeriksa waktu proses gunakan
Objects.requireNonNull .
2. Lakukan penanganan error yang tepat
Terkadang null mewakili pengecualian. Dan ini adalah cara yang salah untuk menandakan kesalahan dan pengecualian. “Ada yang tidak beres, dan ini nihil” adalah anti-pola yang harus dihindari. Selain itu, Anda tidak boleh menggunakan Opsional untuk mencakup pengecualian. Berikut ini contohnya.
public Optional<MyObject> getMyObject(final String jql) {
try {
return Optional.ofNullable(get(sql));
} catch (final JqlParseException e) {
return Optional.empty();
}
}
Mengapa
objek saya kosong? Ini bisa berupa kesalahan atau nilai kosong. Jadi, Anda akan kembali mendapatkan hasil yang ambigu dan menghapus manfaat Opsional sebagai hasilnya. Kode ini ada karena orang mencoba menggunakan Opsional untuk aliran kontrol. Opsional akan menghapus beberapa angka nol dari basis kode Anda. Namun Anda masih perlu menggunakan konstruksi coba-tangkap untuk menangani pengecualian. Gunakan try-catch untuk menangani pengecualian dengan benar. Jangan hapus Opsional saat menangani kesalahan, tunggu saja dan itu akan berfungsi dengan sempurna. Tapi ada satu pengecualian di sini -
tangkapan kosong . Jika Anda tidak tahu apa yang harus dikembalikan dalam tangkapan kosong, Opsional kosong akan berfungsi dengan baik.
private int readExpirationAsInt(Milk milk)
{
String expiration = milk.getExpiration();
try {
return Integer.parseInt(expiration);
}
catch(NumberFormatException ignored) {}
return 0;
}
private OptionalInt readExpirationAsInt(Milk milk)
{
String expiration = milk.getExpiration();
try {
return Optional.of(Integer.parseInt(expiration));
}
catch(NumberFormatException e) {
return OptionalInt.empty();
}
}
3. Jangan kembalikan null dari metode opsional
public static Optional<POSType> getPOSType(String posName) {
if (StringUtils.isNotBlank(posName)) {
return Arrays.stream(POSType.values())
.filter(type -> type.toString().equalsIgnoreCase(posName))
.findFirst();
}
return null;
}
Ini menggagalkan tujuan Opsional. Ini adalah contoh lain dari pengujian yang buruk. Karena inputnya kosong, ini berarti kita memerlukan file
IllegalArgumentException . Juga, ini adalah sebuah kesalahan. Tidak ada yang perlu memeriksa Metode panggilan opsional. Kembalikan elemen Opsional yang kosong dan jangan pernah memeriksa elemen Opsional untuk nol.
4. Jangan gunakan Opsional dengan koleksi.
Tidak perlu membungkus koleksi dalam Opsional. Selain itu, jangan masukkan Opsional ke dalam koleksi. Ini hanya memperumit masalah dengan menambahkan
tinju yang tidak berguna dan membuka bungkus ekstra. Jangan tambahkan Opsional ke koleksi. Tidak ada manfaat nyata dari hal ini. Tetap sederhana dan gunakan Opsional untuk nilai yang hilang.
5. Jangan merantai demi merantai
Optional.ofNullable(foo).ifPresent(value -> {
})
Opsional memiliki metode terperinci yang dapat membantu dalam hal ini. Alih-alih berantai, pemeriksaan nol sederhana sudah cukup. Saya tahu Opsional memiliki metode yang bagus dan dukungan IDE yang bagus. Anda bisa menggunakannya.
6. Gunakan pembungkus nilai primitif
Ini bukan masalah besar, tapi Anda bisa menggunakan
OptionalInt atau
OptionalLong . Cukup dengan menghapus obat generik yang tidak perlu, Anda akan meningkatkan kinerja dan menulis kode yang lebih ringkas.
7. Anda harus tahu tentang ofNullable
if (a==null){
return Optional.empty();
} else {
return Optional.of(a);
}
Kode jenis ini biasanya ditulis oleh developer yang belum mengetahui tentang
Optional#ofNullable . Kebanyakan pengembang bahkan tidak memahami perbedaan antara
ofNullable dan
of . Mereka tidak mengerti bagaimana
Opsional#of dapat menjadi bumerang. Sebagian besar akan menggunakan
ofNullable karena takut melemparkan
NullPointerException di
Optional#of . Sekali lagi, hal ini menggagalkan tujuan kedua metode ini. Jika kita hanya menggunakan
ofNullable , mengapa kita memerlukan
Optional#of sama sekali ?
Opsional#of melempar NPE saat Anda meneruskan ke null. Hal ini terjadi karena suatu alasan. Metode ini harus digunakan ketika Anda mengharapkan nilai tersebut ada. Jika tidak ada, maka akan cepat gagal.
Opsional#ofNullable mengonversi null menjadi Opsional kosong. Metode ini menggunakan null sebagai argumen, yang cocok dengan Opsional kosong.
GO TO FULL VERSION