Estructuras de Datos con Java moderno

Me gusta pensar que soy altamente funcional (me parece que hay evidencia suficiente de que esto es cierto); y yo supongo que esto es en gran medida porque me conozco y sé qué es en general lo que me define como persona. Y como siempre he estado en gran medida de acuerdo con la teoría del conductismo, tiendo a definirme a mí mismo en términos de lo que hago y a lo que me dedico. Mucha gente (probablemente la mayoría) separan de manera explícita su identidad de a lo que se dedican; se asumen como rockeros, cinéfilos o gamers, pero esta identidad es independiente (a veces incluso contraria) a lo que hacen para ganarse la vida; su trabajo es únicamente lo que hacen para pagar la renta. Yo no (y esto me parece es muy común en la academia); y sinceramente es parte de los motivos por los que me parece que soy altamente funcional: me encanta lo que hago, que repito considero es lo que me define.

Podría reducirlo a una única cosa, pero para que esta entrada tenga sentido tengo que usar tres:

  1. Soy profesor. Literalmente es lo que mi puesto oficial de trabajo dice en mi contrato, pero me parece que a un nivel más profundo es lo que soy: maestro, mentor, educador. Dar clases es básicamente alrededor de lo que gira mi vida y aunque creo que pude haberme dedicado (como trabajo principal) a otras cosas, jamás hubiera dejado de dar clases por completo. Además creo que soy bastante bueno como profesor; ciertamente es lo que me dicen la mayor parte de mis estudiantes y no voy a caer en una falsa modestia al respecto, cuando me encanta y es de las cosas que más tiempo y esfuerzo le dedico.
  2. Soy programador. Que por supuesto es a lo que probablemente me hubiera dedicado si no hubiera conseguido mi plaza. Programar es con casi toda certeza a lo que más tiempo le dedico cuando no estoy ocupado con mis clases o preparándolas, aunque hay una intersección importante dado que normalmente en mis clases enseño a programar. Me considero también muy buen programador y de nuevo es básicamente porque me encanta y porque de una manera u otra llevo casi treinta años programando sin interrupción. Aún sin talento innato tanto tiempo dedicándole a algo hace que cualquiera se vuelva razonablemente bueno.
  3. Soy escritor. Contrario a dar clases y programar, escribir es algo que nunca me planteé seriamente como forma de vida. Igual y lo hubiera conseguido, pero la verdad jamás lo intenté. De hecho, ni siquiera pensé en intentarlo. También debo hacer notar que nunca tomé un curso de escritura creativa ni nada por el estilo; después de mis clases de redacción en el CCH, nunca estudié las letras en un entorno académico. Pero sí he leído bastante y gracias al blog (y otras cosas) también es algo que básicamente no he dejado de hacer desde hace años. Pero con mi escritura sí soy más humilde; me parece que mi redacción está bien, pero nada para pegar de brincos. Escribí una novela y a mí me gusta mucho, pero me queda clarísimo que no es una joya de la literatura latinoamericana: especialmente con lo espectacular que es la literatura latinoamericana. Pero sí me considero escritor y una de las cosas que me definen.

De esta tercera característica definitoria de mi persona es de lo que trata esta entrada. Ayer en la tarde, después de más trámites de los que jamás hubiera imaginado eran necesarios, salió publicado mi tercer libro: Estructuras de Datos con Java moderno.

Estructuras de Datos con Java moderno

Estructuras de Datos con Java moderno

Es mi tercer libro publicado, pero para mí es especial porque es el primero que escribo yo solo (y que me publican, no como mi novelita).

Todo el proceso de escribir el libro fue muy divertido (los trámites para publicarlo no tanto) y en particular todo el aspecto técnico también. Por supuesto el libro está escrito en \LaTeX; yo nunca he sido un experto en \LaTeX pero me defiendo usándolo y para este libro aprendí (o recordé) un montón de cosas. En particular todas las figuras del libro están escritas en TikZ (excepto una) y todo el código está resaltado (highlighted) y coloreado (al menos en la versión electrónica) usando listings. Me gusta mucho cómo quedó el diseño interno del libro, que es 100% mío.

Además del gusto de que saliera publicado, sí necesitaba este libro. Mi curso de Estructuras de Datos en la Facultad de Ciencias lo doy de tal manera que la mayor parte del material que existe es sencillamente insuficiente de manera individual; la definición de las estructuras y los algoritmos correspondientes suelen estar cubiertos en un montón de libros, pero la implementación utilizando las características modernas del lenguaje de programación Java es normalmente omitida. Y sí es fundamental que los estudiantes implementen las estructuras, no nada más que las estudien. Como sea de ese último punto es que sale lo de “con Java Moderno” del título.

A mis estudiantes en semestres anteriores les pasé versiones preliminares del manuscrito, y en general me han dicho que sí les sirvieron mucho, así que espero que les sea útil a los que vengan. Y a mí me facilita mucho dar mi clase, porque puedo basar las clases en los capítulos; pedirles a los chavos que lean un tema en particular antes de una clase; o si un tema no me da tiempo de cubrirlo completamente en el pizarrón, puedo dirigirlos a los capítulos correspondientes. También le facilita la vida a los alumnos, porque el curso es práctico (tienen que implementar las estructuras) y me parece (y me han dicho) que con el libro disponible pueden terminar las cosas de manera más sencilla.

Otra cosa que hubo con el proceso de escribir el libro en \LaTeX es que yo sabía que me iban a pedir una versión electrónica del libro; de hecho es uno de los requerimientos del proyecto PAPIME con los que financié su publicación (por cierto, la nueva encarnación de Tenochtitlán salió del mismo proyecto). Mis experiencias transformando \LaTeX a HMTL (porque los libros electrónicos usan una versión simplificada de HTML) habían sido bastante decepcionantes hasta ese momento (es un problema complicado); más aún porque hago cosas en mi libro que definitivamente no son estándar.

Pero entonces Omar me platicó de Pandoc y así fue como perdí varias semanas de mi vida. Pandoc (debo aclarar) no resuelve el problema, pero sí resuelve un subconjunto importante y dado que es un traductor de muchos lenguajes de marcado a muchos otros lenguajes de marcado y que ofrece la posibilidad de insertar un filtro personalizado en medio de dicha traducción, yo me puse mi gorro de programador y escribí un filtro. Debí hacerlo en Haskell, porque Pandoc mismo está escrito en Haskell; pero supuse que no sería tan complicado y me siento mucho más cómodo con Python, así que me puse a escribir mi filtro en Python.

Terminé escribiendo 3,269 líneas de código divididas en 7 módulos, porque aunque en su forma más simple un filtro sólo toma la representación interna del documento \LaTeX (incluyendo bloques enteros sin traducir, si no los entiende) y regresa modificaciones a dicha representación interna (por ejemplo, traducir en el filtro los bloques que Pandoc no entiende), mi caso de uso era mucho más complejo. Mi “filtro” (que creo que merece el nombre de “sistema” en este punto) hace toneladas de cosas más, como tener una base de datos de las referencias a etiquetas; contar los capítulos, secciones, subsecciones, teoremas, lemas, figuras, listados de código, etc.; llevar el índice alfabético (que es una pesadilla); generar encabezados y pies de página para ligas de navegación; etc., etc., etc.

Y debí hacerlo en Haskell porque evidentemente el filtro es recursivo; la mayor parte de las veces cuando Pandoc no entiende un bloque yo sólo debo traducir el inicio y final del mismo e invocar recursivamente el filtro en los contenidos al interior del bloque. Esto puede repetirse a múltiples niveles, obviamente. En Python funciona (no habría razón para que no funcionara), pero entonces implica ejecutar de nuevo Pandoc pasándole mi filtro una vez más. Python, además siendo no particularmente rápido, hace que todo el proceso sea mucho más lento de lo que sería si hubiera escrito mi filtro en Haskell en primer lugar (en cuyo caso sólo se invoca como biblioteca dentro del proceso principal de Pandoc). La nueva encarnación de Aztlán toma cerca de un minuto convertir todo el libro a su versión electrónica; no es lo peor que ha ocurrido en el mundo, pero podría ser más rápido.

Como sea, la versión electrónica queda bastante chida; y al menos en mi teléfono y tableta se ve increíble (aunque obviamente prefiero cómo se ve impreso).

Teniendo ya el libro (incluyendo su versión electrónica), lo que siguió fueron los trámites para que me lo publicaran, que incluyeron que fuera aprobado para su publicación por el comité editorial de la Facultad de Ciencias. El proceso fue sencillo en el sentido administrativo; le di al comité copias impresas del manuscrito (matando quién sabe cuántos arbolitos en el proceso); el comité seleccionó árbitros que leyeran el libro; los árbitros lo leyeron y entregaron al comité correcciones y sugerencias para mi libro; yo hice algunas correcciones o sugerencias y expliqué por qué no estaba de acuerdo con otras que no hice; y por último se aprobó la publicación del libro. Es la mecánica estándar en la academia, me parece.

Lo único es que entre que di mi manuscrito y que los árbitros me dieron sus correcciones y sugerencias, pasó más de un año. No ayudó que en medio de ese año hubo un cambio en la comisión editorial. Pero bueno, hoy por fin salió mi libro; entre que el comité me dio su carta de que el libro estaba aprobado para publicar y que lo publicaran, pasaron poco más de dos meses. Así que en la práctica, me tardé más tratando de publicar el libro que en escribirlo.

Lo primero que hice cuando me dieron un ejemplar del libro (ya sin plástico protector), fue abrirlo y olerlo. Y huele a lo que suelen oler los libros nuevos; papel y tinta. Me gustó mucho cómo salió la impresión; no es una edición fina, pero es una edición buena y competente.

Como decía arriba, este no es mi primer libro; pero más importante que eso, es que espero no sea el último. Tengo varios libros planeados a corto y largo plazo, así que espero ir sacándolos dentro de los siguientes años (o décadas, si se tardan igual que éste). Es de las razones por las que ya no escribo tanto en el blog; mi energía creativa escribiendo suelo gastarla en los múltiples libros que tengo en distintos grados de avance. Y no me molesta para nada la idea de que mi principal legado (además de los alumnos que formo) sean varios libros de texto para materias de programación… que probablemente se vuelvan obsoletos a los pocos años, porque la computación avanza a una velocidad vertiginosa.

4 comentarios sobre “Estructuras de Datos con Java moderno

    1. Bueno, no está prohibido para las personas que no sean alumnos de la UNAM; si lo ves en una librería, no te van a pedir tu tira de materias para comprarlo.

      Dicho sea eso, no me queda claro a qué librerías se distribuya, pero sí sé que no se vende únicamente en la UNAM; se llevaron algunos ejemplares a la Feria internacional del libro de Guadalajara, por ejemplo.

      Sin embargo lo más sencillo es en la Facultad de Ciencias en Servicios Editoriales. Probablemente se pueda conseguir en otros lados, pero no tengo idea dónde.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *