Página principal
Artículos y trucos
Catálogo de productos
Ejemplos y descargas
Mis libros
Cursos de formación
Investigación y desarrollo
Libros recomendados
Mis páginas favoritas
Acerca del autor
 
En colaboración con Amazon
 
Intuitive Sight
 
Freya
Píldoras Orientadas a Objetos
 
Comma NET

La mitad del dinero que gano lo gasto en comprar libros (bueno, no sólo de Informática). Con la aparición de la plataforma .NET y C#, mi gasto en libros se ha disparado. No es que me haya entrado el afán de coleccionista... sino que he tropezado con libros muy malos, por falta de una mejor información. Tenga en cuenta de que, viviendo en España, la mayoría de los libros que compro no están en el escaparate de una librería, y no puedo hojearlos antes de comprarlos. Para evitar, dentro de lo posible, la mala experiencia de comprar un libro inútil a mis propios lectores, he redactado esta pequeña lista de libros recomendados. He dejado fuera los libros muy malos, aunque algunos de los que aparecen aquí no entran en mi concepto de libros "recomendables"... al menos sin reservas. Espero que esta lista le sea de alguna utilidad. Y tenga por seguro que faltan aquí muchos otros libros que me gustaría leer.

Si desea adquirir alguno de estos libros, puede hacer clic sobre sus títulos o sobre sus imágenes. El enlace le llevará directamente a Amazon.com, la mayor tienda de libros en Internet, a la página con el precio y descripción del libro. Sólo han sido activados los enlaces a libros en inglés y que todavía están disponibles.



  Inside C#, Second Edition.
Este es el libro a leer si queremos familiarizarnos con C# como lenguaje. Pero vaya con cuidado. Esta es la segunda edición del libro... ¡y vaya si han cambiado las cosas de la una a la otra! La primera edición estaba firmada por Tom Archer, y su traducción al castellano (A Fondo C#) tenía unas 374 páginas. A la segunda edición se unió otro autor, Andrew Whitechapel, y el libro engordó hasta unas 870 páginas. Nunca hubiera recomendado la primera edición, pero la segunda me parece interesante...

Aclarada mi opinión "global", el mejor servicio que puedo prestarle es contar cuáles temas se tratan y cuáles no. Para empezar, se explica el modelo de objetos de C#: espacios de nombres, clases, interfaces, tipos por valor y por referencia, herencia, polimorfismo... ya sabe. Hay una parte, curiosamente titulada "Writing Code" (como si definir clases e interfaces no fuese escribir código), que se ocupa de las instrucciones de control, del tratamiento de excepciones y de los delegados y eventos. Puntos muy positivos: hay capítulos dedicados al manejo de cadenas, al trabajo con ficheros (decía Bertrand Meyer que el diseño de bibliotecas es parte del diseño de lenguajes) e incluso a las colecciones y los patrones de iteración; estos patrones, por cierto, son extremadamente importantes en C#. Y hay una tercera parte, pomposamente bautizada "Advanced C#", en la que a modo de cajón de sastre, han entrado una introducción a la programación multihilos, la compatibilidad recíproca entre .NET y COM, reflexión (RTTI a la C#), seguridad y manejo de memoria a "bajo nivel". No es para despeinarse, porque cada uno de estos temas requiere un libro para ser tratado a fondo, pero se agradece el detalle... y sobre todo, te evita levantarte de la cama, a altas horas de la noche, para buscar ese otro libro donde se decía algo sobre los hilos y la sincronización.

Temas no cubiertos: principalmente, el diseño en Visual Studio, o más general, los entornos de desarrollo. Realmente, si existe un buen libro sobre este asunto, aún no ha llegado a mis manos. Pero reconozco que, de incluir algo sobre el modelo de componentes, controles y esas cosas, engordaría excesivamente el libro. Tal como está ahora mismo, lo recomiendo de corazón.

  Applied Microsoft .NET Framework Programming
Este libro, precisamente, es de los que recomendaría a cualquiera con los ojos cerrados. Su autor es nada menos que Jeffrey Richter, muy conocido por sus libros sobre programación avanzada para Windows.

El libro trata sobre la plataforma .NET en sí, no sobre sus lenguajes o sobre bibliotecas de clases específicas. Y créame que hay bastante sobre lo que escribir: qué es el Common Language Runtime (CLR), por qué es radicalmente diferente de la máquina virtual de Java, qué es un assembly, cómo se firman y distribuyen las aplicaciones y las bibliotecas de clases. Trata también sobre el Sistema Común de Tipos (CTS), sobre la implementación interna de los tipos por valor y por referencia, y las operaciones sobre cada uno de ellos. Se explica el formato y la implementación de recursos que luego aparecen en los lenguajes de alto nivel, como las interfaces y los tipos delegados. Y, sobre todo, hay un capítulo muy bueno sobre la implementación de la recolección de basura... Evidentemente, hay temas que se quedan fuera, pero lo importante en este tipo de libros es que los que sí se incluyen sean tratados exhaustivamente, como sucede con esta obra.

Si quiere una visión complementaria de los asuntos tratados, puede probar Essential .NET Volume 1, reseñado más adelante.

  Microsoft ADO.NET Core Reference
De todos los libros que he leído sobre .NET, éste es, sin duda, mi favorito. Su autor: David Sceppa. La redacción es fluída y amena,la información es exacta y suficiente. Cada capítulo termina con una sección titulada "Preguntas que se deberían hacer con mayor frecuencia". Y los ejemplos son todo lo ilustrativos que pueden ser en un libro que es, a la vez, un tutorial y una referencia... porque no debe perder de vista el que el subtítulo del libro sea: Core Reference. Esto se traduce en una referencia condensada también al final de cada capítulo. Por último, la mayoría de los ejemplos están desarrollados con el proveedor .NET para OLE DB, pero cuando hay diferencias con el proveedor .NET para SQL Server, se deja bien claro. Y se ha incluido un apéndice en el que se resumen las diferencias de este segundo proveedor y de los proveedores .NET para ODBC y Oracle, que se añadieron en la versión 1.1 de la plataforma.

Al libro no se le puede pedir más... entre otras cosas porque ya tiene sus buenas 700 páginas. Pero hay que complementarlo con otros libros sobre temas relacionados, para poder llevar los conocimientos aprendidos a sus últimas consecuencias. Por ejemplo, la cobertura del data binding (el equivalente de los data aware controls en .NET) es poca, por necesidad. No hay prácticamente nada sobre .NET Remoting, que ofrecería a .NET uno de los equivalentes del DataSnap de Delphi. Y se asume que el lector tiene un nivel regular en Transact SQL. ¡Por suerte para mí, claro! Mi idea para La Cara Oculta de C# es, precisamente, cubrir desde Transact SQL, con detalles sobre Oracle e InterBase, pasando por ADO.NET, hasta servicios Web con ASP.NET y .NET Remoting, terminando con un buen capítulo sobre los servicios de componentes de COM+. Puedo ahorrar espacio, en comparación, por dos motivos: mi libro no será una referencia, y además, se limitará a C#, mientras que este libro tiene que repetir los ejemplos, primero en Visual Basic.NET y luego en C#.

  Programming Microsoft Windows with C#
Charles Petzold es el autor del libro más famoso de la historia de Windows (sí: ya se puede hablar de la historia de Windows, aunque sea en minúsculas): Programming Windows. Muchos utilizamos aquel libro para aprender a programar en el nuevo entorno gráfico; en aquella época se discutía si se trataba o no de un sistema operativo. El libro utilizaba C como lenguaje, y naturalmente, en aquellos tiempos pioneros no habían bibliotecas de clases para facilitar el trabajo.

Ese tipo de cosas marcan. Charles Petzold, por ejemplo, es famoso por haber dicho que Pascal nunca podría utilizarse para programar en Windows. Tuvo razón, hasta cierto punto, porque Borland tuvo que modificar bastante el lenguaje para poder crear aquel revolucionario Turbo Pascal para Windows. Pero la anécdota ilustra hasta qué punto puede condicionar un punto de partida. Y es una suave ironía, de esas que se disfrutan con limpia sonrisa, que ahora Petzold escriba un libro sobre el lenguaje de programación creado por el mismo señor que inventó el Pascal para Windows. Pero también es irónico que el nuevo lenguaje se parezca más a C que a Pascal.

... el libro, vayamos al libro. Escribirlo debe haber sido tarea de chinos, por la cantidad de información que contiene: 1275 páginas de tipografía apretada. Es un libro que hay que comprar; si se tiene el dinero, claro. ¿Sobre qué trata? Principalmente, sobre formularios y controles, sobre el manejo del ratón y del teclado, menús, tipos de letras, GDI+, impresión, el Portapapeles... Pero me permito un consejo: antes de abrir el libro, respire hondo, e intente adoptar una actitud imparcial. No todo lo que contiene el libro es "buena" programación. El señor Petzold decidió, con razón o sin ella, que no utilizaría Visual Studio, ni ninguna herramienta similar, para sus ejemplos. Eso implica, entre otras cosas, que no hay nada, o casi nada, sobre la estructura que Visual Studio o C# Builder usan para articular sus aplicaciones. Más que manejo de eventos, los ejemplos se basan en la sobrescritura de métodos virtuales: una técnica correcta, pero que los últimos entornos RAD han relegado a un segundo plano en favor de la interceptación de eventos. Y algunos ejemplos, incluso, cojean desde el punto de vista de la Programación Orientada a Objetos.

Es fácil dejarse convencer por la magia de la letra impresa. Si es usted capaz de sobrevivir al embrujo, pasará buenos momentos leyendo este libro.

  Building Web Solutions with ASP.NET and ADO.NET
Mi primera impresión sobre este libro de Dino Esposito fue negativa. El autor se lanzaba, desde el primer capítulo, a ponderar las virtudes del modelo de enlace de datos (data binding) de ASP.NET, el segundo capítulo estaba dedicado a "pequeños detalles" sobre el uso de la rejilla de ASP.NET (DataGrid)... y lo dejé antes de llegar al tercer capítulo. Claro, éste era mi primer libro sobre ASP.NET, y era un completo novato en la materia. Al poco tiempo comprendí el motivo tras esta organización del libro: Dino Esposito es un autor muy popular dentro del MSDN Magazine; es el encargado de la columna Cutting Edge. Además, el libro que estoy reseñando no fue diseñado para ser la primera lectura sobre ASP.NET, sino un libro más avanzado, con mayor énfasis, precisamente, en el enlace a datos, el uso de rejillas, trucos avanzados sobre el manejo del estado, etc. Y, efectivamente, ahora que conozco un poco más la materia, este libro se ha convertido en un instrumento que consulto con mucha frecuencia.

El libro tiene unas 380 páginas y está dividido en diez capítulos, organizados a su vez en tres partes. La primera parte, como dije antes, se ocupa del enlace a datos en ASP.NET, el uso de rejillas, plantillas de columnas y edición in situ. La segunda parte trata sobre técnicas reales de integración: cómo aprovechar técnicas como code behind y la herencia, controles de usuario, creación de informes avanzados, y la forma correcta en que se deben leer datos procedentes de bases de datos o fuentes XML. La tercera y última parte se ocupa de algunos temas relacionados con la integración de técnicas: hay un capítulo, por ejemplo, sobre servicios Web... aunque, como es lógico, no pueda cubrir este área en toda su extensión. En resumen: es un libro que recomiendo sinceramente, como segunda lectura sobre ASP.NET. Si necesita un libro para iniciarse en estos temas, sin embargo, es preferible que recurra a Essential ASP.NET, reseñado a continuación.

  Essential ASP.NET with Examples in C#
Es opinión unánime de que éste es el mejor libro disponible hasta el momento sobre ASP.NET. Su autor, Fritz Onion, es prácticamente desconocido como escritor; al menos, no existen más libros firmados con su nombre en Amazon, excepto la versión de este mismo libro para VB.NET. Y por lo que he tenido tiempo de leer en el poco tiempo que le he dedicado, puedo confirmar la buena valoración sobre este libro.

El libro tiene cerca de 400 páginas, organizadas en once capítulos. El primer capítulo explica la arquitectura de ASP.NET, y ya en el segundo capítulo estamos leyendo sobre Web Forms. Uno de los errores más grandes al explicar ASP.NET es comenzar con los aburridos detalles de configuración y seguridad, y este libro evita la trampa: la configuración se retrasa hasta el capítulo tres, y los temas de seguridad se dejan para el último capítulo. Hay también material sobre módulos y manejadores HTTP personalizados, técnicas de caché, enlace a datos, manejo del estado, control de errores y controles creados por el programador. Evidentemente, dado el tamaño relativamente pequeño del libro, necesitará material adicional. Mi recomendación es que, una vez que haya terminado con este libro, eche un vistazo al libro de Dino Esposito mencionado en esta misma página, que pone más atención en el uso práctico de las técnicas de enlace de datos.

  Essential .NET Volume 1: The Common Language Runtime
Este libro, escrito por Don Box con la colaboración de Chris Sells, pertenece a la misma línea que Applied Microsoft .NET Framework Programming; Don Box, dicho sea de paso, es también el autor de Essential COM, un bestseller en su momento.

Essential .NET está escrito desde la perspectiva de un programador de sistemas. Contiene poco código fuente y, a pesar de tratar un tema que se supone la entrada a la plataforma .NET, no lo recomendaría como primera lectura sobre este sistema. Eso sí, una vez que tenga un nivel aceptable de familiaridad con .NET, los temas que encontrará en este libro no los verá en ningún otro lugar. Por ejemplo, todo el mundo escribe sobre cómo llamar componentes antiguos desde .NET, pero, ¿cómo cargar y ejecutar la CLR desde una aplicación nativa de Windows?

Es también curioso que el libro tenga el subtítulo: Volumen 1. Será interesante completar la serie.

  Microsoft ASP.NET Programming with Visual C#.NET Step by Step
El área de .NET en la que más me ha costado encontrar un buen libro, es la programación en ASP.NET. Probablemente se debe a la multitud de aspirantes a programadores que inundaron el sector durante el boom de las Dot Com, y a los malos hábitos creados por la programación con lenguajes de script...

Este libro, en particular, escrito por G. Andrew Duthie, no es un mal libro, pero, como mínimo, hay que reprocharle cierta confusión en la elección de los temas. Es un libro de "sólo" 600 páginas, que teniendo en cuenta la profusión de capturas de pantallas, es un tamaño pequeño, que no da para aventuras enciclopédicas. El primer y el segundo capítulos son típicos: cómo ejecutar una aplicación escrita con ASP.NET, y cómo crear una a golpe de asistentes. Estupendo, pero llegas al tercer capítulo y te encuentras la gran advertencia: "este capítulo está dedicado a lectores con poca o ninguna familiaridad con la programación". ¡Cáspita! No se trata de lectores que sepan C pero desconozcan C#: Mr. Duthie ha intentado escribir un libro para mi sobrinita María. Si este fuese el caso, sugeriría que para la próxima edición, incluyesen imágenes en colores. Con pies de grabado en plan: "el Osito Tito siempre libera sus recursos", o "la gran aventura de Mickey con la caché de objetos".

Pero, probablemente, me equivoque. Porque el siguiente capítulo se llama "Gestión del estado" y a continuación nos abofetean nada menos que con "Configuración de ASP.NET" y "Seguridad en ASP.NET". Supongo que aquí María bostezaría y dejaría caer el libro... Menos mal que el capítulo número siete se titula "Creación de formularios Web", y que a partir de ese punto las cosas parezcan mejorar. Lástima que haya que esperar a la página 189 para este acontecimiento.

Estoy convencido de que la próxima versión de este libro, si llega a existir, será muy buena. Pero el autor deberá restructurar drásticamente el índice de materias. O sustituir el artefacto de la portada, sea lo que sea, por un dibujo de la abeja Maya.

  Compiling for the .NET Common Language Runtime (CLR)
Project 7 es el nombre de un proyecto poco conocido de Microsoft, llevado a cabo antes de que .NET se hiciera público. Microsoft invitó a programadores conocidos por su experiencia en la creación de compiladores, y les planteó como reto la creación de compiladores para diferentes lenguajes que generasen código IL. El objetivo era probar la viabilidad del Common Language Runtime y de la definición del código intermedio. Entre los lenguajes que se implementaron como parte de Project 7 estuvieron Eiffel, Smalltalk, COBOL, Component Pascal y unos cuantos más.

John Gough, el autor de este libro, fue precisamente el encargado de crear el compilador para Component Pascal, una variante de Pascal con algunas características prestadas de Oberon-2. En este libro se describe el funcionamiento de este compilador, haciendo énfasis en la descripción de la máquina virtual de .NET y en la generación de código para ella. No es un libro sobre técnicas de compilación, por supuesto, porque ese es un tema demasiado extenso, pero incluso bajo esas restricciones de su planteamiento, el libro llega casi a las 400 páginas.

El libro comienza describiendo el Common Language Runtime, o CLR, y el Common Type System, o CTS. Luego pasa a explicar qué son los árboles de sintaxis abstracta, o ASTs. Esta es una vieja técnica que es indispensable para compilar lenguajes como Eiffel, Java y el propio C#. A diferencia de Pascal, estos lenguajes no están sujetos a las restricciones de compilación en una pasada, y desde cualquier instrucción o declaración puede hacerse referencia a cualquier otra declaración, aunque se encuentre definida más adelante en el mismo código fuente (recuerde el truco forward de Pascal). El siguiente paso que da el libro es explicar la evaluación de atributos semánticos sobre estos árboles de sintaxis abstracta, y finalmente se pasa a la generación de código. Primero se muestra cómo generar código en ensamblador IL, para procesar con la herramienta ILASM, y luego se explica la generación directa de código mediante Reflection.Emit. Está claro que no a todos interesará este libro, pero advierto que está muy bien escrito y se lee con verdadero placer. Caviar para apetitos refinados...

  The C# Programming Language
Este libro tiene tres autores: Anders Hejlsberg, Scott Wiltamuth y Peter Golde, y los tres formaron parte del equipo que diseñó C#; Peter Golde se retiró posteriormente, mientras que Anders y Scott se han encargado también de la segunda versión. Anders Hejlsberg, para los pocos que no lo conozcan, fue el responsable de los compiladores para Turbo Pascal en Borland, y también creó Delphi Pascal, antes de abandonar Borland por Microsoft.

El libro en cuestión es una referencia, no una introducción al lenguaje. Pero eso es lo que lo hace imprescindible. C# está lleno de pequeños detalles que pueden confundir a quien intente extrapolar construcciones de otros lenguajes. Esta edición, muy cuidada y con tapa dura como corresponde a una referencia, incluye la definición formal del lenguaje para la versión 1.1, y varios capítulos con las adiciones de la versión 2.0 relacionadas con los tipos genéricos, métodos anónimos, iteradores y clases parciales. Solamente se echan de menos los tipos anulables (nullable types) que se añadieron en un momento posterior.

Si quiere programar en serio con C#, le recomiendo sin reservas este libro.