Crafting Interpreters: 15 Ayda Tamamlanan 640 Sayfalık Kitap
(journal.stuffwithstuff.com)15 ayda 640 sayfalık bir kitabın tamamlanması
- 29 Temmuz 2021'de programlama dilleri hakkında "Crafting Interpreters" kitabı tamamlandı. 15 ay önce tamamlandığı söylenmişti ama artık gerçekten tamamlanmış oldu. Basılı, e-kitap ve PDF sürümlerinin hepsi hazır ve satın alınabiliyor.
- 640 sayfa, 8 inç genişlik ve 10 inç yükseklikle kitap beklenenden çok daha büyük oldu.
Yeni bir build sistemi geliştirmek
- Yaklaşık bir aylık aradan sonra yeniden çalışmaya başlandı. Okurların bildirdiği yazım hataları ve yanlışlar düzeltildi.
- Özel bir neden olmadan kitabın build sistemi Dart ile baştan yazıldı. Python ile yapılmış eski sürüm çok yavaştı ve bakımı zordu.
- Yeni build sistemi istenildiği gibi tam olarak HTML ve syntax-highlight edilmiş kod üretiyor ve eski Python sürümüne göre 10 kat daha hızlı.
- Markdown işleme üzerinde daha iyi kontrol sağlandı, ancak o sırada bu daha çok eğlence için yapılan bir işti.
Kitap tasarımı
- Büyük grafik tasarım projeleri, web veya oyun programlamasında olduğu gibi iki aşamada ilerler. Önce bir "framework" ya da "engine" kurulur, sonra içerik bu yapının içine yerleştirilir.
- Adobe InDesign'da stiller ve master'lar ayarlanır. Master'lar sayfanın kenar boşluklarını ve grid çizgilerini tanımlar; stiller ise CSS gibi belirli metin veya nesnelere yazı tipi, stil ve renk atar.
- Kitap tasarımı, kelimenin tam anlamıyla iki boyutlu bir alan çalışmasıdır. Hem yatay hem dikey yönde kolay olmayan bir işe dönüşür.
Genişlik ve yükseklik belirleme
- Ana metin sütunu, en uzun kod satırını barındıracak kadar geniş olmalı. Aside'ların belirli cümlelerin yanına yerleştirilmesi gerektiği için ek alana da ihtiyaç var.
- Sonunda 8 inç genişliğinde sayfa ölçüleri kullanılmasına karar verildi. 10 inç yüksekliğinin seçilme nedeni, POD (Publish on Demand) sağlayıcısının desteklediği boyut kısıtlarıydı.
- Genel olarak büyük ama fazla büyük hissettirmeyen bir kitap olması umuldu. Bir sonraki kitap yazılırsa daha küçük bir kitap yazılacak.
XML işleme
- InDesign XML import'u destekliyor. Belirli etiketlere otomatik olarak stil uygulanabiliyor.
- Markdown işleme tamamen kontrol edilebildiği için InDesign için optimize edilmiş XML doğrudan üretilebildi.
InDesign'da JavaScript
- Yalnızca XML import yeterli değil. Aside'lar ve kod konum işaretleri ana metinden çıkarılıp yana yerleştirilmeli.
- InDesign JavaScript ile script edilebiliyor. Ancak debugger veya stack trace gibi araçlar yok; sadece alert() var.
- Bir şekilde Aside'ları ve konum etiketlerini çıkarıp ayrı metin kutularına dönüştüren script yazıldı, ancak tam konumlandırma yapılamadı. Bu durum InDesign'ın anchor özelliğiyle kısmen çözüldü.
Editörlük çalışması
- Tüm kitap yeniden okunup düzenlendi. Aynı kelime oyunlarının çok sık tekrarlandığı fark edildi. Bu 5 ay sürdü.
- Profesyonel bir redaktör tutuldu. Word kullanan editörlük dünyasının aksine, ben plain text ve Git kullanmakta ısrar ettim. Editör buna iyi uyum sağladı.
Dizgi çalışması
- Dizgi süreci şu şekildeydi:
- Bir sonraki bölüm için yeni bir InDesign dosyası oluşturma
- XML olarak export etme
- XML'i InDesign'a import etme
- JS script'i ile Aside'ları ve konum etiketlerini çıkarma
- Sidebar öğelerine anchor atama
- Sayfa sonundaki boşlukları ayarlama
- 1 ila 5. adımlar kolaydı, ancak 6. adım en zoru oldu.
- Görseller kesilmemeli, Aside'lar sonraki sayfaya taşmamalı ve mümkünse kod da sayfada bölünmemeli. İçerik olmadan yalnızca başlıkla biten sayfalardan kaçınmak ve widow/orphan durumlarını önlemek de önemliydi.
- Bu kuralların tümünü tam 630 sayfaya uygulamak kolay olmadı.
İllüstrasyonlar
- İllüstrasyonlar nispeten kolaydı. Siyah beyaz, kalemle çizildikleri için baskıya uygundular.
- Ama onları sayfaya yerleştirmek ayrı bir problemdi. Kitapta metin, illüstrasyonlara doğrudan atıf yapacak şekilde yazıldığı için illüstrasyonların söz edildikleri yere yakın olması gerekiyordu. Bu yüzden 630 sayfa boyunca illüstrasyonlar, kod ve metin uygun biçimde yerleşsin diye elle ayarlama yapmak gerekti.
Ön ve arka kısım çalışmaları
- Profesyonel indeks hazırlayanların da olduğu ilk kez öğrenildi. İndeks iki hafta boyunca bizzat hazırlandı.
- Ön kısma başlık, telif hakkı, ithaf ve teşekkür yazısı eklendi; ardından InDesign'ın içindekiler tablosunu otomatik oluşturması sağlandı. Böylece nihayet kitabın iç kısmı tamamlandı.
Kapak tasarımı
- Kitap kapağı önemli. Bu kitapta kalem çizimi tarzındaki illüstrasyonlar ayırt edici olduğu için bundan yararlanılmasına karar verildi.
- Tırmanış metaforu olarak kullanılan dağ çizimi daha büyük ve daha detaylı şekilde yeniden çizildi. Başlık da elde yazılarak yeniden oluşturuldu.
- 1950'lerin izci kılavuzlarını andıran renkler kullanıldı.
Baskı provasının gözden geçirilmesi
- POD ile sipariş edilen prova baskı sayesinde kitabın fiziksel boyutu ilk kez gerçekten hissedildi. Uzun süreli emeğin hacmi görülmüş oldu.
- Ama hâlâ bitmiş değildi. Dizginin birçok kısmı elle yapıldığı için hatalar olabilir; bu yüzden her şey bir kez daha okunup kontrol edilmeliydi.
- InDesign dosyaları Git'e yüklendi ama binary oldukları için değişiklikleri incelemek zordu.
- Prova baskı ile değişiklikleri karşılaştırmak için bir Dart script'i ile PDF sayfa sayfa görsellere dönüştürüldü; ardından bir Photoshop action'ı, piksel farkı olan yerlere kırmızı çerçeve çizdi.
- Programlama sayesinde yalnızca amaçlanan değişikliklerin yapıldığı tam olarak doğrulanabildiği için iç rahatlatıcı oldu.
E-kitap üretimi
- Build sistemi kullanılarak EPUB için gereken tüm XHTML ve metadata üretildi. Çeşitli okuyucularda test edilerek CSS ayarlandı.
GN⁺ görüşü
-
Altı yıla yayılan uzun bir maratonun sonunda 640 sayfalık bir kitabı tamamlamak büyük bir başarı. Yazım sürecinde Dart ile build sistemi geliştirmesi ve dizgi için InDesign script'leri yazması gibi noktalarda programlama becerilerini sonuna kadar kullanmış olması özellikle ilgi çekici.
-
Özellikle prova aşamasında değişiklik doğrulaması için PDF karşılaştırma script'i hazırlaması hayranlık uyandırıyor. Böyle fikir ve uygulama gücü olmadan bir kişinin kendi kitabını self-publishing ile çıkarması zor görünüyor.
-
Ancak hedeflenen sayfa boyutunun büyük olması nedeniyle dizgi sürecinin zorlaşması ve matbaanın koşulları yüzünden boyut seçiminde kısıtlar bulunması biraz üzücü. Bir sonraki çalışmada daha yayıncılık dostu bir boyut seçmek daha iyi olabilir.
-
Yazarın da belirttiği gibi, programlama dili üzerine yazılmış bir kitabın kapağı satışları büyük ölçüde etkilemeyebilir; ancak bu kitabın tasarım konseptinde olduğu gibi içeriğin karakterini yansıtan özgün bir kapak, tersine dikkat çeken bir avantaja dönüşebilir.
-
Tam altı yıl boyunca fırsat buldukça yazılmış olması, yazarın tutkusuna ve azmine saygı uyandırıyor. Artık geriye okurların bu kitabı ne kadar arayacağına ve nasıl geri bildirim vereceğine bakmak kalıyor. Programlama dillerini öğrenmek isteyen pek çok kişiye kesinlikle yardımcı olacak bir kitap gibi görünüyor.
1 yorum
Hacker News görüşleri
Crafting Interpreters, hem kitabı satın alma bağlantısını hem de ücretsiz çevrimiçi sürüm bağlantısını sunan bir web sayfasına sahipWriting an Interpreter in Gokitabını okuduktan sonra sıradaki interpreter kitabı olarak bunu okuyacağım; yaklaşık 200 sayfalık hacmi de bana uygun geliyor ve hoşuma gidiyor