Cara bertanya tentang programming

Gan, ini error kenapa ya?

Ini bukan guidelines ataupun best practices, hanya sebagai self reminder untuk diriku yang noob ini.

Programming is hard, as we know it. Ada beberapa level kesulitan dalam membuat programming, khususnya terjadinya error di kode yang kita tulis. Dari se-simple karena whitespace atau kurang titik koma, sampai se-kompleks dalam proses abstraksi.

Setiap developer pun memiliki pengetahuan dan pengalaman yang berbeda. Beruntung nya orang-orang Indonesia banyak yang ramah, masalah-masalah sepele pun bisa diselesaikan dengan sabar. Berdasarkan pengalaman saya; dari menjawab pertanyaan-pertanyaan terkait programming, berikut hal yang (akan) selalu saya ingat sebelum mengajukan pertanyaan.

Berfikir sebelum berbicara, yakan?

Read the sweety error

Pesan Error merupakan sesuatu yang sudah jelas mengapa program anda tidak berjalan dengan baik. Entah error di compile-time, ataupun runtime. Skill paling dasar dari menjadi developer yang baik adalah setidaknya mengerti bahasa Inggris. Meskipun kode yang kita tulis menggunakan bahasa C++, JavaScript, Java, dll.. Pesan error kebanyakan ditampilkan menggunakan bahasa inggris, bukan bahasa sunda.

Lihat error diatas, sangat sangat sangat jelas error nya apa. Sampe JavaScript jadi bahasa native Indonesia pun, kalau a bukan function, yaa enggak bakal bisa bertindak sebagai function, sayang.

Search the lovely error

Okay, mungkin pesan error yang tampil kurang mudah dimengerti. Entah karena kesalahan programmer nya, atau memang karena kita baru melihat pesan berikut. Contoh:

Yang kita tau, untuk mengeksekusi sebuah function di JavaScript adalah seperti diatas. Lalu kenapa error? Kenapa enggak muncul error Notification is not a function, jika memang bukan function?

Karena kita baru pertama kali menemukan error tersebut, maka gunakanlah mesin pencari favorit kalian tentang error tersebut.

Dari hasil pencarian kita, kita mendapatkan hasil seperti ini:

change X to Y

Ternyata si Notification tersebut (walau beda dari kasus gambar diatas) harus di ‘instanisasi’, bukan dipanggil sebagai ‘function’. Karena kita sudah tau penyebab error nya, tapi masih penasaran dengan Kenapa si Notification harus di instanisasi, bukan dipanggil sebagai function, kita pun searching lagi. Dan menemukan halaman ini:

Ternyata Notification adalah sebuah constructor. Dan seperti yang kita tau, constructor merupakan sebuah ‘subrutin’ khusus yang dipanggil untuk membuat objek. Dan untuk membuat objek di JavaScript, kita menggunakan kata kunci new .

Problem Solved tanpa harus bertanya langsung!

Re-read the code

Jadi, kita sudah membaca error nya, sudah mencari nya juga. Tapi kita masih bingung nih sama error nya ini error apaan dah. Contoh:

undefined is not a function is totally evil

Anggap kita mendapatkan pesan error ‘undefined is not a function’, yaa mana gue tau undefined itu apaan dah. Nah, ketika kita lihat stack trace nya, ternyata kode kita baik-baik saja. Lalu kita baca pelan-pelan baris kode yang error tersebut, sambil ngopi biar enggak tegang. Dan ternyata, ketemu. Misal, karena masalah di scope hosting (kita menggunakan arrow function, dan salah nge-bind this ).

Lalu kita coba lah perubahan dari kode tersebut, dan error pun hilang dengan ajaib tanpa perlu bertanya. Apakah ini hidayah dari tuhan?

Read The Friendly Manual

Kita sudah membaca pesan error, sudah mencari nya juga di mesin pencari. Tapi tetap kita tidak menemukan masalah yang kita alami. Cara yang paling bijak adalah membaca manual nya. Alias Dokumentasi.

Apakah API yang kita gunakan sudah deprecated? Apakah API yang kita pakai, tidak bisa berjalan di platform yang kita gunakan? DLL. Jika masih tidak menemukan nya…

Please do ask, you are welcome

Programmer suka dengan masalah, terlebih bila masalah tersebut langka atau kompleks. Bisa menjadi bahan diskusi, research, atau menjadi request for change dan feature request.

Ketika kita sudah benar-benar stuck, sudah membaca error, mencarinya, melihat ulang kode kita, dan sudah membaca dokumentasi yang ada, tapi masih tidak ketemu juga solusi nya, silahkan bertanya.

Ketika bertanya, berarti kita yang membutuhkan mereka. Kita butuh jawaban dari pertanyaan yang kita ajukan. Maka, kita harus memperlakukan mereka sebijak mungkin.

Kira-kira apa saja?

Jelaskan secara detail masalah yang kita punya

Kalo cuma ngasih skrinsut error, gue ulang, skrinsut error! Ini yang paling bikin males ngebantu. Apalagi cuma dikit banget skrinsut nya. Terus nanya nya: “Gan ini kenapa ya?”. Lah lu yang punya masalah aja gak tau, apalagi gue yang tiba-tiba dikasih skrinsut gituan. Programmer bukan dukun, gan.

Coba kalau misalnya seperti ini:

Gan ini saya baru pertama kali implementasi serviceWorker, saya sudah membuat function untuk caching offline. Di hp saya bisa, tapi di hp teman saya kok enggak bisa, ya?

Terus kasih screenshot kode nya, dan screenshot error nya. Paling jawaban pertama biasanya: Handphone temen mas nya apa?

Terus dijawab iPhone 4, dan seperti yang kita tau iOS < 11.4 belum mendukung serviceWorker, kita bisa ngasih tau dia kalau memang serviceWorker enggak didukung di versi iOS teman nya, meskipun hp mereka sama-sama iPhone.

Misal kalau di kasus lain, iPhone X. iOS 12 sudah mendukung serviceWorker, tapi tetap tidak bisa berjalan juga. Ini bisa jadi bahan diskusi & research, misal, setelah berbagai diskusi dan riset: mungkin serviceWorker di hp tersebut berada di Experimental Features, bakal bisa dijalankan, bila user mengaktifkan serviceWorker dari Experimental Features.

Who knows, kan?

Sometimes snippet is good

Tapi kita semua hanya manusia biasa yang memiliki keterbatasan. Snippet sudah dibagikan, untuk masalah tidak terlalu susah, mungkin ini bisa dengan cepat teratasi.

Bagaimana bila yang masalah nya lumayan kompleks? Atau, kode yang dia miliki, ternyata bergantung pada library lain? Asumsi-asumsi Mungkin error nya dari library, mungkin salah penggunaan API dari library nya, dll bisa berlaku, ketika kita sudah mencoba nya.

Untuk masalah di dunia web, tentu ini bukan masalah terlalu rumit. Apalagi frontend, kita bisa dengan mudah mencoba nya, copas dari snippet, paste, nikmati. Bagaimana bila ternyata ini masalah kompleks? Atau.. Let’s say, di dunia iOS. Kita harus compile kode Objective-C sendiri? Di backend pun sama, kita harus eksekusi ini di mesin kita sendiri, kah?

Ada layanan-layanan pihak ketiga yang bagus banget, dan sangat membantu. Untuk frontend, favorit saya adalah CodeSandbox. CodeSandbox seperti IDE, namun berada di cloud. Kita bisa mengatur dependensi, build step, dll sehingga developer lain bisa tinggal mengeksekusi nya saja. Lalu dilanjutkan dengan menganalisa kode nya.

Untuk yang lebih kompleks, bisa menggunakan repl.it dan Glitch. Hampir sama seperti CodeSandbox, namun tidak sebatas “hanya frontend”.

Jika memang kode nya terlalu kompleks, jika berkenan, bisa membagikan nya di layanan berbagi kode seperti Github. Biarkan kita meng-clone, dan mencoba nya sendiri di mesin lokal kita. Jika tidak ingin, mungkin anda bisa membayar code reviewer atau support, dibanding bergantung kepada komunitas.

Share runnable/executable binary

Ini sedikit berbahaya, takutnya membagikan program yang sudah disisipi virus, atau url yang terdapat kode jahat (seperti infinity loop contohnya). Kembali kepada moral kita masing-masing.

Dengan membagikan ‘live’ program tersebut, kita bisa langsung ber-eksperimen sebelum kita membaca kode nya secara langsung. Misal seperti force close di sebuah aplikasi Android. Berdasarkan masalah yang dijelaskan, langkah-langkahnya adalah ketika user mengganti informasi profile. Lalu kita coba dengan akun demo dia, ada yang error ada yang tidak. Jawaban sementara yang bisa diambil adalah: Apakah management session nya sudah benar? Apakah backend me-response request kita? Ini tadi gue ganti profile, terus force close. Apakah nge-limit gambar yang bisa di-unggah tidak boleh lebih dari 5MB? Dan lain-lain.


That’s it, guys. Jika ada pertanyaan:

Hmm entar grup jadi sepi, dong?

Enggak, my friend. Grup biasanya masih ramai dengan OOT/share link menarik.

Entar newbie-newbie pada malu untuk bertanya, dong?

Gini gan, hal yang paling penting untuk newbie seperti saya ini adalah pembentukan mindset. Setiap orang memiliki pandangan & pemikiran masing-masing, dan pastinya berbeda-beda.

Mungkin kalian sudah tau langkah-langkah diatas, tapi mungkin ada yang belum tau. Masa nyelesain masalah gini aja enggak bisa? Jawaban tersebut bisa muncul, karena memang pertanyaan yang diajukan terlalu gampang. Atau, pertanyaan nya sering diajukan.

Tapi bagaimana bila mereka hanya malas membaca pesan error, mencari error tersebut, dll dan ingin nya ‘jawaban instant’. Bagaimana bila grup berdiskusi ringan tapi serius tentang masalah yang memang ‘ber-kelas’, contoh:

Just Kidding :))

Tapi pernyataan diatas menarik juga sih, dan mungkin bisa menjadi bahan diskusi.

Terus, harus melakukan apa yang aa fariz tulis, nih?

Enggak juga. Benar menurut saya, belum tentu benar juga untuk anda. Jangan langsung percaya oleh pemikiran seseorang, terlebih dari seseorang di internet.

If you think this is good, yaa why not?

Kalian tau, mengapa komunitas di StackOverflow terkesan sombong, non-beginner friendly, dan pada pelit?

Sekian, selamat berakhir pekan.