martes, abril 19, 2011

book review: Programming Python de Mark Lutz

Este es un análisis de la cuarta edición del libro "Programming Python" de Mark Lutz, publicado en Diciembre de 2010 por O'Reilly. Este análisis está dentro del programa de O'Reilly para bloggers (básicamente con algunos títulos, O'Reilly te ofrece el ebook si haces una review en tu blog y en una web de venta como la suya o la de Amazon; en tu blog no hace falta que sea en inglés).

Antes que nada, como recomendación personal, posiblemente los cuatro lenguajes de interés para que un programador sea versátil, son C/C++ (al menos a nivel básico), Java, Javascript y Python. Python es el único que no tiene sintaxis basada en C, pero no es complicada.

Acerca del libro (o sea análisis antes de valoraciones personales)

El gran cambio de esta edición respecto a la segunda es que trata Python 3. La versión 2.6 de Python no se considera en el libro salvo a efectos de migración, es decir, cuando algo se hace de forma distinta en la versión 3 que en la versión 2, se dice que ha cambiado pero sólo se explica cómo hacerlo con la versión 3. Dado que hay varios módulos que no se han migrado aún de la versión 2.6 a la 3, hay desarrolladores que todavía pueden verse obligados a programar con la versión 2.6 y tendrán que recurrir a documentación adiccional: la tercera edición del manual de referencia de Python del mismo autor por ejemplo cubre tanta la versión 3 como la 2.

Este libro no es para aprender los fundamentos del lenguaje, sino el cómo aplicarlo (a través del API disponible) en tres dominios en los que se usa mucho Python: scripts de programación de sistemas (lo que antes era el dominio absoluto de Perl), programación y prototipado de interfaces gráficas y programación de aplicaciones de red, tanto en el lado servidor (web) como en cliente. Estas partes no las trata el libro de forma totalmente independiente, por lo que se recomienda leer el libro secuencialmente. En la parte de programación de sistemas se entra en temas avanzados no habituales cuando sólo se habla de programación de scripts, como los hilos. Se añaden capítulos para tratar temas como persistencia de datos, procesado de texto (uno de los fuertes de los lenguajes de script especialmente Perl y Python) y la integración entre C y Python.

El enfoque del libro es práctico, con numerosos ejemplos incluidos el desarrollo de algunos programas completos de relativa complejidad como un programa de correo.

Este libro es la pareja de "Learning Python", que cubre el aprendizaje del lenguaje pero sin entrar en su aplicación práctica ni en el rico API disponible, objeto de este libro. No hace falta leer "Learning Python" para abordar este libro (yo de hecho no lo he leído). Pero sí al menos algún buen tutorial de Python (por ejemplo aquí hay en español) porque aunque se repasen algunos conceptos al comienzo del libro, en algunas partes el texto no se sigue fácil si no se tiene una base previa.



Valoración personal

El libro está bien escrito, no en vano su escritor tiene gran experiencia en formación con Python. Es muy didáctico y se entiende bien.

El libro tiene nada menos que 1632 páginas en su versión impresa. He analizado la versión digital (obviamente con mismo contenido que libro impreso), que he leído en parte en el Kindle (son demasiadas horas de lectura para usar un ordenador). La edición para este lector de ebooks está bastante bien hecha, con algunas excepciones como el no haber reformateado los listados para poner los comentarios arriba de las línea a comentar en lugar de a la derecha, que hacen que a veces se salgan y salten a la siguiente línea por ser menos ancha la pantalla del Kindle que el libro impreso.

A quien se plantee comprar el ebook, le recomiendo que lo haga en la web de O'Reilly, pues además de no tener DRM se  puede descargar en varios formatos tanto de ebook como PDF, sin tener que pagar de nuevo, además de potencialmente actualizarse las erratas (por cierto, extraño que autor mantenga su propia página de erratas en su web al margen de la página de la editorial y no las sincronice, con lo que algunas se pierdan en las reimpresiones). El PDF es conveniente cuando se quiere leer a la vez que se práctica en el ordenador (más sobre multiples formatos en este mismo blog). Si lo compras en la web de O'Reilly, para tener el 50% de descuento registra tu usuario y compraló conjuntamente con algún otro título (puede ser uno de los más baratos, aunque se hable de 2x1, afortunadamente no es el más barato gratis sino los dos al 50%). Por supuesto otra razón es para evitar intermediarios.

En mi opinión, un factor negativo en el libro son sus 1632 páginas (si además leemos Learning Python para aprender antes el lenguaje son otras 1216 páginas). No es que el libro se haga aburrido, pero posiblemente muchas personas no tengan tanto tiempo y prefieran un libro más directo que en menos páginas explica tanto el lenguaje como su uso. En ocasiones la mayor extensión además no es por explicar mejor o introducir más conceptos, sino por reiteración, explicar variantes sin mucho interés y por hacer comentarios que unas veces son útiles e interesantes pero otras veces no.

En cuanto a los contenidos abordados en el libro, encuentro útiles toda la parte de sistemas y la de procesado de texto, pero por ejemplo no tanto la dedicada a programación de aplicaciones gráficas ni la de clientes de Internet como el de correo. Aquí entran temas de apreciación personal sobre para lo que es útil o no Python, por lo que otra personas pueden valorar de forma distinta los contenidos. Mi visión de Python es que es útil para scripts (remplazando a los shell scripts y Perl), para prototipado rápido y para aplicaciones de escritorio como alternativa a usar GTK+ desde C o Qt desde C++, pero no para aplicaciones de servidor que tengan que escalar para muchos usuarios o alcanzar cierta complejidad y extensión, para lo que está mejor preparado e incluso con las últimas versiones, con frameworks como Spring, es más productivo Java.

A mi entender ahí el libro no ha envejecido del todo bien (¡la primera edición es de 1996!); aunque el autor haya hecho un gran esfuerzo de adaptación en cada edición, tal vez los ejemplos como el programa de correo o el de FTP eran atractivos en su origen pero no tanto ahora. Así mismo no encuentro útil entrar en tanta profundidad en Tkinter para interfaces gráficas. El tema es que aunque Tkinter tenga la ventaja de estar instalado casi siempre que lo está Python, para hacer aplicaciones con apariencia nativa son mucho más útiles los bindings de wxWidgets, Qt o GTK+; Tkinter tendría su papel, pero para dar interfaz gráfica a scripts, no a aplicaciones complejas. Como he dicho, esto es un tema de apreciación personal sobre la idoniedad de Python para unas tareas u otras, por lo que recomiendo analizar la tabla de contenidos y juzgar acorde lo que cada uno espera usar del lenguaje.

En definitiva, si tuviera que resumir si recomiendo o no comprar este libro, diría que depende. Para quien tenga poco tiempo, le recomendaría que buscaran otro libro más breve, sin tanta parte de Tkinter ni por ejemplo la parte del programa de correo o del cliente FTP. Ahora bien,  si a una persona la tabla de contenidos, el precio y la extensión le convence y su única duda es si luego el texto va a estar a la altura, entonces  le diría que sí.

El libro que sí recomiendo, sobre todo para tener en el Kindle, es "Python Pocket Reference", también de Mark Lutz. Incluso si se tiene experiencia con otros lenguajes, se ha leído un tutorial básico y uno se pone muy burro (al ser obra de referencia no hay orden secuencial de lectura y aparecen conceptos que se definen en partes posteriores) es posible aprender directamente con él ;-)

I review for the O'Reilly Blogger Review Program