Living life and Make it Better

life, learn, contribute

Endy Muhardin

Software Developer berdomisili di Jabodetabek, berkutat di lingkungan open source, terutama Java dan Linux.

Java: Tidak untuk Pemula

Beberapa kali sepanjang perjalanan hidup, saya berkesempatan untuk mengajarkan Java kepada orang lain. Satu hal yang saya simpulkan dari pengalaman tersebut adalah “Java kurang cocok bagi pemula”.

Beberapa orang yang tidak setuju sekarang sedang bersiap-siap menggulung scroll-bar ke bawah, ke bagian komentar, untuk menumpahkan uneg-unegnya. :D Tapi sabar dulu, baca sampai selesai dan Anda akan mengerti maksud saya.

Sebelum kita mulai, mari definisikan dulu kata “pemula”. Pemula yang saya maksudkan adalah orang yang sama sekali belum pernah coding. Bisa memformat harddisk tidak masuk hitungan.

Ok, sekarang bayangkan Anda adalah seorang pemula. Bersemangat tinggi ingin belajar pemrograman, soalnya kayaknya titel programmer terlihat keren di kartu nama. Berdasarkan hasil browsing dan chatting di sana-sini, kata orang sih sekarang jamannya Java. Baiklah, mari kita belajar Java.

Anda ikut training Java -seperti lazimnya sopan santun di dunia pemrograman- hal pertama yang diajarkan instruktur adalah Hello World.

Instruktur: Selamat pagi bapak dan ibu. Sekarang kita akan belajar Hello World. Silahkan buka Notepad, dan ketik kode berikut:

public class HelloWorld {
  public static void main(String[] xx){
    System.out.println("Hello World");
  }
}

Instruktur: Dengan kode di atas, kita akan dapat mencetak tulisan “Hello World” ke layar. Bagaimana? Hebat kan?

Peserta: !@#$%[sumpah serapah disensor :P ]. Sama sekali tidak hebat. Apa itu class? Kenapa harus public? Apa artinya void? static? Berarti ada dynamic dong? Apa bedanya kurung kotak [] dengan kurung bulat () dan kurung kurawal {} ? …. [lagi-lagi disensor karena pertanyaan terlalu banyak]

Java, memang adalah bahasa yang mature. Sudah stabil (artinya tidak terlalu banyak perubahan fundamental) dan sudah teruji digunakan berbagai aplikasi besar dengan sukses. Tetapi tidak berarti mudah bagi pemula.

Seperti pada contoh sederhana di atas, sebetulnya baris yang ingin kita ajarkan adalah:

System.out.println("Hello World");

Tapi ada banyak baris lainnya yang ikut muncul. Karena ya di Java untuk Hello World memang itu kebutuhan minimalnya. Bandingkan dengan:

Ruby

puts "Hello World"

PHP

echo("Hello World");

Perhatikan bahwa saya tidak mempermasalahkan urusan kompile dan eksekusi, karena itu memang sudah konsep dasar Java bahwa source code harus dikompilasi.

Jadi, kesimpulannya adalah untuk mengajarkan Hello World, kita juga harus mengajarkan tentang:

  1. Apa itu class

  2. Akses level untuk class dan method, kalo gak pake public gimana? Gak bisa diakses di luar package. Jadi, harus ajarkan juga tentang ….

  3. Apa itu package

  4. Konsep method dan return value

  5. Array

  6. Perbedaan class method (static) dan instance method

Waaa … :( Berdasarkan keterangan di atas, saran saya untuk yang belum pernah coding sebelumnya adalah belajar dengan bahasa lain dulu. Misalnya PHP yang sintaksnya agak mirip. Nanti kalo sudah tau apa itu array, function, class, object, baru belajar Java.

Ini akan membuat hidup jadi lebih mudah untuk yang belajar, juga untuk yang mengajari.


Katak dalam tempurung

Rupanya standar pengetahuan bagi programmer ala saya banyak mendapat protes di sana sini. Tidak hanya itu sebetulnya. Beberapa waktu yang lalu saya sempat posting di milis tentang standar pengetahuan seorang dosen pemrograman juga ala saya, yang pada intinya adalah:

  • keep on learning, termasuk cara pakai version control
  • bikin aplikasi yang berkualitas production (bukan cuma demo)
  • sering-sering live coding Rupanya banyak orang yang walaupun setuju, menganggap standar saya terlalu tinggi dengan alasan antara lain:

  • standar tersebut tidak berlaku bagi freshman, tapi hanya untuk experienced
  • dosen tidak perlu bisa teknis praktis (seperti menggunakan version control), cukup asisten lab saja. Dosen mah, teoritis saja.
  • bukan bagian saya (kan sudah ada DBA, Network Admin, Architect, dsb)
  • menurut spesifikasi Sun, tidak perlu bisa semua itu Menurut saya, berbagai pendapat di atas ada benarnya. Tetapi mari kita tinggalkan sejenak soal benar-salahnya pendapat dan melihat dari perspektif lain.

Harus diakui, kita sangat jauh ketinggalan dalam hal teknologi informasi. Di luar negeri sana, dosen tidak hanya sekedar mengoceh di dalam kelas menjelaskan Teori Automata. Dia membuat implementasi parser, menyumbangkan parser tersebut menjadi open source, dan tidak lupa memasang foto konyol di website parser tersebut.

Di tempat lain, ada yang membuat version control yang mampu mengelola file binary (bukan hanya teks) dengan efisien. Tidak dapat diragukan, orang tersebut mengerti lebih dari satu algoritma diff untuk file binary, membandingkan semuanya, dan memilih yang paling baik. Dan ini dilakukan di waktu luang, sambil bermain musik.

Bagaimana dengan di Indonesia? Hmm .. pakai version control saja tidak bisa, apalagi bikin version control.

Dengan kenyataan seperti itu, sepertinya kita santai sekali kalau menganggap standar saya terlalu tinggi.

Seharusnya standar itu diset empat kali lebih tinggi lagi. Kenapa?

Begini.. misalnya standar kita sama dengan standar mereka, maka selisih pengetahuan kita dengan orang-orang bule tersebut akan tetap. Jadi kalo sekarang mereka 10 tahun lebih maju, pada 5 tahun yang akan datang kita akan tetap 10 tahun ketinggalan.
Iya dong, mereka kan juga berkembang.

Nah, kalo standar kita lebih tinggi daripada mereka, maka setiap tahun kita akan bisa menyusul sedikit demi sedikit, sehingga pada suatu saat nanti (hopefully) kita akan sama cerdas dan maju dengan mereka.

Jadi, sampai kapan kita mau terus berpuas diri? Seperti katak dalam tempurung. Kita kira kepala sudah menyundul langit, padahal yang dikira langit cuma batok kelapa. Sampai suatu saat ada orang yang menendang batok tersebut dan si katak (hopefully bukan kita) sadar kalo tempurung != langit.

Beruntung kalo cuma ditendang orang sehingga si katak sadar. Kalo digilas metromini? Gak sempat lihat langit deh. Sampai mati tetap beranggapan tempurung == langit.

Ok, mau sampai kapan santai terus? Mudah-mudahan tidak sampai semua emas, minyak, hutan Indonesia dihabiskan bule sehingga kita tinggal punya utang.

Mari belajar, berkarya, dan berkontribusi buat komunitas.


Menghadang spam secara sederhana

Rupanya tidak di Indonesia saja orang yang kurang kerjaan. Mentang-mentang sekarang gampang sekali mendapatkan akses internet, segerombolan orang kurang kerjaan seenaknya menginstal aplikasi spammer.

Spam di email saya kebanyakan (sekitar 80%) isinya adalah iklan obat dan software. Sedangkan di blog, hampir semuanya adalah judi online.

Lama-lama bosan juga memoderasi komentar orang-orang.
Jadi begitu ada waktu luang, saya segera eksplorasi mencari plugin anti-spam untuk Wordpress. Hasilnya, ada beberapa alternatif, misalnya Akismet, yang sudah terinstal secara default pada WP 2.0.

Sayangnya aktifasi Akismet membutuhkan API key yang didapat dengan cara daftar di wordpress.com. Karena saya malas daftar, akhirnya browsing ke dokumentasi Wordpress.

Di sana menemukan plugin sederhana tapi ampuh. Idenya seperti CAPTCHA, tapi lebih sederhana. Tidak menggunakan image, melainkan cukup dengan operasi tambah-tambahan sederhana.

Yah cukuplah untuk menangkis spambot. Silahkan coba pluginnya dengan cara memberikan komentar.


Interview Java

Hasil interview online saya dengan Sony AK sudah dipublish.

Silahkan baca sendiri.


Weekend Crash Session

Seperti kebanyakan perusahaan IT lainnya, client saya sekarang juga sering mengalami kejar tayang. Berbagai alasan menjadi penyebabnya. Tapi kita tidak mencari kambing hitam di sini. Yang paling penting adalah Lesson Learned dan _Best Practices_nya. Karena toh yang namanya krisis memang tidak direncanakan dan bisa terjadi kapan saja.

Jadi, dari beberapa kali ngantor di hari libur dan beberapa kali terpaksa melewatkan bioskop TransTV jam 21 di rumah, berikut adalah pelajaran yang dapat diambil. 1. Jangan buru-buru mulai bekerja. Lho, katanya kejar tayang, lalu tunggu apa lagi? Mari segera mulai. Salah besar. Hal pertama yang harus dilakukan adalah membuat daftar tugas yang harus diselesaikan. Setelah itu, susun prioritas dan tentukan PIC (person in charge, alias oknum yang harus melakukan). Aplikasi spreadsheet adalah tools yang paling tepat untuk ini. Kita bisa sort, filter, dan melakukan perhitungan dengan cepat.

Khalisa In Action

2. Tentukan load masing-masing orang Ada kalanya, tugas tertentu tergantung pada orang tertentu. Temukan ketergantungan ini, dan hitung dengan teliti. Bisa jadi pembagian tugasnya sudah rata, tapi ternyata pembagian ketergantungan tidak dilakukan, sehingga akan terjadi bottleneck pada orang tertentu.

3. Cegah bottleneck dengan delegasi (a.k.a load balancing) Orang yang punya tugas atau dependensi paling tinggi biasanya disebabkan karena dia memiliki informasi yang dibutuhkan sehingga sulit untuk digantikan. Jangan khawatir, suruh orang tersebut menulis langkah-langkah penyelesaian setiap tugas sedetil mungkin, kemudian delegasikan tugas tersebut. Biasanya menulis instruksi lebih cepat daripada menyelesaikan sendiri tugas tersebut. Dengan demikian, beban oknum bottleneck bisa berkurang. 4. Buat checkpoint Tentukan jam-jam tertentu di mana setiap orang akan diperiksa progressnya. Ini akan memungkinkan deteksi masalah seawal mungkin. Sehingga masalah besar akan cepat diketahui dan diantisipasi. Keuntungan kedua, semua orang akan merasa bahwa pekerjaannya akan dikumpulkan, dan bekerja dengan lebih serius.

Berikutnya, tips terakhir, yang paling ditunggu-tunggu. 5. Sediakan makanan Perusahaan yang mengharuskan karyawannya kerja lembur biasanya tidak keberatan untuk menyediakan makanan. Sekilas tampak merugikan perusahaan secara finansial. Tapi kalau dipikir lebih jauh, dengan memastikan urusan perut beres, ada keuntungan ganda yang diperoleh:

  • Semua orang bekerja dengan tenang, tanpa memikirkan mau makan apa/dimana

  • Orang-orang tidak perlu meninggalkan tempat untuk makan (minimal akan menghabiskan waktu 2 jam sekali makan, untuk jalan, ngobrol, merokok, mematikan rokok dan menyadari bahwa orang lain masih merokok kemudian menyalakan sebatang lagi, dan seterusnya)

Semoga lembur Anda menyenangkan

Khalisa Gigit Jari