Pendidikan Pemrograman Yang Tidak Baik

Seperti telah saya tuliskan sebelumnya, belajar pemrograman secara formal itu perlu, tapi sayangnya beberapa tempat tidak mengajarkan pemrograman dengan baik. Berikut ini beberapa ciri pengajaran pemrograman yang tidak baik:

  1. Terlalu berfokus pada tools tertentu yang trend saat ini. Mahasiswa wajib memakai tools X (misalnya IDE-nya harus Microsoft Visual Studio, atau harus memakai Visual Prolog). Tools akan cepat sekali berganti. Ketika Anda diajari tools X, ketika lulus, tools tersebut mungkin sudah tidak ada, atau tidak didukung lagi. Ingin contoh? DBase dan Visual Basic. Dulu keduanya sempat menjadi tools yang “standar”, tapi sekarang tools tersebut tidak disupport lagi.
  2. Tidak mengikuti perkembangan zaman. Ini ekstreem sebaliknya dari yang pertama, ada yang masih mengajarkan kuliah C dengan standar Pre ANSI-C, dan menggunakan compiler Turbo C++ 2.0, yang dirilis kira-kira 20 tahun yang lalu, dan sudah tidak didukung lagi.
  3. Kurang mengajarkan aspek algoritma. Pada sebagian besar bahasa, sudah tersedia library standar untuk sorting, searching, dsb, tapi tanpa memahami kemampuan dan batasan setiap algoritma, Anda akan menemukan hambatan ketika memproses data dalam jumlah yang besar.
  4. Hanya mengajarkan paradigma tertentu. Umumnya paradigma yang dipakai sekarang adalah object-oriented yang digabung dengan procedural, tapi itu bukan satu-satunya cara menyelesaikan masalah.

Jangan heran jika ternyata lulusan sebuah sekolah/perguruan tinggi komputer tidak bisa memprogram jika pengajarannya tidak benar. Jika Anda ingin menyaring antara orang yang punya dasar pemrograman dan yang tidak, cobalah test sederhana ini.

Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.

Programmer yang baik akan bisa menuliskan solusinya di atas kertas (tanpa bantuan komputer), dalam beberapa menit.

Representasi Bilangan Desimal di Komputer

Dalam dunia komputer, biasanya kita menggunakan representasi floating point untuk menyimpan bilangan desimal. Namun itu bukan satu-satunya representasi yang ada. Ada beberapa representasi lain yang berupa fixed point, misalnya BCD (binary coded decimal), Chen-Ho, dan DCD (Densely Coded Decimal). Jika diperlukan Anda pun bisa membuat representasi sendiri, sesuai yang Anda mau.

Metode penyimpanan yang ada tersebut dibuat dengan tujuan yang berbeda-beda, misalnya tujuan utama representasi floating point adalah dapat menampung angka dalam range yang besar, tapi dengan presisi yang berkurang/terbatas. Floating point juga biasanya basis 2, sehingga lebih cepat dieksekusi di komputer yang memakai binary logic (perlu dicatat, tidak semua komputer memakai binary logic).

Representasi desimal yang lain bertujuan agar dapat merepresentasikan bilangan secara eksak, namun rangenya terbatas. Variasi representasi dibuat untuk berbagai tujuan, misalnya DCD dibuat agar memori yang diperlukan lebih sedikit.
Continue reading Representasi Bilangan Desimal di Komputer

Struct vs Union

Posting ini merupakan jawaban saya pada sebuah pertanyaan di milis linux-programming (Juli 2007). Saya posting di sini karena mungkin akan berguna bagi pemula dalam C.

Struct berguna untuk mengelompokkan data. Contoh: struktur mahasiswa mungkin memiliki NIM, nama, dst. Rasanya ini mudah dimengerti.

Union: untuk memberi beberapa nama untuk satu lokasi memori. Ini yang biasanya yang sulit dimengerti oleh yang baru belajar C. Saya berikan beberapa contoh:

#include <stdio.h>

union {
      int a;
      int b;
} a_dan_b;


int main() 
{
	a_dan_b.a = 5;
	printf("%d\n", a_dan_b.b);
	return 0;
}

Apa hasil keluaran program itu? Jawabnya adalah 5, karena a dan b menempati lokasi memori yang sama. Kita bisa menambahkan banyak variabel di union. Jika tipe variabel itu sama, maka nilainya akan sama. Kita bisa membuat union dari tipe yang berbeda juga, misalnya:

Continue reading Struct vs Union

Mengenal fitur bahasa: Tipe Enumerasi

Sebagian orang menganggap bahasa hanya sebagai alat, dan memakai bahasa apapun sama saja. Sebagian lagi fanatik terhadap suatu bahasa, dan menganggap bahasa yang lain itu jelek. Menurut saya yang benar ada di antara keduanya itu. Dalam banyak hal, memakai bahasa apa saja sama saja, tapi dalam kasus tertentu bahasa tertentu lebih baik dari bahasa yang lain.

Memprogram embedded system dalam C akan lebih mudah dibanding dengan menggunakan Pascal misalnya. Penggunaan C dalam embedded system juga menghemat memori, yang akan menghemat biaya produksi alat. Untuk dapat menggunakan suatu bahasa dengan baik, kita perlu mengetahui mengapa fitur tertentu ada di suatu bahasa, dan kapan sebaiknya kita memanfaatkannya.

Dalam kesempatan ini, saya akan membahas penggunakan tipe enumerasi (enum), yang jarang digunakan programmer pemula. Tipe ini banyak diajarkan di berbagai kuliah atau buku, tapi hal yang kurang dibahas adalah mengapa kita sebaiknya memakai tipe enumerasi dibandingkan menggunakan konstanta integer.

Tipe enumerasi adalah tipe di mana nilai yang mungkin disebutkan satu per satu oleh programmer. Misalnya tipe hari yang terdiri dari Senin, Selasa, Rabu, Kamis, Jumat, Sabtu, dan Minggu. Banyak bahasa pemrograman memiliki tipe enumerasi, misalnya C, Pascal, C#, Java 5 ke atas, Ada, dan Visual Basic.

Continue reading Mengenal fitur bahasa: Tipe Enumerasi

Perlukah kuliah untuk bisa memprogram?

Perlukah “kuliah” (mengambil pendidikan formal di universitas) untuk bisa memprogram?. Jawaban singkatnya: perlu jika Anda ingin menjadi programmer yang baik (kecuali Anda orang jenius yang rajin belajar).

Sebelum memulai argumen saya, saya perlu memberitahu bahwa perbedaan antara programmer yang baik dan programmer yang buruk sangat besar. Dalam suatu riset yang membandingkan programmer terbaik dan programmer terburuk dalam suatu perusahaan, programmer yang terbaik dibanding programmer terburuk dapat membuat program 20 kali lebih cepat, dapat mendebug 25 kali lebih cepat, membuat program yang 5 kali lebih kecil yang berjalan 10 kali lebih cepat (buku Code Complete halaman 548).

Ketika kakek saya membuat rumah, dia tidak membutuhkan arsitek. Ketika bapak saya membuat rumah kami yang pertama, dia juga tidak membutuhkan arsitek. Bagi yang berpikiran sangat sempit, mungkin dia akan segera berpikir: sekolah arsitek itu tidak perlu, anak STM saja sudah cukup. Beberapa tukang bangunan yang cuma lulusan SD pun bisa membangun rumah sederhana di perkampungan.

Coba lihat berapa jumlah rumah di Indonesia yang dibangun tanpa arsitek. Sebagian juga berpikir arsitek itu tidak perlu, mereka bahkan tidak tahu harga pasir termurah di desa ini di mana. Anda yang berpikiran waras tentunya akan segera melihat, bahwa membuat gedung tinggi, apalagi pencakar langit, tidak bisa dilakukan orang yang tidak memiliki pendidikan arsitektur.

Membuat program komputer sederhana, dan aplikasi bisnis untuk sebuah perusahaan kecil bisa dilakukan tanpa perlu kuliah. Kebanyakan aplikasi bisnis hanyalah menerjemahkan ke logika bisnis ke dalam program sederhana yang sudah difasilitasi dengan aneka library. Tapi jika Anda berpikir membuat aplikasi bisnis yang besar hanya sekedar membuat form dan report Anda salah besar. Bagaimana Anda bisa membuat sistem yang bisa menangani ratusan ribu transaksi per detik?

Continue reading Perlukah kuliah untuk bisa memprogram?

Cinta

Menurut Kamus besar Bahasa Indonesia (KBBI):

cin·ta a 1 suka sekali; sayang benar 2 kasih sekali; terpikat

Cinta pertama saya adalah pada programming. Sebelum saya jatuh cinta pada seorang gadis, saya sudah lebih dulu jatuh cinta pada programming. Mungkin sebagian akan berpikir bahwa cinta pada programming adalah hal yang aneh, tapi banyak orang di dunia ini yang sangat cinta pada bidangnya. Kadang sulit mengerti kecintaan seseorang pada sesuatu jika Anda belum melihatnya sendiri. Saya mungkin tidak akan bisa mengerti mengapa Paul Erdős sangat menyukai matematika (The Man Who Loved Only Numbers) jika saya tidak bekerja dengan seorang professor matematika yang sangat menyukai bidangnya.

Saya suka memprogram, karena dalam banyak hal itu lebih mudah dilakukan daripada keahlian lain. Belajar piano butuh waktu bertahun-tahun, tapi memprogram midi synthetizer tidak butuh waktu lama. Belajar kode morse akan butuh beberapa minggu, tapi membuat program untuk menerjemahkan kode morse dapat dilakukan dalam waktu singkat. Membuat jam mekanik akan butuh waktu lama, tapi membuat jam digital di layar komputer hanya butuh waktu yang sangat singkat.

Memprogram merupakan gabungan dari science (karena kita harus memahami algoritma), engineering (terutama ketika membuat program yang besar), dan seni. Membuat program bisa disamakan dengan banyak hal. Membuat program itu seperti menghasilkan suatu karya seni, seperti membuat lukisan atau puisi, atau lagu. Memprogram itu seperti merancang sebuah gedung, atau pesawat. Membuat program itu seperti menyelesaikan sebuah teka-teki, seperti menyelesaikan sudoku, mengisi teka teki silang, atau menyelesaikan rubik. Memprogram merupakan gabungan dari semuanya itu.

Memprogram juga tidak butuh biaya besar. Komputer bisa didapatkan dengan biaya yang sangat murah. Meskipun komputer bisa membantu untuk memprogram,  tidak dibutuhkan komputer untuk mulai memprogram. Saya belajar assembly di atas kertas dengan tutorial dari sebuah tabloid ketika saya masih di bangku sekolah menengah. Ketika saya mengambil  pelajaran pemrograman di ITB,  para mahasiswa diharapkan dapat memprogram di atas kertas. Ujian pemrograman pun memakai kertas (selain ujian praktik di lab).

Sebuah program bisa berguna bagi banyak orang. Sebuah program bisa menghasilkan uang. Sebuah program juga bisa merusak komputer, atau melakukan hal apapun yang kita inginkan. Dalam level tertentu, memprogram itu seperti bermain tuhan. Memprogram juga akan membuat kita tertarik pada banyak hal (misalnya aneka pertanyaan filosofis mengenai determinisme, aneka pembuktian matematis, dll).

Jika Anda juga memiliki kecintaan yang sama terhadap programming, Anda bisa menuliskannya di komentar. Jika Anda tertarik untuk menulis banyak mengenai programming, Anda juga bisa meminta dibuatkan domain namaanda.cintaprogramming.com (misalnya http://yohanes.cintaprogramming.com).