Masih Ingin Banyak Belajar

Dari dulu ada banyak sekali hal-hal yang masih ingin saya pelajari yang berhubungan dengan pemrograman, ada banyak hal yang ingin saya buat. Setiap kali saya melihat sesuatu dilakukan, saya penasaran: bagaimana sih caranya teknologi itu bekerja? rasanya seperti apa sih memprogram benda seperti itu? Sekarang saya ingin menuliskan sebagin hal yang sudah saya pelajari/lakukan, dan hal-hal yang ingin saya lakukan. Sebagian ini bisa dianggap resolusi 2012.

001

Ini beberapa daftar keinginan saya dari mulai waktu jaman SMU dulu yang saya ingat saat ini yang sudah kesampaian:

  • memprogram virus polimorfik
  • membuat antivirus
  • Membuat animasi dengan assembly yang kurang dari 100 byte (waktu itu saya membuat animasi API)
  • membuat program kompresi (cuma pernah huffman, belum yang lain)
  • membuat game mode grafik (dulu pernah membuat beberapa, tidak ada yang benar-benar selesai, tapi sudah cukup puas)
  • memproses gambar (teknik dasar manipulasi piksel)
  • membuat daemon
  • memprogram Wii (porting 2 emulator)
  • membuat server HTTP, proxy server
  • mengimplementasikan beberapa enkripsi, dan setidaknya memahami berbagai jenis enkripsi (tidak pusing lagi dengan istilah stream, block, cbc, dsb)
  • menulis program dengan FORTAN (cuma untuk tugas kuliah, setelah itu pernah menulis bagaimana menghubungkan gfortran dengan DELPHI)
  • membuat aplikasi desktop dengan GUI di Windows, Linux, OS X
  • menulis sendiri shellcode untuk exploit buffer overflow
  • memprogram set top box, yang punya fitur DVD player (dengan Windows CE)
  • memprogram J2ME (pengalaman pertama memprogram mobile device dengan SL45, HP Java pertama)
  • memprogram serial port, modem, STK (Sim toolkit), SMS
  • membuat program yang berhubungan dengan SMS center
  • memprogram Palm OS, Symbian, BlackBerry
  • memprogram mesin EDC (mesin untuk swipe kartu kredit, mencetak tanda terima)
  • membaca source code Linux dan FreeBSD (serta NetBSD). Sudah berhasil memporting kernel Linux dan FreeBSD dan kodenya pernah direview oleh salah satu developer FreeBSD
  • membuat aplikasi web dengan PHP, Java, Perl, Python
  • membuat aplikasi dengan HTML5 dan ActionScript
  • memprogram microcontroller (ATMEGA, PIC, dan MSP430)
  • memprogram jam tangan (MSP430)
  • Mempelajari assembly MIPS
  • Reverse engineering berbagai program
  • Membuat shareware yang dijual
  • Menjual aplikasi BlackBerry di appworld
  • membuat program untuk update ROM handphone (Acer E130)
  • membuat parser dan translator sederhana (salah satunya adalah interpreter BASIC dalam JavaScript)

Masih ada beberapa yang ingin saya lakukan, tapi belum karena alasan ini dan itu:

  1. Membuat aplikasi Symbian yang dijual di OVI Store. Symbian sudah mencapai versi terakhir, dan saya sudah memprogram symbian dari dulu, tapi sampai sekarang belum pernah menjual di OVI Store. Mungkin tidak akan laku banyak, tapi ini bagian dari pengalaman. DONE
  2. Membuat program iOS yang dijual diappstore. Membuat sendiri dan diinstall dengan jailbreak sih sudah. Masih sayang kalau 99 USD dihabiskan tidak optimal. DONE (memakai account orang lain)
  3. Membuat aplikasi desktop yang di jual di Mac App Store. Sekarang ini sudah membuat aplikasi desktop untuk Mac, tapi untuk kantor, bukan pribadi.
  4. Membuat program Android yang masuk ke Android Market. Sekarang ini saya sudah membuat aplikasi untuk beberapa proyek, tapi belum ada yang untuk publik. (DONE, memakai account perusahaan lain)
  5. Memprogram FPGA untuk membuat CPU sederhana. Sudah beli devkitnya, dan baru mulai belajar.
  6. Membuat sendiri compiler/interpreter yang lengkap, termasuk juga code generatornya
  7. Membuat emulator NES (Game console pertama yang saya miliki). Memang sudah ada ratusan emulator di luar sana, tapi ini salah satu keinginan yang ada dari dulu.
  8. Membuat aplikasi yang berguna dengan LISP. Entah berupa website, atau aplikasi apapun
  9. Membuat aplikasi yang berguna dengan PROLOG. Entah berupa website, atau aplikasi apapun
  10. Mempelajari lebih banyak mengenai parallel processing, terutama di low level, masalah multithread, multiprocess, sudah lulus, tapi masalah optimasi multi core (CUDA, OpenCL, dsb) belum
  11. Ingin mempelajari FFT, terutama untuk sound processing, dengan tujuan lebih spesifik lagi: untuk membantu belajar bahasa Thai
  12. Mendalami assembly ARM (sekarang ini dasarnya sudah ada, tapi masih jauh dari fasih dibanding assembly X86). (DONE, sekarang udah lumayan pengetahuan Arm)
  13. Mempelajari cara kerja JavaScript engine V8 dan WebKit. Setelah memprogram HTML5/JavaScript, dan membaca berbagai buku/tutorial, saya ingin melihat sendiri implementasi berbagai hal di level rendah (langsung ke sumbernya).
  14. Mendalami QNX. Sekarang ini sudah cukup mendapat pencerahan mengenai userland QNX, tapi masih belum terlalu mengerti dengan berbagai aspek internalnya.
  15. Membuat OS sendiri, compiler sendiri, text editor sendiri. Semoga yang ini suatu saat akan kesampaian, walaupun itu hanya OS sederhana, dengan compiler dan text editor sederhana.

Beberapa hal sudah saya mulai (misalnya no 1 sampai 3), dan sisanya masih belum. Selain memprogram, saya juga ingin melakukan hal berikut:

  1. Membaca dan berlatih sebanyak-banyaknya dari buku The Art Of Computer Programming. Dulu pernah memulai, tapi berhenti. Tidak ada kata terlambat untuk memulai dari sekarang.
  2. Menuliskan sebanyak-banyaknya mengenai algoritma, struktur data, dan pemrograman
  3. Membuat video pelajaran pemrograman, baik itu yang sifatnya umum (dasar pemrograman), maupun yang khusus (misalnya mengenai C, C++, jaringan komputer)
  4. Ingin benar-benar memakai dan mengadministrasi sistem FreeBSD, DragonFlyBSD, OpenBSD, dan/atau NetBSD. Meski saya sudah mengerti sampai level kernel, banyak hal di userspace yang saya tidak tahu

Semoga saya masih diberi umur yang panjang untuk belajar semuanya itu. Selain itu, masih akan muncul banyak hal-hal baru yang perlu saya pelajari, jadi andaikan semuanya sudah berhasil, saya yakin masih banyak hal lain yang menunggu di masa depan.

One thought on “Masih Ingin Banyak Belajar”

Leave a Reply

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