Crafting Interpreters: Buku 640 Halaman yang Rampung dalam 15 Bulan
(journal.stuffwithstuff.com)Buku 640 Halaman Rampung dalam 15 Bulan
- Pada 29 Juli 2021, buku tentang bahasa pemrograman "Crafting Interpreters" akhirnya selesai. Sebelumnya sempat dikatakan sudah selesai 15 bulan lalu, tetapi kali ini benar-benar tuntas. Versi cetak, e-book, dan PDF semuanya sudah siap dan bisa dibeli.
- Dengan 640 halaman dan ukuran 8 inci lebar × 10 inci tinggi, buku ini menjadi jauh lebih besar dari perkiraan.
Pengembangan Sistem Build Baru
- Setelah istirahat sekitar sebulan, pekerjaan dimulai lagi. Salah ketik dan kesalahan yang dilaporkan pembaca diperbaiki.
- Tanpa alasan khusus, sistem build buku ditulis ulang dalam Dart. Versi lama yang dibuat dengan Python terlalu lambat dan sulit dirawat.
- Sistem build baru dapat menghasilkan HTML dan kode dengan syntax highlighting persis seperti yang diinginkan, serta 10 kali lebih cepat dibanding versi Python lama.
- Ini juga memungkinkan kontrol yang lebih baik atas pemrosesan Markdown, meski saat itu awalnya hanya dikerjakan untuk bersenang-senang.
Desain Buku
- Proyek desain grafis besar berjalan dalam dua tahap, mirip seperti pengembangan web atau pemrograman game. Pertama menyiapkan "framework" atau "engine", lalu memasukkan konten ke dalam strukturnya.
- Di Adobe InDesign, itu berarti menyiapkan style dan master. Master mendefinisikan margin halaman dan garis grid, sedangkan style, seperti CSS, menetapkan font, gaya, dan warna untuk teks atau objek tertentu.
- Desain buku secara harfiah adalah pekerjaan di ruang dua dimensi. Baik arah horizontal maupun vertikal sama-sama menantang.
Menentukan Lebar dan Tinggi
- Kolom teks utama harus cukup lebar untuk menampung baris kode terpanjang. Aside juga harus ditempatkan di samping kalimat tertentu, jadi diperlukan ruang tambahan.
- Pada akhirnya diputuskan untuk menggunakan metrik halaman selebar 8 inci. Tinggi 10 inci dipilih karena keterbatasan ukuran yang didukung penyedia POD (Publish on Demand).
- Secara keseluruhan ukurannya memang besar, tetapi diharapkan tidak terasa terlalu besar. Jika menulis buku lagi nanti, ukurannya akan dibuat lebih kecil.
Pemrosesan XML
- InDesign mendukung import XML. Style dapat diterapkan secara otomatis ke tag tertentu.
- Karena pemrosesan Markdown bisa dikendalikan sepenuhnya, XML yang dioptimalkan untuk InDesign dapat dihasilkan secara langsung.
JavaScript di InDesign
- Hanya dengan import XML ada batasannya. Aside dan penanda lokasi kode harus dikeluarkan dari isi utama lalu ditempatkan di samping.
- InDesign bisa di-script dengan JavaScript. Namun tidak ada debugger atau stack trace, hanya
alert(). - Pada akhirnya berhasil dibuat skrip untuk mengekstrak Aside dan tag lokasi menjadi kotak teks terpisah, tetapi penentuan posisi yang presisi belum berhasil. Fitur anchor di InDesign cukup membantu mengatasinya.
Proses Penyuntingan
- Seluruh buku dibaca ulang sekali lagi sambil disunting. Terlihat bahwa permainan kata yang sama terlalu sering diulang. Proses ini memakan waktu 5 bulan.
- Seorang editor koreksi profesional juga direkrut. Berbeda dengan dunia penyuntingan yang memakai Word, penulis tetap bersikeras menggunakan plain text dan Git. Sang editor beradaptasi dengan baik.
Proses Tata Letak
- Proses tata letaknya seperti berikut:
- Membuat file InDesign baru untuk bab berikutnya
- Export ke XML
- Import XML ke InDesign
- Mengekstrak Aside dan tag lokasi dengan skrip JS
- Menetapkan anchor pada elemen Sidebar
- Menyesuaikan ruang kosong di bagian akhir halaman
- Langkah 1–5 mudah, tetapi langkah 6 yang paling sulit.
- Gambar tidak boleh terpotong atau membuat Aside pindah ke halaman berikutnya, dan sebisa mungkin kode juga tidak terpotong antarhalaman. Halaman juga sebaiknya tidak berakhir tepat setelah header tanpa isi di bawahnya, dan menghindari widow/orphan juga penting.
- Menerapkan semua aturan ini pada 630 halaman jelas bukan hal mudah.
Ilustrasi
- Ilustrasi relatif mudah. Karena digambar dengan pena dalam hitam-putih, hasilnya cocok untuk dicetak.
- Namun menempatkannya di halaman adalah masalah lain. Tulisan dalam buku ini secara langsung merujuk ke ilustrasi, jadi ilustrasi harus berada dekat dengan lokasi pembahasannya. Karena itu, ilustrasi, kode, dan isi utama harus disesuaikan secara manual di 630 halaman.
Pengerjaan Bagian Depan/Belakang Buku
- Baru kali ini diketahui bahwa ada profesi penyusun indeks profesional. Penulis membuat indeksnya sendiri selama 2 minggu.
- Bagian depan diisi dengan judul, hak cipta, dedikasi, dan ucapan terima kasih, lalu InDesign dibiarkan membuat daftar isi secara otomatis. Sampai tahap ini, isi internal buku akhirnya selesai.
Desain Sampul
- Sampul buku itu penting. Karena buku ini punya ciri khas ilustrasi bergaya gambar pena, elemen itu diputuskan untuk dimanfaatkan.
- Gambar gunung yang dipakai sebagai metafora pendakian dibuat lebih besar dan lebih detail. Judulnya juga ditulis ulang dengan tulisan tangan.
- Warna yang digunakan memberi nuansa seperti buku panduan pramuka tahun 1950-an.
Meninjau Proof Cetak
- Saat menerima proof cetak yang dipesan lewat POD, ukuran buku akhirnya benar-benar terasa. Besarnya pekerjaan selama ini pun ikut terasa.
- Namun pekerjaan belum selesai. Karena banyak bagian tata letak dilakukan secara manual, masih mungkin ada kesalahan, sehingga semuanya harus dibaca ulang dan diperiksa sekali lagi.
- File InDesign diunggah ke Git, tetapi karena berbentuk biner, perubahan sulit ditinjau.
- Untuk membandingkan proof dan perubahan, dibuat skrip Dart yang mengubah PDF menjadi gambar per halaman, lalu action Photoshop memberi bingkai merah pada area yang memiliki perbedaan piksel.
- Dengan begitu, penulis bisa memastikan secara terprogram bahwa hanya perubahan yang memang diinginkan yang terjadi, dan itu memberi rasa tenang.
Pembuatan E-book
- Dengan memanfaatkan sistem build, seluruh XHTML dan metadata yang diperlukan untuk EPUB dihasilkan. CSS kemudian disesuaikan sambil diuji di berbagai perangkat pembaca.
Opini GN⁺
-
Menyelesaikan buku setebal 640 halaman setelah perjalanan panjang selama 6 tahun adalah pencapaian yang luar biasa. Menarik juga melihat bagaimana seluruh kemampuan pemrograman dikerahkan dalam proses penulisannya, mulai dari mengembangkan sistem build sendiri dengan Dart hingga membuat skrip untuk InDesign demi tata letak.
-
Khususnya, bagian ketika skrip pembanding PDF dibuat untuk memverifikasi perubahan pada tahap proof benar-benar mengagumkan. Rasanya memang perlu ide dan daya eksekusi seperti ini agar seseorang bisa melakukan self-publishing buku sendirian.
-
Namun, karena ukuran halaman yang dituju cukup besar, proses tata letak menjadi tidak mudah, dan adanya batasan pilihan ukuran dari pihak percetakan juga terasa disayangkan. Untuk karya berikutnya, ukuran yang lebih ramah penerbitan tampaknya akan lebih baik.
-
Seperti yang disebut penulis, untuk buku pengantar bahasa pemrograman, desain sampul mungkin tidak terlalu memengaruhi penjualan. Tetapi, seperti konsep desain buku ini, sampul yang unik dan mencerminkan karakter isi justru bisa menjadi keunggulan yang menonjol.
-
Fakta bahwa buku ini ditulis sedikit demi sedikit selama 6 tahun menunjukkan semangat dan ketekunan penulis yang patut dihormati. Kini tinggal menunggu seberapa banyak pembaca akan mencari buku ini dan umpan balik seperti apa yang akan diberikan. Buku ini tampaknya jelas akan membantu banyak orang yang ingin mempelajari bahasa pemrograman.
1 komentar
Komentar Hacker News
Crafting Interpretersmemiliki halaman web yang menyediakan tautan pembelian buku serta tautan ke versi online gratisWriting an Interpreter in Go, saya berencana membaca buku ini sebagai buku interpreter berikutnya, dan saya suka karena panjangnya juga pas, sekitar 200 halaman