Recursos Java esenciales

Un listado exhaustivo de libros, sitios, blogs, eventos indispensables y más

Cuando una plataforma como Java™ tiene tanto éxito, un efecto secundario es la vasta proliferación de bibliotecas, herramientas e ideas — esta ventaja puede dejar a muchos principiantes en el lenguaje Java a la deriva en un mar de material. En este artículo, el autor (un sólido colaborador en ese abrumador mar) busca por las extensas mareas y presenta una lista de los recursos clave que cualquier desarrollador Java prometedor debería tener.

Ted Neward, Director, Neward & Associates

Ted NewardTed Neward es el director de Neward & Associates, donde hace consultoría, es mentor, enseña y hace presentaciones sobre Java, .NET, XML Services y otras plataformas. Vive en Seattle, Washington.



10-12-2012

Desarrolle habilidades de este tema

Este contenido es parte de un knowledge path progresivo para avanzar en sus habilidades. Vea Conviértase en un desarrollador Java

Desde su introducción a la comunidad de la programación en su conjunto en 1995, la plataforma Java ha evolucionado más allá de la visión "applets en todos lados" que los primeros expertos y promotores Java imaginaron para un mundo Java. En cambio, el mundo Java emergió hasta la biblioteca Swing, se fusionó alrededor de servlets, lo llevó a J2EE, se encontró con EJB, hizo un paso hacia Spring y Hibernate, agregó genéricos y se hizo más dinámico, luego se funcionalizó y continúa creciendo en todo tipo de direcciones interesantes, incluso mientras escribo esto.

Lo que deja un poco abrumado al programador Java que no creció junto con el lenguaje.

Como orador, bloguero, asesor y mentor, los programadores júnior e intermedios que trabajan en el espacio Java me piden frecuentemente recursos para ayudarlos a dominar este mundo amplio, complejo y aparentemente infinito. Hace algunos años, intenté contestar la pregunta al publicar una Lista de lectura recomendada, pero recientemente el editor Java en developerWorks me pidió que elabore una lista más amplia de recursos, que no se centre exclusivamente en libros. — Una buena idea, si se considera que la lista había crecido hasta un punto donde un posible consumidor podría pasar fácilmente la próxima década leyéndola y aún así no hacer mella en los contenidos.

Para evitar que aparezca la parcialidad o la influencia indebida, decidí hacer un pedido de recursos a la blogósfera: Sitios web, conferencias, libros, blogs, herramientas, todo lo que pareciera de interés y utilidad para desarrolladores Java mientras progresan en el espacio y pueda serles útil al navegar la gran magnitud de lo que está disponible.

La respuesta fue enorme (lo cual agradezco a todos aquellos que respondieron).

Un comentario rápido a modo de explicación antes de comenzar: Estos recursos no son necesariamente los recursos más populares, más poderosos o más influyentes en el ecosistema Java —esa lista puede ser completamente diferente (aunque sospecho que muchos recursos aparecieran en ambos lugares); en cambio, estos son los recursos que cada desarrollador Java prometedor debería tener en su navegador, en su librería o en su calendario para asistir. Como con cualquier tipo de lista de esta clase, siempre hay lugar para un debate razonable sobre lo que debería incluirse que no se incluyó o lo que se incluyó que no debería haberse incluido.

Sin más ceremonia, procedamos.

Sitios web y portales web para desarrolladores

La web ha cambiado claramente la naturaleza de materiales y publicaciones compartidas (y no se me escapa que usted está leyendo esto en este momento en Internet), por lo que parece razonable comenzar el estudio de recursos Java clave con sitios web y portales para desarrolladores clave que cada desarrollador Java no debería perder de vista.

En muchos casos, el valor de un website o portal para desarrolladores no está solo en los recursos ofrecidos o los artículos publicados allí, sino también en la comunidad que rodea a ese portal o website. Los días de la página web estática y de descarga de archivos están pasando rápidamente a un segundo plano con respecto del modelo más "activo" de foros, artículos de subprocesos y debates interactivos entre no solo los desarrolladores que frecuentan ese sitio y conforman su comunidad, sino también los asociados de la comunidad y los propietarios del portal. Así como la tecnología evoluciona y los desarrolladores deben evolucionar para mantenerse a la par, un portal debe evolucionar para mantenerse a la par con las necesidades cambiantes de su comunidad. Tener una relación abierta con su comunidad es un componente crítico para mantener vivo un portal.

La lista de sitios web (con URL):

  • java.sun.com
    Este es el lugar desde el cual se origina el JDK y, a menudo, es el primer sitio al que acuden los desarrolladores Java para descargar una copia del JDK y la documentación. Pero más allá de eso, también es una buena fuente de información sobre toda la plataforma Java, que incluye una sección muy rica en la JVM en sí (Hotspot), que describe con una profundidad sorprendente las internas de la JVM.
  • java.net
    El sitio Java.NET es una mezcla heterogénea de proyectos de código abierto, documentación, blogs, wikis, noticias y otros recursos de la comunidad. Es una veta madre de información sobre la tecnología Java; probablemente sea demasiado. Sin embargo, navegar por la lista de proyectos puede llevar a algunas verdaderas joyas, como el proyecto FEST-Swing, que tiene como objetivo crear una "interfaz fluida" para desarrollar aplicaciones Swing, que las hace enormemente más simples para crear pruebas de unidad sobre ellas.
  • InfoQ
    Creado por Floyd Marinescu, editor en jefe fundador de The ServerSide, InfoQ difiere de muchos de los otros recursos enumerados aquí en que es explícitamente neutral desde el punto de vista tecnológico, al cubrir no solo el código Java sino también .NET y Ruby, y al ofrecer una gran cobertura de abordajes y entendimientos ágiles. A pesar de que la comunidad que comenta en InfoQ no es tan grande o tan diversa como la de TheServerSide, el debate es por lo general más dócil y menos hostil.
  • TheServerSide
    A menudo llamado "el Slashdot de Java", TheServerSide fue en el primer lugar en el que los temas Java empresariales se cuestionaron abiertamente, se debatieron acaloradamente y se buscaron enérgicamente. Algunas de las primeras reflexiones sobre los contenedores ligeros (como Spring caracterizó) ocurrieron aquí y muchos de los individuos que ahora se los considera "líderes de opinión" en la comunidad Java surgieron aquí. Aunque recientemente los debates a veces han adquirido el carácter de peleas a gritos, TSS siempre será el hogar original de mucho de lo que se convirtió en el ecosistema Java en el que ahora vivimos. Como tal, siempre será una fuente de información, aunque sea histórica.
  • DZone
    DZone comenzó como un recurso para desarrolladores Java pero más recientemente ha comenzado a ramificarse en los otros sectores tecnológicos, que incluye .NET y Ruby, así como también varias otras "zonas" actuales de cobertura. Como tal, si bien es posible para el desarrollador Java centrarse por completo solo en la zona Java, también sucede un poco de polinización cruzada y es el desarrollador sensato quien sacará provecho de eso.
  • IBM® developerWorks
    Si está leyendo este artículo, entonces ya ha encontrado dW. En el interés de la revelación absoluta, debo comentar que he contribuido con otros artículos además de este para este sitio, pero puedo decir con integridad que dW constituye un gran recurso de artículos y material acerca de la codificación Java y la JVM. En particular, asegúrese de verificar Java theory and practice, una serie de larga duración de Brian Goetz, que incluye una descripción en tres partes del recopilador de basura JVM que presenta los conceptos principales de GC de un modo sorprendentemente accesible.
  • JavaWorld: Luego de una larga interrupción, JavaWorld ha retornado a su gloria juvenil con una imagen renovada, contenido técnico de alta calidad y una taxonomía de tema práctica para encontrar rápidamente los tipos de artículos que usted busca. No se pierda los extensos archivos, que se remontan a su comienzo e incluyen artículos de algunos de los colaboradores más distinguidos de la comunidad Java.
  • Artima
    Creado por Bill Venners, Artima ha evolucionado hacia una colección enorme de artículos, blogs y entrevistas, no todo se centra completamente en el desarrollo Java y escriben allí algunos de los nombres más reconocidos en el espacio Java. (Verifique la incredulidad de Bill Joy sobre la complejidad del lenguaje Java luego de que se lanzara Java 5 y el ejemplo que usa para justificar sus preocupaciones — Enum<> — como un ejemplo clásico). Merece una visita.

Observe que para muchos de los anteriores, sacar provecho por completo del sitio/portal requerirá algún modo de registro. Hasta el momento de esta escritura, todos son esencialmente gratis y requieren un inicio de sesión con nombre de usuario/contraseña únicamente para que puedan identificar excepcionalmente a visitantes y una dirección de correo electrónico para que puedan enviar boletines informativos o correos electrónicos periódicos. (Según entiendo, todos permitirán decidir no brindar el correo electrónico pero no lo he intentado porque descubro que cada tanto el boletín informativo me cuenta algo que me resulta interesante y que todavía no sabía, lo que resulta en información realmente útil de recibir en mi bandeja de entrada).

Weblogs

Los blogs representan un modo fácil para los desarrolladores de permanecer informados sobre pensamientos, memes, conceptos, ideas, debates y otras discusiones intelectuales sobre tecnología y ser conscientes de esos "líderes de opinión" que parecen ser influenciables dentro de las esferas tecnológicas específicas. Mejor aún, los blogs pueden consumirse localmente por medio de lectores de feed que despliegan localmente los artículos/entradas para que puedan consumirse incluso mientras estén offline. De hecho, los blogs se han hecho tan omnipresentes que los dispositivos especializados (como el Amazon Kindle) pueden facilitar el obtener la información que los desarrolladores quieren.

La clave es determinar cuál de los, literalmente, millones de blogs leer. Cada desarrollador tendrá sus propias preferencias sobre qué blogs leer y cuáles no, pero algunos de los blogs para considerar comenzar a leer incluyen los siguientes:

Recuerde que (la mayoría de) estas son opiniones personales. A veces las opiniones compartidas allí más adelante resultarán ser objetivamente incorrectas; — nunca base una decisión de producción exclusivamente en la información de una entrada de blog. Pero si se usa para desestancar el proceso de pensamiento, los blogs pueden ser un recurso de mejora de aptitudes increíblemente poderoso.

Paquetes o bibliotecas

Realizar un seguimiento de todas las bibliotecas y paquetes en el ecosistema Java es una tarea, una que puede convertirse en algo demasiado fácil de ignorar para el desarrollador Java. Como resultado, los desarrolladores a veces se perderán el hecho de que algo que están escribiendo a mano ya existe dentro de la plataforma. (¡Si solo se detuvieran para descubrirlo!).

La siguiente es mi lista de los "Diez paquetes principales que todo desarrollador Java debería saber al menos que existe (e idealmente saber cómo usar)":

  • java.lang.reflect
    Hay tantas bibliotecas y herramientas Java que dependen del paquete de Reflejo que aprenderlo se ha convertido casi en un requisito (si por ninguna otra razón que entender cuando se lo use fallará debido a la política de seguridad u otros tipos de discrepancias de infraestructura). Mano a mano con Reflejo también están Java 5 Annotations y java.lang.annotation.
  • javax.script
    Con el énfasis en los lenguajes dinámicos que atraviesan el ecosistema Java, saber cómo usar los lenguajes de programación desde dentro del código Java puede permitirle a los desarrolladores ampliar sus sistemas sin tener que pasar por el costoso ciclo de compilación, enlace, ejecución, prueba.
  • javax.management y java.lang.management
    El paquete de gestión, también conocido como Java Management Extensions (JMX), es una herramienta potente para supervisar las aplicaciones Java mientras se ejecutan; como tales, los desarrolladores deberían familiarizarse y sentirse cómodos con el JMX para desarrollar un software que realmente puedan usar los administradores del sistema. No olvide observar la herramienta JConsole que envía con el JDK como un ejemplo de un panel de instrumentos de estado de aplicación, como un ejemplo de lo que se puede desarrollar y una herramienta útil en sí misma. (Preste mucha atención al script de demostración que desarrolla un plug-in de JConsole para activar el soporte de programación dentro de la JConsole, una herramienta potente en las manos de cualquier administrador competente del sistema).
  • java.util.concurrent.*
    La concurrencia es lo más grande que los desarrolladores enfrentarán en la próxima década y la principal arma que los desarrolladores Java blandirán contra los errores de concurrencia serán las clases en este paquete y sus subpaquetes (.atomic y .locks). Aprender a usarlo será tan crítico, si no es que más, como aprender a grabar una clase. Apréndalo, vívalo, ámelo.
  • java.util
    Lo mismo sucede con las clases en java.util. Estas se introducen tan frecuentemente, las clases Collections en particular, que es discutible que java.util.* deba importarse automáticamente como se hace con java.lang.
  • java.beans
    JavaBeans son, sin duda, uno de los elementos principales utilizados en todo el ecosistema Java, utilizando el nombre con un menor grado de marketing, "POJO" (plain old Java objects). Todavía se basan en el código JavaBeans, API y especificación, por lo que pasar un poco de tiempo con las clases en java.beans solo puede ayudar a grabar POJO mejores.
  • java.util.logging
    Los registros de diagnóstico y auditoría se convierten muy rápidamente en herramientas potentes para realizar un rastreo de la ejecución de programas en funcionamiento ya sea para propósitos de depuración o propósitos de administración y supervisión. Mi consejo: Aprenda a usar este paquete y su primo de código abierto log4j).
  • java.security.*
    Los API de seguridad Java, el mecanismo de política y las clases de permisos son una parte principal de lo que hace que el entorno Java sea una plataforma de informática segura, pero solo si los desarrolladores saben cómo aprovecharla. No se acerque a los API criptográficos — no los use hasta que haya agotado toda otra opción que tenga disponible. No son difíciles de utilizar pero obtener bien la criptografía (es decir, sin enormes fallas) es algo que toma años y muchas revisiones de colegas, de otros expertos en criptografía. Utilice primero otros mecanismos, como SSL/TLS y las clases GuardedObject/SignedObject/SecureObject.
  • javax.xml.parsers.*, javax.xml.bind y javax.xml.transform.*
    XML cobra relevancia en la mentalidad del desarrollador Java y poder analizarlo (ambos directamente por medio de una biblioteca XML objeto) y transformarlo (utilizando XSLT) es una aptitud poderosa para tener, si no, absolutamente necesaria.
  • javax.sound.*
    De acuerdo, no es una aptitud necesaria pero saber cómo hacer funcionar efectos de sonido de vez en cuando puede ayudar a animar un código que de otro modo sería rutinario. Además, a veces el sonido puede usarse para ofrecer señales y retroalimentación de un sistema cuando no hay un monitor inmediatamente a mano. Y más allá de eso, simplemente hay algo morbosamente divertido en una máquina que lanza un rastreo de pila y que reproduce un grito agudo proveniente de su película de terror favorita para informarle al usuario que algo malo acaba de suceder.

Por supuesto, hay varios otros paquetes, tanto dentro del JDK y fuera del JDK, que merecen aprenderse, pero dominarlos lo pondrá en una buena posición para la mayoría de los proyectos, sin mencionar para la mayoría de las entrevistas de trabajo.

Conferencias

Las conferencias continúan teniendo un rol principal en la educación de los desarrolladores Java, particularmente para esos temas que todavía no han acumulado suficiente masa crítica para que se filtren aún en las colecciones de temas de las grandes compañías de capacitación. También representan una excelente oportunidad para que los desarrolladores se encuentren con otros desarrolladores de todas las aptitudes y responsabilidades, lo cual le da al asistente la oportunidad de hacer algo bastante impactante (y completamente necesario): descargar qué tan malo es el lugar donde usted trabaja.

Asistir a una conferencia también tiene un efecto secundario útil (y uno que puede convertirse en elementos más grandes y mejores si se los manipula activamente): Aumentar el grupo de colegas desarrolladores del asistente. Gracias a la omnipresencia extendida del correo electrónico, las listas de correos electrónicos (como GoogleGroups o Yahoo Groups) y otras herramientas ligeras de comunicación de grupo, se hace más fácil que nunca realizar un seguimiento de las personas que se encontraron en la conferencia. Esas amistades entabladas en el almuerzo o en las fiestas nocturnas pueden durar toda una vida y dar frutos con el tiempo, especialmente cuando se evalúan tecnologías nuevas.

Deje que las palabras de un veterano con 30 años de experiencia, asistente, orador, organizador y concurrente de conferencias (no yo, sino un amigo) sean su guía: "Los novatos en las conferencias van por las sesiones, los veteranos van por las fiestas y la gente. Las fiestas lo ayudan a conocer personas y las personas lo ayudan a hacer avanzar su carrera".

Las conferencias incluyen las siguientes:

  • No Fluff, Just Stuff
    A esta en particular la apruebo completamente y no solo porque soy un orador regular allí, sino porque siete de los Diez principales oradores JavaOne 2007 son oradores en NoFluffJustStuff (actuales o anteriores). En ningún otro lugar los desarrolladores Java encontrarán el mismo foco intenso sobre temas técnicos a un mejor punto de precio o mantenidos en una ubicación más conveniente: su ciudad natal. (En más de 30 exposiciones por año en todo el continente norteamericano — y con expansión hacia Europa y Asia en el horizonte — las posibilidades son que sea posible conducir hasta una exposición NFJS en lugar de desembolsar los miles de dólares necesarios para viajar a alguna ciudad lejana y hospedarse en hoteles). Tampoco es sorpresa alguna que una cantidad de los libros recomendados en este artículo estén escritos por autores que aparecen en las exposiciones NoFluff: Los organizadores de NFJS hacen un gran esfuerzo para encontrar la "fuente primaria" de diversos temas de Java y Desarrollo ágil.
  • JavaOne
    Es grande, es impersonal y siempre se hace en San Francisco (lo cual es un pro o una contra, según el presupuesto de viaje de su compañía) pero ninguna otra reunión en el planeta junta a tantos líderes e innovadores Java clave en un solo lugar como JavaOne lo hace.
  • JAOO
    Para no dejar a nuestros hermanos Java europeos desamparados, JAOO se hace una vez al año en Aarhus, Dinamarca y ha se ha realizado continuamente por casi dos décadas sin señal de disminuir la velocidad. No solo JAOO atrae a algunos oradores y autores de primera, sino que también tiene la distinción relativamente rara de ser una conferencia de tecnología cruzada, es decir que un asistente se puede sentar en una sesión Java en la mañana, conversar con algunos desarrolladores C++ en el almuerzo, ponerse al día con los últimos desarrollos de Microsoft's® Silverlight (o con algo más que sea nuevo) en la tarde y compartir cerveza con los Smalltalkers en la noche. Si usted quiere ampliar su punto de vista, JAOO o la conferencia similar, QCon (que se realiza junto con la gente de InfoQ) es un excelente lugar para comenzar. Y para aquellos hermanos Java que viven en "Down Under", JAOO fue a Brisbane y Sídney por primera vez este año (2008). Todas las indicaciones señalan que volverán en los próximos años.
  • Devoxx
    Anteriormente JavaPolis, esta conferencia en Amberes, Bélgica, que está completamente llena, con un crecimiento extraordinario, es un gran modo para conocer a sus homólogos europeos (y para probar la excelente cerveza belga mientras tanto). Los oradores son de primera y se centran en temas de vanguardia. Hay también una exposición comercial de gran tamaño y muchas oportunidades para interactuar con sus compañeros desarrolladores.
  • Jazoon
    Es una conferencia relativamente nueva en la escena, la conferencia Jazoon abrió en Zúrich (Suiza) en el 2007. Con nombres como Martin Odersky (creador de Scala), Neal Gafter y Simon Phipps (Chief Open Source Officer de Sun) en las listas, Jazoon parece estar reuniendo una interesante tanda de oradores. Centrado completamente en temas Java y al estar justo en el pleno centro de Europa, Jazoon parece ser una buena conferencia para que los hermanos Java europeos marquen en sus calendarios.

Existen otras conferencias con una variedad de distintas audiencias de destino pero las anteriores se centran directamente en el desarrollador Java. Los desarrolladores que buscan extender su visión del mundo deberían considerar asistir a una conferencia de tecnología "alternativa", como los diversos lenguajes Perl, Python, Ruby o, incluso, reuniones .NET que se realizan en todo el mundo. Mantener su mente abierta a ideas nuevas a veces requiere observar un conjunto completamente nuevo de problemas.

Libros

Ningún recurso más grande disponible para el desarrollador es tan fácil de conseguir como el modesto y tradicional libro. A tan solo la distancia de su librería local (o si usted vive en el interior, su navegador web y Amazon) se encuentra un tesoro escondido de conocimiento y experiencia técnica, si tan solo fuera posible ordenar la infinidad de clones "me-too" "Java for Dummies".

Estos tomos asumen que el lector ya tiene un conocimiento práctico del lenguaje Java y del conjunto de herramientas. Los libros iniciales de Java son asombrosamente comunes y muchos de ellos tratan del mismo material básico. Seleccionar uno se convierte en una opción de abordaje, de estilo de escritura del autor e incluso a veces se basa en la inclusión, o no, de soluciones a los ejercicios (si se incluyen ejercicios) en el CD del libro.

Una vez que haya pasado los conceptos básicos, considere los siguientes:

  • Effective Java (2.º ed.) de Joshua Bloch
    El primer libro que debería estar en el estante de cualquier desarrollador Java, punto, definitivamente, sin excepción.
  • Java Concurrency in Practice de Brian Goetz
    El segundo libro que debería estar en el estante de cualquier desarrollador Java porque cada desarrollador Java, le guste o no, opera dentro de un entorno multiproceso.
  • Better, Faster, Lighter Java de Justin Gehtland y Bruce Tate
    Esta lectura delgada presentada como la "droga de puerta de enlace" para muchos desarrolladores Java para tomar los entornos de "contenedor ligero", liderada por Spring y que llena un espacio en blanco que dejaron la mayoría de los grandes y sólidos servidores EJB como WebSphere u otro middleware de proceso de transacción. Los autores hacen un trabajo fantástico al guiar a través de un ciclo de desarrollo basado en POJO, señalar las fortalezas y debilidades de la idea, y cómo tomar un abordaje (más) ligero para crear aplicaciones empresariales con herramientas como Spring y Hibernate no significa reducir la funcionalidad o la capacidad del sistema resultante.
  • Effective Enterprise Java de Ted Neward (yo)
    Setenta y cinco maneras de asegurarse de que sus aplicaciones empresariales Java (ya sea que estén escritas con Spring, EJB, Web services o ninguna de las anteriores) no sean una porquería. Así como Effective Java no está destinado para el programador Java novato, Effective Enterprise Java no está destinado para el desarrollador que apenas está aprendiendo los conceptos básicos del espacio "Java empresarial".
  • Release It! de Michael Nygard
    Cualquiera que busque grabar un software destinado para servidores de producción necesita leer este libro — es una excelente observación reveladora sobre los aspectos que pueden salir mal en la producción y cómo lidiar con posibles fallas, ya sea recuperándose de ellas o evitándolas por completo.
  • Inside the Java 2 Virtual Machine de Bill Venners o Component Development for the Java Platform de Stuart Halloway
    Una vez que el desarrollador Java ha aprendido el lenguaje, llega un momento en el que la plataforma fundamental — la Java Virtual Machine en sí, es decir, asuntos como la recogida de basura y los objetos de Referencia, los Cargadores de clases, subprocesos y supervisores, y otros — se convierte en la siguiente gran frontera a explorar. Cualquiera de estos libros (o ambos) sirven como una guía útil para hacer exactamente eso. El inconveniente más grande de cada uno es su edad relativa: Inside se publicó en la época de Java 1.2 y Component-Based, poco después. Afortunadamente, gran parte de la Java Virtual Machine permanece sin cambios desde entonces, por lo cual cuando el lector descubra un detalle que es diferente de JDK 1.2, estará listo para dejar atrás el libro y seguir con el tema siguiente.
  • Patterns of Enterprise Application Architecture de Martin Fowler y Enterprise Integration Patterns de Gregor Hohpe y Bobby Woolf
    Ambos son libros de patrones, tratan sobre abordajes e ideas de diseño, y como tales asumen que la mayoría de los lectores han leído el libro original "Gang of Four", Design Patterns de Gamma, Helm, Johnson y Vlissides. Los libros de patrones generalmente ayudan a los desarrolladores a crear diseños más fuertes al darles algunos pilares fundamentales conceptuales básicos para girar y desplazarse de lugar pero pueden perder fácilmente su eficacia cuando se los ve como un objetivo en sí mismos.
  • Java Power Tools de John Smart
    Varias personas sugirieron este libro, una introducción moderada a una variedad de herramientas disponibles en el ecosistema Java. Smart también ofrece un curso de formación (Java Power Tools Bootcamp) sobre el libro pero la forma más fácil en que la mayoría de los desarrolladores obtendrá la información será por medio de la versión impresa.
  • The Pragmatic Programmer de Andy Hunt and Dave Thomas
    Este libro debería estar en el escritorio de todo programador, a pesar del lenguaje o plataforma real que se esté usando. Este es un libro de todos los tiempos y los programadores lo citarán en las décadas venideras. Considérelo en la misma clase que el clásico de Fred Brooks, The Mythical Man-Month.
  • The Productive Programmer de Neal Ford
    Este lanzamiento reciente parece ser tan clásico en cada detalle como Pragmatic Programmer, centrándose en los diversos consejos, trucos y técnicas que los programadores pueden usar para mejorar su productividad mucho más allá de lo que IDE les da.
  • The Pragmatic Starter Kit
    Consiste en Pragmatic Unit Testing (with JUnit), Pragmatic Project Automation y Pragmatic Source Control (with Subversion). Cada uno cubre el núcleo de cada tema en un debate centrado y ligero que toca directamente la esencia del asunto sin muchas distracciones. Project Automation, especialmente, es un excelente aperitivo para el libro Ant in Action, pero también cubre los porqué y los qué de un buen proceso de desarrollo.
  • Ant in Action (2.º ed.) de Erik Hatcher and Steve Loughran
    Ant es el programa de utilidad de desarrollo inaugural para la plataforma Java (vea la siguiente sección acerca de herramientas para obtener más detalles) y este libro es sin duda la mejor introducción al amplio poder que Ant representa. Además de aprender cómo usar Ant, Ant in Action también demuestra la prueba de unidad, Integración Continua y prácticas de despliegue de producción, todo desde la perspectiva de las prácticas día a día del desarrollador Java práctico.

Herramientas

Así como construir una casa conlleva más que "tomar un martillo y comenzar a clavar tablas", el desarrollo Java conlleva más que "tomar su IDE y comenzar a arrojar códigos". Mientras un buen IDE desde luego es de enorme ayuda para escribir el código Java, otras herramientas pueden ofrecer un valor igual — si no es que mayor — que el IDE.

Sin ningún orden en particular...

  • El IDE
    Por supuesto, el debate de herramientas comienza con el IDE. En un esfuerzo para alejarse de las promociones comerciales, tanto Eclipse como NetBeans son de código abierto y gratuito, y por consiguiente ofrecen una atractiva opción de "primeros pasos".
  • Unit testing
    Aquí, el eterno favorito es el original que comenzó la revolución de prueba de unidad, JUnit, pero algunos otros se han deslizado hacia el uso popular, que incluye TestNG, y como es de esperar JUnitPerf, entre otros.
  • Continuous Integration
    Un servidor Continuous Integration verifica constantemente el código del control de origen, lo desarrolla, ejecuta las pruebas de unidad con respecto a este y reporta cualquier falla a los desarrolladores, generalmente por correo electrónico. Hay varias versiones de código abierto disponibles pero una que ha llamado mucha atención es Hudson, un servidor Continuous Integration con muchos plug-ins y una alta extensibilidad. El original es CruiseControl y por esa sola razón impone respeto.
  • El análisis estático
    FindBugs es una herramienta de análisis estático de código abierto que se ejecuta sobre el código Java, realiza un análisis profundo de método n para calcular todas las posibles rutas de códigos y reporta todo tipo de error y advertencia que encuentra, en base a un conjunto de reglas extensibles. Desarrollado por William Pugh (el mismo William Pugh que descubrió un error en el modelo de memoria Java), la demanda más grande de FindBugs por la fama es su habilidad para analizar el código Java por errores concurrentes, algo que cada programador puede agradecer.
  • Rastreo de paquete de red
    WireShark (que anteriormente solía llamarse Ethereal) les da a los programadores una visión de lo que está viajando por la red, dándoles una oportunidad para verificar que lo que se está desplazando por el cable es lo que se supone que se esté desplazando por el cable y que lo que no se supone que esté allí (por ejemplo, información confidencial o contraseñas en texto claro), no lo esté.
  • Virtualización
    Una herramienta de virtualización (o tal vez sea más preciso llamarla una plataforma) como VMWare, Xen, VirtualBox, o VirtualPC le ofrece a los programadores la habilidad de crear un entorno idéntico al que la máquina de producción estará ejecutando sin perder la productividad del entorno de la PC host. También proporciona un modo conveniente para tener un inicio para probar software "experimental" sin arriesgar la máquina que tiene que permanecer productiva. La mayoría de estas tienen algún tipo de opción libre si no son proyectos absolutamente de código abierto.

El hecho de que algunas de estas son herramientas comerciales no debería asustarlo. Si una herramienta le ahorra tan solo una hora por semana, ¿cuánto tiempo pasará antes de que esa herramienta se pague por sí misma? Y si la gestión no acepta ese argumento, una contabilidad cuidadosa del tiempo que se podría ahorrar con una herramienta en particular (sea ese tiempo del desarrollador o diagnóstico de producción o tiempo de ejecución) generalmente contribuye para convencerlos de la insensatez de una perspectiva tacaña: la codicia engaña a la sabiduría.

Agradecimientos a los colaboradores

Gracias a todos los lectores de mi blog (blogs.tedneward.com) que dedicaron tiempo de sus propias planificaciones para sugerir recursos que deberían incluirse en esta lista. Algunos (pero por supuesto no todos) de ellos son Greg Ostrovich, Ryan Slobojan, Hamlet D'Arcy (que pidió ser incluido como "solo otro exiliado intergaláctico que gana dinero en TI para comprar partes y arreglar sus hipercohetes, momento en el cual arreglará su fragata espacial y viajará de regreso a su planeta de origen"), Pierre Marc-Larocque, Prashant Rane, Marc Stock, Eric Kerwin, Morten Anderson, Alex e Yvonne Miller, Rahul Raj, Brian Sletten y Neal Ford.

Tendencias futuras a observar

Por supuesto, a los desarrolladores Java no les sirve gastar todo su tiempo estudiando las tecnologías de hoy si, cuando terminen, las tecnologías del mañana se han introducido y han hecho que todo lo aprendido de repente sea obsoleto. Mantener un ojo en lo que se está lanzando como "la ola del futuro" puede ser igual de importante si solo fuera para que cuando el CTO de la compañía por casualidad esté de pie a su lado en el ascensor y pregunte: "En fin, ¿qué es todo esto que escucho sobre los lenguajes funcionales? ¿Deberíamos estar investigando eso?", es posible que tenga una respuesta coherente.

En ningún orden particular, algunos de los "futuros" acerca de la plataforma Java incluyen los siguientes:

  • Lenguajes dinámicos
    Los lenguajes como Groovy y JRuby han generado otros proyectos que valen la pena observar como Clojure y Fan que experimentan con la noción de que un entorno con una tipificación menos rigurosa pueda brindar una mejor productividad y ofrecer más opciones. Sin embargo, esto no es un llamado para abandonar el lenguaje Java: Los mejores efectos provienen de la combinación de los dos.
  • Lenguajes funcionales
    Un nuevo camino abierto por Scala, los lenguajes funcionales tienen la ventajosa propiedad de ser implícitamente de fácil concurrencia debido a su tendencia general para promover funciones componibles y falta de estado compartido (aunque definitivamente pueden tener a veces una sintaxis que solo una madre podría amar). Jaskell es una implementación Haskell-on-JVM y Clojure (de nuevo) encaja aquí, al ofrecer una visión de cómo luce una memoria transaccional de software en forma de producción.
  • Cierres en Java
    Agregar soporte de cierre (también llamado lambdas o métodos anónimos) simplificará ciertas partes de la experiencia de codificación Java y se están debatiendo enérgicamente para la inclusión en el lanzamiento de Java 7. Dado cuán profundamente este debate está dividiendo a la comunidad, les corresponde a los programadores Java hacer un poco de investigación y ver a qué se debe tanto alboroto.
  • The DaVinci Machine
    Una nueva versión de la JVM diseñada para ser más amigable con otros lenguajes (como los lenguajes dinámicos y funcionales mencionados anteriormente), lo que puede o no terminar plegándose de nuevo al lanzamiento de la JVM convencional. Mantener en vista a esto puede ayudar a entender los pros y las contras de ejecutar lenguajes dinámicos/de programación en la JVM actual.
  • Desarrollos de la interfaz de usuario
    Entre Flash/Flex, Silverlight y JavaFX, el navegador web está por obtener una renovación de proporciones asombrosas (y probablemente atroces). Esto ni siquiera considera las nuevas infraestructuras web del servidor en el espacio Java o la excepción como Google Web Toolkit (GWT). La interfaz de usuario siempre ha sido y continúa siendo (y lo seguirá siendo en el futuro previsible) absolutamente excitante. Saber uno o dos, sin mencionar una biblioteca de "clientes ricos" como la biblioteca Swing o SWT, será un gran beneficio cuando intente desarrollar algo más interactivo de lo que pueden ofrecer las páginas HTML.

Así como con todo lo relacionado con el "futuro", tenga en cuenta que lo que se está debatiendo hoy puede resultar ser una dirección equivocada, una flor de un día, una distracción momentánea, una influencia en la industria o el próximo gran asunto. Mantenga una mente abierta y un saludable sentido de escepticismo en dosis iguales.

Resumen

No dude en contribuir a esta lista — producirá una mejor lista de recursos. Incluso el paso del tiempo cambiará sus contenidos porque el ecosistema continúa evolucionando, cambiando y creciendo. Esto es bueno. Si hubiéramos tenido que usar el mismo entorno Java que obtuvimos en 1995, ya hubiéramos pasado a algo distinto.

Sea activo en el ecosistema: contribuya con parches, sugiera mejoras y si todo lo demás falla, vaya y desarrolle una mejor ratonera propia. ¿Quién sabe? Su proyecto puede llegar a integrar esta lista de aquí a cinco años.

Recursos

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=tecnologia Java
ArticleID=850780
ArticleTitle=Recursos Java esenciales
publish-date=12102012