miércoles, julio 23, 2008

El centro de datos y el baño de las chicas

miércoles, julio 23, 2008 por Martín



From: ---- --------
Sent: Monday, May 5, 2008 4:37 PM
To: Everyone
Subject: Server Room Access

Hi all.

As you all are aware, we have new tenants that have moved into
the 2nd floor suites. The access to the server room is now via
the women’s bathroom.

There will be a sign on the woman’s door that can be changed
from OPEN to CLOSED and vice versa.

Should you need to enter the server room, please change the sign
to CLOSED. Once you are done, please change it back to OPEN.

Once you enter the bathroom, you will be able to access the
server room via the handicapped stall. Please close the stall
door prior to entry, just in case someone doesn’t see that the
bathroom is closed.

I know this isn’t ideal, but if we adhere to this protocol, I
don’t think anyone will be disrupted.

Thanks! Let me know if you have any questions.


Via Pingdom y DailyWTF.

sábado, julio 19, 2008

Emprendedores, SeedCamp y la importancia de validar una idea

sábado, julio 19, 2008 por Martín

A través de Web 2.0 Ireland he llegado a un post realmente interesante de Saul Klein.

El artículo no deja de ser un post publicitario de SeedCamp, y de como este foro puede ser una buena herramienta para validar las ideas de potenciales emprendedores. Me quedo especialmente con una parte del mismo:

In today's environment, if you are in your 20s and you put [society's] [your parent's] economic fears aside, there has never been a better time to be a first-timer.


Y es que aunque los emprendedores ahora mismo se enfrentan al gran problema de que parece que todo esté ya inventado, de que hay una competencia enorme y de que las compañías poderosas se hacen cada vez más y más poderosas e intentan abarcar más y más, lo cierto es que nunca ha sido tan barato el montar un negocio y nunca ha habido tantos recursos disponibles ya sea en forma de librerías, frameworks y utilidades Open Source (como Java, LAMP o RoR), en forma de alojamiento de gran rendimiento y muy barato (como Amazon EC2/S3) o en forma de enormes plataformas gratuitas para ejecutar nuestros programas (como Google Apps Engine).

Una de las cosas que lamento más es el no haber intentado algo hace cinco años, cuando había tantas cosas todavía sin inventar. Ahora ya me ha pasado el arroz de los 20s, pero quien sabe si en los 30s habrá un poco más de suerte. En estos momentos en los que la recesión aprieta, y los jóvenes ya no están obligados a meterse en una hipoteca porque la vivienda siempre sube, quizás tenga más sentido que nunca el tomarse un descanso, olvidar el yugo del ladrillo y emprender.

Resulta también muy interesante que en la cena del The Accelerator Group que se comenta en el post 12 de las 15 startups que se reunieron estuvieran utilizando Amazon Web Services o probando Google App Services. Todo el mundo estaba usando LAMP, Python; Django o Ruby; y por supuesto todo el mundo estaba usando o pensaba usar f8 o OpenSocial; y parece que todos estaban pensando también en el nuevo iPhone.

En mi caso, os voy a contar un secretillo. Tengo algo. O bueno, más correctamente tenemos algo. No estamos en el grupo de RoR (aunque algunos se dediquen también a ello), si no en el de Groovy y Java. Sólo voy a dar una pista, la palabra clave es empleo. Y realmente espero que pronto (posíblemente Otoño) tengáis la oportunidad de validar nuestra idea :)

lunes, julio 14, 2008

Algunas notas sobre el proceso de desarrollo en Linkedin

lunes, julio 14, 2008 por Martín


Tenía por aquí entre las cosillas pendientes de publicar unas transparencias sobre el proceso de desarrollo en LinkedIn que presentaron en la JavaOne de este año.



A mi LinkedIn es uno de los sitios que peronalmente me gusta más, especialmente desde que le dieron el cambio de imagen hace unos meses. Entre las cosas más destacadas de la presentación:


  • Ciclos de desarrollo de 2 a 4 semanas.

  • Los requisitos se dividen en pequeñas tareas con las que se rellenan tarjetas para cada desarrollador.

  • ¡¡Minimizar las reuniones!!

  • Test Driven Development

  • Más de 6500 tests de unidad e integración. Más de 500 tests de HTMLUnit.

  • El sistema de integración continua tiene más de 20 nodos. No se trata sólo de integración continua sino que ahí también se realizan los smoke tests.

  • El testing de integración puede llevar demasiado tiempo. Aquí easymock se muestra como una mejora importante.

  • 99% Java: Spring, ActiveMQ, Quartz, HTTPClient, Lucene, Grails, Jetty, DWR, jUnit, HTMLUnit, Hudson, Eclipse+Mylyn, EHCache. - Me llama la atención la ausencia de Hibernate o cualquier otro ORM. ¿JDBC Template "a pelo"?

  • Más de un millón de líneas de código, con ¡20 branches activas! Uso intenso de genéricos.

  • 50 ingenieros, 8 equipos. - Viendo el impacto de esta red y la importancia que ha adquirido, ¿no os esperaríais más?



La presentación sigue con notas sobre la arquitectura de LinkedIn, que también son interesantes para los que no conozcan los fundamentos básicos sobre los que se sustenta, es decir el mover la integridad a un segundo plano y el mantener toda la red de contactos de todo el mundo en memoria. El año pasado ya ponía algunos comentarios sobre el tema.

martes, julio 08, 2008

¿Es Google el nuevo malo de la película?

martes, julio 08, 2008 por Martín


En este blog hay bastantes entradas sobre Google, probablemente como en la mayoría de blogs sobre informática. Esta compañía ha aportado tanto a la informática y es tan, tan, tan poderosa que es casi imposible el dejar de hablar de ella. Pero como suele pasar en estas compañías, a medida que van ganando poder, van perdiendo simpatizantes, y Google no es una excepción.

Greg Linden comenta en su blog que lo mismo pasaba con Amazon cuando él trabajaba allí, allá por el 2000, y muestra diferentes referencias a artículos de prensa atacando a Google, todos bastante recientes, incluyendo uno de hace un par de días donde en el New York Times presentan a Google como una especie de tirano más preocupado en ahorrar costes (¿qué raro en una empresa, no?) que de mantener los actuales beneficios de sus empleados.

El caso es que normalmente esto no me llamaría la atención, si no fuese que justamente este fin de semana, cuarioseando en boards.ie (que son unos foros realmente importantes en Irlanda, hasta el punto de ser referenciados en la radio o de que profesionales de diferentes tipos ofrecen consultas grauitas en los mismos ) me encontré un hilo sobre trabajo donde gente que trabaja en Google da sus impresiones, tanto positivas como negativas, aunque parece que predominan estas últimas. Como sabéis, Google tiene los cuarteles generales en Europa localizados en Dublin

Esta opinión es realmente interesante, y muestra (si asumimos que es real) las fuertes diferencias entre puestos técnicos y no técnicos en la compañía. Otros hilos hablan de la enorme competencia dentro de la empresa, la importancia de relacionarse, y en resumen muchas cosas lejos de la imagen idealizada que pudiese tener mucha gente de la compañía. Pero ojo, no os quedéis sólo con lo malo porque también hay opiniones buenas, y los beneficios que se obtienen trabajando en Google son únicos (aunque por ahora no sea más en forma de acciones).

¿Qué os parece a vosotros? "An average large company", ¿como comentan por ahí? Sea como sea seguro que merece la pena trabajar ahí aunque sólo sea un tiempo para aprender de la experiencia.

jueves, julio 03, 2008

RPC: ¿Correcto o Conveniente?

jueves, julio 03, 2008 por Martín



Pincha aquí, pincha allí, he llegado a un excepcional artículo que publica Steve Vinoski en el número de Julio/Agosto de la revista Internet Computing del IEEE. El artículo se titula Convenience over Correctness y por suerte está disponible en PDF. Este artículo es de lo mejorcito que he leido desde hace bastante tiempo, y probablemente lo mejor que ha caido este año en mis manos.

Steve Vinoski ha sido una de las referencias en cuanto a computación distribuida, muy conocido en el mundo de CORBA, escribió una de las biblias de esta plataforma. Sin embargo de un tiempo para aquí Steve reniega de todo lo que tenga que ver con RPC y se ha convertido en un acérrimo defensor de los lenguajes dinámicos y también de erlang.

La verdad es que me pongo a leer el artículo, y no sabría que quotes pegar en este post. Son tantas las verdades escritas que da pena quedarse sólo con una frase. Quizás lo fácil sea escoger la que viene resaltada en el artículo mismo:

We have a general-purpose imperative programming-language hammer, so we treat distributed computing as just another nail to bend to fit the programming models.


Steve critica enormemente en el artículo a los lenguajes tradicionales y la comoditización que se ha hecho de RPC, un paradigma que funciona enormemente bien en redes locales pero que a la hora de moverse a Internet se olvida de factores tan importantes como la latencia, la tolerancia a errores o la escalabilidad del medio de transporte, entre otros, y que asume que todo funcionará bien y sin ningún tipo de fallos.

La carencia de constructores en los lenguajes tradicionales para especificar todos estos aspectos es una de las críticas que más resalta Steve, abogando por paradigmas como REST+HTTP que permiten especificar aspectos como la cacheabilidad de un servicio de manera sencilla.

Al mismo tiempo otro de los centros gravitacionales del artículo es la computación distribuida y la necesidad de evolucionar hacia lenguajes de programación como erlang que huyen de la inocencia del modelo RPC y que al tiempo que ofrecen constructores tan simples como "Pid ! Message" (envía el mensaje al proceso especificado por el Pid) ofrecen todas las ventajas asociadas con la computación asíncrona y distribuida.

La discusión sobre el artículo en su blog resulta también extremadamente interesante y además hay varios enlaces a otras columnas similares del mismo autor.

Por cierto, al que le interese puede ver también entrevista de InfoQ.

miércoles, julio 02, 2008

Tuneando transacciones con Spring

miércoles, julio 02, 2008 por Martín



Hace unos días escribía sobre la disponibilidad de las charlas de la SpringOne 2008. Una que he leido recientemente es la de Jurgen Holler, Transaction Choices for Performance, y en la que se entra en detalle sobre los diferentes tipos de transacciones en Spring y sobre como evitar las transacciones XA en la medida de lo posible.

Muchos de los que leen este blog sabrán lo que es XA, aunque supongo que otros no. Básicamente es una especificación que define como sincronizar el acceso a recursos totalmente diferentes dentro de una misma transacción, para lo que se utilizar un gestor de transacciones global. Un ejemplo sería el realizar desde un mismo método un acceso a base de datos y enviar un mensaje a algún broker de mensajería. XA te garantiza que el método se ejecutará preservando las propiedades ACID entre las diferentes llamadas.



En el screencast de arriba( y esto es una prueba y una excusa para probar este servicio ) os muestro un caso muy típico en el que se necesitaría sincronizar una base de datos y un servidor de mensajería. El método A actualiza la base de datos, envía un mensaje a una cola, realiza un proceso y termina su ejecución. Mientras tanto, en otra parte del sistema, un consumidor lee asíncronamente el mensaje en B y consulta la base de datos. ¿Cuál es el problema? Pues que como la cola de mensajería y la base de datos tienen sus propios gestores de transacciones, resulta que es muy probable que el mensaje llegue a B cuando la transacción en A todavía no se ha persistido en la base de datos, con lo que el consumidor estaría leyendo un valor incorrecto (ver phantom reads si no se es familiar con este concepto).

Utilizar XA soluciona este problema ya que un gestor de transacciones global se encargá de sincronizar todos los recursos de forma que por ejemplo el mensaje no se envie hasta que no se haya hecho commit de la transacción (aunque en realidad dependería de la implementación del gestor transaccional). A simple vista utilizar XA parece claramente una buena idea. Sin embargo, hay un problema muy importante, XA es enormemente lento. Muchísimo más lento que utilizar transacciones simples ( o que no usar transacciones ). Jurgen desmonta unos cuantos mitos sobre las transacciones XA en su presentación:

Me permito traducir los puntos:

  • Una aplicación empresarial crítica y seria necesita transacciones XA: No es cierto, muchas aplicaciones empresariales no utilizan para nada transacciones XA.

  • Una mapeo objeto-relacional correcto requiere el uso de XA: No es cierto, los mapeadores objeto-relacional normalmente operan con JDBC más un sistema de caché propio.

  • Para combinar JDBC y JMS las transacciones XA son obligatorias: No es cierto, muchas aplicaciones empresariales utilizan JMS con transacciones nativas o ACKs.

  • Los gestores de transacciones modernos están optimizados para ofrecer el mejor rendimiento: No es cierto, las garantías que XA exige son costosas y no pueden ser optimizadas de forma tan sencilla.



Siguiendo con la presentación, la principal recomendación de Jürgen es que una de las formas para solucionar el problema planteado arriba es sincronizar de manera nativa la cola de Spring con el gestor transaccional que utiliza el DataSource de forma que el mensaje sólo se enviará cuando se termine la ejecución del primer método y se haga commit de la transacción lo que tiene la ventaja de no usar XA y tener un mayor throughput.

Es curioso además que hoy hablando con alguien, me comentaba que algunos bancos no estaba interesados en absoluto en utilizar XA, y aconsejaban a sus proveedores el no incurrir en este tipo de transacciones ya que eran demasiado costosas para sus servidores que albergan tantas y tan heterogéneas aplicaciones. No estoy muy seguro de lo que hay de cierto en esto, pero puede que tenga sentido :)

martes, julio 01, 2008

Dos productos Open Source interesantes saliendo de una tienda de viajes online

martes, julio 01, 2008 por Martín


Leyendo InfoQ he visto que Orbitz, una compañía de venta de viajes online, curiosamente ha lanzado dos frameworks como Open Source.

Uno es ERMA del que a pesar de la presentación en la JavaOne, que aunque yo no sería partidario de implementar este tipo de frameworks en una empresa teniendo cosas Hyperic, Wily o insideApps que pueden cubrir muchas de las necesidades, siempre está interesante alternativas para el procesado de eventos. En InfoQ hablan también de Esper que parece realmente interesante.

El otro es Graphite, que personalmente lo encuentro más interesante porque, su motor, whisper, supone una alternativa a RRDTool (n su página tienen una discusión sobre las diferencias entre ambos motores), y siempre está bien disponer de alternativas, especialmente Open Source. En InfoQ comentan que lo utilizan para manejar información agregada de 70000 métricas lo cual no está del todo mal, aunque tampoco especifican cuanta memoria o hardware se necesita para ello. En el wiki quizás haya más información.

Por cierto, he visto que uno de sus autores, Ray Krueger, es también el creador de un plugin para integrar memcached como caché de segundo nivel en Hibernate. Ni idea de como funcionará, pero si alguien se anima a probarlo, me encantaría oir sobre los resultados.

viernes, junio 27, 2008

IONA

viernes, junio 27, 2008 por Martín


IONA (Technologies) es una de esas compañías que ha marcado una era. Surgida del Trinity College en Dublin como startup allá por el 1991, es una de esas compañías que a los de mi época comenzaba a sonarnos un poquillo cuando andábamos por la Universidad, y que al salir y descubrir un poco el mundo exterior y empezar a leer las revistillas, y las páginas web, pues descubrías que era la empresa donde más se innovaba en el momento. La empresa donde cualquier ingeniero de software le gustaría trabajar, la empresa que acaparabalos titulares de los TheServerSide de la época.

En Answers.com tienen una biografía excepcional de la compañía. Su mayor éxito fue Orbix ORB. Top ventas donde los haya y que todavía se vende. La primera implementación comercial de un estándar, que empezaba a sonar en la época, llamado CORBA. Esa innovación, el ser los primeros en adoptar un estándar avalado por HP, IBM, Sun, Apple, y todo el resto de miembros del OMG, les valió el convertirse en la empresa del momento, y una de las de mayor éxito de la década de los 90.

Un Object Request Broker, nada más y nada menos, lo que ahora mirado desde lejos parece lo más sencillo del mundo, pero que en aquella época era algo que daba vértigo sólo de pensarlo. ¡O al menos a mi me lo daba en las prácticas de CORBA! Leyendo la biografía es sorprendente todo lo que crearon durante esa época. OrbixTalk lo que suena a los modernos Event Driven Servers que nos venden hoy en día, Orbix Transaction Monitor, Orbix MX (multimedia, video streaming, ...), Orbix COMet (para crear aplicaciones Windows y ejecutarlas en otros sistemas operativos), partnetship con Visual Cafe (¿quién se acuerda de ese IDE?), Homebase EJB, ... y otro montón de productos que supongo que pasaron con más pena que gloria.

Según comentan los irlandeses, y en general todo el sector, el golpe del 2000 fue demasiado para ellos. Nunca consiguieron levantar cabeza al nivel de antes (5ª compañía en el Nasdaq 1997), y muchos de los miembros aprovecharon para canjear las acciones y comprarse unas buenas casitas como cuenta Joe Drumgoole en su blog. Como también comenta, el gran fallo es que nunca supieron realmente como unirse al carro de Java y EJB, y probablemente hayan lamentado el no comprar WebLogic en su momento si son ciertos los rumores.

En los últimos años la esperanza de IONA ha sido el Open Source, pero siempre dando esa impresión de no tener un rumbo fijo. La compra de C24 y ServiceMix parece haber enfocado su negocio en el mundo de la integración, interoperabilidad entre estándares y el Open Source. Tiene productos interesantes (casualmente esta semana he estado en un seminario sobre uno de ellos), pero siguen dando exactamente esa impresión de no saber realmente donde está su negocio.

Esta semana IONA ha sido comprada por Progress, por un precio de 163 millones de dólares, o lo que es lo mismo sobre 4 dólares por acción, en lo que claramente es una operación para deshacerse de la compañía. Un precio bastante miserable para una compañía que en el 1997 valía 1 billón de dólares. Mucho me temo que en la oficina estarán ya pensando en cuando caerán los despidos. Malos tiempos para Irlanda que pierde a lo que ha sido la compañía de software más importante que ha salido de la isla.

miércoles, junio 25, 2008

Slides SpringOne 2008

miércoles, junio 25, 2008 por Martín

Hoy alguien del trabajo me pasaba este enlace que aprovecho para postear por aquí. Que aprovechado soy :-)

Se trata de la página con todas las transparencias publicadas en la Spring One 2008 de la semana pasada. Sergi Almar comparte su experiencia en javaHispano. Enterprise Integration Patterns with Spring, Enterprise Integration Management y Restful Web Services son mis elegidos para leer.

sábado, junio 21, 2008

Charlas de escalabilidad en Google, 2008

sábado, junio 21, 2008 por Martín



El año pasado hice un par de referencia a las conferencias de escalabilidad que celebraba Google en Seattle en el 2007.

Este año las han vuelto a repetir. Fueron exactamente hace una semana y los videos ya están disponibles en YouTube por si a alguien le interesa echarles un vistazo.

jueves, junio 19, 2008

La nueva web de RTVE no rinde como la selección

jueves, junio 19, 2008 por Martín

Ayer jugaba España, y como buen aficionado al fútbol que soy no me debería perder este partido. Lo malo es que como España estaba ya clasificada, en la televisión irlandesa retransmitieron el partido de Rusia y Suecia. Así que como no tengo antena parabólica no me quedaba más remedio que bucear en Internet intentando ver si lo retransmitía alguien, y que mejor lugar que la nueva y flamante beta de RTVE.

Lo malo es que al intentar pinchar en el enlace del seguimiento en tiempo real del partido, me quedé con las ganas de saber si era el video en tiempo real, o una narración porque salía lo que salía era lo siguiente:



Varios tirones de orejas para la cadena pública aquí. El primero por no planear la escalabilidad para momentos tan importantes como los partidos de España donde todos los expatriados, y otros, nos volcamos en la web para intentar seguir a nuestro equipo del alma.

El segundo, por no planear una estrategia de degradación (¿se dice así?), no me hubiese importado que en caso de no entrar dentro de los huecos libres para este servicio se me redireccionase a una página con texto en lugar de video por ejemplo.

Y el tercero es por mostrar las trazas de los errores en lugar de cualquier otro mensaje de error.



Especialmente en Java, las trazas de error nos dan una enorme cantidad de información que cualquiera podría utilizar para atacar un sitio web. De las imágenes anteriores podemos saber algunas cosillas:


  • Que están usando Tomcat 5.5.25. No estaría de más actualizar a la versión más estable.

  • Podemos saber quien ha hecho la plataforma. Asumo que será Microgénesis ya que eso es lo que sugiere una búsqueda del stacktrace en google. En este caso se ve que los desarrolladores han tenido el cuidado (o no) de no poner trazas en foros, etc. ya que la búsqueda nos podría ofrecer mucha más información.

  • Nos dice que a alguien se le olvidó capturar excepciones no esperadas. Normalmente cuando se accede a un sistema externo, no está demás capturar RuntimeExceptions por eso de que cualquier cosa pueda ir mal.

  • Nos dice que utilizan un framework propio, al menos para esta funcionalidad en concreto. No hay rastro de Struts, Spring, etc. así que todo sugiere que se trata de una aplicación de Servlets "a pelo".

  • Nos dice que utilizan XML-RPC y más concretamente las librerías de apache, Apache XML-RPC.

  • Y ya por último, esa llamada XML-RPC desde un método llamado getRelatedCotents y una clase ContentManager sugiere que la aplicación no es más que una fachada a un sistema de gestión de contenidos externo al que accederán con servicios web.



Creo que más o menos es lo que se puede averiguar, ¿me he olvidado de algo o he deducido algo mal? Ya me lo comentaréis. De todos modos, no está nada mal para una simple traza. Al menos no sale la base de datos por ahí :)

Por cierto que lo que no nos dice la excepción es ¡¡si España va a pasar de cuartos o no!!

martes, junio 17, 2008

Los peligros de los patrones de diseño

martes, junio 17, 2008 por Martín


Ayer, en una conversación telefónica, en la busca de nuevo contrato, me sorprendieron con algo que no me esperaba porque por mi experiencia la mayoría de las personas no se para demasiado a leer tu CV. Más concretamente me comentaban que les había chocado un artículo con el nombre "The Dangers of Design Patterns".

Los peligros de los patrones de diseño es un artículo que escribí hace casi ya seis años y que sigue todavía vivo gracias a javaHispano. La verdad es que a diferencia con otros artículos que he escrito, y que van caducando con los años, creo que a medida que pasa el tiempo este artículo es más y más válido.

Parafraseando una de las partes del artículo, y pidiendo perdón por adelantado por "quotearme" a mi mismo lo que me resulta algo pedante:

Las empresas no buscan arte sino pragmatismo.


La sobreingeniería creo que es algo en lo que muchos hemos caído. Al menos a mi, mirando hacia atrás, me es fácil recordar ocasiones en las que he pecado de diseño exagerado y utilizado abstracciones y patrones que no eran necesarios, simplemente por la razón de que la aplicación no necesitaba ninguna extensibilidad, no se iba a integrar realmente con ningún sistema externo, no iba a funcionar como un framework sobre el que se construirían nuevas aplicaciones, y en resumen no entraba dentro de esos casos donde sí que es realmente importante aprovechar toda la potencia creativa que nos ofrecen los patrones de diseño. Eran simplemente aplicaciones que había que crear rápido y en las que está bien aprovechar los patrones más útiles, pero en las que quizás el encadenar 10 patrones seguidos puede complicar bastante las cosas, especialmente cuando llegan programadores junior a mantener la aplicación.

Personalmente creo que el encontrarse con desarrolladores que practican sobreingeniería no es algo malo. Creo que muestra una cosa: interés. Me encanta encontrarme con desarrolladores excitados con la creación de nuevas obras de arte en el software porque indica una cualidad muy importante que la mayor parte de la gente que se dedica a esta profesión carece: pasión por el software. Definitivamente prefiero encontrarme con alguien que practique sobreingeniería que con alguien al que le importe un comino lo que está escribiendo.

Mirando hacia atrás en la época del artículo es interesante ver también como con el paso del tiempo han ido apareciendo frameworks como Spring que nos protegen de complicar nuestros diseños con un uso inadecuado de los patrones de diseño. Spring te ofrece montones de patrones de diseño que están ahí listos para utilizar y lo que es más importante que están correctamente programados y con la complejidad justa y necesaria. Patrones como Singleton, Observer, Proxy u otros como DAO o Dependency Injection y otros muchos están ahí listos para utilizar con su complejidad adecuada, porque aunque a mucha gente patrones como Singleton le podían parecer supersencillos a la hora de la verdad resulta que no era tan fácil implementarlos correctamente. Punto para Spring a este respecto.

Otro punto importante que se me viene a la mente es la importancia de disponer de un buen arquitecto en la empresa. El arquitecto, o los programadores senior, deben ser los encargados de poner ese punto justo de coherencia y sentido común en el desarrollo de las aplicaciones, ya sea a través de diseños ajustados, de revisiones de código, reuniones de desarrollo o cualquier otro método, pero siempre desde un punto de vista constructivo y aportando el valor de la experiencia.

Es muy interesante ver como el desarrollo de software ha evolucionado durante estos últimos años. Palabras como ágil y pragmatismo se han vuelto bastante comunes en el desarrollo de software. Pero ojo que ninguna de ellas significa no utilizar patrones sino utilizarlos en su justa medida, como la sal. Me gustó recordar este artículo ayer.

PS: Que curioso que buscando en Google he descubierto una crítica a mi artículo publicada nada más y nada menos que en el 2003. Me ha parecido muy interesante leerla y tiene también muy buenos puntos, aunque creo que fue una respuesta ligada más al título del artículo (probablemente mal escogido) que al contenido donde se carga continuamente contra la sobreingeniería, el no estudiar profundamente los patrones existentes y los que van apareciendo y el no analizar como aplicarlos adecuadamente. Todas las opiniones tienen valor, pero está claro que los patrones desde el punto de vista de un curso de ingeniería del software, se apliquen como se apliquen, se combinen como se combinen, siempre van a ser buenos :)

lunes, junio 16, 2008

La crisis estimula el interés en el capital de riesgo, al menos en Irlanda

lunes, junio 16, 2008 por Martín

Hoy leía una noticia muy interesante en Silicon Republic, y es que parece que un estudio realizado en las principales firmas de capital de riesgo en Dublín revela que desde que la crisis de las hipotecas subprime ha tomado cuerpo estas firmas han detectado un 70% más de interes sobre inversión en capital de riesgo.

Venture capital has proven to produce greater returns at lower volatility than traditional equity investment


De todos modos, no todo van a ser buenas noticias para los emprendedores-wannabe, como podría ser yo, ya que parece ser que la mayor parte de las propuestas que reciben estas compañías son rechazadas por la falta de un equipo de dirección senior y contrastado para llevarlas adelante.

Joe Drumboole, CEO de PutPlace.com, criticaba exactamente eso en una de sus últimas entradas en su blog, y es que a pesar de que Enterprise Ireland se promocionan como principales impulsores de la inversión de capital de riesgo en Irlanda, lo cierto es que a la hora de la verdad hay muy poco riesgo en sus inversiones, ya que se centran principalmente en empresas que han estado operando durante varios años, empresas que tienen mecenas y equipos directivos importantes, y no en gente que trata de sacar su pequeña startup adelante.

A ver como van las cosas pero espero poderos contaros un poco más sobre estos temas en un futuro.

Celebrando que llega Firefox 3

lunes, junio 16, 2008 por Martín

Ha pasado casi un mes desde la última entrada que escribí en el blog. Lo cierto es que las últimas semanas han sido bastante estresantes. Hace una semana que terminé mi primer contrato como autónomo en Dublín, e imaginaros como habrá sido que me he tomado una semana de "relax" para desestresarme un poco.

Ha sido una semana de relax entre comillas porque todavía he estado trabajando en un proyecto del que espero que muy pronto oigáis hablar. Se trata de algo muy interesante en lo que estoy trabajando con unos amigos y que espero que genere un buen montón de posts, casi tantos como los que podría poner sobre mi último contrato porque de todo se aprende tanto de las buenas como de las malas experiencias :)

Mientras sigo buscando algo en que entretenerme pues como ya le he comentado a algún amigo este Jueves es la fiesta de lanzamiento de Firefox 3 en Dublin. Hay un montón de gente apuntada así que si alguien se anima a pasarse seguro que yo andaré por ahí.

domingo, mayo 18, 2008

¿Es oro todo lo que reluce en S2AP (Spring 2 Application Platform)?

domingo, mayo 18, 2008 por Martín


Llevaba unos días queriendo escribir esta entrada, pero la cantidad de trabajo que tengo pendiente últimamente me ha hecho retrasarla hasta el Domingo. Todo comienza con un post en InfoQ donde redactan un resumen (me encantan sus resúmenes) de las diferentes reacciones en la blogosfera al anuncio de Spring Application Platform.

El caso es dicha noticia en InfoQ generó, como era de esperar, algunos comentarios bastante críticos sobre la plataforma, a los que los líderes detrás de Spring, incluido Rod Johnson, no tardaron en responder, y en esta ocasión de forma bastante dura. Todo ello además originó un artículo de Adrian Colyer en el blog de Spring, donde explica lo que a su entender son las razones por las que nos deberíamos preocupar por OSGi.

El problema a mi entender de este artículo en concreto es que no nos explica cuáles son los problemas de OSGi. Como decimos aquí, bueno, fair enough, pero todos sabemos que cualquier tecnología tiene sus problemillas, y no explicarlos no deja de hacer que el artículo se convierta en un mero ejercicio de auto-marketing. Pero claro, el problema es que comentar las dos grandes desventajas de OSGi en el contexto de Spring sería un poco duro desde el punto de vista del artículo:


  1. OSGi, en este contexto de desplegar aplicaciones empresariales, no está regido por ningún estándar ni soportado por otras empresas (por ahora) a parte de SpringSource.

  2. OSGi, no es algo sencillo. En particular es bastante más complejo que el actual modelo de despliegue de aplicaciones webs en JEE.



Yo empecé a trabajar con Equinox hace ya unos tres años, allá con Eclipse 3.0. No voy a decir que soy un experto, porque no lo soy, pero sí tengo la experiencia de la aplicación de escritorio que viene con jLibrary, que a fin de cuentas es una aplicación 100% OSGi formada por diferentes bundles. Es decir, el servidor es un bundle, el módulo de caché es un bundle, los módulos de internacionalización son bundles, el módulo de extractores de texto es otro bundle, el interfaz gráfico es un bundle, etc.

No os voy a aburrir con esta historia, pero lo que me dice mi experiencia es que trabajar con OSGi no es algo trivial. De hecho, a mi se me antoja que la forma más sencilla de desplegar aplicaciones en Spring Application Server, sigue y seguirá siendo el tener ficheros WAR. No me malinterpretéis aquí, no estoy diciendo que me guste OSGi, a mi me encanta la propuesta, y una vez que te acostumbras a él, eres enormemente productivo. Y es mucho más, OSGi está claro que es mucho más avanzado, potente, y modular que el actual modelo de despliegue de JEE.

Pero, lamentablemente OSGi no es tan sencillo. Y aquí, como se comentaba en algunos de los comentarios en InfoQ, se encuentra uno ante el dilema de ¿es mejor elegir un modelo que satisfaga al 10% de los power-users o un modelo que el resto del 90% de usuarios puedan utilizar?

Otra cosa que no deja de ser curiosa es que desde SpringSource traten de vendernos algunos conceptos como novedosos cuando realmente esos grandes avances ya se llevan viendo con los servidores de aplicaciones propietarios desde hace años. Por ejemplo, comenta Rod Johnson en el artículo mencionado arriba:

I totally agree. The fact that users are essentially deploying half their server to the server in every EAR or WAR file


Bienvenido al mundo de las extensiones propietarias Mr. Johnson. Cualquier servidor de aplicaciones, digamos WebLogic, WebSphere, JBoss o el mismo Tomcat ofrecen formas para compartir librerías. Sí, no son tan sofisticadas como los bundles de OSGi, pero en Tomcat puedes simplemente dejarlas en el shared/lib, o en WebLogic puedes crear una librería compartida y referenciarla después desde tus EARs o WARs o lo que sea. Sí, por supuesto, no es estándar, pero tampoco lo es SpringSource.

Lo mismo lo podríamos decir para la gestión de versiones en ficheros EAR, que se puede hacer por ejemplo en WebLogic 9.x y supongo que quizás en otros, y que desde luego no es tan sofisticada como la que ofrece OSGi, pero al menos se situa en el contexto de JEE que siempre es una ventaja. Nuevamente, el utilizar estas funcionalidades es responsabilidad del equipo técnico del proyecto, pero no creo que sea justo el intentar sugerir que hasta ahora eso no se podía hacer en JEE, porque siempre se ha podido hacer, y exactamente de la misma forma que propone Spring: apartándose del estándar.

En fin, que mi opinión es que por mucho que se intente maquillar, para mi está claro que S2AP es simplemente la consecuencia de la inversión de capital de riesgo, como ya he comentado en el pasado. No sería tan radical para afirmar que el emperador está desnudo, porque realmente creo que la propuesta de SpringSource tiene un valor importante, pero sí que creo que es mejor quitarse las ropas de vendedor y decir claramente que todas las tecnologías tienen sus riesgos y sus problemas, y que no siempre es oro todo lo que reluce.

miércoles, mayo 14, 2008

insideApps: el hermano pobre de Wily Introscope

miércoles, mayo 14, 2008 por Martín



Visitando TheServerSide he visto anunciado el lanzamiento de una herramienta que a simple vista podría pasar desapercibida, pero que cuando nos ponemos a leer un poco más sobre ella parece realmente interesante.

Se trata de insideApps de la empresa determyne, que como anuncian en TheServerSide, lo han lanzado como Open Source con licencia LGPL (aunque también tienen una versión comercial).

Con el paso de los años me he dado cuenta que una de las ventajas más importantes de Java sobre otras plataformas, y que normalmente escapa a toda comparativa, es su capacidad de monitorización. Que una plataforma te proporcione ayudas para los desarrollos y que convierta el desarrollo de aplicaciones en una cosa de niños es importante, pero casi es más importante el que la plataforma ofrezca visibilidad y transparencia sobre todo lo que está pasando detrás de los bastidores, y ahí es donde Java con APIs como Attach permiten que cualquiera cree un agente que se enlaza con la máquina virtual y que te permite hacer cosas cmo las que hace insideApps, es decir recoger información, enviarla a un nodo centralizado que la agrupa y consultar más tarde dicha información a através de una consola web.



No he probado insideApp seriamente, simplemente he lanzado su demo, y la verdad es que parece realmente interesante. El año pasado os hablaba sobre Wily Introscope, que es una herramienta potentísima, pero que requiere también una buena cantidad de información, ya que nosotros tenemos que decirle específicamente a Wily lo que queremos que monitorice. Por el contrario, el planteamiento de insideApp es diferente, ya que prometen que simplemente es conectar esta herramienta e insideApp se encarga de detectar la topología de tu aplicación y de mostrar como se van comportando las diferentes transacciones, sin tener que configurar nada.



Jugando con la demo te das cuenta de que la aplicación no es tan espectacular como Introscope, y no te da tanta información, pero bueno al ser Open Source no cuesta nada descargársela y darle una oportunidad a ver que es capaz de mostrarnos sobre nuestras aplicaciones.

Si alguien la prueba, me encantaría leer vuestros comentarios (y si no también).

lunes, mayo 12, 2008

Guías de salarios en Irlanda

lunes, mayo 12, 2008 por Martín


Hace unos días surgió una charla entre los amigos que estamos en jaiku sobre los salarios en Irlanda. Este además es un tema común en otros foros y por el que me llega algún correo, eso sí muy de vez en cuando.

El caso es que si hay gente por ahí que lea esto y esté pensando el pasar una temporada por esta isla, lo más sencillo para coger una idea sobre los salarios que se paga por aquí es echarle un vistazo a una de las múltiples guías que publican periódicamente las empresas de contratación y los portales de empleo. Os dejo unos enlaces:

IT Salary Guide 2008
Manpower Salary Guide 2007
Premier Salary Guide 2008
IrishJobs Salary Survey 2008
Montones de Salary Surveys no IT

Como veréis, el rango de salarios es muy amplio, y realmente depende de lo que quieras hacer y de la experiencia que tengas. Por ahora, no se está notando demasiado la crisis, aunque sí que es cierto que las empresas multinacionales han tardado más de lo normal en empezar la contratación de personal, ya sabéis, por eso de ver como iban las cosas por el otro lado del charco.

Si os queréis fiar de alguna, probablemente yo lo haría de la de Irishjobs. En las de los recruiters he detectado unos salarios un poco más bajos, quizás porque a fin de cuentas no pueden reflejar su márgen que suele ser un 15%-25%.

Pues nada, espero que os sea útil.

miércoles, mayo 07, 2008

Un par de presentaciones sobre seguridad

miércoles, mayo 07, 2008 por Martín


Hace unos días OWASP y del evento que habían hecho en Dublín.

Pues bien, uno de mis actuales compañeros de trabajo, David Rook, que casualmente era una de las personas que exponía en dichas presentaciones ha sido lo suficientemente avispado como para localizar mi blog. Por supuesto, le llamo la atención que su nombre apareciese en una de las entradas, y presto se apresuró a traducirlo.

Después de comprobar que no decía nada malo de él, algo que es importante jejeje, ha sido tan amable de dejarme voluntariamente las transparencias de las charlas para que las subiera aquí por si a alguien le interesa. He creado un grupo en google para subir los ficheros. Aquí os los dejo:

Cross Site Request Forgery Javascript Malware de Eoin Keary.
I'm a developer get me out of here – Application Security and PCI DSS por David Rook.

Edit: Si no os funcionan los enlaces, simplemente entrad en el grupo y los podréis descargar.

Gracias a David por los ficheros.

martes, mayo 06, 2008

Repasando los cambios en Servlets 3.0

martes, mayo 06, 2008 por Martín

Recuerdo hace años que me solía leer muchas de las especificaciones del JCP conforme iban apareciendo. Vaya, esto me hace sentirme como un verdadero bicho raro. Pero es que me resultaba bastante interesante ver como evolucionaba la especificación de EJBs, leer sobre JDO, aprender sobre JCR e intentar hacer una implementación o pegar un giro radical y leer sobre J2ME o CLDC. Con el paso de los años me he ido desenganchando :-) No sé si es la edad, o si más bien es que hay tantas especificaciones ahora mismo que te da pereza siquiera echarles un vistazo.

Aún así, hoy he vuelto a esa vieja adicción y me he leído muy por encima el early draft de la especificación de Servlets 3.0. La lectura ha sido muy fácil porque tienen resaltados los cambios que han hecho respecto a la anterior versión 2.5, así que se deja leer. Creo que puede ser interesante que los resuma por aquí, por si alguien se la quiere ahorrar:


  • Anotaciones: Probablemente el cambio más grande es que ahora ya no será necesario editar los descriptores (web.xml) para crear las aplicaciones web. La nueva spec. define en su sección 8 una serie de anotaciones que se pueden utilizar para describir elementos comunes como Servlets, filtros, mapeos de URLs, parámetros de inicialización y el context listener de cada Servlet.

    Las nuevas anotaciones son @Servlet, @ServletFilter, @FilterMapping, @InitParam y @ServletContextListener. A mayores, la especificación hereda anotaciones definidas en la especificación JAX-RS (The Java API for RESTful Web Services), más concretamente @HttpMethod, @GET, @PUT, @POST, @DELETE, @HEAD. El siguiente sería un ejemplo:


    @Servlet(urlMappings={"/foo", "/bar"})
    public class SampleUsingAnnotationAttributes {
    @GET
    public void handleGet(HttpServletRequest req,
    HttpServletResponse res) {
    }
    }


    Probablemente lo que no me acabe de convencer es que la especificación deja abierta la posibilidad de mezclar las dos aproximaciones, es decir el utilizar anotaciones y el descriptor web al mismo tiempo, lo que ofrece la posibilidad de crear una especie de configuración spaghetti.

  • Fragmentos web: El segundo cambio importante son los fragmentos web. Todos los que hemos hecho aplicaciones web relativamente grandes sabemos la tendencia a crecer y crecer del fichero web.xml, lo que hace que a veces sea complicado el mantenerlo ya que no sabes donde está cada cosa, o es sencillo cometer el error de duplicar información, etc.

    Los fragmentos web permiten crear ficheros web.xml individuales que se distribuyen dentro de un fichero JAR que contendría lo que podríamos llamar una mini-aplicación web. El fichero web.xml debe colocarse dentro del META-INF y el JAR dentro del /lib. El contenedor de Servlets al arrancar la aplicación se encargará de buscar todos los fragmentos web que pueda encontrar e irá añadiendo las entradas de los diferentes web.xml individuales a la configuración de la aplicación. El siguiente es un ejemplo:


    <web-fragment>
    <servlet>
    <servlet-name>welcome</servlet-name>
    <servlet-class>WelcomeServlet</servlet-class>
    </servlet>
    <listener>
    <listener-class>RequestListener</listener-class>
    </listener>
    </web-fragment>


    Un ejemplo sería cuando quieres distribuir una consola de administración para tu aplicación web. En lugar de poner todo con la aplicación web principal, pues se podría empaquetar la consola de administración como si fuera una aplicación web independiente y distribuirla con la aplicación principal a modo de fragmento web.

    En mi opinión esta nueva funcionalidad es una buena idea que contribuye a mejorar la modularidad de las aplicaciones web. Queda abierto sin embargo el problema del punto uno de poder mezclar anotaciones con XML.

  • Procesado asíncrono. El tercer cambio importante en Servlets 3.0 es la introducción de métodos para realizar procesado asíncrono. Esto es de vital importancia para el soporte de comet de manera nativa en los contenedores web. Hasta ahora el procesado de una request es completamente síncrono. Si la request necesita bloquearse por algún recurso, el thread que está manejando esa request se bloqueará. Asimismo, si queremos mantener la request viva durante un largo espacio de tiempo haciendo streaming al cliente, la request permanecerá bloqueada. Esto hace que los contenedores web no puedan escalar apropiadamente ya que el uso de recursos no es óptimo.

    La solución propuesta en Servlets 3.0 es añadir tres nuevos métodos, suspend, resume y complete, muy al estilo de las Continuations en Jetty, y que permitirán suspender una request, reanudarla posteriormente por ejemplo desde otro thread diferente, y completarla. Es importante la nota que hacen en la especificación de que tanto el objeto request como el objeto response no son thread-safe por lo que habrá que tener mucho cuidado al controlarlos.


  • Otros. El resto de cambios, ya no tan grandes, son el añadido de nuevos métodos a la interfaz ServletContext de modo que se puedan añadir servlets y filtros programáticamente en tiempo de inicialización; el soporte de cookies HttpOnly que no están expuestas a scripting en lado del cliente, y el añadido de métodos en la request para obtener el ServletContext y la el objeto response.



En mi opinión se trata de buenos añadidos a la especificación que la mejoran bastante. Habrá que ver el tema de las anotaciones es un poco problemático como he comentado desde el punto de vista que puedes tener gente en tu equipo haciendo anotaciones y otra gente haciendo descriptores, pero bueno, al final es algo que una empresa debe controlar de todos modos con mejores prácticas, procesos, y todo esto.

Edit: Me acabo de pasar por javaHispano y mira que casualidad que hablan de lo mismo.

sábado, mayo 03, 2008

Cinco preguntas para tu próxima entrevista de trabajo si te gusta el software

sábado, mayo 03, 2008 por Martín


Durante las últimas semanas le he estado dando la vuelta a un tema relacionado con la búsqueda de empleo. Normalmente cuando a uno le preguntan en una entrevista de trabajo si desea saber algo sobre la compañía, se suele caer en las típicas preguntas sobre horario de trabajo, vacaciones, pensiones, comidas, bonuses, etc.

Pero, a parte de esto, cuando uno se dedica al mundo del software ya sea como programador, arquitecto, jefe de proyecto o manager, lo que le gusta es caer en un sitio donde se pueda aprender cosas nuevas, evolucionar técnicamente, trabajar con las últimas tecnologías, estar expuesto a sistemas interesantes o integrarse dentro de ciclos de desarrollo racionales con metodologías de programación modernas. Atendiendo a esto, probablemente merezca la pena dedicar estos últimos minutos de la entrevista a realizar otro tipo de preguntas que den una pista de si tu futuro entorno laboral va a ser enriquecedor o no, desde punto de vista técnico.

Pero, ay, y ahí está el problema, el entrevistador probablemente intentará maquillar cualquier punto negro de la empresa, ya sea para cazarnos o para no exponer sus vergüenza. Por ejemplo, si vamos a una entrevista y preguntamos "- ¿Utilizáis metodologías ágiles?", no sería raro recibir una contestación como "- Por supuesto, por supuesto, nuestros equipos practican XP", y dos semanas después encontrarse con cien folios de requisitos que tienen que firmar diez personas de diez departamentos diferentes para poder pasar al diseño de la aplicación.

El conjunto de preguntas deberían ser lo suficientemente claras y directas para no dar lugar a error sin llegar a ser ofensivas o sin llegar a poner en peligro nuestra candidudatura. Es decir, preguntarle al entrevistador que nos diga lo que es un assemblyen .NET puede resultar un poco incómodo para ambos :-)

A mi se me ocurren una serie de preguntas que nos pueden dar pistas de como funciona la empresa sin que el entrevistador se sienta realmente entrevistado. Estas preguntas son evidentemente técnicas. Si el entrevistador no sabe responderlas, titubea, se muestra dubitativo o esquivo, yo desconfiaría directamente de la empresa, especialmente si ese va a ser nuestro. Me voy a centrar en Java porque si pongo otro lenguaje de ejemplo al final soltaré alguna tontería. Aún así, las preguntas y sus explicaciones son lo suficientemente generales para ser aplicables directamente a cualquier otro lenguaje/plataforma. Ahí van:

  • ¿Qué framework de desarrollo utilizáis?:

    Atención, porque esta pregunta es la más importante. Si por cualquier razón la respuesta es "tenemos un framework propio", mal pinta la cosa. De hecho, hasta me atrevería a ser radical y decir que es hora de huir de ahí como del demonio. A 2008, el mundo del software no necesita otro framework casero realizado por mentes privilegiadas "porque Spring o JSF no se ajustan a los requisitos de la empresa".

    El tener un framework propio es indicador, en el 99% de los casos, de estar reinventando la rueda. De aceptar esto, tocará trabajar con tecnologías probablemente obsoletas, tocará corregir bugs que no estarían ahí de utilizar algo probado, o tocará "mejorar" el framework con cosas que ya están implementadas en otras librerías. Un framework propio, puede ser resultado de una mala elección, o quizás de una elección forzada debido a que el producto se creó hace muchos años.

    La respuesta ideal dependerá de lo que quiere hacer el desarrollador o del lenguaje, pero a cualquiera que se mantenga un poco al día le será fácil detectar nombres clave. En Java, Spring, Hibernate, JSF, WebWork, Seam, o incluso EJBs serían respuestas válidas. Struts, mmmmm, ok, todavía hay mucho Struts por ahí y siempre será mejor que un framework web propio. En serio, cualquier cosa que no implique corregir los errores del creador de un framework casero, será más que suficiente.
  • ¿Qué metodología de desarrollo utilizáis?:

    La pregunta, así de seca. Sin dar pistas. Así, si el entrevistador nos quiere engañar no podrá predecir nuestros gustos (salvo por nuestro CV). Si la respuesta no es clara, o es "bueno, nosotros tenemos nuestra metodología propia", etc. entonces ojo, peligro de caos, intentemos sacar algo más de información.

    Si la respuesta es cualquier cosa que implique desarrollo en cascada (e.g. métrica o similares), un punto por ser honesto. No tiene porque ser algo tan terrible si el resto de preguntas están a nuestro gusto, o si el ciclo de vida de los proyectos sigue un flujo racional. Es mejor que conteste eso que el que detectemos que nos intenta engañar.

    Si la respuesta es XP, yo estaría con la mosca detrás de la oreja, al fin y al cabo se lee más de esta metodología de lo que se usa en realidad. Si la respuesta es Scrum, o cualquier otra metodología o derivación que implique desarrollo ágil (e.g. RUP bien aplicado), seguramente estemos ante un buen lugar.
  • ¿Qué sistema de build utilizáis?:

    Si la respuesta es ninguno, o qué es eso, pues muy mal empezamos. En Java, si la respuesta es ant, desconfianza total (lo siento por los que todavía utilizen ant, pero los sistemas de build ya han avanzado bastante en los últimos años) ya que podría significar que el trabajo será realizar mantenimientos viejos, o que la empresa no se preocupa en mejorar sus herramientas. Respuestas como maven, ivy, etc. indican que se han preocupado de mejorar estas cosas. Si la respuesta incluye integración continua, de manera espontánea, será un excelente indicador.
  • ¿Qué entorno de desarrollo utilizáis?:

    Esta es la típica pregunta que, siendo bastante inocente, nos puede dar bastante información sobre como es la empresa ha evoolucionado desde el punto de vista del software. En una plataforma como Java, ha habido y hay montones de entornos de desarrollo, cada uno con una historia particular que nos puede dar pistas sobre la gente que lo utiliza.

    Intellij IDEA por ejemplo siempre ha sido un entorno de desarrollo que siempre ha tenido buena fama. Punto positivo si lo usan. Si la empresa utiliza NetBeans y Eclipse, se situará en el baremo de lo habitual, así que no nos indicará nada bueno o malo. Si utiliza alguna especialización de Eclipse (e.g. MyEclipse), puede ser un buen dato ya que Eclipse se deja muchas cosas en el tintero, y eso denotaría que lo saben y que han buscado una solución. Otros entornos que han ido quedando más en desuso si que nos pueden dar una pequeña alarma sobre la compañía.

    ¿Utiliza Visual Age, o Visual Café? Entonces es hora de huir. Estos son entornos desaparecidos hace siglos. ¿BlueJ, JCreator, ...? Hay algo raro. Son entornos que muy poca gente utiliza. ¿JBuilder, JDeveloper? Cuidado. Son entornos que han caido bastante en desuso y que la gente suele utilizar por el valor añadido de sus componentes, es decir, que quizás estén utilizando todo este "valor añadido" que es mejor evitar.

    ¿BEA WorkShop, WebSphere Studio, ...? Cuidado. Esto puede indicar tanto que la empresa aprovecha realmente todas las funcionalidades que ofrecen lo que sería muy bueno, como que la empresa no tiene ni idea de lo que hace y espera que las aplicaciones funcionarán mejor por el mero hecho de utlizar el IDE que viene con el servidor de aplicaciones.
  • ¿Cómo se prueban las aplicaciones?:

    Esta es una pregunta un tanto complicada porque resulta muy amplia así que habrá que estar atento a las respuestas. Si la respuesta incluye un departamento de calidad, con bastantes personas, eso será un buen indicador. Si no lo incluye, no tiene porque ser algo terriblemente malo, aunque dependerá de lo que nos diga a mayores.

    Si el entrevistador nos menciona explicitamente unit tests, tests de integración, tests de stress, será un buen detalle. Si nos menciona soak testing (dejar una aplicación ejecutandose durante semanas), será un muy buen indicador. Si a mayores detectamos la presencia de algún sistema de automatización de tests, ya sea Mercury, Selenium, DBUnit, etc. será un punto realmente muy positivo. Y ya si nos comenta que los tests se ejecutan dentro del sistema de integración continua que nos mencionó antes, entonces... ¿pagan bien? :)

    Si la respuesta no incluye nada de lo anterior, mucho cuidado. Puede ser una buena empresa con simplemente una falta de control de calidad, pero también una empresa caótica donde no queremos trabajar. ¿Ha respondido bien al resto de preguntas? Si la respuesta es "tenemos nuestro propio sistema de testing" (ver el primer punto), entonces habrá que plantearse seriamente el trabajar en esa empresa.


Vaya, he repasado el post y me ha quedado realmente largo. Espero que al menos alguien lo encuentre interesante. A mi, personalmente, me interesan más aún vuestras preguntas, así que lanzo esto al aire a ver si alguien lo recoge: ¿Qué preguntaríais vosotros para evaluar a una empresa en una entrevista de trabajo relacionada con el mundo del software?

Imagen via melissa22@flickr.