Bagaimana Seorang Programmer Menulis Buku Laravel

Saya seorang programmer. Selalu programmer. Untuk mencari nafkah saya mengerjakan project dari beberapa klien. Tentunya dalam mengerjakan project saya beberapa hal baru, mencatatnya dan menggunakan di beberapa project selanjutnya.

Itulah yang saya lakukan selama ini. Dan nampaknya tidak akan banyak berubah hingga beberapa tahun kedepan.

Menulis buku, merupakan hal yang cukup menantang bagi saya yang tidak pernah mengenyam kuliah/kursus kepenulisan. Namun, apa yang saya lakukan ketika menulis buku Seminggu Belajar Laravel mengubah cara pandang saya tentang menulis.

Tulisan ini akan mencoba merangkum bagaimana seorang programmer, yang sehari-hari terbiasa menulis kode untuk mesin, belajar menulis teks untuk manusia.

Bagi yang belum tahu, saya menulis buku tentang framework Laravel berjudul Seminggu Belajar Laravel. Dari sisi pembaca ternyata cukup banyak peminatnya, hingga saat tulisan ini diketik (Januari 2015) telah terjual sebanyak 270-an eksemplar buku sejak diterbitkan (Mei 2014). Jumlah yang cukup banyak, menurut saya, untuk seorang penulis baru dan sebuah buku digital (eBook).

Menariknya, dari berbagai review pembaca, nampaknya teknik menulis yang saya gunakan cukup tepat.

Beberapa review buku di Facebook

Mengingat saya sendiri yang seorang programmer, saya paham bagaimana rasanya merasakan momen dari tidak tahu menjadi tahu, dari tidak paham menjadi paham, dari bingung melihat syntax jadi paham cara membuat dan menjalankannya (walaupun terkadang masih masih bingung ketika syntax nya udah jalan :D).

Dari pengalaman saya sebagai programmer pemula hingga sekarang, saya sedikit banyak jadi paham bagaimana bentuk tulisan yang tepat dan nyaman dibaca untuk tiap level programmer.

Sebelum mulai membaca, semua yang tertulis disini adalah opini saya. Berdasarkan pengalaman dan terbatasnya pengetahuan. Jika ada yang kurang tepat, silahkan dikoreksi.

Pemilihan kosakata

Saya beruntung punya istri yang kuliah jurusan Pendidikan Bahasa Indonesia (ini juga salah satu rahasia saya menulis). Dengan istri tercinta saya (cie..), saya bisa berdiskusi mengenai pemilihan diksi (kata) yang tepat untuk menulis. Dari ilmunya, saya bisa paham tentang taxonomi bloom.

Bagi yang baru denger, dengan taxonomi bloom kita bisa menentukan jenis materi yang tepat berdasarkan kemampuan pembaca/audiens. Silahkan pelajari lebih lengkap di PDF ini. Dalam menulis, saya secara sadar ataupun tidak menggunakan taxonomi ini ketika menulis.

Teknik lain yang digunakan adalah mengubah kalimat perintah menjadi kalimat ajakan. Tips ini saya dapatkan dari mas Surahman Al-Ma’arij. Caranya dengan kalimat dengan kata “Anda” menjadi “Kita”. Misalnya, jika perintahnya untuk membuat file baru, saya tidak akan menggunakan:

“Silahkan Anda buat file model.php di folder model”

Tapi, saya akan menuliskannya:

“Mari kita buat file model.php di folder model”

Level Pembaca

Dalam menulis, saya juga mengelompokkan level pembaca atau lebih tepatnya level programmer yang membaca. Sebenarnya pengelompokan ini juga berasal dari Dreyfus Model yang saya pelajari dari buku Pragmatic Programmer. Dibawah ini saya jelaskan beberapa levelnya berikut contoh tulisan yang cocok untuk programmer tipe tersebut.

Novice Programmer

Programmer jenis ini adalah tipe programmer yang sangat pemula. Sebenarnya ketika kita mempelajari sebuah bahasa pemrograman yang baru, kita selalu melalui tahap ini. Ciri dari programmer jenis ini adalah dia membutuhkan penjelasan mendetail (bahkan sangat mendetail) mengenai sebuah konsep dan tidak ingin terikat dengan konteks.

Contohnya, berikut cara menjelasakan cara membuat virtual host bagi pembaca jenis ini:

  • Buka notepad
  • Dari notepad, pilih File > Open
  • Buka directory C:\windows\system32\etc\drivers\
  • Pilih file hosts
  • Tambahkan nama virtual host dengan ip 127.0.0.1 misalnya
    127.0.0.1 situsgue.com
  • Dan seterusnya….

Pernah ngalamin ngga? ☺

Novice programmer juga tidak ingin terikat dengan konteks. Contohnya dia bisa membuat halaman html berdasarkan petunjuk yang telah ada, tetapi jika halaman html ini harus dirubah (misal membuat tampilannya berubah) tapi tidak terdapat di manual, maka ia akan kebingungan.

Karena keterbatasan novice programmer inilah saya menyediakan konsultasi Laravel gratis 1 bulan untuk setiap pembaca buku saya. Menariknya, hitungan 1 bulan tidak dihitung dari tanggal beli, tapi dari tanggal pertanyaan pertama.

Biasanya seorang Novice Programmer tidak tertarik untuk belajar lebih dalam, ia hanya ingin menyelesaikan problem yang ia hadapi dan segera mendapatkan solusinya. Pokoknya masalahnya selesai, bagaimanapun caranya (Bahkan kalau bisa, download source code yang udah jadi, yang penting jalan). Kira-kira seperti itu yang ada di pikirannya.

Advance Beginner Programmer

Programmer jenis ini agak lebih mahir daripada tipe novice programmer. Ciri yang paling mencolok dari advance programmer adalah paham bagaimana sebuah tools (bahasa pemrograman, framework, API) berjalan. Namun, ia tidak memahami big picture dari konsepnya.

Dia juga termasuk programmer yang menyukai solusi cepat dan singkat. Pernah ngga temen-temen ngalamin ketika mempelajarai suatu API (Application Programming Interface) dan dengan terburu-buru mencari fungsi yang diinginkan tanpa memahami secara keseluruhan bagaiaman API tersebut bekerja? Pernah kan? Kalau saya sih pernah ngalamin.. ☺

Kelebihan dari Advance Beginner Programmer dibanding Novice Programmer adalah ia mampu menerapkan pemahaman yang ia miliki ke dalam konteks yang sedang dikerjakan. Misalnya, ia bisa menyesuaikan tutorial pembuatan aplikasi sistem informasi perpustakaan menggunakan Laravel (ehm, itu sample di buku saya) dan memodifikasi sintaxnya agar sesuai dengan kebutuhannya.

Salah satu kelemahan yang mencolok dari Advance Beginner Programmer adalah ia tidak mau atau belum siap mempelajari keseluruhan dari suatu konsep. Misalnya dalam mempelajari sebuah framework, ia hanya mau mempelajari fungsi-fungsi di dalam framework tersebut tanpa mau mempelajari bagaiman framework tersebut bisa berjalan.

Sehingga, sebisa mungkin materi yang dijelaskan merupakan hal yang praktikal. Ia akan sangat senang jika dalam materi yang dia baca ada yang bisa di praktekan dan dimodifikasi.

Competent Programmer

Programmer jenis ini memiliki ciri utama dapat melakukan troubleshooting. Maksudnya, ia dapat menyelesaikan masalah yang belum pernah ia temui sebelumnya menggunakan pengalaman yang ia miliki.

Competent Programmer juga mampu menerima saran dari seorang Expert Programmer dengan tepat dan mampu mengaplikasinya sesuai dengan saran dari Expert Programmer tersebut.

Hasil pekerjaan seorang Competent Programmer biasanya tergantung dari jumlah pekerjaan dan pengalaman ia mengerjakan project. Semakin banyak masalah yang telah ia pecahkan, makin cepat pula kerjanya.

Kelebihan lain dari Competent Programmer adalah ia mampu menjelaskan kepada seorang Novice Programmer. Dimana bila seorang Expert langsung menjelaskan ke Novice, maka si Novice kebingungan sakin tingginya ilmu si Expert ini.

Untuk mereka ini materi yang tepat adalah dengan menyuguhkan masalah terlebih dahulu. Misalnya, dengan menjelaskan project apa yang akan dikerjakan, masalah apa yang coba di selesaikan, dsb.

Proficient Programmer

Programmer jenis ini membutuhkan Big Picture. Mereka inilah tipe orang yang tidak suka dengan tutorial yang bertele-tele. Kalau memahami sebuah framework, mereka tidak cukup dengan melihat fungsinya saja, tapi harus memahami bagaimana framework tersebut dapat bekerja.

Kelebihan lain dari Proficient Programmer adalah mereka mampu belajar tanpa mempraktekan secara langsung. Contohnya, ia dapat memahami bagaimana cara kerja suatu framework hanya dengan membaca bagaimana orang lain menyelesaikan project dengan menggunakan framework tersebut.

Temen-temen pernah nanya di forum ngga? Ngeh ngga, kalau ada orang yang jawab, biasanya dia nanya kita sudah melakukan apa aja, codingnya gimana, output yang diharapkan gimana, dan tiba-tiba dia tahu jawabannya (padahal dia ngga nyoba sintax kita di laptopnya) ? Nah, dia itu seorang Proficient Programmer.

Ciri lain dari seorang Proficient Programmer adalah ketika dia melakukan test sebuah program. Ketika seorang Novice bertanya kenapa saya melakukan tes ini? apa saja tes yang harus dilakukan? Fungsi mana saja yang harus di tes? dan sebagainya. Sebaliknya, seorang Proficient Programmer mengetahui dengan tepat bagian mana saja yang mungkin akan break jika dites dan melakuan tes pada bagian tersebut.

Cukup sulit untuk memberikan materi untuk Proficient Programmer, karena mereka sebenarnya sudah banyak ilmunya. Tapi, biasanya mereka sangat terbuka dengan wawasan baru. Makanya, jika topik pemrograman berupa konsep sangat disenangi oleh mereka (misalnya tentang Test Driven Development, Domain Driven Design, dll). Dia juga suka mempelajari software arsitektur dan implementasinya. Bahkan lebih menyukainya daripada coding itu sendiri.

Expert Programmer

Oke, sampai di bagian akhir ni, Expert Programmer. Siapa mereka?

Mereka ini orang –orang yang senantiasa membagikan ilmunya kepada kita. Merekalah orang-orang yang menulis buku, menulis artikel, membuat bahasa pemrograman, membuat framework, membuat IDE, dan membuat orang lain paham tentang konsep baru.

Mereka ini para programmer yang mampu memahami konteks dari suatu masalah dan mampu memberikan solusi yang tepat, sesuai dengan konteksnya.

Yang menarik dari seorang Expert adalah ia mampu memberikan solusi dari suatu masalah hanya berdasarkan intuisi. Contohnya, dari ratusan baris kode program dan puluhan fungsi didalamnya, kemudian ketika dijalankan terdapat error pada program, Ia dapat mengatakan, “Kayaknya di fungsi X ada yang error deh.”

Ya, intinya seorang Expert ini mampu mengetahui detail mana yang penting dan tidak penting. Apa yang ia sampaikan terkadang tak mampu ia jelaskan kenapa. Ia hanya berkata, “Pengalaman..”.

Hampir mirip dengan Proficient Programmer, programmer level ini juga menyukai tulisan berupa konsep. Bahkan, mereka berani mengkritisi konsep tersebut.

Kesimpulan

Sebagaimana dijelaskan di awal, tulisan ini adalah hasil pengalaman saya. Saya tidak pernah melakukan kuisioner terhadap berbagai jenis programmer diatas.

Buku pertama saya (Seminggu Belajar Laravel) saya tulis dengan mindset pembaca berada di level Advance hingga Competent programmer. Itulah sebabnya saya mewajibkan paham dasar PHP dan MySQL sebelum mulai membacanya.

Meskipun tidak terlalu detail, di buku ini saya tetap menjelaskan tiap tahapan dalam menjelaskan konsep Laravel. Tapi, saya tidak menjelaskan berbagai konsep Laravel dengan detail.

Karena, untuk level ini, yang saya targetkan adalah pembaca mampu merasakan membuat aplikasi Laravel.

Buku kedua saya (Menyelami Framework Laravel) ditulis dengan mindset pembaca adalah Proficient — Expert programmer. Meskipun saya akan tetap memberikan contoh koding, tapi konsep-konsep Laravel lah yang akan jelaskan lebih lanjut.

Tujuan dari buku kedua adalah pembaca mampu memahami konsep alur aplikasi di Laravel dari dasarnya, hingga pembaca mampu menentukan solusi yang lebih tepat untuk menyelesaikan masalahnya dari banyaknya fitur Laravel.


Semoga tulisan ini menginspirasi programmer lain untuk menulis buku. Saya yakin, di Indonesia sangat banyak programmer yang sudah mahir dan kompeten untuk menulis buku pemrograman. Mari kita majukan dunia IT Indonesia! ☺