Seni Membuat Bug, untuk Kompetisi Pemrograman

Peringatan: Apabila Anda tidak mengerti bug itu apa, silakan cari tahu dulu sebelum membaca lebih lanjut. Kesalahpahaman isi artikel ini akibat mengabaikan peringatan ini bukan kesalahan penulis.

Pada note ini penulis paparkan tips-tips rahasia bagaimana membuat program penuh bug berdasarkan pengalaman penulis maupun pengamatan penulis terhadap orang-orang di sekitar penulis.

  1. Tumbuhkan rasa percaya diri bahwa Anda adalah super-programmer yang bisa coding dengan gaya apapun dan tidak terbatasi oleh apapun bahkan ruang dan waktu. Rasa percaya diri yang seperti ini adalah salah satu hal terpenting dalam seni membuat bug.
  2. Testing dan debugging hanyalah untuk novice. Super-programmer seperti Anda tidak membuat kesalahan sehingga Anda tidak perlu melakukan testing dan debugging. Apalagi kalau programnya sederhana, Anda bahkan hanya perlu meng-compile (atau bahkan tidak perlu meng-compile).
  3. Hindari penggunaan indentasi yang rapi dan konsisten. Pemberian indentasi secara teratur hanya menghabiskan waktu. Anda adalah super-programmer, menghabiskan waktu untuk pemberian indentasi yang rapi adalah hal yang sia-sia bukan?
  4. Percayalah bahwa testcase contoh selalu cukup kuat. Anda hanya perlu mengetes program Anda dengan testcase contoh yang diberikan di soal karena semua pembuat soal berhati mulia (termasuk saya :).
  5. Hindari pemecahan fungsi/program utama yang panjang menjadi fungsi-fungsi yang lebih kecil karena itu membuang waktu. Mengapa? Karena setiap kali Anda membuat sebuah fungsi, Anda perlu mengetik beberapa karakter tambahan (misal: function bla bla di Pascal atau void bla bla (misal) di C/C++, dll).
  6. Anda luar biasa teliti. Pada program yang rawan overflow, meskipun sebenarnya Anda bisa gunakan long long di keseluruhan program tanpa melebihi batas waktu maupun memori, sebisa mungkin gunakan int di berbagai tempat selama menurut penglihatan Anda itu tidak menyebabkan overflow. Ini akan membuat Anda terlihat smart dan program Anda akan rawan bug overflow.
  7. Hindari mendeklarasi variable konstanta untuk konstanta-konstanta yang bisa Anda ketikkan. Hindari:const int MOD = 1000000007;melainkan, selalu ketik 1000000007 setiap kali dibutuhkan. Pengetikan berulang-ulang seperti ini membuat resiko salah ketik menjadi tinggi, dan mengakibatkan kemungkinan bug muncul lebih tinggi.
  8. Gunakan nama-nama variable/fungsi yang tidak bermakna bagi Anda. Dibanding menggunakan nama-nama yang panjang dan melelahkan untuk diketik seperti: ctr, isValid, rotate, dll, gunakan nama-nama tak bermakna seperti: a, b, c, …
  9. Meskipun ada cara sederhana dan mudah dimengerti yang bisa digunakan, usahakan untuk menggunakan trik-trik cerdas pada program Anda karena itu akan membuat Anda terlihat lebih smart dan membuat program Anda lebih sulit di-debug. Tapi… Anda adalah super-programmer, jadi tidak perlu debugging bukan?
    Contoh:
    Menukar dua isi dua variable int
    Tidak keren: swap(a, b);
    Keren: a ^= b ^= a ^= b;
    Mengurutkan tiga buah variable int a, b, c
    Tidak keren:
    int A[] = {a, b, c};
    sort(A, A + 3);
    a = A[0]; b = A[1]; c = A[2];
    Keren:
    (a > b) && (a ^= b ^= a ^= b);
    (b > c) && (b ^= c ^= b ^= c);
    (a > b) && (a ^= b ^= a ^= b);
  10. Jangan gunakan prinsip KISS (Keep It Simple and Stupid)! Gunakan prinsip KICK (Keep It Cool and KICK)! Apabila Anda punya dua jenis algoritma yang sama-sama cukup untuk menyelesaikan sebuah soal dengan batasan yang ada (time dan memory), pilih yang lebih rumit dan terlihat keren. Sebagai contoh, sebuah soal yang bisa dikerjakan dan memperoleh nilai sempurna dengan brute-force dalam 10 baris dan sederhana, ternyata juga bisa dikerjakan dengan dynamic programming dengan state rumit dan menakjubkan dalam 100 baris. Pilih yang mana? Berdasarkan KISS, Anda perlu pilih yang brute-force. Tetapi jangan, karena berdasarkan KICK, Anda perlu pilih yang dynamic programming 😀
  11. Jangan melakukan analisis secara terlalu detail sebelum coding karena terlalu melelahkan dan membuang-buang waktu. Analisis dilakukan sambil coding, bukan sebelum. Ini akan menyebabkan kemungkinan Anda untuk mengubah code Anda di sana-sini ketika coding menjadi semakin besar, dan memperbesar kemungkinan terbentuk bug di mana-mana. Selain itu, ketelitian Anda ketika coding akan menurun. Tapi tenang saja, Anda adalah super-programmer. Walaupun ketelitian menurun sedikit, kemampuan Anda tetap luar biasa.

PS:

  1. Tulisan ini adalah instrospeksi penulis. Anda bebas memanfaatkan tulisan ini untuk menjadi programmer yang lebih banyak membuat bug maupun sebaliknya. Pilihan ada pada Anda 😀
  2. Tentu saja ada cara lebih mudah untuk membuat bug seperti memasukkan statement-statement secara random. Tapi itu bukan tujuan penulisan artikel ini (baca poin 1 di PS).
  3. Penulis akan berusaha menambahkan catatan-catatan lagi di sini. Apabila kalian punya saran untuk dimasukkan ke sini, silakan beri saran melalui komentar.
  4. Apabila ada bagian artikel yang ingin didiskusikan, silakan diskusikan di komentar.

 

Leave a Reply

Your email address will not be published. Required fields are marked *