37 buenos libros sobre sobre Java, Linux, DevOps y desarrollo que he leído

Publicado por pico.dev el , actualizado el .
blog blog-stack java linux planeta-codigo programacion
Comentarios

Con el buscador Google y usando las palabras clave adecuadas es raro no encontrar información sobre aquello que estemos buscando. Pero en internet la información suele estar muy dispersa y en cada sitio la información no es completa y con profundidad, internet esta muy bien como apoyo o para precisar una determinada cuestión. Sin embargo, los libros siguen siendo un buen material de aprendizaje, entre sus ventajas está que la información está mejor organizada con una estructura más didáctica y dependiendo del libro el tema tratado es explicado con profundidad. Desde el 2014 son unos cuantos libros más los que he leído.

En internet hay cantidad de información que nos permiten aprender sobre cualquier cosa a nuestro libre albedrío y que queramos teniendo el tiempo para dedicárselo ya sea en forma de escuetas presentaciones en SpeakerDeck o SlideShare, páginas sobre temas de programación, artículos en bitácoras como esta que estás leyendo u otras, vídeos en YouTube, convenciones presenciales o hangouts.

Algunas páginas dedicadas a la programación relativa a Java y GNU/Linux a las que estoy suscrito son:

En la biblioteca digital OpenLibra encontramos una gran cantidad de libros de diversos temas cuyas licencias permiten su libre acceso.

Web de OpenLibra

Podemos leer libros cuya información no está relacionada con un determinado herramienta técnica sino que su conocimiento es más generalista e independiente de la tecnología, en el artículo 8+ libros para mejorar como programadores recogía varios de los más mencionados y recomendados por mucha gente todavía válidos a pesar del tiempo transcurrido desde que fueron escritos, son atemporales. En la época que estaba en la universidad hace unos 15-20 años para mi internet aún estaba llegando, lo más parecido que tenía era la biblioteca en la que pedía prestados libros pero lógicamente con mayor limitación de material disponible. Hoy en día los alumnos, de universidad o bachillerato y gente con interés que quiera formarse mediante internet tiene acceso a material del que aprender mucho mejor en cantidad, facilidad y seguramente en calidad. A la gente que ahora está en la universidad le recomendaría que no se limiten a aprender lo que les enseñan en clases magistrales sus profesores sino que tomen parte activa en su formación aprovechándose de los recursos que pueden encontrar en internet.

Estos son los que me ha parecido que están bastante bien, algunos he leído de forma completa otros solo ciertos capítulos, algunos después de leídos olvidados en parte por falta de uso y porque mi inglés no es muy bueno. Son libros relacionados con la programación, la web o el lenguaje Java en su mayoría. Hay algún libro más que he leído pero estos son los que quería destacar. Además de aprender leer esta buena cantidad de libros me da ideas para escribir algunos artículos, algunos de los cuanles he incluído en este artículo como relacionados.

Libros sobre Java

Java 9 Modularity

La modularidad no es la única característica que se incorporará en Java 9 hay muchas otras pero quizá la que más llama la atención en parte porque estaba prevista ya para versiones anteriores y finalmente se ha postergado desde la versión 7. En cualquier caso la modularidad mejora la encapsulación, seguridad, rendimiento y compatibilidad con versiones futuras aspecto de la compatibilidad hacia atrás que siempre se la ha dado y es destacado en la plataforma Java.

Java 9 Modularity explica los cambios que afectan principalmente a algún nuevo archivo de código fuente para definir de forma explícita las dependencias que posee un módulo y los paquetes que exporta que definen su interfaz pública. También explica los cambios que afectan a comandos básicos como javac para compilar y java para ejecutar una aplicación. Hasta que los módulos se empiecen a adoptar por las librerías, y será lento, se explican los mecanismos para usar en Java 9 con módulos librerías de código que no hayan sido adaptadas aún.

Java 9 será publicado en septiembre y ya tengo ideados unos cuantos artículos para publicar.

Java Generics and Collections

Los tipos genéricos se añadieron en Java 5, en el año 2004, que el copilador utiliza para validar la corrección del código evitando problemas que serían producidos en tiempo de ejecución. En la API de colecciones se usa de forma extensiva.

El concepto no es difícil pero dominar las declaraciones de los generics no lo es, se puede complicar bastante. El libro Java Generics and Collections es antiguo pero no está anticuado y sigue tiendo plena validez hoy, explica porque los generics fueron implementados en Java como fueron implementados, las limitaciones que causa y las ponderaciones que realizaron sus desarrolladores.

Cloud Native Java

La flexibilidad que aporta la computación en la nube (o en los ordenadores de otros como dice la FSF) es en gran medida su éxito. Los programas que adopten esta nueva arquitectura obtienen varias ventajas como escalabilidad, tolerancia a fallos o administración de automatizada. Sin embargo, las aplicaciones tiene que diseñarse o adaptarse a este nuevo entorno.

Algunas librerías como Spring Boot proporciona a las aplicaciones Java facilidades para desarrollar aplicaciones que se consideran nativas para la computación en la nube. Cloud Native Java hace un repaso a los factores a tener en cuenta en las aplicaciones.

Java The Good Parts

El lenguaje de programación Java es uno de los lenguajes más populares y que más desarrolladores posee desde ya muchos años. Su éxito se debe a varios principios que los arquitectos de la plataforma incorporaron desde sus inicios. Un lenguaje orientado a objetos, con excepciones para el tratamiento de errores, organización de clases en paquetes, recolector de basura que libera al programador de la tarea y evitar fugas de memoria o errores no controlados, la máquina virtual que posibilita escribir el código una vez y ejecutarlo en cualquier plataforma para la que haya una JVM, la gran documentación en javadoc que sirve como consulta y como formato para documentar en el propio código fuente, las colecciones que proporcionan estructuras de datos básicas y útiles para cualquier programa, concurrencia con hilos y primitivas para la sincronización y con el paso del tiempo un ecosistema muy grande de librerías, herramientas y entornos integrados de desarrollo.

Todas estas características se comentan detalladamente en Java The Good Parts.

Building Maintainable Software Java Edition

Hay conocimiento que es independiente del lenguaje que se utilice como tratar de escribir funciones o métodos con pocas líneas de código, mantener las interfaces pequeñas, separar en módulos, mantener el acoplamiento bajo y balanceados, que la base de código sea pequeña, automatizar las pruebas o escribir código limpio. Aunque Building Maintainable Software Java Edition es una edición para Java con los ejemplos en este lenguaje las motivaciones que describe de cada uno de los puntos anteriores es universal.

The Well-Grounded Java Developer

The Well-Grounded Java Developer diserta sobre varios conceptos a tener en cuenta para tener una base sólida sobre la plataforma Java. Nuevas características de Java 7, cosas vitales como inyección de dependencias, concurrencia, ficheros class y bytecode o lenguajes alternativos para la máquina virtual.

Spring Boot in Action

Spring Boot permite que una aplicación sea completamente autocontenida incluyendo un servidor web como Tomcat entre otros disponibles. En vez de distribuir la aplicación en formato war para ser desplegada en un contenedor de servlets o aplicaciones la aplicación se distribuye en formato jar y se inicia como una aplicación Java tradicional. Es la aplicación la que inicia el servidor web embebido y hace que proporcione su servicio. Esta es nueva tendencia que se sigue en las aplicaciones y en las aplicaciones basadas en la nube.

Spring Boot proporciona una integración con la parte del ecosistema de Spring que requiera la aplicación. Para nuevos proyectos Spring Boot in Action es muy interesante.

Gradle in Action

Gradle es una herramienta de construcción de proyectos y gestión de dependencias que adopta las mejores características de Ant y Maven con pocas o ninguna de sus deficiencias. Gradle in Action explica en profundidad esta herramienta de construcción para llegar a dominarla.

Java Testing with Spock

Las pruebas automatizadas son indispensables para escribir código con menos errores y con mayor calidad. En Java hay varias herramientas de testing para hacer pruebas unitarias, de integración o funcionales. Spock con el que se escriben especificaciones con un DSL y utilizando el lenguaje Groovy permite automatizar las indispensables pruebas de todo código. Java Testing with Spock explica esta herramienta.

Portlets in Action

Los portales son utilizados por algunas organizaciones para gestionar el contenido que publican en su web. Portlets in Action explica como crear las unidades básicas de los portales en Java, los portlets.

Varios libros

Learning JavaScript

Learning JavaScript explica este lenguaje de programación utilizado en los navegadores web. Denostado a veces por falta de conocimiento el libro explica muchas cosas interesantes del lenguaje e incorporadas la versión de ECMAScript 6. Es un libro que no requiere gran conocimiento previo y empieza desde un nivel básico.

The Book of CSS3

Al igual que JavaScript el denostado CSS también a veces lo es por el mismo motivo. The Book of CSS3 explica las nuevas posibilidades para aplicar estilos a documentos HTML en los navegadores. Media queries, selectores, psedo-clases y pseudo-elementos, web fonts, efectos y estilos de tipografías, disposiciones en múltiples columnas, imágenes de fondo, bordes y efectos de caja, color y opacidad, gradientes transoformaciones 3D, animaciones y transiciones, layouts, modos blend, filtros y máscaras es el contenido del libro.

Learning RabbitMQ y Mastering RabbitMQ

Los libros Learning RabbitMQ y Mastering RabbitMQ tratan sobre la herramienta RabbitMQ para desarrollar aplicaciones que se comuniquen mediante mensajes. Los mensajes son una forma efectiva de desacoplar dos aplicaciones tanto temporalmente como en el lenguaje utilizado en cada una de ellas.

MongoDB in Action

La misión de las bases de datos es almacenar información para una posterior consulta o búsqueda. MongoDB in Action trata sobre la base de datos orientada a documentos MongoDB catalogada como NoSQL.

SQL Antipatterns

Aún con la popularización de las bases de datos NoSQL las bases de datos relacionales siguen siendo perfectamente válidas. El libro SQL Antipatterns es una colección de consejos a tener en cuenta al diseñar y utilizar las bases de datos relacionales. Algunas formas de uso que generan problemas están desaconsejados y se consideran antipatrones.

Beginning SQL Queries y Learning PostgreSQL

El lenguaje declarativo SQL es muy potente y yo al menos desconocía o he usado poco muchas cosas que se han añadido al lenguaje en versiones más modernas y que algunas bases de datos como PostgreSQL implementan. Algunas de estas cosas son las windows functions, tipos definidos por el usuario, triggers, common table expression o CTE, consultas recursivas, búsqueda de texto más avanzado y eficiente que la expresión like, lateral subqueries, …

Los libros Beginning SQL Queries y Learning PostgreSQL son una buena documentación sobre el lenguaje SQL que van más allá de lo enseñado en algunos cursos académicos.

CORS in Action

Cross-Origin Resource Sharing permite a sitios distintos del origen de la página proporcionar su contenido. Por defecto, los navegadores solo permiten hacer peticiones al mismo sitio del origen de la página, con una combinación del navegador y cabeceras en las peticiones que proporcionan los sitios web permiten hacer llamadas entre diferentes sitios manteniendo la seguridad. El libro CORS in Action trata en detalle este tema.

Microservice Architecture

El ámbito cloud y una nueva forma de arquitectura para las aplicaciones han originado los denominados microservicios. En vez de desarrollar una aplicación monolítica y grande se tiende hacia múltiples aplicaciones más pequeñas con un contexto específico que colaboran para proporcionar la misma funcionalidad. El libro Microservice Architecture trata las motivaciones, que valor aportan los microservicios así como sus principios y cultura.

Learning HTTP/2

La siguiente versión del protocolo HTTP mejora varios aspectos del anterior. Es más eficiente, con menos latencia, con mejor rendimiento mas seguro al requerirse una conexión cifrada y haciendo innecesarios varias técnicas que se usaban anteriormente. Learning HTTP/2 es un buen material para conocer las diferencias y los problemas que presentaba HTTP/1.

Mastering OAuth 2.0

OAuth es un protocolo para proporcionar autenticación y autorización a un sitio o aplicación sin que el usuario le proporcione las credenciales. Una aplicación que requiera acceso aun tercero necesita obtener un bearer token que mediante un proceso de autorización se puede obtener de cuatro formas diferentes dependiendo de la aplicación y de si el dispositivo autorizado es de confianza o no. Matering OAuth 2.0 es una buena introducción.

Libros sobre Linux y DevOps

Git: Mastering Version Control

He leído varios libros sobre Git, muchos empiezan explicando como es la estructura de información que guarda Git, no es necesario empezar por ahí. El libro Git: Mastering Version Control es mucho más pragmático y explica muy bien los casos de uso que uno requiere de este sistema de control de versiones. Con este libro finalmente he aprendido mejor como usar un rebase interactivo para reescribir los commits o hacer un squash, también como crear alias y hooks, los diferentes modos de reset además de como crear commits, hacer búsquedas en el repositorio y otras muchas cosas que no he usado aún.

GitLab Cookbook

Como servidor de Git me gustan de GitLab dos cosas: que tiene una versión para la comunidad usable por ejemplo en un servidor propio de una empresa u organización y que tiene varias herramientas integradas como son una wiki, un sistema de tracking para las tareas de un proyecto junto con tableros y soporte para hacer integración y entrega continua sin necesidad de más herramientas lo que simplifica la infraestructura para el desarrollo en gran medida. También soporta otras características presentes en GitHub como merge request, revisiones entre pares o calidad de código entre otras muchas otras, la lista completa de features es grande. GitLab Cookbook es un libro introductorio para empezar a manejarlo.

Docker in Action y The DevOps 2.1 Toolkit

Docker y los contenedores junto con la computación en la nube han cambiado la forma de distribuir y desplegar las aplicaciones en los servidores. Docker es una gran herramienta muy interesante de conocer. Son varias las herramientas del ecosistema, Docker in Action explica docker y docker compose y The DevOps 2.1 Toolkit explica docker swarm para crear clusters de servidores.

Ansible Up and Running y Implementing DevOps with Ansible 2

Ansible es una herramienta para automatizar tareas en una o múltiples máquinas locales o remotas. Otra de sus propiedades en la mayoría de los casos es que es idempotente, es decir, se pueden ejecutar las acciones múltiples veces aplicando los cambios pertinentes o no haciendo nada según el estado de la máquina y el estado deseado.

La herramienta es muy útil para tratar a los servidores siendo numerosos como ganado en vez de como mascotas y los libros Ansible Up and Running y Implementing DevOps with Ansible 2 lo explican.

UNIX and Linux System Administration Handbook, Linux Administration A Beginner’s Guide y How Linux Works

UNIX and Linux System Administration Handbook es un libro que presenta al usuario los sistemas GNU/Linux, Linux Administration A Beginner’s Guide detalla las tareas administrativas para un servidor Linux y How Linux Works es un libro que explica detalles más profundos de aspectos internos de Linux.

Amazon Web Services in Action y Amazon Web Services For Dummies

Aún habiendo leído Amazon Web Services in Action y Amazon Web Services For Dummies como no he tenido la oportunidad de practicar con la nube de Amazon casi todo de lo que leí lo tengo olvidado. Amazon ofrece una capa gratuita para probarlo.

Publicaciones más breves

Esto ya no son libros sino documentos más pequeños sobre diferentes temas.

Guide to the Java Ecosystem 2015

Aun es la edición del 2015 y no he visto que hayan publicado una más reciente. Explica las tendencias y el ecosistema de Java. Microservicios, docker, Java 8, programación reactiva, mejores prácticas, …

Java The Legend

¿A que es debido el éxito de Java? El libro Java The Legend expone varios motivos como importancia de la compatibilidad hacia atrás, fácil de aprender y de leer, un sistema de tipos simple o la máquina virtual de Java o JVM. Aunque también según el documento con algunos fracasos como los Java Bean por promover la mutabilidad que es molesta para la concurrencia, la finalización de los objetos, sobre configuración de Java EE o la abstracción muy básica de hilos. Comenta el ecosistema alrededor de la plataforma Java con Eclipse, Apache y Spring junto con el futuro con Java 9, HTTP/2, JShell y quizá en un futuro el proyecto Panama para una nueva interfaz alternativa a JNI para código nativo y el proyecto Valhalla que trata sobre los tipos para usar cosas como definir colecciones genéricas con tipos primitivos.

The daemon, the GNU and the penguin

The daemon, the GNU and the penguin es un documento que repasa el origen, inicios y evolución del software libre y de código abierto desde el año 1968 con referencias a Unix, BSD, Minix, Sun, GPL, Hurd, la web, Tanenbaum, Torvalds, Linux, … Este documento y el siguiente son unos clásicos en internet.

La catedral y el bazar

La catedral y el bazar hace referencia a dos modelos distintos de desarrollo uno centralizado y controlado por una organización y otro distribuido de más libre albedrío pero también se ha demostrado muy efectivo posibilitado por la democratización de internet. La catedral y el bazar está traducido a varios idiomas entre ellos el español.

Para acabar este artículo, viendo la cantidad de libros que he leído en unos 3 o 4 años con el tiempo que supone dedicado a adquirir estos conocimientos en gran parte en el tiempo libre y que en general empleamos los que trabajamos en el sector tecnológico hay que hacerse valer a la hora de recibir o postular a una oferta de trabajo y me refiero al ámbito económico que en muchas ofertas de InfoJobs o Tecnoempleo no se corresponde con lo que supone los conocimientos que se solicitan.