4 puntos por GN⁺ 2024-04-29 | 1 comentarios | Compartir por WhatsApp

Un libro de 640 páginas terminado en 15 meses

  • El 29 de julio de 2021 se terminó el libro "Crafting Interpreters" sobre lenguajes de programación. Se había dicho que estaba terminado hacía 15 meses, pero ahora sí está realmente completo. Ya están listas las versiones impresa, e-book y PDF, y se pueden comprar.
  • Con 640 páginas y un tamaño de 8 pulgadas de ancho por 10 de alto, terminó siendo un libro mucho más grande de lo esperado.

Desarrollo de un nuevo sistema de build

  • Después de descansar alrededor de un mes, se reanudó el trabajo. Se corrigieron erratas y errores reportados por los lectores.
  • Sin una razón especial, se reescribió en Dart el sistema de build del libro. El anterior, hecho en Python, era demasiado lento y difícil de mantener.
  • El nuevo sistema de build genera exactamente el HTML y el código con resaltado de sintaxis tal como se quería, y es 10 veces más rápido que la versión anterior en Python.
  • También permitió tener un mejor control del procesamiento de Markdown, aunque en ese momento fue un trabajo hecho simplemente por diversión.

Diseño del libro

  • Un gran proyecto de diseño gráfico avanza en dos etapas, igual que la programación web o de videojuegos. Primero se configura el "framework" o el "motor", y luego se coloca el contenido dentro de esa estructura.
  • En Adobe InDesign se configuran estilos y masters. Los masters definen los márgenes y líneas de cuadrícula de la página, y los estilos asignan fuentes, estilos y colores a textos u objetos específicos, como en CSS.
  • El diseño de un libro es, literalmente, un trabajo en un espacio bidimensional. Tanto la dirección horizontal como la vertical presentan dificultades.

Decidir el ancho y la altura

  • La columna principal de texto necesita suficiente ancho para acomodar la línea de código más larga. Los aside también necesitan más espacio porque deben colocarse junto a ciertas oraciones.
  • Al final se decidió usar métricas de página de 8 pulgadas de ancho. La altura de 10 pulgadas se eligió por las restricciones de tamaño admitidas por el proveedor de POD (Publish on Demand).
  • En general es grande, pero se esperaba que no se sintiera demasiado grande. Si se escribe otro libro en el futuro, será uno más pequeño.

Procesamiento de XML

  • InDesign soporta importación de XML. Se pueden aplicar estilos automáticamente a etiquetas específicas.
  • Como se tenía control total del procesamiento de Markdown, fue posible generar directamente XML optimizado para InDesign.

JavaScript en InDesign

  • La importación de XML por sí sola tiene límites. Los aside y las marcas de ubicación de código deben extraerse del cuerpo principal y colocarse al lado.
  • InDesign permite scripting con JavaScript. Pero no hay depurador ni stack trace; solo existe alert().
  • De una manera u otra, se logró escribir un script que extraía los aside y las etiquetas de ubicación para convertirlos en cuadros de texto separados, pero no se pudo posicionarlos con precisión. La función de anclaje de InDesign resolvió esto hasta cierto punto.

Trabajo de edición

  • Se volvió a leer todo el libro para editarlo. Ahí se descubrió que se repetían muchos de los mismos juegos de palabras. Esto tomó 5 meses.
  • Se contrató a un corrector editorial profesional. A diferencia del mundo editorial, que usa Word, aquí se insistió en usar texto plano y Git. El editor se adaptó bien.

Trabajo de composición tipográfica

  • El proceso de composición fue el siguiente:
    1. Crear un nuevo archivo de InDesign para el siguiente capítulo
    2. Exportar a XML
    3. Importar el XML en InDesign
    4. Extraer los aside y las etiquetas de ubicación con un script de JS
    5. Asignar anclas a los elementos del sidebar
    6. Ajustar los espacios en blanco al final de la página
  • Los pasos 1 a 5 fueron fáciles, pero el paso 6 fue el más difícil.
  • Las ilustraciones no debían cortarse ni los aside pasar a la página siguiente, y si era posible el código tampoco debía cortarse entre páginas. También había que evitar que una página terminara sin contenido debajo del encabezado, y era importante evitar widow/orphan.
  • No fue fácil aplicar todas estas reglas en 630 páginas.

Ilustraciones

  • Las ilustraciones fueron relativamente fáciles. Como estaban dibujadas a pluma en blanco y negro, eran adecuadas para impresión.
  • Pero colocarlas en la página fue otro problema. El texto del libro estaba escrito para referirse directamente a las ilustraciones, así que estas debían estar cerca del lugar donde se mencionaban. Por eso hubo que ajustar manualmente, a lo largo de 630 páginas, la disposición de ilustraciones, código y texto principal.

Trabajo de las secciones iniciales y finales

  • Se descubrió por primera vez que existe la profesión de indexador. Aun así, el índice se hizo personalmente durante dos semanas.
  • En la parte inicial se incluyeron el título, copyright, dedicatoria y agradecimientos, y se dejó que InDesign generara automáticamente la tabla de contenido. Con eso, por fin quedó terminado el interior del libro.

Diseño de portada

  • La portada del libro es importante. Como este libro se caracteriza por ilustraciones estilo dibujo a pluma, se decidió aprovechar eso.
  • Se dibujó una imagen de montaña, usada como metáfora de escalada, más grande y con más detalle. También se rehízo a mano el título.
  • Se usaron colores con una vibra similar a los manuales scouts de los años 50.

Revisión de la prueba de imprenta

  • Al pedir una prueba de imprenta por POD, por primera vez se sintió realmente el tamaño del libro. También se percibió todo el volumen del trabajo acumulado durante tanto tiempo.
  • Pero todavía no había terminado. Como gran parte de la composición se había hecho manualmente, podían existir errores, así que hubo que volver a leer y revisar todo una vez más.
  • Los archivos de InDesign se subieron a Git, pero al ser binarios era difícil revisar los cambios.
  • Para comparar la prueba de imprenta con los cambios, se usó un script en Dart que convertía cada página del PDF en una imagen, y una acción de Photoshop que dibujaba bordes rojos donde hubiera diferencias de píxeles.
  • Dio tranquilidad poder verificar por programación que solo se hubieran aplicado exactamente los cambios intencionados.

Producción del e-book

  • Aprovechando el sistema de build, se generaron todo el XHTML y los metadatos necesarios para EPUB. Luego se ajustó el CSS probándolo en varios lectores.

Opinión de GN⁺

  • Completar un libro de 640 páginas tras una travesía de 6 años es un logro impresionante. Resulta especialmente interesante que, durante el proceso de escritura, se desarrollara un sistema de build en Dart y se hicieran scripts para InDesign con el fin de componer el libro, aprovechando al máximo habilidades de programación.

  • En particular, la parte en la que se creó un script para comparar PDFs y verificar cambios en la etapa de prueba de imprenta es admirable. Parece que hace falta justamente ese tipo de ideas y capacidad de ejecución para que una persona pueda autopublicar un libro.

  • Aun así, es una lástima que el trabajo de composición no haya sido sencillo por el gran tamaño de página elegido, y que hubiera restricciones para escoger el tamaño por razones de la imprenta. En una próxima obra, convendría elegir un tamaño más amigable para la publicación.

  • Como menciona el autor, en el caso de un libro explicativo sobre lenguajes de programación, el diseño de portada quizá no influya mucho en las ventas, pero una portada con personalidad que refleje las características del contenido, como en el concepto de diseño de este libro, puede convertirse más bien en una ventaja llamativa.

  • El hecho de que se haya escrito a ratos durante nada menos que 6 años merece respeto por la pasión y la perseverancia del autor. Ahora solo queda ver cuánto buscarán este libro los lectores y qué tipo de feedback darán. Sin duda, parece claro que será de ayuda para muchas personas que quieran aprender sobre lenguajes de programación.

1 comentarios

 
GN⁺ 2024-04-29
Comentarios de Hacker News
  • Crafting Interpreters tiene una página web que ofrece tanto el enlace para comprar el libro como el enlace a la versión gratuita en línea
  • Gracias a la atención minuciosa que Nystrom puso en el diseño de la edición física, las ilustraciones hechas a mano y la excelente escritura, es un libro mejor que el 99% de los libros técnicos y definitivamente vale la pena comprarlo
  • Empecé a estudiar con este libro en 2017 y, al terminar la primera mitad, mi comprensión de tokenizadores/lexers/parsers/intérpretes se volvió mucho más clara. Esto se debe a la gran calidad de la escritura de Nystrom y a su profundo entendimiento del tema
  • No sabía que el autor había decidido convertirlo en un libro físico; aunque no es la forma de aprendizaje que mejor me funciona, me gustaría comprarlo como pieza de colección y para apoyar al autor
  • Está entre los mejores libros técnicos que he leído; aprendí muchísimo y realmente lo disfruté mientras lo leía. Además del excelente contenido técnico, está muy bien escrito, es ingenioso y las ilustraciones están muy bien hechas
  • Me impresionó la visión de que al final de cada capítulo hubiera código en evolución y un programa ejecutable, y aplaudo al autor por haberlo logrado. Me salté el intérprete con recorrido de árbol y aprendí mucho más con la parte del intérprete de bytecode basado en C
  • Hay un comentarista que, irónicamente, dice que le tomó 15 meses terminar el libro; le agradece y felicita al autor por su esfuerzo. Además de tener profundidad técnica en el área de lenguajes, es un libro cuyas pequeñas atenciones en el diseño y los gráficos logran sumergir al lector, y parece que seguirá siendo una obra significativa por mucho tiempo
  • Le tengo tanto aprecio a este libro que incluso hice mi propia página https://hexmos.com/compiler basándome en lo que aprendí al leerlo
  • Vale la pena escuchar una entrevista con Bob, el autor (https://corecursive.com/032-bob-nystrom-on-building-an-interpreter/)
  • Me impresionó saber que el autor es un ingeniero de compiladores con formación en diseño gráfico
  • Después de leer Writing an Interpreter in Go, planeo leer este como mi siguiente libro sobre intérpretes; me gusta que tenga una extensión razonable, de unas 200 páginas
  • (Comentario de 2021) Dice que es un gran libro y que realmente lo disfrutó mientras lo leía