Koding Atau Buat Dokumentasi

Sekian lama saya tidak ngeblog itu ada alasannya. Saya lagi (kebanyakan) koding. Membuat kode program untuk berbagai hal, terutama untuk aplikasi Internet of Things (IoT). Tentu saja ada kegiatan-kegiatan lain yang harus saya lakukan (dan bahkan mungkin juga yang lebih dominan), tetapi kali ini saya ingin menyoroti masalah koding.

Salah satu masalah yang sering dikeluhkan terhadap para koder (programmer) adalah kuranganya dokumentasi dari kode yang mereka buat. Ini betul. Sebagai seorang koder, saya juga sering mengalami dilema. Di satu sisi saya ingin membuat dokumentasi, tetapi di sisi lain saya masih harus meneruskan kodingan. Kalau tadi beres satu bagian, maka masih ada bagian lain yang harus dikodekan. Belum lagi kode bagian sebelumnya juga masih harus dimodifikasi. Akibatnya, waktu malah digunakan untuk membuat kode baru dibandingkan dengan membuat dokumentasi.

Yang menjadi masalah adalah banyak hal yang harus didokumentasikan. Design decisions, misalnya. Mengapa saya melakukannya seperti itu di sebuah kode? Ada alasannya. Kalau tidak didokumentasikan, maka koder selanjutnya akan kesulitan untuk memahami kode yang sudah saya buat. Jangankan koder lain, saya sendiripun kalau sudah lewat sekian bulan maka sudah lupa dengan kode-kode yang saya buat sebelumnya.

Singkatnya mengabaikan dokumentasi itu buruk! Iya semua orang tahu, tetapi tetap saja dilakukan. Sayapun tetap melakukannya. Nah, sebetulnya waktu yang saya gunakan untuk ngeblog ini dapat digunakan untuk membuat dokumentasi. Ini malah ngeblog. ha ha ha. Tapi kalau saya tidak memaksakan ngeblog, pasti ada saja yang lebih “penting”(?). Akibatnya ya blognya jadi kosong.

Dokumentasi harus menunggu. Ngeblog dahulu. Wah.

Iklan

Gembira Ria Koding: Menggunakan Library

Melanjutkan cerita megenai koding, kali ini saya ingin bercerita tentang pengalaman menggunakan library buatan orang lain.

Salah satu manfaat menggunakan library buatan orang lain adalah kita tidak perlu membuat semuanya dari awal. (We do not have to reinvent the wheel.) Ada library yang nyaman digunakan dan ada library yang membingungkan. Sebagai contoh, library GMP sangat mudah dan intuitif untuk digunakan. Manual (referensi) yang ada juga bagus sekali. Dalam waktu beberapa menit saya sudah bisa menggunakannya. Lain ceritanya dengan libgcrypt. Sudah berhari-hari membacanya, saya masih belum bisa pakainya. hi hi hi. Nah, yang menengah adalah msieve.

Beberapa hari yang lalu Ariya memberitahukan saya tentang keberadaan library msieve untuk melakukan integer factorization. Setelah saya ambil dan pasang, saya coba membuat sebuah program sederhana. Ternyata, tidak mudah. Ada beberapa hal yang harus diinisialisasi sebelum saya bisa menggunakannya. Sebel. Baru saja saya niatkan untuk membuat sebuah program percobaan. Ah, ternyata berhasil juga (setelah menghabiskan waktu kira-kira 1 atau 2 hari.)

Memang agak susah membandingkan mudah atau tidaknya karena apa yang dilakukan oleh libgcrypt atau msieve itu lebih kompleks dari apa yang dilakukan oleh GMP, tetapi tetap saja saya merasa gmp lebih mudah. Selain kompleksitas dari library-nya mungkin juga style pemrograman menentukan juga. Saya mungkin lebih cocok dengan apa yang dilakukan oleh GMP.

Nah, sekarang ada satu program yang harus saya bongkar. Sekilas programnya cukup pabaliut (alias membingungkan). Bukan, bukan karena yang buat tidak lihai, tetapi justru karena dia sangat pandai sehingga menggunakan trik-trik di sana sini. Programnya memang menjadi singkat dan elegan tetapi agak sulit bagi kita untuk menelusurinya. Ini membutuhkan waktu yang cukup untuk memahaminya. Ah, lain kali saja. Sekarang saya mau ngoprek yang lain dulu.

integer factorization

Menyambung soal pemrograman kemarin dulu, sekarang saya sedang mencari algoritma yang bagus untuk memfaktorkan sebuah bilangan (integer factorization). Diketahui sebuah bilangan x, berikan bilangan prima yang menjadi faktor dari bilangan tersebut. (Sebetulnya saya mencari bilangan prima terbesar.)

Ada beberapa algoritma yang sudah saya lihat, tetapi mereka hanya bisa digunakan untuk bilangan yang kecil. Algoritma tersebut tidak jalan untuk bilangan yang besar, misalnya:

x = 230023525003339439329862001182693967063150646

Berapa faktornya? Jawabannya (dengan menggunakan PARI atau Wolfram alpha) adalah:

{2, 331, 9351779, 7311032480779, 5082077886580529086513}

Masih mencari algoritma yang bisa menemukan itu secara efisien. Ada yang tahu? Saya buat kode dengan algoritma yang tidak efisien, jalan untuk angka yang kecil. Untuk angka yang besar seperti di atas, mungkin 10 tahun baru selesai 🙂

(Baca paper Arjen Lenstra dulu ah.)