Matematika dan Programming

Di kala senggang saya masih menjawab pertanyaan via Facebook/Email/Telegram dan banyak calon programmer yang sudah takut sebelum belajar programming: apakah akan butuh matematika? Jawabannya singkatnya tergantung. Tergantung ingin memprogram apa dan sedalam apa.

Matematika dasar tentunya sangat diperlukan, misalnya perkalian, pembagian, penjumlahan pengurangan. Hampir di semua bidang diperlukan ilmu dasar geometri. Misalnya tentang sistem koordinat ketika menggambar grafik (atau sekedar mengatur posisi teks di sebuah halaman web).

Pengetahuan dasar ini penting, dan ini berarti anak yang masih sangat kecil dan belum memiliki dasar matematika harus berhenti dulu belajar di titik tertentu. Ini pengalaman saya dalam mengajari anak saya ketika dulu mengajari dia programming di usia 4 tahun (sekarang sudah 7 tahun). Logika boolean juga perlu dipahami, sekedar AND, OR, dan NOT sudah cukup untuk sebagian besar kasus.

Untuk pemrograman grafik, terutama grafik 3D diperlukan pemahaman matriks dan vektor. Segala operasi matrix akan terlihat secara visual ketika memprogram grafik. Matriks dan vektor juga dipakai di Machine Learning. Jika fokusnya ingin mengolah data besar, maka berbagai ilmu matematika seperti: statistika, linear programming, graph, dan banyak konsep yang rumit akan terpakai.

Lanjutkan membaca Matematika dan Programming

Signature email jaman kuliah

Dulu waktu kuliah, saya punya signature email seperti ini:

main(i){putchar((i-1)["Xme]i_l"]+(i++))&&(8-i)&&main(i);}


Ternyata masih ada beberapa orang yang ingat, dan masih banyak yang penasaran apa artinya (cuma satu kata: Yohanes) danĀ  kok bisa muncul seperti itu?

Lanjutkan membaca Signature email jaman kuliah

Memprogram Apa Saja

Saya punya hobi memprogram benda apa saja dengan bahasa apa saja. Pertama saya contohkan dulu benda-benda yang saya program, lalu saya akan berusaha menjelaskan kenapa saya punya hobi ini, dan kenapa menyukai hobi ini.

Saya belajar memprogram otodidak waktu kelas 2 SMP dengan komputer Apple II/e dengan bahasa Basic. Waktu itu semuanya masih ngasal karena hanya belajar dari contoh source code. Waktu floppy disk-nya sudah error, saya tetap memprogram tiap hari, iseng membuat sesuatu, walau tidak bisa disimpan dan harus diketik lagi besoknya. Akhirnya berhenti memprogram benda itu setelah mati total.

Di SMU kelas 2 saya baru punya komputer lagi, kali ini IBM PC dengan Windows 95. Di PC tersebut saya memakai Pascal dan Assembly dan juga sudah mulai memprogram memakai Delphi.  Saya mencoba berbagai macam hal di PC (pernah saya tuliskan di sini). Dari sini sudah terlihat kalau saya sangat random, dari mulai memprogram utility sampai game. Apapun yang saat itu menarik buat saya.

Waktu kuliah saya membawa PC saya ke Bandung, tapi kos saya dibobol maling dan PC saya dicuri. Akhirnya saya sering nongkong di lab sampai tutup. Lab waktu tingkat satu dulu sangat memprihatinkan, cuma 486 DX (lebih rendah specnya dari PC pentium saya yang hilang), jadi di situ saya kembali mendalami memprogram mode teks.

Device non PC pertama yang saya program adalah Palm OS. Selanjutnya banyak device sejenis PDA/Smartphone yang saya program. Saya sempat membuat puzzle di PalmOS dan beberapa app kecil lain. Berikutnya adalah Symbian Bible yang sempat dipakai jutaan orang di masa kejayaan Symbian OS (menggunakan C++). Saya juga membuat Bible Plus untuk OS Blackberry (versi BBOS ditulis memakai Java dan versi BB10 di tulis dalam C++ menggunakan Qt).

Saya juga memprogram game console saya. Saya memporting dua aplikasi ke Wii, yaitu WiiApple dan Hatari (keduanya menggunakan C di platform PowerPC). Saya membuat aplikasi dadu di Nintendo DS ketika dadu anak saya hilang (menggunakan C di platform ARM).

11224430_10154009703648488_423812051884387581_n
Lanjutkan membaca Memprogram Apa Saja

Mengapa memakai bahasa pemrograman tertentu?

Mengapa seseorang memilih suatu bahasa tertentu untuk menyelesaikan suatu masalah atau membuat aplikasi tertentu? Ternyata jawabannya bisa banyak.  Kebanyakan pilihan intinya adalah keterpaksaan dan terakhir baru faktor kenyamanan.

Non Teknis

Keterpaksaan pertama dari non teknis, misalnya dari permintaan atasan atau permintaan client. Hal ini sering kali tidak bisa ditawar lagi, terutama jika sudah melibatkan kontrak legal. Paksaan ini sering menghasilkan kode yang aneh atau tidak menggunakan fitur yang tepat dari sebuah bahasa, karena programmer dipaksa menggunakan bahasa lain, dan karena harus buru-buru mereka akan menggunakan gaya bahasa X di bahasa Y.

Keterbatasan Runtime Environment

Sebuah teknologi tertentu kadang hanya bisa diprogram dengan satu bahasa. Misalnya dulu ponsel cuma bisa diprogram dengan Java (J2ME) jadi ya terpaksa harus memakai bahasa Java. Microcontroller tertentu perlu memakai assembly karena ukuran ROMnya sangat kecil dan tidak ada compiler C yang bisa menghasilkan kode sekecil itu.

Sekarang ini jumlah memori dan kecepatan berbagai device sudah sangat tinggi, sehingga memungkinkan interpreter berjalan di platform apa saja. Ini memberi kebebasan memilih bahasa. Contohnya: dulu microcontroller CPU dan RAMnya sangat kecil sehingga tidak cukup untuk menjalankan interpreter Python. Sekarang sudah banyak microcontroller yang bisa menjalankan MicroPython.

Lanjutkan membaca Mengapa memakai bahasa pemrograman tertentu?

Bug, Debugging, dan Debugger

Baru saja ada seseorang yang bertanya kepada saya mengenai cara mendebug program buatannya. Sebentar saya merasa heran: masak nggak bisa pake debugger? lalu ketika saya mencoba mengingat-ingat, di sebagian besar buku dan kuliah mahasiswa tidak diajarkan mengenai bug yang umum, cara mencari bug, dan cara menggunakan debugger itu sendiri.

Kemampuan mencari bug di program sendiri ini juga menjadi dasar untuk mencari bug security. Kalo kita bisa menemukan kesalahan yang kita buat sendiri, akan lebih mudah untuk mencari kesalahan di program orang lain.

Bug

Bug adalah segala macam cacat dalam program. Bisa saja cacatnya hanya berupa tampilan yang sedikit salah, bisa crash, bisa berupa bug security (harusnya hanya bisa diakses user X, bisa diakses user Y), kadang bug tertentu tidak muncul sampai kasus ekstreem (misalnya jika jumlah user banyak maka akan out of memory karena ada memory leak).

Lanjutkan membaca Bug, Debugging, dan Debugger

Masuk Dunia Software Development

2016-03-07 (6)

Banyak orang yang ingin memasuki dunia software development, dan bertanya ke saya: saya perlu belajar bahasa/teknologi yang mana saat ini? Ada yang sudah kerja di IT lalu ingin masuk software development (ada yang di departemen IT, ada yang jaga warnet, dsb). Ada juga anak SMU yang nanya bahasa dan teknologi apa yang perlu dipelajari duluan, dsb. Di sini saya akan berusaha membahas pendekatan pembelajaran yang mungkin, dan sekilas teknologi yang ada saat ini dan kelemahan/kelebihannya dari sudut pandang pemula.

Lanjutkan membaca Masuk Dunia Software Development

Programming dan Penetration Testing

Pentest adalah kegiatan menyerang sistem komputer untuk mencari kelemahan security, atau dari Wikipedia:

A penetration test, or the short form pentest, is an attack on a computer system with the intention of finding security weaknesses, potentially gaining access to it, its functionality and data.

Pentesting dilakukan atas permintaan client, jadi bukan hacking ke sembarang website. Contoh sederhana pentesting seperti ini: coba jebol website perusahaan kami, apakah ada bug securitinya? atau: coba pergi ke lobi atau tempat parkir perusahaan kami, apakah ada WIFI terbuka, apakah dari situ bisa masuk ke sistem internal perusahaan kami?. Kami punya app mobile, apakah bisa “dijebol” (misalnya apakah kita bisa membuat request ke server supaya memberikan data user lain).

Screenshot_2014-11-27-18-19-36

Karena ini blog mengenai programming, saya tidak akan membahas banyak mengenai pentesting, hanya ingin menunjukkan betapa keahlian programming bisa sangat berguna untuk pentesting. Dari contoh yang saya sebutkan di atas, scope dari pentesting bisa sangat banyak, mulai dari yang on site: datang dan mengecek kabel, wireless network, dsb, sampai ke level network dan aplikasi (baik web, desktop, mobile). Saya hanya ingin membahas aspek programming, untuk mendorong peminat bidang security agar mau belajar programming.

Lanjutkan membaca Programming dan Penetration Testing

Menjual Aplikasi di Appstore

Dulu waktu saya masih kuliah, menjual aplikasi tidaklah semudah sekarang. Waktu saya kuliah, pemrograman mobile masih cukup baru. Menjual aplikasi baik desktop maupun mobile juga tidak mudah (sekarang berbagai metode pembayaran sudah tersedia). Biasanya yang saya kerjakan adalah mencari proyek.

playstore

Saya punya saran bagi mahasiswa yang saat ini masih kuliah: cobalah membuat aplikasi, minimal satu dan menjualnya di sebuah application store. Mengapa saya menyarankan orang menjual aplikasi di sana? Tujuan utamanya adalah untuk belajar. Menurut saya ada banyak sekali yang bisa dipelajari dari menjual aplikasi di app store. Pelajaran ini bukan cuma dari sisi programming, tapi keseluruhan software development lifecycle.

Lanjutkan membaca Menjual Aplikasi di Appstore

Mengajarkan pemrograman pada anak-anak

Anak saya yang sekarang ini usianya 4 tahun sudah mulai saya ajari memprogram dengan tutorial dari code.org. Mulanya anak saya iseng meminjam laptop saya, dan dia bermain-main, katanya dia sedang “mrogram”, jadi ternyata dia mau “play pretend” jadi programmer. Karena code.org menyediakan pelajaran untuk usia 4+, saya perkenalkan dia pada situs tersebut, dan dia sangat menyukainya.

IMG_0635

Mungkin sebagian dari Anda bertanya-tanya: ngapain sih anak-anak diajari programming? Apa gunanya? kenapa nggak diajarin nanti aja? Nanti jadi orang yang lebih dekat dengan mesin daripada manusia lain?

Lanjutkan membaca Mengajarkan pemrograman pada anak-anak

Untuk mereka yang putus asa mau jadi programmer

Sudah beberapa kali saya temukan di berbagai forum dan mailing list, orang-orang yang bertanya: kenapa program saya ini tidak jalan, dan kemudian mereka mempaste source code mereka. Biasanya saya akan menemukan kesalahan-kesalahan super fatal, mulai dari:

  1. Salah syntax
  2. Salah besar-kecil huruf di bahasa yang case sensitive (misalnya C)
  3. Salah logika

Saya bisa memahami bahwa orang-orang ini mungkin:

  1. Salah memilih jurusan Informatika/Ilmu komputer, atau
  2. Terpaksa mengambil kuliah pemrograman karena ini mata kuliah wajib meski jurusannya tidak langsung berhubungan dengan pemrograman
20160409_113910 (1)

Untuk orang-orang dalam kategori pertama: sudah saatnya Anda memperbaiki cara belajar Anda, atau segeralah pindah jurusan. Jika Anda kesulitan mencari kerja karena Anda tidak bisa memprogram, itu murni kesalahan Anda.

Lanjutkan membaca Untuk mereka yang putus asa mau jadi programmer