Mengapa Bahasa Python?

Saya ingin belajar bahasa pemrograman. Bahasa apa yang sebaiknya saya pelajari?

Pertanyaan ini merupakan salah satu pertanyaan yang sering (dan berulang) ditanyakan. Jawabannya bergantung kepada waktu. Jawaban beberapa tahun yang lalu akan berbeda dengan jawaban sekarang. Ini disebabkan oleh pesatnya perkembangan komputer dan bahasa pemrograman.

Jawaban atas pertanyaan ini pada saat sekarang adalah bahasa Python. Mengapa Python?

  1. Mudah. Definisi “mudah” ini tentu saja harus diperjelas lagi. Dia lebih mudah dipelajari daripada bahasa pemrograman lainnya, sehingga Python digunakan oleh orang dari berbagai bidang – tidak hanya orang yang berlatar belakang teknologi informasi saja. Saya melihat banyak penggunaan Python di bidang sains. Bahasa Python juga merupakan sebuah bahasa yang interpreted, yaitu tidak perlu dirakit (compile) dahulu seperti bahasa pemrograman C misalnya. Ini membuat siklus koding menjadi lebih sederhana.
  2. Tersedia di berbagai sistem operasi. Python tersedia untuk sistem operasi Linux, Mac OS X, Windows, dan seterusnya. Tidak semua bahasa pemrograman tersedia dengan baik untuk berbagai sistem operasi. Artinya siapapun dapat menggunakan Python./
  3. Tersedia banyak pustaka (library). Menurut saya ini aspek yang paling penting dari mengapa belajar bahasa Python. Pustaka (library, module) ini membuat pemrograman kita menjadi lebih mudah karena sudah ada orang lain yang mengembangkan alat bantunya. Untuk melakukan statistik, sudah ada pustakanya. Grafik? Ada juga. Untuk bidang-bidang yang khususpun seperti Artificial Intelligence dan Machine Learning juga sudah ada modulnya. Apapun, nampaknya sudah ada. Ini yang membuat bahasa Python sangat menarik dibandingkan bahasa pemrograman lainnya.

Oh ya. Versi video dari penjelasan ini ada di YouTube. Saya sedang memulai channel Padepokan Budi Rahardjo ini di sana. Silahkan dicek (dan juga dikomentari ya – kalau perlu subscribe juga).

Iklan

Python dan Perl

Senin lalu melanjutkan memberikan training soal Data Science dengan menggunakan Python. Salah satu tugas yang harus kami lakukan adalah membersihkan data yang diperoleh dari proses dump aplikasi links ke akun twitter. (links -dump http://twitter.com/rahard)

Awalnya saya memulai koding dengan menggunakan bahasa Python, tapi di tengah jalan macet karena saya lupa cara-cara melakukan regular expression (regex) di Python. Misalnya lompati (skip) baris yang memiliki pola penulisan “* sesuatu”. Atau melompati baris yang hanya berisi spasi saja. Sebetulnya saya bisa sih, tetapi harus baca dokumentasinya dulu. Padahal ini lagi live coding. ha ha ha. Harus cepat. Akhirnya yang saya lakukan adalah saya koding awal dengan menggunakan bahasa Perl. ha ha ha.

Di kepala saya memang logika pemrograman diimplementasikan dengan menggunakan bahasa Perl. Jadi kalau mau mengerjakan sebuah kodingan, yang terpikir adalah kodenya dalam bahasa Perl.

Kembali ke kasus tadi. Dalam waktu singkat, kodingan Perl sudah menunjukkan apa yang saya mau (meskipun masih harus dilanjutkan lagi karena ada banyak exception yang harus dilakukan). Poin yang ingin saya sampaikan di kelas ada bahwa untuk melakukan pembersihan terhadap data dapat dilakukan dengan menggunakan skrip. Cara ini efektif meskipun caranya adalah quick and dirty. Namanya juga hacking. Itulah sebabnya dalam deskripsi tentang data science (yang diusulkan oleh Drew Conway), salah satu komponennya adalah “hacking skills“.

Kembali ke kasus (lagi), saya punya pekerjaan rumah untuk membuat versi Python dari kode Perl saya. Hadoh.

 

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.

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.)