7. Enggan melakukan Refactoring

Refactoring artinya memodifikasi code kita untuk tujuan perbaikan.

Perbaikan seperti apa ?

Pikiran manusia berkembang sesuai pengalaman dan pengetahuan. Begitu pula code yang kita buat. Akan mencerminkan perkembangan cara kita berpikir.

Kalau kita lihat code yang kita buat setahun lalu, maka kita akan bisa melihat cara kita berpikir pada saat itu dalam menyelesaikan permasalahan.

Kalau kita melihat ulang sebuah code dan menemukan ternyata code tersebut tidak efektif and efisien, maka butuh refactoring/merombak ulang code yang kita buat sebelumnya. Tujuannya agar lebih mudah dipahami, lebih efektif, efisien, dan lebih sederhana.

Tapi nanti bisa merusak code yang sudah running well dong !

Ketakutan untuk merubah code yang sudah berjalan baik dan lancar wajar dialami oleh Software Engineer yang baru (bukan hanya fresh graduate, tetapi Software Engineer yang baru terlibat di suatu produk atau proyek).

Tetapi ketakutan tersebut semestinya dibuang jauh-jauh agar kita bisa mendapatkan code yang bersih, mudah dimengerti dan mudah diubah nantinya.

Dengan bantuan unit test, integration test, dan QA test yang baik, maka kekhawatiran tersebut akan bisa sirna.

8. Tidak menggunakan penamaan class, variable,configuration yang bermakna.

Code aplikasi adalah rumit dan alurnya bukanlah seperti alur cerita novel.

Butuh pemahaman dan konsentrasi untuk mengerti maksud dan alurnya. Termasuk di dalamnya memahami maksud dari sebuah fungsi, variable ataupun konfigurasi. Penamaan yang standar dan bermakna membantu kita dalam memahaminya.

Contohnya ?

Nama variable

String anu = "ini variable untuk deskripsi produk"

tidak mencerminkan maksud dari variable tersebut.

Ketika variable anu ini dibawa sampai code dibawahnya dimana mata kita tidak bisa melihat isi dari variable anu tersebut, maka kita akan mengalami loss terhadap apa sebenarnya isi variable tersebut.

Misalnya kita ganti nama variable tersebut menjadi

String deskripsiProduk = "ini variable untuk deskripsi produk"

Maka nama variable deskripsiProduk tersebut menjadi lebih bermakna.

Tidak ada lagi kejadian loss terhadap maksud dan isi variable tersebut. Bila variable itu pun digunakan di tempat lain, maka kita akan mudah memahaminya.

9. Tidak menangkap/catch Exception atau tidak spesific dalam catch Exception

Apa itu Exception ?

Exception adalah sebuah cara aplikasi/library untuk menginformasikan mengenai kesalahan/error yang terjadi waktu aplikasi dijalankan.

  1. Kalau diperkirakan sepertinya tidak bisa di-handle oleh aplikasi , namanya adalah Error. Dan Error ini akan membuat aplikasi Java nya berhenti. Misalnya masalah di Java Virtual Machine nya atau Assertion.
  2. Kalau bisa dihandle maka dianggap Exception. Dengan Exception ini, aplikasi Java tidak berhenti, tetapi aplikasi diberikan pilihan untuk menghandle kasus ini atau tidak. Misalnya kesalahan pemrosesan, validasi, masalah di akses input output, dll

Dua-duanya turunan dari class Throwable.

Apa saja jenis Exception ?
  1. Checked Exception / non Runtime Exception (Exception yang kemungkinan masih bisa dihandle oleh yang memanggil fungsi yang menghasilkan Exception tersebut). Misalnya FileNotFoundException, IOException. Compiler java akan memaksa Software Engineer untuk menghandle exception untuk tipe ini.
  2. Unchecked Exception / Runtime Exception (Exception yang kemungkinan tidak bisa dihandle / tidak wajar kalau dihandle oleh yang memanggil fungsi yang menghasilkan Exception tersebut). Misalnya ArithmaticException, ClassCastException. Compiler java TIDAK akan memaksa Software Engineer untuk menghandle exception untuk tipe ini.

Tapi ingat semua Exception, Error, Throwable itu menginformasikan tentang kesalahan pada saat aplikasi berjalan / Runtime. Tidak peduli itu adalah Checked Exception atau Unchecked Exception. Mentang-mentang namanya Checked Exception / Non Runtime Exception, maka anggapannya ini terjadi bukan pada saat program berjalan.

Sesuai dengan tujuannya, maka Software Engineer mestinya melakukan catch terhadap Checked Exception, dan terkadang kalau diperlukan catch juga terhadap Unchecked Exception/Runtime Exception. Tujuannya agar bisa menangani alur dari aplikasi kalau terjadi kesalahan yang bisa dihandle. Hal ini akan membuat aplikasi kita menjadi robust dan reliable kalau dijalankan.

Karena tujuannya agar kita bisa menangani alur dari aplikasi kalau terjadi kesalahan, maka catch terhadap Exception ini mestilah spesific, sehingga kita dapat menanganinya sesuai kasusnya. Banyak kejadian, Software Engineer menambahkan ini saja di code nya :

catch (Exception e)  {
  xxxxxx
}

cath Exception nya terlalu umum, sehingga akan susah menelusuri penyebab kesalahannya ketika terjadi. Software Engineer yang berpengalaman akan melakukan catch dengan Exception yang spesifik.