<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results for 'app:weblogs' matching tag 'Desarrollo de Software'</title><link>http://msmvps.com/search/SearchResults.aspx?q=app:weblogs&amp;tag=Desarrollo+de+Software&amp;orTags=0&amp;o=DateDescending</link><description>Search results for 'app:weblogs' matching tag 'Desarrollo de Software'</description><dc:language>en-US</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Tales from the Scrum: No esperemos a Superman</title><link>http://msmvps.com/blogs/lopez/archive/2009/10/24/tales-from-the-scrum-no-esperemos-a-superman.aspx</link><pubDate>Sat, 24 Oct 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1734776</guid><dc:creator>lopez</dc:creator><description>&lt;p&gt;&lt;img style="display:inline;margin:0px 20px 20px 0px;" src="http://www.todocontenidos.com/images/articles/superman01.png" align="left" alt="" /&gt; En estos días, buscando ejemplos de antipatrones de Scrum, me encuentro con el “&lt;a href="http://scrumisscrum.wordpress.com/2009/04/02/hero-driven-development/" target="_blank"&gt;Hero-Driven Development&lt;/a&gt;” (visiten todo el blog &lt;a href="http://scrumisscrum.wordpress.com/" target="_blank"&gt;Scrum is Scrum&lt;/a&gt;). Hace poco comentaba sobre las “prima donnas” en desarrollo en &lt;a title="Tales from the Scrum- No somos Q" href="http://msmvps.com/blogs/lopez/archive/2009/10/22/tales-from-the-scrum-no-somos-q.aspx"&gt;Tales from the Scrum- No somos Q&lt;/a&gt;. El caso que quiero comentar ahora, es distinto. El desarrollador super héroe de nuestra historia, puede ser un tipo apreciado, querido por el equipo, reconocido en su campo. Es uno de esos desarrolladores que puede programar mucho más que los demás. Steve Mc Connell los llama &lt;a title="10X Developers" href="http://go2.wordpress.com/?id=725X1342&amp;amp;site=scrumisscrum.wordpress.com&amp;amp;url=http%3A%2F%2Fforums.construx.com%2Fblogs%2Fstevemcc%2Farchive%2F2008%2F03%2F27%2Fproductivity-variations-among-software-developers-and-teams-the-origin-of-quot-10x-quot.aspx"&gt;10X Developers&lt;/a&gt;. Pero puede causar problemas. Veamos (basado en el blog que mencioné):&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Problema&lt;/strong&gt;: En el medio del desarrollo, surge un problema. Puede ser una configuración de Windows Communication Foundation, un tema de mapeo de Hibernate, una instalación en JBoss. No importa. El problema es complejo, y bastante técnico. De pronto, se abre la ventana, y entra nuestro “programador héroe”, reluciente en su traje. Se sienta, mira el código, entiende el problema, y lo va solucionando. El equipo, arrobado, se queda atrás, mirando, cómo nuestro Superman del código, va resolviendo el más intricado nudo de desarrollo. El héroe, concentrado, no habla ni explica. Parece relajado, lo que hace es “pan comido” para él. Entonces, en un momento, para, el problema está solucionado, levanta la vista, mira al equipo, y sale volando por la ventana, directo hacia el atardecer. Gran música de fondo.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Contexto&lt;/strong&gt;: El equipo no sabe cómo solucionar el problema técnico que surgió. Es algo en lo que tienen poca experiencia. Trataron de solucionarlo, pero no pudieron, y están entrando en pánico. Pasan las horas, y no avanzan. Todo está empantanado. Entonces, encienden la señal, para llamar al super héroe.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Fuerzas&lt;/strong&gt;: Vivimos en tiempos de cumplir los compromisos que asumimos para la iteración. Queda poco tiempo para la entrega. Todo indica que necesitamos una solución rápida.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Solución&lt;/strong&gt;: No hay que buscar solución rápida. Primero, habría que haber previsto el riesgo tecnológico, desde el propio equipo. Los miembros deberían haber anotado que en algún momento se toparían con una tecnología que no conocen, y tendrían que haber tomado la tarea asignándole más tiempo. Pero bueno, supongamos que no se pudo hacer eso. El problema de arriba, es que el equipo delega la solución FUERA del equipo. El equipo, de alguna forma, “se lava las manos”. La actitud del superhéroe también conspira para eso. No es ése el camino. El equipo no debería perder “ownership”, propiedad y responsabilidad del producto, y de cada pequeño o gran problema. El desarrollador super héroe, que los hay, debería haberse integrado al equipo, compartiendo su conocimiento. Debería actuar como consultor del resto del equipo, pero trabajando con él. Y cada cosa que haga, con el equipo, será considerada como cualquier otra tarea de otro miembro: deberá cumplir con los estilos pactados, las métricas adoptadas, la definición de “hecho”. No debe ser un miembro “distinguido”. Lo que haga, debe estar público y lo más entendible posible para el resto del equipo. Tal vez no consigamos una solución tan rápida como la de arriba. Pero seguramente, a largo plazo, estaremos construyendo un equipo más responsable.&lt;/p&gt;  &lt;p&gt;Recuerden: uno de los grandes entregables, en Scrum, es el equipo.&lt;/p&gt;  &lt;p&gt;Nos leemos!&lt;/p&gt;  &lt;p&gt;Angel “Java” Lopez   &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;</description></item><item><title>VAN sobre Boo con Rodolfo Finochietti</title><link>http://msmvps.com/blogs/lopez/archive/2009/10/23/van-sobre-boo-con-rodolfo-finochietti.aspx</link><pubDate>Fri, 23 Oct 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1734501</guid><dc:creator>lopez</dc:creator><description>&lt;p&gt;&lt;img style="display:inline;margin:0px 20px 20px 0px;" src="http://www.todocontenidos.com/images/articles/boo01.png" align="left" alt="" /&gt; Vuelven las VAN (Reuniones Virtuales) de ALT.NET Hispano. La próxima, es este sábado 24 de Octubre, a las 18:00 GMT/UTC (Greenwich) (En Buenos Aires, con GMT-3, serían las 3 de la tarde). El tema será, principalmente, &lt;a href="http://boo.codehaus.org/" target="_blank"&gt;el lenguaje Boo&lt;/a&gt;, a cargo del bueno de &lt;a href="http://weblogs.shockbyte.com.ar/" target="_blank"&gt;Rodolfo Finochietti&lt;/a&gt; (&lt;a href="http://twitter.com/rodolfof"&gt;@rodofof&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;Pueden ver detalles en&lt;/p&gt;  &lt;p&gt;&lt;a href="http://groups.google.com/group/altnet-hispano/browse_thread/thread/dab63bbb407c3822?hl=es" target="_blank"&gt;VAN sobre Boo con Rodolfo Finochietti, Sábado 24 de Octubre&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Será en parte, continuación de la anterior&lt;/p&gt;  &lt;p&gt;&lt;a title="Alt.NET Hispano- VAN con Martín Salías y lenguajes en .NET" href="http://msmvps.com/blogs/lopez/archive/2009/10/01/alt-net-hispano-van-con-mart-237-n-sal-237-as-y-lenguajes-en-net.aspx"&gt;Alt.NET Hispano- VAN con Martín Salías y lenguajes en .NET&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Pueden ver el video resultado de esa anterior reunión en:&lt;/p&gt;  &lt;p&gt;&lt;a title="Virtual ALT.NET sobre Lenguajes" href="http://blog.salias.com.ar/2009/10/virtual-altnet-sobre-lenguajes.html"&gt;Virtual ALT.NET sobre Lenguajes&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Son todos temas como los que tratamos en algún TechNight de Buenos Aires, el año pasado: &lt;a title="lenguajes de programación e implementaciones en .NET" href="http://msmvps.com/blogs/lopez/archive/2008/10/16/babel-de-lenguajes-en-net.aspx"&gt;lenguajes de programación e implementaciones en .NET&lt;/a&gt; (ahí dejé bastantes enlaces sobre los temas que ahora están siendo actualizados en esta serie de VANs).&lt;/p&gt;  &lt;p&gt;Según adelanta Rodolfo, el tema será:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Básicamente mi exposición se va a centrar en porque me gusta Boo. Todos los lenguajes estáticos en .NET son bastante similares (con el DLR esto cambio un poco), y esto creo yo tiene una razón que voy a explicar en el charla. En cambio Boo no se parece un lenguaje .NET. Su diseñador (Rodrigo De Oliveira) lo creo como un herramientas que le facilita la construcción de aplicaciones. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Resumiendo: Voy a hacer una intro al diseño de lenguajes estáticos en .NET y después me voy a centrar en Boo y sus características. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Recuerden:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Si no conocen qué es una reunión VAN, pueden consultar &lt;/em&gt;&lt;a href="http://www.zachariahyoung.com/zy/post/2009/01/Introduction-to-Virtual-ALTNET.aspx"&gt;&lt;em&gt;VAN meetings&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. Para ver cómo se desarrolla una VAN de ALT.NET Hispano, y qué software necesitan para asistir, ver &lt;/em&gt;&lt;a href="http://altnet-hispano.pbworks.com/Descripcion-de-Reuniones-VAN"&gt;&lt;em&gt;Descripcion-de-Reuniones-VAN&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. Pueden ver &lt;/em&gt;&lt;a href="http://altnet-hispano.pbworks.com/Historial-de-reuniones"&gt;&lt;em&gt;el historial de anteriores reuniones VAN&lt;/em&gt;&lt;/a&gt;&lt;em&gt; (visiten las que dieron, por ejemplo, sobre NHibernate, WPF y demás) (yo ya participé en &lt;/em&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2009/09/18/resultado-de-la-van-en-alt-net-hispano-sobre-scrum.aspx"&gt;&lt;em&gt;VAN sobre Scrum&lt;/em&gt;&lt;/a&gt;&lt;em&gt; y en otra &lt;/em&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2009/09/25/van-reuni-243-n-virtual-en-alt-net-hispano-sobre-generaci-243-n-de-c-243-digo.aspx"&gt;&lt;em&gt;sobre generación de código&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, que quedará publicada en estos días). Supongo (pero confirmen) que la URL de entrada de la VAN de Martín será &lt;/em&gt;&lt;a href="http://snipr.com/virtualaltnet"&gt;&lt;em&gt;http://snipr.com/virtualaltnet&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. Cualquier cosa, pueden consultar &lt;/em&gt;&lt;a href="http://groups.google.com/group/altnet-hispano/"&gt;&lt;em&gt;la lista de correo de ALT.NET Hispano&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. También pueden suscribirse para proponer nuevos temas, y colaborar con la comunidad.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Visiten &lt;a href="http://boo.codehaus.org/" target="_blank"&gt;el sitio de Boo&lt;/a&gt; si quieren averiguar más sobre el lenguaje, y lean &lt;a href="http://www.google.com/url?q=http://boo.codehaus.org/BooManifesto.pdf&amp;amp;ei=n9rgSpPkKNOh8AbEqc2eDQ&amp;amp;sa=X&amp;amp;oi=nshc&amp;amp;resnum=1&amp;amp;ct=result&amp;amp;cd=1&amp;amp;ved=0CAsQzgQoAA&amp;amp;usg=AFQjCNFakzlVrlPRdxPt-ENYggy1Y8Af4g" target="_blank"&gt;el Boo Manifesto&lt;/a&gt;. Tomé la imagen del blog &lt;a title="http://blogs.codehaus.org/people/bamboo/archives/boo.html" href="http://blogs.codehaus.org/people/bamboo/archives/boo.html"&gt;http://blogs.codehaus.org/people/bamboo/archives/boo.html&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Nos leemos!&lt;/p&gt;  &lt;p&gt;Angel “Java” Lopez   &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Tales from the Scrum: No somos Q</title><link>http://msmvps.com/blogs/lopez/archive/2009/10/22/tales-from-the-scrum-no-somos-q.aspx</link><pubDate>Thu, 22 Oct 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1734228</guid><dc:creator>lopez</dc:creator><description>&lt;p&gt;&lt;img style="display:inline;margin:0px 20px 20px 0px;" src="http://www.todocontenidos.com/images/articles/qstartrek00.png" align="left" alt="" /&gt; No se si conocen o recuerdan al &lt;a href="http://en.wikipedia.org/wiki/Q_%28Star_Trek%29" target="_blank"&gt;personaje de Q&lt;/a&gt;, que apareció en el capítulo presentación de &lt;a href="http://en.wikipedia.org/wiki/Star_Trek:_The_Next_Generation" target="_blank"&gt;Star Trek: Next Generation&lt;/a&gt;. Dotado de poderes sin límites, el personaje interpretado por &lt;a href="http://en.wikipedia.org/wiki/John_de_Lancie" target="_blank"&gt;John de Lancie&lt;/a&gt; ha aparecido en varios episodios, siendo uno de los favoritos de la audiencia trekkie. En la tercer temporada de Next Generation, en el capítulo &lt;a href="http://en.wikipedia.org/wiki/D%C3%A9j%C3%A0_Q" target="_blank"&gt;Déjà Q&lt;/a&gt; le quitan los poderes, y pasa a ser un simple mortal, que tiene hasta que comer para sobrevivir. Se le sugiere integrarse a la tripulación de la Enterprise, pero él responde que no está acostumbrado: “Es difícil trabajar en grupo cuando se es omnipotente”.&lt;/p&gt;  &lt;p&gt;Q nunca podría ser un buen miembro de equipo Scrum. Recuerden: Scrum es un marco de trabajo para producir software EN EQUIPO (se puede extender para otras actividades, pero siempre en equipo). La idea de equipo en Scrum es fuerte: miembros con distintas habilidades y competencias, que trabajan coordinados para ir armando, iterativamente, el producto que el cliente necesita. En general, se usa la figura del Scrum Master para mantener el equipo dentro de las buenas prácticas, como mantener la reunión diaria, evaluar correctamente el Sprint (iteración), actualizar el backlog de sprint, ver que se arma y priorice lo mejor posible el product backlog, etc.&lt;/p&gt;  &lt;p&gt;Pero, en el día a día, lo que cuenta es el trabajo en equipo. No hay lugar para “prima donnas” o “Qs” en un equipo Scrum. Claro que puede haber miembros con más “seniority” en un tema técnico, o en alguna habilidad (como diseño gráfico, o base de datos). Pero lo importante es que toda tarea, y su resultado, queda a cargo del equipo. No hay “me corto solo” en Scrum. No hay actitudes de “yo lo hago mejor, y hago esto, y nada más”. No hay “yo me encargo de la base de datos, lo demás no”. No hay “esto lo hago yo, porque lo hago mejor que Uds.”. Debe haber “esta tarea la tomo yo, si quieren, hago pair programming con X, y dejo claro cómo lo hice, para que mañana otro pueda seguir con esta tarea”. Si no se puede llegar a esa actitud, por lo menos, debemos luchar para conseguirla, y marcar nuestra falta en las retrospectivas (recuerden que para eso están las reuniones de retrospectivas: no para marcar errores, sino para detectar malas prácticas, o formas de trabajo no efectivas, y mejorarlas).&lt;/p&gt;  &lt;p&gt;Cada tarea es del equipo.&lt;/p&gt;  &lt;p&gt;Tomemos un ejemplo en concreto. Puede que haya en el equipo alguien ideal para escribir el manual de usuario de una parte del sistema que estamos armando y entregando (ciertamente, hay manuales de usuario, y es muy probable que se algo que para el cliente tiene valor de entrega y nos lo pida; sino, es, en general, un buen “over-delivery” que hace que el producto entregado tenga mejor recepción y uso). Supongamos que esa persona, llamémosla Juan, se recibió de “Technical Writer”, o que es el que mejor conoce esa parte del sistema. ¿Será él el que tome esa tarea? Un día, al comienzo, en la reunión diaria, Juan tome la tarea. Pero bien puede ser que sea una tarea que insuma varios días: hay que escribir una tabla de contenido, un glosario de los términos, una introducción, un paso a paso, sacar “screenshots” y ponerlos en el documento, escribir sobre el proceso A, el B, el C… En definitiva: la tarea puede partirse en varios pasos. Y entonces, seguramente otros miembros del equipo podrán colaborar con alguna de las subtareas. El miércoles, Juan está enfermo, y falta. Pedro, que estuvo colaborando con él, bien puede seguir con la tarea: aprendió cómo se organiza el material, cuál es el ejemplo que se estaba desarrollando en el manual, y puede seguir con el tema. Mientras tanto, el documento va quedando publicado en el repositorio de código del equipo. José “odia” hacer documentación. Pero igual revisa el documento parcial producido, y descubre que un “screenshot” no corresponde con lo el ejemplo que se explica. María detecta que se está usando mal el tiempo verbal. Francisco, que está desarrollando otra parte del sistema, y es el menos familiarizado con el tema del manual, apunta que no se entienden algunos términos, que el creador original del documento toma por sabidos por todo el mundo.&lt;/p&gt;  &lt;p&gt;Cuando al final del Sprint, el documento es entregado, casi todos los miembros del equipo pasaron por la producción del mismo: escribiendo, revisando, juntando material, mejorando una parte, sugiriendo cambios. Y ese entregable, es responsabilidad del equipo. Si luego se detecta que hay un error tipográfico o de concepto, es el equipo el que se hace cargo de ese defecto.&lt;/p&gt;  &lt;p&gt;Trabajando en equipo, hasta capaz le ganamos a Q y todo… :-)&lt;/p&gt;  &lt;p&gt;Nos leemos!&lt;/p&gt;  &lt;p&gt;Angel “Java” Lopez   &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Ense&amp;#241;ando a programar (Parte 1)</title><link>http://msmvps.com/blogs/lopez/archive/2009/10/19/ense-241-ando-a-programar-parte-1.aspx</link><pubDate>Mon, 19 Oct 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1733324</guid><dc:creator>lopez</dc:creator><description>&lt;p&gt;El tema que se&amp;ntilde;ala el t&amp;iacute;tulo de este post es un tema ampl&amp;iacute;simo, del que habr&amp;iacute;a tanto para decir y discutir. Veamos de tratar algunos puntos, que surgen de experiencia personal, e ideas sin probar que van rondando mi cabeza desde hace unos a&amp;ntilde;os.&lt;/p&gt;
&lt;p&gt;Primero, una aclaraci&amp;oacute;n: si bien gran parte de mi actividad semanal (en estos tiempos, m&amp;aacute;s del 60% del tiempo que empleo), est&amp;aacute; dedicado al dictado de cursos&amp;nbsp;(en empresas e institutos ac&amp;aacute; en Argentina, o en charlas en distintas ciudades) me considero no un instructor de programaci&amp;oacute;n, sino un desarrollador de software que por esos accidentes de la vida termin&amp;oacute; dedicando tanta cantidad de sus horas al dictado de clases. Pero no soy una persona pedag&amp;oacute;gica, o que haya estudiado para ense&amp;ntilde;ar sino, como muchos otros instructores, soy alguien que programa y que muestra algunos temas de programaci&amp;oacute;n, desde mi propio &amp;oacute;ptica personal (hace a&amp;ntilde;os que no doy un curso oficial o de Sun o de Microsoft, prefiero dar mis temas a mi forma y con mis temarios).&lt;/p&gt;
&lt;p&gt;Segundo: prefiero programar que ense&amp;ntilde;ar. Contrariamente a lo que algunos de Uds. podr&amp;iacute;an pensar, para m&amp;iacute; ense&amp;ntilde;ar no es la mejor forma que imagina de pasar mi tiempo profesional, por lo menos en cursos presenciales de la forma en que me toca ahora dictar. Prefiero escribir, leer, programar ejemplos, pruebas de conceptos, aplicaciones completas, describir temas en posts, antes&amp;nbsp;que estar dictando una clase presencial (una charla es otra cosa: es m&amp;aacute;s interesante, es para presentar un tema, y llamar a la acci&amp;oacute;n a los asistentes, sin tener que seguir por semanas hablando de lo mismo). Cuando tengo, digamos, un curso para las 18:30, ya s&amp;eacute; que ese d&amp;iacute;a no puedo trabajar hasta las 18hs en un proyecto, o no puedo irme a almorzar tarde, o no puedo salir de viaje a otra ciudad, o no puedo&amp;hellip;&amp;nbsp; o voy a salir demasiado tarde para ir a cenar tranquilo, o pasar por tal lado, o &amp;hellip; y mil cosas m&amp;aacute;s. Un curso es un clavo en el medio de cualquier agenda a armar. Tambi&amp;eacute;n pasa que un curso que no es nocturno, parte al medio cualquier d&amp;iacute;a de trabajo, especialmente cuando trabajo en un equipo Scrum. Como los cursos tienen d&amp;iacute;as ocupados durante varias semanas, tambi&amp;eacute;n se me complica organizar cualquier visita al interior de mi pa&amp;iacute;s, para dar una charla sobre un tema. En definitiva, curso presencial con muchas clases, es un incordio para cualquier agenda.&lt;/p&gt;
&lt;p&gt;Y una de las cosas que m&amp;aacute;s me cansan, a esta altura de mi vida, es hablar, hablar y hablar durante horas en un curso. Vuelvo a mi cubil, a veces, bastante cansado y congestionado, nada m&amp;aacute;s de hablar. Imagino que en cualquier momento comienzo a dar una clase mostrando cosas en el proyecto y explicando lo que hago escribiendo en el Notepad&amp;hellip; :-)&lt;/p&gt;
&lt;p&gt;Hechas esas confesiones personales, respiro hondo,&amp;nbsp;y paso a comentar algunos problemas que detecto&amp;nbsp;en los cursos que conozco, los m&amp;iacute;os.&lt;/p&gt;
&lt;p&gt;Muchos de mis cursos se pueden circunscribir a estos tipos:&lt;/p&gt;
&lt;p&gt;- Grupo de gente que conoce algo de programaci&amp;oacute;n, que pueden estar en distintos niveles, y quieren aprender un tema de tecnolog&amp;iacute;a, ejemplo: ASP.NET o JSP.&lt;/p&gt;
&lt;p&gt;- Curso con m&amp;aacute;quina o sin m&amp;aacute;quina y proyector&lt;/p&gt;
&lt;p&gt;Bien, comienzo por los temas que veo que no est&amp;aacute;n del todo bien y se pueden mejorar, o cambiar completamente por otro &amp;ldquo;approach&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Notemos que los cursos presenciales tienen un gran problema: son, justamente presenciales. Hay que combinar los horarios de todos los que quieren participar, reservar tal tiempo a tal hora y lugar; tambi&amp;eacute;n&amp;nbsp;tienen que estar todos presentes. Esto es un resabio de como se ense&amp;ntilde;aba en las universidades que comenzaron a aparecer en la Edad Media: como no hab&amp;iacute;a libros, el papel no exist&amp;iacute;a o era caro y los profesores escasos, la &amp;uacute;nica forma de ense&amp;ntilde;ar era presencial: juntar un grupo que ten&amp;iacute;a que escuchar a un profesor mientras daba un tema. En aquellos a&amp;ntilde;os incluso&amp;nbsp;se estudiaba para&amp;nbsp;ejercitar la memoria ante la escasez de elementos para tomar apuntes.&lt;/p&gt;
&lt;p&gt;Pasaron los siglos y veo seguimos con el mismo esquema. Algunos problemas derivados de esto:&lt;/p&gt;
&lt;p&gt;- Cada asistente tiene que venir, a cada clase. Si llueve, si est&amp;aacute; complicado en el trabajo, si se enferma, por lo que fuera se pierde una clase que en generle al es irrecuperable presencialmente. Tiene que estar disponible cada d&amp;iacute;a al horario en que se dicta el curso, por varias semanas a veces. Y si un d&amp;iacute;a se le complica asistir lo m&amp;aacute;s probable es que falte o que llegue tarde y no pueda aprovechar bien la clase.&lt;/p&gt;
&lt;p&gt;- Cada asistente mismo tiene que estar con el &amp;aacute;nimo m&amp;aacute;s despierto, durante varias horas, para captar todo lo que se dicta en el curso.&lt;/p&gt;
&lt;p&gt;- Como un curso presencial implica asignar recursos escasos, como lugar, proyector o m&amp;aacute;quinas, sala, etc., entonces cada clase dura por lo menos 3 horas durante las cuales o se dan demasiados temas, de tal forma que no hay tiempo de asimilar, o se dan pocos y el curso se encarece por durar m&amp;aacute;s tiempo.&lt;/p&gt;
&lt;p&gt;- El instructor tiene que explicar algo que ya explic&amp;oacute;, probablemente, cuarenta veces.&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;Como los asistentes, el instructor tambi&amp;eacute;n tiene que estar con todas las luces, explicar de forma clara y tener todas las neuronas prendidas en cada clase, que se repite y repite a lo largo del a&amp;ntilde;o.&lt;/p&gt;
&lt;p&gt;- No siempre el lugar de dictado es el adecuado: o no est&amp;aacute; cerca o no tiene todos los elementos en condiciones.&lt;/p&gt;
&lt;p&gt;- No todos los asistentes tienen el mismo nivel de conocimientos inicial con lo que no todos van aprovechando el contenido de la misma forma.&lt;/p&gt;
&lt;p&gt;- Si trabajan con m&amp;aacute;quina, el curso se alarga. Se necesita&amp;nbsp;m&amp;aacute;s tiempo para corregir ejemplos en cada m&amp;aacute;quina. Tambi&amp;eacute;n pasa que&amp;nbsp;algunos asistentes terminan antes y otros quedan trabados. Coordinar las distintas velocidades es dif&amp;iacute;cil de manejar. Muchas veces sugiero trabajar de a grupos, con poco &amp;eacute;xito. Pasa cuando los asistentes son particulares que no se conocen entre s&amp;iacute; y hay una m&amp;aacute;quina por persona: la gente prefiere encarar por su cuenta, en solitario, cada ejercicio. Esto trae como consecuencia que&amp;nbsp;la clase se alarga. O hay que alargar&amp;nbsp;el curso completo, con el consiguiente aumento del costo final.&lt;/p&gt;
&lt;p&gt;- Aun teniendo pr&amp;aacute;ctica para captar un tema, un asistente puede necesitar su tiempo para entenderlo. Necesita practicar y jugar con un ejercicio un tiempo. No siempre es posible disponer de ese tiempo: muchas veces porque hay que seguir con otro tema. &lt;/p&gt;
&lt;p&gt;- Si no trabajan con m&amp;aacute;quina, muchas veces los asistentes no se toman el tiempo para practicar. Hay varias razones: est&amp;aacute;n tomando el curso en el trabajo pero no tienen m&amp;aacute;quina adecuada para practicar. O est&amp;aacute;n tapados de trabajo y no tienen tiempo. O sus jefes no les asignan tiempo para practicar. O podr&amp;iacute;an practicar en una m&amp;aacute;quina personal, al volver a casa, pero ah&amp;iacute; tambi&amp;eacute;n: hay otros temas de que ocuparse. Me ha pasado dejar ejercicio a un curso y que de los veinte integrantes s&amp;oacute;lo uno o dos practic&amp;oacute; algo entre dos clases. Cuando esto se repite, a lo largo de las clases, llega un momento que el contenido que se trata no se asimila porque no se practic&amp;oacute; lo anterior. Llegados a ese punto, sin pr&amp;aacute;ctica de lo ya tratado&amp;nbsp;es dif&amp;iacute;cil captar todas las facetas del contenido nuevo. Tambi&amp;eacute;n a algunos asistentes se les complica instalar todo lo que necesitan para practicar. Una vez, recuerdo, puse un ejercicio entre clases en un curso de cuarenta personas. Lo&amp;nbsp;escrib&amp;iacute;&amp;nbsp;mal planteado a prop&amp;oacute;sito. A la siguiente clase, solo uno de los asistentes se dio cuenta del problema: era el &amp;uacute;nico que lo hab&amp;iacute;a encarado.&lt;/p&gt;
&lt;p&gt;- El lugar de dictado puede estar a varios kil&amp;oacute;metros de donde un asistente vive y trabaja.&lt;/p&gt;
&lt;p&gt;- Si el curso es en el propio trabajo,&amp;nbsp;un asistente puede sufrir interrupciones, o por tener un tema &amp;quot;urgente&amp;quot; para solucionar, debe abandonar&amp;nbsp;la clase.&lt;/p&gt;
&lt;p&gt;- Si el curso es en el trabajo, pero despu&amp;eacute;s o antes de hora de oficina, a muchos no les es f&amp;aacute;cil participar por tener otras actividades o no poder llegar m&amp;aacute;s temprano.&lt;/p&gt;
&lt;p&gt;- De vez en cuando me pasa que algunos asistentes no tienen mucha motivaci&amp;oacute;n para hacer el curso: los &amp;ldquo;mandaron&amp;rdquo; al curso y no tienen un soporte, un apoyo, de parte de sus empleadores, para sacar provecho del mismo (especulo, pero eso puede ser tambi&amp;eacute;n un &amp;ldquo;test de proactividad&amp;rdquo; de su empleador o contratante).&lt;/p&gt;
&lt;p&gt;- Otras veces, el asistente est&amp;aacute; motivado porque necesita trabajar pero hace tiempo que no toma un curso. Las tecnolog&amp;iacute;as nuevas lo sobrepasan y termina&amp;nbsp;necesitando de m&amp;aacute;s tiempo para aprovechar el contenido.&lt;/p&gt;
&lt;p&gt;- Si el curso es por cuenta de cada integrante, no lo paga una empresa, entonces&amp;nbsp;probablemente tenga que asistir despu&amp;eacute;s de hora un d&amp;iacute;a de semana&amp;nbsp;o un s&amp;aacute;bado. En esos horarios tambi&amp;eacute;n tendr&amp;aacute; que pelear su tiempo con otras actividades, familiares, o de estudio formal.&lt;/p&gt;
&lt;p&gt;- El temario es introductorio para un lenguaje de programaci&amp;oacute;n, pero no se ense&amp;ntilde;a a programa. Se pide expl&amp;iacute;citamente que se conozca de programar y de base de datos. Y algunos asistentes no tienen esos conocimientos en firme.&lt;/p&gt;
&lt;p&gt;- Otro caso es cuando el temario es intermedio o avanzado.&amp;nbsp; Puede pasar que de los que asisten, algunos ya saben varios puntos del temario y se aburren. Mientras, otros necesitan repasar o incluso aprender un tema, porque no llegan al nivel que se necesita para el curso. Esto pasa cuando los cursos son para asistentes de distintas empresas o que se inscriben por su cuenta.&lt;/p&gt;
&lt;p&gt;- Cuando el temario lo arma una empresa, el que arma el temario pide todos los temas habidos y por haber, pero luego no se asigna tiempo para que los asistentes practiquen en el medio del trabajo de cada d&amp;iacute;a.&lt;/p&gt;
&lt;p&gt;- Pr&amp;aacute;cticamente todo el material que doy queda disponible en mi sitio personal. A la quinta o sexta clase del curso, alguien se acerca y me pregunta: &amp;iquest;d&amp;oacute;nde puedo bajar los ejemplos? Yo me pregunto entonces: &amp;iquest;c&amp;oacute;mo hizo para seguir las anteriores clases, si nunca repas&amp;oacute; los ejemplos que YA se dieron? Detecto ac&amp;aacute; que no han tenido tiempo para practicar entre clases.&lt;/p&gt;
&lt;p&gt;Y en mi caso en particular, muchas veces los cursos no se abren por falta de inscriptos: se necesita un n&amp;uacute;mero m&amp;iacute;nimo para costear los activos inmovilizados (proyector, m&amp;aacute;quinas si es con pr&amp;aacute;ctica, lugar, instructor) que no siempre se cubre. Tambi&amp;eacute;n me pasa armar una lista de correo para los asistentes del&amp;nbsp;curso (por ejemplo, en los m&amp;iacute;os de Java) . Luego de dos a&amp;ntilde;os, les cuento que solo cuatro personas, entre decenas que asistieron,&amp;nbsp;se inscribieron para hacer m&amp;aacute;s preguntas.&lt;/p&gt;
&lt;p&gt;No quisiera afirmar que siempre es as&amp;iacute; como describo arriba. Pero me asombra la cantidad de veces que algunos de esos &amp;ldquo;anti-patrones&amp;rdquo; aparecen, por lo menos, en muchos de los cursos que me ha tocado dictar. As&amp;iacute; que pienso, desde hace alg&amp;uacute;n tiempo, que debo mejorar en algunos temas. O motivar m&amp;aacute;s, o hacer algo para que estos anti-patrones no aparezcan tan frecuentemente. Una sorpresa agradable: los cursos de Scrum son los m&amp;aacute;s participativos de todos: son casos&amp;nbsp;donde pr&amp;aacute;cticamente no pr&amp;aacute;cticamente no aparecen estos &amp;ldquo;issues&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Y un tema, disculpen, m&amp;aacute;s personal: otra &amp;ldquo;constante&amp;rdquo; que detecto. Ante un curso de cuarenta personas, pregunto cu&amp;aacute;ntos conocen mi blog.&amp;nbsp;S&amp;oacute;lo uno levanta la mano. Pasan las semanas, y al final del curso, despu&amp;eacute;s de dos meses, pregunto de nuevo. Y ahora, son 1 o 2 las manos levantadas. As&amp;iacute; que algo tengo que hacer: o mejorar los contenidos o escribir m&amp;aacute;s claro o de temas que les interesen m&amp;aacute;s. Muchas veces escribo para que lo explicado quede m&amp;aacute;s claro. Si algo no se entiende en una clase presencial, quisiera que&amp;nbsp;se pueda leer y releer por ac&amp;aacute;. Pero veo que he tenido poca llegada en ese tema, por lo menos en los asistentes a mis cursos presenciales.&lt;/p&gt;
&lt;p&gt;Pero tambi&amp;eacute;n detecto y especulo un patr&amp;oacute;n: los que programan y no leen blogs (m&amp;iacute;o o de cualquiera), en general,&amp;nbsp;no se mantienen actualizados y necesitan cursos presenciales. Los que programan y leen blogs son otro grupo: se mantienen actualizados y no necesitan cursos presenciales, apenas algunas charlas introductorias como primeros pasos en un tema. Luego, ellos mismos aprenden de una nueva tecnolog&amp;iacute;a, patr&amp;oacute;n, estilo arquitect&amp;oacute;nico o herramienta.&lt;/p&gt;
&lt;p&gt;Habiendo repasado estos puntos, &amp;iquest;c&amp;oacute;mo se podr&amp;iacute;a mejorar? Tengo algunas ideas al respecto, tomadas de otros &amp;aacute;mbitos, y de lo que veo que puede funcionar, pero son temas para seguir en la segunda parte de este post. Mientras tanto: &amp;iquest;tienen alguna sugerencia?&lt;/p&gt;
&lt;p&gt;Nos leemos!&lt;/p&gt;
&lt;p&gt;Angel &amp;ldquo;Java&amp;rdquo; Lopez &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt; &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;</description></item><item><title>&amp;#191;Es tiempo de volver a la simplicidad?</title><link>http://msmvps.com/blogs/lopez/archive/2009/10/16/191-es-tiempo-de-volver-a-la-simplicidad.aspx</link><pubDate>Fri, 16 Oct 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1732753</guid><dc:creator>lopez</dc:creator><description>&lt;p&gt;&lt;img align="left" src="http://www.todocontenidos.com/images/articles/compsimp.png" style="display:inline;margin:0px 20px 20px 0px;" alt="" /&gt; En estos d&amp;iacute;as Ted Neward escribi&amp;oacute; un interesante post &lt;a target="_blank" href="http://blogs.tedneward.com/2009/10/12/quotAgile+Is+Treating+The+Symptoms+Not+The+Diseasequot.aspx"&gt;&amp;ldquo;Agile is treating the symptons, not the disease&amp;rdquo;&lt;/a&gt; donde citaba una frase pronunciada por Billy Hollis en el Patterns and Practice Submit de esta semana, en Redmond. Leo ah&amp;iacute;:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;A lot of software written back in the 90&amp;#39;s was written by 1 or 2 guys working for just a few months to slam something out and see if it was useful&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;The problem is the complexity of the tools we have available to us today preclude that kind of software development.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Yo veo el problema m&amp;aacute;s asociado con tecnolog&amp;iacute;as que con las herramientas. Puedo tomar como ejemplo los servicios web. Para m&amp;iacute;, los servicios web no son una herramienta como lo son una librer&amp;iacute;a, un compilador o una IDE. Los servicios web son tecnolog&amp;iacute;a. Muchas de las herramientas que usamos (Eclipse, Visual Studio, &amp;hellip;) luchan contra la complejidad de las tecnolog&amp;iacute;as. Uno o dos programadores todav&amp;iacute;a pueden crear una maravillosa librer&amp;iacute;a de c&amp;oacute;digo abierto. Pero traten de escribir con el mismo equipo una aplicaci&amp;oacute;n empresarial que involucre base de datos, comunicaciones, seguridad, administraci&amp;oacute;n, instrumentaci&amp;oacute;n, y m&amp;aacute;s. Hay tantos detalles en las tecnolog&amp;iacute;as que usamos para implementarlo, que la complejidad de cualquier aplicaci&amp;oacute;n no trivial puede (y frecuentemente es) abrumadora.&lt;/p&gt;
&lt;p&gt;Volvamos a los servicios web. &amp;iquest;Visitaron la &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Web_service"&gt;p&amp;aacute;gina de la Wikipedia&lt;/a&gt; sobre el tema, recientemente? Encontrar&amp;aacute;n docenas de especificaciones. Podr&amp;iacute;an pasar semanas o meses, tratando de entender y comprender todas los detalles t&amp;eacute;cnicos que se encuentran en WS-Trust, WS-Addressing, WS-Transaction, WS-PutYourWordHere. Pienso que la adopci&amp;oacute;n de estilos REST es una reacci&amp;oacute;n contra esa locura (estilo a la REST, no veo tan adoptado los principios REST, o lo que se llama RESTFul). De vez en cuando, hay librer&amp;iacute;as que acuden a nuestra ayuda, y otras veces a&amp;uacute;n esas librer&amp;iacute;as fallan. Mi ejemplo preferido de un intento fallido de ocultar la complejidad de los servicios web, es Windows Communication Foundation (WCF). Escrib&amp;iacute; sobre el tema en &lt;a href="http://ajlopez.wordpress.com/2009/03/04/windows-communication-foundation-configuration-madness/"&gt;Windows Communication Foundation configuration madness&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;La complejidad en software no es mala por s&amp;iacute; misma. Puede llegar a ser buena. El software influye en casi toda actividad humana. La popularidad de Internet, alimentada por una &amp;ldquo;killer application&amp;rdquo; como la World Wide Web, influye en las actividades nuestras de todos los d&amp;iacute;as. Como desarrolladores de software, estamos contribuyendo a ese progreso. No perseguimos estar en nuestra zona de confort sino que buscamos agregar valor a nuestro software. Y si eso implica mayor complejidad, no debemos evitarla.&lt;/p&gt;
&lt;p&gt;En la actualidad, los requerimientos de los clientes son m&amp;aacute;s desafiantes: acceso de m&amp;uacute;ltiples usuarios, en cantidad masivas, escalabilidad, procesamiento distribuido para cumplir con la carga, disponibilidad en l&amp;iacute;nea 24 horas, 7 d&amp;iacute;as a la semana. Todos son requisitos que usualmente se incluyen en las aplicaciones empresariales modernas.&amp;nbsp;Y no hay soluciones simples para cubrir todos esos temas.&lt;/p&gt;
&lt;p&gt;Dicho todo esto, veamos que la complejidad est&amp;aacute; con nosotros pero puede ser combatida. Yo paso gran parte de mis horas de trabajo ense&amp;ntilde;ando programaci&amp;oacute;n, y el resto del tiempo, lo paso desarrollando sistemas. He sufrido la complejidad del estado actual de cosas tanto en la ense&amp;ntilde;anza como&amp;nbsp;en el desarrollo de software. La cantidad de detalle a tener en cuenta (seteo de ORMs, configuraci&amp;oacute;n por inyecci&amp;oacute;n de dependencias, preparaci&amp;oacute;n de los tests, librer&amp;iacute;as de mocks, configuraci&amp;oacute;n de WCF o JBoss o EJBs&amp;hellip;.) es tan grande que nuestras mentes est&amp;aacute;n perdidas en el medio de tal jungla de detalles.&lt;/p&gt;
&lt;p&gt;&amp;iquest;Recuerdan la &amp;ldquo;Era Petzoldiana&amp;rdquo; (en honor a Charles Petzold, autor de libros de programaci&amp;oacute;n para Windows)? Cantidad de l&amp;iacute;neas de c&amp;oacute;digo a escribir para producir un simple programa &amp;ldquo;Hello world&amp;rdquo; que corriera en Windows. Entonces, en esos a&amp;ntilde;os, apareci&amp;oacute; Visual Basic. Fue un modo efectivo de esconder la complejidad de la API de Windows, salvando a toda una generaci&amp;oacute;n de desarrolladores de pelearse con handles y valores LONG donde las coordinadas del mouse ven&amp;iacute;an en mensajes de Windows. Esa API de Windows, as&amp;iacute; desnuda,&amp;nbsp;era (y es) un infierno, un verdadero infierno.&lt;/p&gt;
&lt;p&gt;&amp;iquest;Recuerdan cuando era necesario leer VTOCs en discos de IBM? &amp;iquest;Escribir Job Control Language? &amp;iquest;Escribir macros en ensambladores? Para cada una de esas herramientas, aparecieron otras nuevas que contribuyeron a ocultar la complejidad usando un &amp;ldquo;viejo truco&amp;rdquo;: elevar el nivel de abstracci&amp;oacute;n. En vez de pensar en registros y sectores, comenzamos a manejar variables y comandos SQL.&lt;/p&gt;
&lt;p&gt;Yo pienso que fue al final de los ochenta, principios de los noventas, cuando el desarrollo de software en el &amp;aacute;mbito de las PC alcanz&amp;oacute; el tope en la raz&amp;oacute;n poder/complejidad. Ejemplos que se me ocurren: Turbo Pascal, Visual Basic, Access. Con ellos, ten&amp;iacute;amos&amp;nbsp;gran cantidad de poder de programaci&amp;oacute;n acompa&amp;ntilde;ado de baja complejidad. Desde entonces, veo que&amp;nbsp;estamos en ca&amp;iacute;da libre. El &amp;ldquo;viejo truco&amp;rdquo; de &amp;ldquo;elevar el nivel de abstracci&amp;oacute;n&amp;rdquo; no fue adoptado de nuevo: todav&amp;iacute;a estamos construyendo software usando lenguajes de tercera generaci&amp;oacute;n, lo que podr&amp;iacute;amos considerar los macro ensambladores de los sesenta.&lt;/p&gt;
&lt;p&gt;Como dec&amp;iacute;a, una forma de escapar de este estado de cosas es ir al siguiente nivel de abstracci&amp;oacute;n. Ya alguna vez hemos olvidado manejar registros e instrucciones Branch and Link Register, y hemos adoptado lenguajes de programaci&amp;oacute;n generales. Ahora, necesitamos escribir software en un nivel m&amp;aacute;s alto. Mi apuesta: Domain Specific Models y Domain Specific Languages. Pero es s&amp;oacute;lo una apuesta. Usando DSLs, DSMs, generaci&amp;oacute;n de c&amp;oacute;digo (&amp;iquest;se dan cuenta que cada d&amp;iacute;a que usan un compilador C# o Java, est&amp;aacute;n &amp;ldquo;generando c&amp;oacute;digo&amp;rdquo; AHORA MISMO?) podremos apalancar la tecnolog&amp;iacute;a existente, ocultando la complejidad subyacente.&lt;/p&gt;
&lt;p&gt;Con tantos lenguajes, librer&amp;iacute;as, tecnolog&amp;iacute;as a usar, no hay&amp;nbsp;una simple soluci&amp;oacute;n para ocultar todo este l&amp;iacute;o. Noten que hay varias tipos de complejidad. Una es la complejidad en los requerimientos de los clientes: l&amp;oacute;gica de negocios, requerimientos functionales y no funcionales. Eso est&amp;aacute; bien, es parte de nuestro trabajo. Pienso que las metodolog&amp;iacute;as &amp;aacute;giles est&amp;aacute;n atacando ese tipo de complejidad. Pero tambi&amp;eacute;n existe la complejidad tecnol&amp;oacute;gica. Y ese tipo de complejidad, deber&amp;iacute;a ser m&amp;aacute;s atacada. Debemos parar esta vuelta a la era Petzoldiana (recientemente, encontr&amp;eacute; el concepto de Complejidad Accidental, en una charla de &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Rich_Hickey"&gt;Rich Hickey&lt;/a&gt; talk (hmmm&amp;hellip; creo que &amp;eacute;l la llamaba complejidad incidental). Leo en la p&amp;aacute;gina de Wikipedia &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Accidental_complexity"&gt;accidental complexity&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;b&gt;Accidental complexity&lt;/b&gt; is complexity that arises in &lt;/em&gt;&lt;a href="http://en.wikipedia.org/wiki/Computer_program"&gt;&lt;em&gt;computer programs&lt;/em&gt;&lt;/a&gt;&lt;em&gt; or their development process (&lt;/em&gt;&lt;a href="http://en.wikipedia.org/wiki/Computer_programming"&gt;&lt;em&gt;computer programming&lt;/em&gt;&lt;/a&gt;&lt;em&gt;) which is non-essential to the problem to be solved. While &lt;/em&gt;&lt;a href="http://en.wikipedia.org/wiki/Essential_complexity"&gt;&lt;em&gt;essential complexity&lt;/em&gt;&lt;/a&gt;&lt;em&gt; is inherent and unavoidable, accidental complexity is caused by the approach chosen to solve the problem&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;Otros posts interesantes, disparados por el inicial de Neward:&lt;/p&gt;
&lt;p&gt;El de Jeffrey Palermos &lt;a target="_blank" href="http://jeffreypalermo.com/blog/response-quot-agile-is-treating-the-symptoms-not-the-disease-quot-by-ted-neward/"&gt;Response: &amp;ldquo;Agile is treating the symptoms, not the disease&amp;rdquo; by Ted Neward&lt;/a&gt;&amp;ccedil; &lt;br /&gt;Uno de Phil Haack &lt;a target="_blank" href="http://haacked.com/archive/2009/10/13/software-externalities.aspx"&gt;Software Externalities&lt;/a&gt; &lt;br /&gt;La respuesta de Ted Neward a Haack &lt;a target="_blank" href="http://blogs.tedneward.com/2009/10/13/Haacked+But+Not+Content+Agile+Still+Treats+The+Disease.aspx"&gt;Haacked, but not content; agile still treats the disease&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Tengo tanto para comentar de estos posts. Pero por ahora, sigo con el tema inicial.&lt;/p&gt;
&lt;p&gt;Me gustar&amp;iacute;a recordar un punto m&amp;aacute;s: la complejidad no es el &amp;uacute;nico desaf&amp;iacute;o en el desarrollo del software. Todo proyecto exitoso tiene dos desaf&amp;iacute;os: enfrentar la complejidad y manejar el cambio. Son esos los problemas que las metodolog&amp;iacute;as &amp;aacute;giles nos ayudan a enfrentar: combatir la complejidad con &amp;ldquo;baby steps&amp;rdquo;, pasos de beb&amp;eacute;. Hay que recordar c&amp;oacute;mo se come un elefante: pedacito a pedacito. Y nos ayudan a no temerle al cambio, al contrario: tenemos que abrazarlo, adoptando disciplinas &amp;aacute;giles que disminuyan el costo de cambiar en el medio del desarrollo.&lt;/p&gt;
&lt;p&gt;Otro punto: con la adopci&amp;oacute;n de Internet, nuestra actual cultura de desarrollo de software est&amp;aacute; floreciendo, poblada de ideas, implementaciones de referencia, librer&amp;iacute;as y herramientas de c&amp;oacute;digo abierto, patrones y estilos de arquitectura, mejores pr&amp;aacute;cticas, frameworks, paradigmas de programaci&amp;oacute;n, y lenguajes. Por ejemplo, hay una nueva camada de lenguajes din&amp;aacute;micos, montados sobre Java y .NET. Todo indica que la caja de Pandora ya fue abierta: no veo una forma f&amp;aacute;cil de cerrarla.&lt;/p&gt;
&lt;p&gt;En el post de Ted Newerd que citaba al principio, &amp;eacute;l escribi&amp;oacute;:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Let me rephrase Billy&amp;#39;s talk this way: &lt;/em&gt;&lt;em&gt;Where is this decade&amp;#39;s Access?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Tengo algunas ideas al respecto, sobre c&amp;oacute;mo podr&amp;iacute;a ser el pr&amp;oacute;ximo Access. Pero quedar&amp;aacute; eso planteado para otra clase.&lt;/p&gt;
&lt;p&gt;Nos leemos!&lt;/p&gt;
&lt;p&gt;Angel &amp;ldquo;Java&amp;rdquo; Lopez &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt; &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Tales from the Scrum: Un d&amp;#237;a en el equipo</title><link>http://msmvps.com/blogs/lopez/archive/2009/10/13/tales-from-the-scrum-un-d-237-a-en-el-equipo.aspx</link><pubDate>Tue, 13 Oct 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1732135</guid><dc:creator>lopez</dc:creator><description>&lt;p&gt;Una de las cosas que hay que destacar de Scrum, por si es la primera vez que lo ven, es el trabajo en equipo. Los miembros del equipo realizan una reunión diaria inicial, el Standup, se reparten las tareas, y van trabajando físicamente juntos durante el día, programando, diseñando, haciendo pruebas del software, etc… Hace un tiempo, encontré este video, donde, oh! sorpresa! el ScrumMaster es el bueno de Tobías Mayer (&lt;a href="http://www.infoq.com/interviews/mayer-welfarecsm-scrum" target="_blank"&gt;@tobiasgmayer&lt;/a&gt;) (visiten su blog &lt;a href="http://agilethinking.net/blog/" target="_blank"&gt;Agile Thinking&lt;/a&gt;, y su iniciativa &lt;a href="http://agilethinking.net/welfareCSM/" target="_blank"&gt;WelfareSCM&lt;/a&gt; (entramiento Scrum de bajo costo), también &lt;a href="http://www.infoq.com/interviews/mayer-welfarecsm-scrum" target="_blank"&gt;el video que grabó sobre el tema en InfoQ&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;(Please visit the site to view this media)&lt;/p&gt;  &lt;p&gt;Vean cómo se trabaja a veces de a pares, a veces en solitario. El ScrumMaster (el que acerca la cara y hace muecas…:-), va acompañando al equipo, de forma intermitente. El lugar físico es importante: todos se ven, todos están en contacto directo. Vean cómo van organizando las tareas en papeles. A la derecha, parece que tiene el tablero de control.&lt;/p&gt;  &lt;p&gt;Para los que no lo vivieron, es así: los miembros van avanzando en tareas, tienen reuniones de diseño, o para discutir dudas y caminos. No hace falta comer en el mismo lugar :-) pero pueden hacerlo.&lt;/p&gt;  &lt;p&gt;Pueden leer un post de Tobías que traduje al español en &lt;a href="http://msmvps.com/blogs/lopez/archive/2009/08/18/tales-from-the-scrum-el-coraz-243-n-de-scrum.aspx" target="_blank"&gt;Tales from the Scrum: El corazón de Scrum&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Nos leemos!&lt;/p&gt;  &lt;p&gt;Angel “Java” Lopez    &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Desarrollando aplicaciones en .NET</title><link>http://msmvps.com/blogs/lopez/archive/2009/10/12/desarrollando-aplicaciones-en-net.aspx</link><pubDate>Mon, 12 Oct 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1731991</guid><dc:creator>lopez</dc:creator><description>&lt;p&gt;&lt;img style="display:inline;margin:0px 20px 20px 0px;" src="http://www.todocontenidos.com/images/articles/softdev.jpg" align="left" alt="" /&gt; En esta semana, comienzo a dictar el curso presencial que había anunciado en un anterior post:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2009/09/19/preparando-un-curso-de-net-aplicaciones-patrones-y-arquitectura.aspx" target="_blank"&gt;Preparando un curso de .NET: aplicaciones, patrones y arquitectura&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;organizado por la gente del &lt;a href="http://www.mug.org.ar" target="_blank"&gt;Microsoft Users Group de Argentina&lt;/a&gt;. Gracias a todos los que dejaron sugerencias sobre el temario, ahí, y en listas de correo que consulté. Es un curso pago, pueden obtener más información en la &lt;a href="http://www.mug.org.ar/Eventos/3377.aspx" target="_blank"&gt;página de inscripción al curso&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;El temario a desarrollar es ambicioso:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Arquitectura de aplicaciones .NET&lt;/li&gt;    &lt;li&gt;Capas lógicas, capas físicas&lt;/li&gt;    &lt;li&gt;El gran Service Layer&lt;/li&gt;    &lt;li&gt;Persistencia&lt;/li&gt;    &lt;li&gt;Object Relational Mapping&lt;/li&gt;    &lt;li&gt;NHibernate, otros ORMs&lt;/li&gt;    &lt;li&gt;Reglas de Negocio&lt;/li&gt;    &lt;li&gt;Test-Driven Development&lt;/li&gt;    &lt;li&gt;Rhino Mocks, Moq, otros&lt;/li&gt;    &lt;li&gt;Inyección de dependencias&lt;/li&gt;    &lt;li&gt;Spring Framework y otros&lt;/li&gt;    &lt;li&gt;Separando responsabilidades&lt;/li&gt;    &lt;li&gt;Conceptos de Autorización, Autenticación, y Seguridad Federada&lt;/li&gt;    &lt;li&gt;Patrones en presentación: MVC, MVP, otros&lt;/li&gt;    &lt;li&gt;Tecnologías de presentación: WinForms, ASP.NET, ASP.NET MVC, conceptos de WPF, Silverlight&lt;/li&gt;    &lt;li&gt;Propuestas de Microsoft de Arquitectura&lt;/li&gt;    &lt;li&gt;Modelo de Dominio&lt;/li&gt;    &lt;li&gt;Domain-Driven Development&lt;/li&gt;    &lt;li&gt;Desarrollo en equipo&lt;/li&gt;    &lt;li&gt;Conceptos de Metodologías Agiles, XP, Scrum&lt;/li&gt;    &lt;li&gt;Repositorio de Código&lt;/li&gt;    &lt;li&gt;Integración Continua&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;además de algunas alternativas “exóticas” a explorar, como para amenizar estos temas. Presentaré ejemplos propios y otros de código abierto que están publicados en Internet.&lt;/p&gt;  &lt;p&gt;La idea es ir transmitiendo algunas de las técnicas e ideas que se están usando, para llevar a cabo un desarrollo en .NET. Bien podría dar un curso similar en Java: ambas plataformas son lo bastante maduras como para que podamos usarla en todos estos temas, y más. Y mucho de lo que se usa hoy en .NET, nació primero en Java y otras tecnologías.&lt;/p&gt;  &lt;p&gt;Mi idea es ir volcando por aquí, en este blog, algunos apuntes, resúmenes, notas de lo que dicte en el curso presencial. También compartir por acá enlaces sobre los temas que visitemos (más ejemplos, posts, herramientas, librerías). Es una forma de pasar en limpio, todo lo que entre todos tratemos en el curso, para que no quede solamente para los que asisten. Siempre dejo los ejemplos de los cursos que dicto en mi sitio, en &lt;a href="http://www.ajlopez.net/CursosEjemplos.php" target="_blank"&gt;Cursos y Seminarios: Ejemplos, Enlaces y Recursos&lt;/a&gt;, pero esta vez quisiera ir más lejos, y poner por escrito gran parte de lo que desarrollemos en el curso.&lt;/p&gt;  &lt;p&gt;Son varios temas: intentaré mostrar cómo se derivan de unos pocos principios y necesidades, en principio, de la complejidad y el cambio que acompañan a cualquier sistema de software no trivial y exitoso de estos días.&lt;/p&gt;  &lt;p&gt;(Tomé la imagen de este post de &lt;a title="http://www.leansoftwareinstitute.com/blog/" href="http://www.leansoftwareinstitute.com/blog/"&gt;http://www.leansoftwareinstitute.com/blog/&lt;/a&gt;, creo que refleja la belleza y complejidad de construir software).&lt;/p&gt;  &lt;p&gt;Nos leemos!&lt;/p&gt;  &lt;p&gt;Angel “Java” Lopez   &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Microsoft MVP (Most Valuable Professional) otro a&amp;#241;o m&amp;#225;s, y el futuro del software</title><link>http://msmvps.com/blogs/lopez/archive/2009/10/10/microsoft-mvp-most-valuable-professional-otro-a-241-o-m-225-s-y-el-futuro-del-software.aspx</link><pubDate>Sat, 10 Oct 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1731375</guid><dc:creator>lopez</dc:creator><description>&lt;p&gt;&lt;img align="left" src="http://www.todocontenidos.com/images/articles/past-present-future.jpg" style="display:inline;margin:0px 20px 20px 0px;" alt="" /&gt; El pasado 1ro. de Octubre, me confirmaron que nuevamente, en este a&amp;ntilde;o que sigue, soy Microsoft MVP. Pueden ver detalles del programa en:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mvp.support.microsoft.com/" title="http://mvp.support.microsoft.com/"&gt;http://mvp.support.microsoft.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Quiero agradecer a N&amp;eacute;stor Portillo (&lt;a target="_blank" href="http://twitter.com/nportillo"&gt;@nportillo&lt;/a&gt;) y &lt;a target="_blank" href="http://blogs.msdn.com/mvplead/"&gt;Fernando Garc&amp;iacute;a Loera&lt;/a&gt; (&lt;a target="_blank" href="http://twitter.com/ferglo"&gt;@ferglo&lt;/a&gt;) por su apoyo en todos estos a&amp;ntilde;os. Tambi&amp;eacute;n, a Carlos &amp;ldquo;Billy&amp;rdquo; Reynoso, quien&amp;nbsp;me propuso como MVP en 2002 (vio la luz!! :-), luego de haberme convocado tambi&amp;eacute;n en los 90 para participar de charlas y reuniones. Y a la gente del Microsoft User Group, del que participo desde hace casi 15 a&amp;ntilde;os, por el constante trabajo para armar una comunidad en la que podemos participar todos.&lt;/p&gt;
&lt;p&gt;Me gustar&amp;iacute;a que otras empresas tuvieran un programa similar a los Microsoft MVPs. No s&amp;eacute; si hay programas como &amp;eacute;ste en Oracle/Sun, IBM. En Argentina, la empresa que m&amp;aacute;s se ha preocupado (con altibajos, hay que reconocer) ha sido Microsoft. Recuerdo los tiempos de Sun lanzando Java por estos lares, en los noventa. Estaba m&amp;aacute;s preocupada por captar periodistas que a programadores. Si alguna vez me invitaron a una charla en los noventa, fue porque escrib&amp;iacute;a para una revista, sino, ni enterados la gente de Sun de que hay programadores de este lado del ecuador.&lt;/p&gt;
&lt;p&gt;Recuerdo mis primeros contactos con la tecnolog&amp;iacute;a Microsoft, al leer la Dr.Dobb&amp;rsquo;s Journal, donde se comentaban algunos productos.&amp;nbsp;&amp;iquest;Recuerdan Lattice C? Microsoft lo compr&amp;oacute; para ser su primer Microsoft C. &amp;iquest;Alguien recuerda el Lisp de Microsoft? Creo que se lo hab&amp;iacute;an comprado a una c&amp;iacute;a de Haway. Conoc&amp;iacute; m&amp;aacute;s de la historia de esos tiempos en varios libros; en especial,&amp;nbsp;recuerdo &amp;ldquo;&lt;a target="_blank" href="http://www.amazon.com/Fire-Valley-Making-Personal-Computer/dp/0071358927"&gt;Fire in the Valley&lt;/a&gt;&amp;rdquo;. Tambi&amp;eacute;n ah&amp;iacute; aprend&amp;iacute; de Apple, MITS y dem&amp;aacute;s pioneros en la microcomputaci&amp;oacute;n. En esos tiempos, hab&amp;iacute;a multitud de &amp;ldquo;computadoras personales&amp;rdquo;,&amp;nbsp;con distintos sistemas operativos y lenguajes. En muchas de ellas, Microsoft ten&amp;iacute;a software para ofrecer. Pero todos conocemos que el mercado despeg&amp;oacute; con la llegada de la IBM PC. Recuerdo que para editar con el edlin, booteaba con un diskette, lo retiraba, y pon&amp;iacute;a el segundo, porque ah&amp;iacute; estaba el editor de l&amp;iacute;nea. Como dir&amp;iacute;a Olmedo: &amp;ldquo;&lt;a target="_blank" href="http://www.youtube.com/watch?v=y3RgDknasAs"&gt;Eramos tan pobres&amp;hellip;.&lt;/a&gt; &amp;quot; :-). Si bien lleg&amp;oacute; Apple a mi pa&amp;iacute;s, Argentina, en aquellos a&amp;ntilde;os hab&amp;iacute;a que ser descendiente directo de los que desembarcaron en el Mayflower para poder acceder al programa de desarrollo de aplicaciones de la empresa de la manzanita. Algunos detalles m&amp;aacute;s de esos tiempos, en &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://msmvps.com/blogs/lopez/archive/2008/12/31/treinta-a-241-os-en-desarrollo-de-software.aspx"&gt;Treinta a&amp;ntilde;os en desarrollo de software&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Creo que, como entonces, vivimos tiempos fascinantes en el tema de desarrollo de software. Me gustar&amp;iacute;a escribir ac&amp;aacute; algunos puntos a estudiar, a seguir de cerca, en estos a&amp;ntilde;os que se vienen (espero que para m&amp;iacute;, sean otros treinta a&amp;ntilde;os&amp;hellip; :-)&lt;/p&gt;
&lt;p&gt;Primero, quiero destacar la existencia de dos plataformas de desarrollo: &lt;strong&gt;Java y .NET&lt;/strong&gt;. Entiendo por plataforma de desarrollo a lenguaje(s), librer&amp;iacute;a de clases extensa, soporte de desarrollo de distinto tipos de aplicaciones (desde consola a web a distribuidas). En el 95, comenc&amp;eacute; a conocer Java, y desde entonces, me ha parecido una de las mejores cosas que ha pasado en la historia del desarrollo de software. Con todas las cr&amp;iacute;ticas que se le pueden hacer (EJB una terrible cosa que a&amp;uacute;n me d&amp;aacute; escalofr&amp;iacute;os (antes de acostarme, veo abajo de mi cama a ver si hay alg&amp;uacute;n Entity Bean escondido), Sun como karma, empresa que no supo mover a la comunidad de desarrollo, que en muchos casos se tuvo que arreglar sola (Hibernate como ejemplo?)), Java ha sido lo que hizo que las m&amp;aacute;quinas virtuales, clases y objetos, frameworks, threads, serializaci&amp;oacute;n, modelos de dominio, salieran de lo acad&amp;eacute;mico o del nicho, y pasaran a la corriente principal de desarrollo. Desde fines de los noventa, no he pasado casi una semana, sin dar alg&amp;uacute;n curso o charla sobre Java, y tecnolog&amp;iacute;as asociadas. Es un &amp;ldquo;must be know&amp;rdquo; para cualquier desarrollador de software de este milenio.&lt;/p&gt;
&lt;p&gt;Y Microsoft, vi&amp;oacute; la luz, y se reinvent&amp;oacute; a s&amp;iacute; misma: abandon&amp;oacute; VB, VBScript, ASP, C++ con la infame MFC (Microsoft Foundation Classes), ATL, COM (que nunca despeg&amp;oacute; para multiplataforma, como hubiera querido Don Box, y a&amp;uacute;n Miguel de Icaza con el proyecto Bonobo), y cambi&amp;oacute; como empresa, por lo menos en las herramientas de desarrollo. Parec&amp;iacute;a como si hubiera hecho todo por otra empresa: no m&amp;aacute;s COM como tecnolog&amp;iacute;a&amp;nbsp;necesaria; ten&amp;iacute;amos al fin una m&amp;aacute;quina virtual (un empleado de Microsoft morir&amp;aacute; en la tortura antes de llamar &amp;ldquo;m&amp;aacute;quina virtual&amp;rdquo; al CLR, pero, es lo que es.. :-); pl&amp;eacute;tora de&amp;nbsp;lenguajes nuevos, totalmente montados sobre esa m&amp;aacute;quina virtual. Realmente, es como si hubiera habido otra empresa que cre&amp;oacute; todo eso. Un gran movimiento por parte de Microsoft, que ha sabido adaptarse a los tiempos que le tocan: como ejemplo, recuerden el giro a Internet que di&amp;oacute; la empresa, a finales del 95.&lt;/p&gt;
&lt;p&gt;As&amp;iacute; que tenemos dos temas para seguir con atenci&amp;oacute;n: Java y .NET.&lt;/p&gt;
&lt;p&gt;Otros temas: el desarrollo de aplicaciones, &amp;iquest;d&amp;oacute;nde va? Veo que sigue habiendo aplicaciones de escritorio. Pero preveo que la lucha y la innovaci&amp;oacute;n vendr&amp;aacute;n en otras &amp;aacute;reas (enlaces al final):&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Aplicaciones Web&lt;/strong&gt;: dentro de la empresa, los sistemas de gesti&amp;oacute;n ser&amp;aacute;n migrados a todo web. Si bien la interfaz web no es la mejor, la aparici&amp;oacute;n de Ajax, librer&amp;iacute;as maduras de Javascript, tecnolog&amp;iacute;as en el servidor (ASP.NET, ASP.NET MVC, veremos hacia donde va Java, luego de no haberse adoptado JSF por todo el mundo, Ruby y Python con desarrollo web), hoy no es descabellado ver cada vez m&amp;aacute;s aplicaciones internas, expuestas en el browser.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Rich Internet Applications&lt;/strong&gt;: usar JavaFX, Silverlight, Air, o lo que aparezca. Pero crear aplicaciones, que mediante alg&amp;uacute;n plugin liviano en el cliente, permitan tener la experiencia de usuario del tipo de aplicaciones locales que tenemos ahora.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Software as a Service&lt;/strong&gt;, tanto aplicaciones web (Google Apps) como RIA, el software de gesti&amp;oacute;n y otros tipos, que hoy consumimos localmente, veo que estar&amp;aacute; cada vez m&amp;aacute;s ofertado directamente en la web. Habr&amp;aacute; que ver quienes ser&amp;aacute;n el target: &amp;iquest;las peque&amp;ntilde;as empresas que no tienen un equipo de IT? &amp;iquest;las medianas y grandes, que est&amp;aacute;n cansadas de soportar un equipo de IT y desarrollo semi a a medida?&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Desarrollos Web2.0&lt;/strong&gt;: la interconexi&amp;oacute;n de aplicaciones mediante protocolos livianos (desde REST hasta cualquier otra cosa, olvidando los pesados Web Services, especificaci&amp;oacute;n que veo que se encamina a la over-complexity), modelos pubsub montados sobre Twitter o similares, la aparici&amp;oacute;n de Service Bus online.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Cloud computing&lt;/strong&gt;: lo veo de dos formas: como una forma de virtualizaci&amp;oacute;n as a service, y como una forma de aplicaci&amp;oacute;n escalable hacia afuera. La primera ser&amp;aacute; m&amp;aacute;s f&amp;aacute;cil de programar (es como venimos hasta ahora, pero &amp;ldquo;hosteando&amp;rdquo; en otro lado). Nos ahorramos el setup de la m&amp;aacute;quina, licencias, mantenimiento del equipo. Lo de escalable hacia afuera, m&amp;aacute;s cercano a la idea de &amp;ldquo;cloud&amp;rdquo;, ejecutando en varias m&amp;aacute;quinas, habr&amp;aacute; que estudiar cu&amp;aacute;n de dif&amp;iacute;cil o f&amp;aacute;cil es el cambio de modelo de programaci&amp;oacute;n. Ejemplo: sharding de base de datos, &amp;iquest;ser&amp;aacute; lo suficientemente transparente para como venimos programando?&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Mobile&lt;/strong&gt;: o deber&amp;iacute;a llamarlo, la aparici&amp;oacute;n del software en m&amp;uacute;ltiples dispositivos. Esto es una rama que tenemos que estar atentos. La industria de desarrollo est&amp;aacute; por dar un salto, o ya lo est&amp;aacute; dando: tal vez, el mayor desde la aparici&amp;oacute;n de la computadora personal. La cabeza de playa son los tel&amp;eacute;fonos m&amp;oacute;viles. Pero lo que veo es: sistemas operativos para peque&amp;ntilde;os dispositivos (Android, Windows Mobile) con soporte de desarrollo (Android SDK, .NET Compact Framework), que har&amp;aacute;n que podamos escribir software para casi cualquier cosa, cualquier &amp;ldquo;widget&amp;rdquo; que tengamos (tel&amp;eacute;fonos personales, otros dispositivos, aparatos inteligentes), comunicados por Internet. La convergencia de: dispositivos inteligentes, Internet, herramientas de desarrollo maduras, es &amp;ldquo;the next big frontier&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Lenguajes din&amp;aacute;micos&lt;/strong&gt;: podr&amp;aacute; haber lenguajes aislados (como los originales Ruby y Python) pero veo que cada vez m&amp;aacute;s se montar&amp;aacute;n sobre las dos plataformas, .NET y/o Java. Veremos que pasa con esto: lo que veo, es que tienen comunidades fuertes, que impulsan nuevas cosas, nuevas ideas (o reimplementaciones frescas de otras ideas), que en otros ecosistemas m&amp;aacute;s maduros es dif&amp;iacute;cil de que prendan. Recordemos Ruby On Rails como un ejemplo.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Web Sem&amp;aacute;ntica&lt;/strong&gt;: ah&amp;iacute; afuera hay un mundo de informaci&amp;oacute;n, que por primera vez est&amp;aacute; disponible, no s&amp;oacute;lo para seres humanos, sino para nuestras aplicaciones. La aparici&amp;oacute;n de formas de aprovechar inteligentemente esta monta&amp;ntilde;a(cordillera dir&amp;iacute;a) de informaci&amp;oacute;n, es un camino que veremos donde llega. Las iniciativas de web sem&amp;aacute;ntica son lo m&amp;aacute;s promisorio. Pero tambi&amp;eacute;n puede que &amp;ldquo;la liebre salte por otro lado&amp;rdquo;: desarrollos aislados, que encuentren una forma de comunicarse o de aprovechar lo existente.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Aplicaciones distribuidas&lt;/strong&gt;: los que leen mi blog (yo, y mi t&amp;iacute;a Carlota), saben de mi inter&amp;eacute;s en aplicaciones distribuidas. Habr&amp;aacute; que seguir de cerca el tema message passing, o el m&amp;aacute;s prometedor y flexible, agentes. Multithreading, multicore, son simplemente una antesala a Multimachine. Ese es el camino a al escalabilidad, y superar el bloque de la Ley de Moore: multicore est&amp;aacute; bien, pero multimachine is the solution (preg&amp;uacute;ntele a Google). Sharding de base de datos, escalabilidad, datos y objetos en memoria distribuida en m&amp;aacute;quinas (m&amp;aacute;s barata y r&amp;aacute;pida que los discos).&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Memoria&lt;/strong&gt;: El &amp;uacute;ltimo p&amp;aacute;rrafo me trae a cuento esto que siempre nombro: el uso intensivo de memoria. La memoria cada vez es m&amp;aacute;s barata, y m&amp;aacute;s accesible. Pensemos en qu&amp;eacute; tipo de aplicaciones podemos lograr. Me imagino una base de objetos o de datos, totalmente en memoria, en m&amp;aacute;quinas distribuidas, donde el file system sea solamente otra forma de backup.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Concurrencia y Paralelismo&lt;/strong&gt;: un tema a estudiar. Vean lo que va surgiendo con Clojure, Software Transactional Memory, hasta NetLogo. Ver&amp;iacute;a de cerca paralelismo distribuido, como MapReduce, High Performance Computing, y alrededores.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Lenguajes funcionales&lt;/strong&gt;: recuerdo APL, pero no con cari&amp;ntilde;o. Pero vean el surgimiento de Erlang, la forma en que se us&amp;oacute; para el desarrollo de aplicaciones, el &amp;ldquo;revival&amp;rdquo; de Lisp con Clojure y c&amp;iacute;a, F# por parte de Microsoft, Haskell, algo mixto con Scala en Java. Sumar&amp;iacute;a a los declarativos, como Prolog. &amp;iquest;Ser&amp;aacute; el siglo del lambda? Para m&amp;iacute;, es hermoso que esos temas vuelvan a estar en el tapete. Todo desarrollador de software deber&amp;iacute;a sumergirse en estos temas, en lo que podr&amp;iacute;a llamar, los lenguajes de los dioses.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Modelos de aplicaciones&lt;/strong&gt;: las aplicaciones cada vez son m&amp;aacute;s complejas. Encarar el desarrollo basado pr&amp;aacute;cticamente en lenguajes de tercera generaci&amp;oacute;n, sin haber elevado el nivel de abstracci&amp;oacute;n, con tecnolog&amp;iacute;as de base que van cambiando a&amp;ntilde;o a a&amp;ntilde;o, mes a mes, es un camino lleno de piedras y espinas. Yo apuesto a la aparici&amp;oacute;n de modelos, Domain Specific Models, Domain Specific Languages, herramientas relacionadas (el camino m&amp;aacute;s cercano es la generaci&amp;oacute;n de c&amp;oacute;digo), para hacer m&amp;aacute;s f&amp;aacute;cil el domino de la complejidad y el cambio.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Desarrollo &amp;aacute;gil&lt;/strong&gt;: en los tiempos que corren, el trabajo en equipo es indispensable. La cantidad de tecnolog&amp;iacute;as, detalles, y requerimientos que precisa un software m&amp;aacute;s o menos normal, implican que va desapareciendo el desarrollador de garage, en solitario. Las limitaciones de desarrollo en cascadas, el cambio en los requerimientos, porque hasta el ambiente externo cambia, &amp;eacute;xitos cosechados por el programaci&amp;oacute;n extrema y disciplinas relacionadas, todo apunta a que tenemos que ir adoptando m&amp;aacute;s y m&amp;aacute;s el modo &amp;aacute;gil de construir software. &lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Inteligencia Artificial&lt;/strong&gt;: como dec&amp;iacute;a m&amp;aacute;s arriba, es tiempo de que agentes. Incorporar l&amp;oacute;gica, razonamiento, modelos del mundo, inferencias, objetivos, ontolog&amp;iacute;as, algoritmos gen&amp;eacute;ticos, redes neuronales, en todo lo que se viene.&lt;/p&gt;
&lt;p&gt;(ahora entender&amp;aacute;n un poco m&amp;aacute;s, a que van los c&amp;oacute;digos de c&amp;oacute;digo abierto que publico, como una especie de ejercicio personal para entrenarme en varios de los puntos de arriba).&lt;/p&gt;
&lt;p&gt;No he dejado enlaces en el texto, pero muchos de estos temas, como ver&amp;aacute;n, me interesan desde hace un tiempo, y estos son enlaces que he coleccionado:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://delicious.com/ajlopez/distributedcomputing"&gt;http://delicious.com/ajlopez/distributedcomputing&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/artificialintelligence"&gt;http://delicious.com/ajlopez/artificialintelligence&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/agile"&gt;http://delicious.com/ajlopez/agile&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/codegeneration"&gt;http://delicious.com/ajlopez/codegeneration&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/dsl"&gt;http://delicious.com/ajlopez/dsl&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/dsm"&gt;http://delicious.com/ajlopez/dsm&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/functionalprogramming"&gt;http://delicious.com/ajlopez/functionalprogramming&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/cloudcomputing"&gt;http://delicious.com/ajlopez/cloudcomputing&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/mobile"&gt;http://delicious.com/ajlopez/mobile&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/saas"&gt;http://delicious.com/ajlopez/saas&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/ria"&gt;http://delicious.com/ajlopez/ria&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/dynamiclanguages"&gt;http://delicious.com/ajlopez/dynamiclanguages&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/semanticweb"&gt;http://delicious.com/ajlopez/semanticweb&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/hadoop"&gt;http://delicious.com/ajlopez/hadoop&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/lisp"&gt;http://delicious.com/ajlopez/lisp&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/clojure"&gt;http://delicious.com/ajlopez/clojure&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/messaging"&gt;http://delicious.com/ajlopez/messaging&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/esb"&gt;http://delicious.com/ajlopez/esb&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/scala"&gt;http://delicious.com/ajlopez/scala&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/concurrency"&gt;http://delicious.com/ajlopez/concurrency&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/parallel"&gt;http://delicious.com/ajlopez/parallel&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/stm"&gt;http://delicious.com/ajlopez/stm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Tendr&amp;iacute;a m&amp;aacute;s para comentar, pero es hora de tomar mi medicaci&amp;oacute;n&amp;hellip;:-)&amp;hellip; S&amp;iacute;, ya s&amp;eacute;, es la pastilla roja, no la verde.&lt;/p&gt;
&lt;p&gt;Me parece suficiente para este post, &amp;iquest;no les parece?&lt;/p&gt;
&lt;p&gt;Lo que quer&amp;iacute;a trasmitirles, es que aprovechen este tiempo. Hace treinta a&amp;ntilde;os, yo no ten&amp;iacute;a todo esto disponible: comunicaci&amp;oacute;n instant&amp;aacute;nea, acceso a recursos a un costo razonable, contacto con la comunidad, herramientas maduras, ideas bullendo. Y ahora est&amp;aacute; todo ac&amp;aacute;, servido para la pr&amp;oacute;xima revoluci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Muchas de estas ideas, las comento en mis cursos, aunque no s&amp;eacute; cu&amp;aacute;n bien pude trasmitirlas, o si se entendi&amp;oacute; algo del mensaje. Siempre veo que la gente pide cursos de un tema en particular, me gustar&amp;iacute;a en este post (como en otros anteriores) haber dado una visi&amp;oacute;n m&amp;aacute;s amplia de lo que hay en el mundo del desarrollo de software, hoy, y que sirva de ensayo futurol&amp;oacute;gico, sin mayores pretensiones, de lo que puede venir como importante.&lt;/p&gt;
&lt;p&gt;De alguna forma, en estos a&amp;ntilde;os, se decidir&amp;aacute; el tipo de software que se ejecutar&amp;aacute; en las pr&amp;oacute;ximas dos d&amp;eacute;cadas. Y como en las anteriores, el software seguir&amp;aacute; cambiando la historia humana.&lt;/p&gt;
&lt;p&gt;Pero el software no se hace solo. Como dec&amp;iacute;a Alan Kay: &amp;ldquo;la mejor forma de predecir el futuro, es invent&amp;aacute;ndolo&amp;rdquo;. Sean parte de todo esto.&lt;/p&gt;
&lt;p&gt;Nos leemos!&lt;/p&gt;
&lt;p&gt;Angel &amp;ldquo;Java&amp;rdquo; Lopez &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt; &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Hacia una Historia Cl&amp;#237;nica Digital de C&amp;#243;digo Abierto</title><link>http://msmvps.com/blogs/lopez/archive/2009/09/29/hacia-una-historia-cl-237-nica-digital-de-c-243-digo-abierto.aspx</link><pubDate>Tue, 29 Sep 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1728144</guid><dc:creator>lopez</dc:creator><description>&lt;p&gt;&lt;img style="display:inline;margin:0px 20px 20px 0px;" src="http://www.ajlopez.com/images/articles/medicalrecords01.jpg" align="left" alt="" /&gt; Ya desde hace un tiempo, estoy pensando en qué aplicaciones se podrían desarrollar en código abierto. La que estoy encarando personalmente, es en mejorar AjContab, un sistema de “General Ledger” dirían los americanos, sistema contable simple, abandonando mi viejo ejemplo en .NET, escribiéndola primero en PHP, y luego, ir investigando otras formas de implementarla, en Java o en .NET.&lt;/p&gt;  &lt;p&gt;Pero también pienso en sistemas más grandes. Uno de los que vuelve y vuelve a mi mente, al leer artículos, repasar libros, y ver lo que hay por ahí, es el de Historia Clínica Digital. Quisiera pasar en limpio acá algunas cosas que estoy investigando y pensando sobre el tema.&lt;/p&gt;  &lt;p&gt;Algunos puntos:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Es un sistema no trivial e interesante &lt;/li&gt;    &lt;li&gt;Se puede implementar con una interfaz web, e ir pensando en otras interfaces &lt;/li&gt;    &lt;li&gt;Podemos aprovechar Java o .NET, como tecnologías maduras &lt;/li&gt;    &lt;li&gt;La aparición de tecnologías de apoyo a Rich Internet Application, como Silverlight, Adobe Air, permiten pensar en una interfaz que pueda evolucionar a más requerimientos de presentación, si es que la interfaz web resulta limitada para algunos requerimientos &lt;/li&gt;    &lt;li&gt;Las primeras versiones deberían concentrarse en las prácticas directas, del día a día, más que en la legislación de un país. Buscaría un cliente particular, una clínica, para servir como experto del dominio, y primer usuario que brinde retroalimentación &lt;/li&gt;    &lt;li&gt;Integraría el papel: muchas de las historias clínicas hoy se llevan en papel, no deberíamos ignorar ese hecho al armar este sistema. Deberíamos poder agregar información simplemente escaneada (con reconocimiento de a texto o no). En un principio, hasta que no se implemente legislaciones en firme, debemos recordar que la historia clínica en papel, o partes de ella, tienen alguna responsabilidad legal. Vería que las primeras implementaciones, sólo se ocupen de facilitar la recuperación, consulta, de la “historia médica real”, la de papel. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Deberíamos buscar el apoyo de empresas, como IBM, Oracle, Sun y/o Microsoft, para tener a este proyecto como “flag ship”, producto bandera para incorporar en el mercado vertical de aplicaciones médicas&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;El mundo de las aplicaciones médicas está en permanente evolución &lt;/li&gt;    &lt;li&gt;Es un sistema lo bastante no trivial para que deba ser el producto del trabajo de varios, más que de una sola empresa de desarrollo &lt;/li&gt;    &lt;li&gt;Servicios como firma digital, pueden implementarse en cualquier momento, no necesariamente lo pondría en los primeros requerimientos. &lt;/li&gt;    &lt;li&gt;Tanto firma digital, como seguridad de acceso, se puede ir implementando como servicios a enchufar, que pueden variar de implementación concreta a otra &lt;/li&gt;    &lt;li&gt;La historia clínica gana en prestaciones, si es compartida (con toda la seguridad) en “la nube”: la persona debería poder permitir el acceso a la historia clínica personal a los distintos profesionales médicos, sin necesidad de ir recolectando información que dejó en tal consultorio, en tal hospital, en tal internación. De ahí, que imagino que el éxito del proyecto, se mediría con un servicio en línea, tipo Software as a Service &lt;/li&gt;    &lt;li&gt;Otro camino para “crossing the chasm”, sería brindar el servicio para que la propia persona interesada, el “paciente”, vaya registrando su historia clínica, o lo que quiera ingresar de la misma. &lt;/li&gt;    &lt;li&gt;Como dije arriba, &lt;strong&gt;los “early adopter” deberían ser clínicas&lt;/strong&gt;, no gobiernos. Convencer a un gobierno de usar algo, por lo menos, por estos lares, es tarea digna de las de Hércules. &lt;/li&gt;    &lt;li&gt;Luego, el próximo nivel a explorar, serían &lt;strong&gt;las obras sociales, servicios de medicina prepaga&lt;/strong&gt; (no sé cuál es la denominación de estas organizaciones en otros países, fuera del mío, Argentina). &lt;/li&gt;    &lt;li&gt;Una forma a implementar privacidad, es, en una primera implementación inicial, no dejar ningún dato que identifique al paciente, asegurando privacidad por faltar esa información (ejemplo, tener un código que conozca sólo la persona interesada). &lt;/li&gt;    &lt;li&gt;Se debe producir un resultado visible, más que esperar años para que los usuarios puedan ver algo andando. Es un tema de adopción temprana: no preocuparse tanto por temas de legislación, gobierno, leyes, firma digital, sino de que sirva a los usuarios finales. Hoy podemos construir sistemas de forma ágil, de tal forma que, si el sistema fracasa, no habremos invertido demasiado esfuerzo. Si triunfa, podemos ir armándolo de forma flexible, para que sobreviva a cambios en la legislación, imposición de formatos nuevos, etc. &lt;/li&gt;    &lt;li&gt;Habrá que ir pensando en &lt;a href="http://www.hl7.org/" target="_blank"&gt;HL7 (Health Level 7)&lt;/a&gt;, ver &lt;a href="http://www.ihe.net/" target="_blank"&gt;IHE (Integrating the Healthcare Enterprise)&lt;/a&gt; más que para implementarlos, ver qué temas ocupan, y tenerlos en cuenta y estudiar cuánto influyen en los desarrollos de países que no son EE.UU. Y en sistemas de imágenes como &lt;a href="http://www.e-radiography.net/cr/dicom/dicomintro.htm" target="_blank"&gt;DICOM&lt;/a&gt;. Este último es un formato de imágenes producido por varios aparatos médicos, con anotaciones agregadas. ¿conocen algún otro estándar de ese tipo? &lt;/li&gt;    &lt;li&gt;Tendría que estudiar &lt;a href="http://www.eclipse.org/ohf/" target="_blank"&gt;Open Healthcare Framework (OHF) Project&lt;/a&gt; de Eclipse, y el &lt;a href="http://www.mscui.net/Default.aspx" target="_blank"&gt;Microsoft Health Common User Interface&lt;/a&gt;. Microsoft también tiene &lt;a href="http://www.mshug.org/" target="_blank"&gt;Microsoft Health Users Group&lt;/a&gt;. Para estudiar: &lt;a href="http://www.microsoft.com/industry/healthcare/default.mspx" target="_blank"&gt;Microsoft for the Health Industry&lt;/a&gt;. Por su parte, IBM tiene &lt;a href="http://www-03.ibm.com/industries/healthcare/us/index.html" target="_blank"&gt;Healthcare and life science&lt;/a&gt;. Y en Oracle &lt;a href="http://www.oracle.com/industries/healthcare/index.html" target="_blank"&gt;Healthcare Applications&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Otro que parece interesante es el &lt;a href="http://www.dcm4che.org/" target="_blank"&gt;Open Source Clinical Image and Object Management&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Encuentro una lista extensa de código abierto para salud: &lt;a href="http://en.wikipedia.org/wiki/List_of_open_source_healthcare_software" target="_blank"&gt;List of Open Source Healthcare Software&lt;/a&gt;, en Wikipedia.&lt;/li&gt;    &lt;li&gt;Y hay una &lt;a href="http://www.oshca.org/" target="_blank"&gt;Open Source Health Care Alliance&lt;/a&gt;, aunque parece que el último congreso que tuvieron fue en 2007.&lt;/li&gt;    &lt;li&gt;Es interesante la ontología y terminología que plantea &lt;a href="http://www.opengalen.org/index.html" target="_blank"&gt;OpenGalen&lt;/a&gt;.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;¿Conocen ejemplos de proyectos de código abierto, que hayan encarado este tema, el de la historia clínica digital? He visto por ahí, al &lt;a href="http://www.proyecto-angel.net/" target="_blank"&gt;Proyecto Angel&lt;/a&gt; (no, a pesar del nombre, no tengo nada que ver con el mismo…:-)… en todo caso, se hubiera llamado AjAngel… :-), creo haber leído que era de código abierto, pero no encontré ninguna información cierta al respecto, y no veo donde bajarlo, ni que licencia tiene.&lt;/p&gt;  &lt;p&gt;Pueden ver algunos enlaces sobre el tema historia clínica y sobre historia clínica digital, en:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://delicious.com/ajlopez/medicalrecord"&gt;http://delicious.com/ajlopez/medicalrecord&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Sobre temas de medicina a encarar en este proyecto:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://delicious.com/ajlopez/hl7"&gt;http://delicious.com/ajlopez/hl7&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/dicom"&gt;http://delicious.com/ajlopez/dicom&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Tengo entre manos, terminar AjSharpure (con post explicativos) y seguir con AjContab, publicando algo (con post explicativos). Pero podría armar alguna prueba de concepto, algún prototipo, de lo que esperaría de un sistema como éste. Otra opción, es ir armando un pequeño sistema a adoptar por las clínicas, como “caballo de troya” benigno. El más potable, me parece, sería un sistema de turnos, que puede brindarse también como Software as a Service, o instalarse local en la empresa.&lt;/p&gt;  &lt;p&gt;¿Qué les parece? ¿Es factible? ¿O tengo que ir abriendo mi propia historia clínica psiquiátrica? :-) :-)&lt;/p&gt;  &lt;p&gt;Nos leemos!&lt;/p&gt;  &lt;p&gt;Angel “Java” Lopez    &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;</description></item><item><title>VAN (Reuni&amp;#243;n Virtual) en ALT.NET Hispano sobre Generaci&amp;#243;n de C&amp;#243;digo</title><link>http://msmvps.com/blogs/lopez/archive/2009/09/25/van-reuni-243-n-virtual-en-alt-net-hispano-sobre-generaci-243-n-de-c-243-digo.aspx</link><pubDate>Fri, 25 Sep 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1726628</guid><dc:creator>lopez</dc:creator><description>&lt;p&gt;Gracias a la comunidad de ALT.NET Hispano, mañana sábado 26 de septiembre, participaré de una VAN (Reunión virtual) sobre generación de código (hora internacional 6PM GMT, son15hs Buenos Aires). La idea es que al principio presente algunas ideas, ejemplos de AjGenesis, panorama de generación de código, comentar otras herramientas y aproximaciones, pros y contras,&amp;#160; y luego, se discutan los temas, entre todos.&lt;/p&gt;  &lt;p&gt;Quisiera presentar:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Los por qué de la generación del código&lt;/li&gt;    &lt;li&gt;Qué pedirle a una herramienta de generación de código&lt;/li&gt;    &lt;li&gt;Elevar el nivel de abstracción, partiendo de un modelo&lt;/li&gt;    &lt;li&gt;Resolviendo paso a paso, la aplicación más simple&lt;/li&gt;    &lt;li&gt;Mostrar que es más que templates/plantillas&lt;/li&gt;    &lt;li&gt;Resolver una aplicación con entidades, desde el mismo modelo, en distintas tecnologías y plataformas (Java, .NET, PHP)&lt;/li&gt;    &lt;li&gt;Generación de código como servicio en línea&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Si no conocen qué es una reunión VAN, pueden consultar &lt;a href="http://www.zachariahyoung.com/zy/post/2009/01/Introduction-to-Virtual-ALTNET.aspx"&gt;VAN meetings&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Para ver cómo se desarrolla una VAN de ALT.NET Hispano, y qué software necesitan para asistir, ver &lt;a href="http://altnet-hispano.pbworks.com/Descripcion-de-Reuniones-VAN"&gt;Descripcion-de-Reuniones-VAN&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Pueden ver &lt;a href="http://altnet-hispano.pbworks.com/Historial-de-reuniones"&gt;el historial de anteriores reuniones VAN&lt;/a&gt; (visiten las que dieron, por ejemplo, sobre NHibernate, WPF y demás)(ya había participado de &lt;a href="http://msmvps.com/blogs/lopez/archive/2009/09/18/resultado-de-la-van-en-alt-net-hispano-sobre-scrum.aspx" target="_blank"&gt;VAN sobre Scrum&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;Gracias al bueno de &lt;a href="http://geeks.ms/blogs/jgamba" target="_blank"&gt;Jorge Gamba&lt;/a&gt; (&lt;a href="http://twitter.com/jorgegamba" target="_blank"&gt;@jorgegamba&lt;/a&gt;) que publicó el evento en su blog:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/jgamba/archive/2009/09/24/van-hispano-2009-09-26-generacion-de-codigo.aspx" target="_blank"&gt;[Evento] Viendo la luz respecto a “Generación de Código”&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Copio de ahí:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;La comunidad &lt;a href="http://altnethispano.org"&gt;ALT.NET Hispano&lt;/a&gt; realizará un evento virtual con el tema &lt;a href="http://msmvps.com/blogs/lopez/archive/2007/08/02/sobre-la-generaci-243-n-de-c-243-digo.aspx"&gt;Generación de Código&lt;/a&gt;, con la exposición principal del reconocido especialista y maestro en desarrollo de software &lt;a href="http://www.ajlopez.com/"&gt;Angel “Java” Lopez&lt;/a&gt;. Será el día sábado 26 de septiembre a la hora internacional 18:00 GMT/GTU (Greenwich), con una duración aproximada de 2 horas. Para atender la reunión deben usar el programa &lt;a href="http://office.microsoft.com/en-us/help/HA101733831033.aspx"&gt;Microsoft Office Live Meeting 2007 client&lt;/a&gt;, abriendo el enlace &lt;a href="http://snipr.com/virtualaltnet"&gt;http://snipr.com/virtualaltnet&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;Adicionalmente, pueden plantear sus comentarios e inquietudes sobre el tema de la reunión en la discusión &lt;a href="http://groups.google.com/group/altnet-hispano/browse_thread/thread/47667d4fc07235b4"&gt;Invitación a VAN Hispano Sábado 26 de septiembre - &amp;quot;Generación de código&amp;quot; con Angel &amp;quot;Java&amp;quot; Lopez&lt;/a&gt;, en nuestra &lt;a href="http://groups.google.com/group/altnet-hispano/"&gt;lista de correo&lt;/a&gt;.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;La comunidad ALT.NET hispano está muy activa, y los invito a participar de ella. Jorge escribe:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;les dejo la lista de recursos compartidos de los que disponemos en la comunidad:&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a href="http://groups.google.com/group/altnet-hispano"&gt;Lista de Correo del Grupo de Usuarios&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://altnet-hispano.pbworks.com/"&gt;Wiki&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://twitter.com/AltNetHispano"&gt;Twitter&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://bit.ly/bLoe4"&gt;Facebook&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://www.viddler.com/explore/AltNet-Hispano/videos/"&gt;viddler&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://altnet-hispano.pbworks.com/Mapa"&gt;Mapa de ubicación geográfica&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://www.google.com/calendar/embed?src=fpf8r6u1n4f0hd2p50t0mcoa28%40group.calendar.google.com"&gt;Calendario de eventos&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/blockquote&gt;  &lt;p&gt;Como comenta Jorge, pueden ir leyendo:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2007/08/02/sobre-la-generaci-243-n-de-c-243-digo.aspx"&gt;Sobre la generación de código&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2008/08/25/diez-reglas-principales-en-generaci-243-n-de-c-243-digo.aspx"&gt;Diez reglas principales en generación de código&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2009/07/22/la-generaci-243-n-de-c-243-digo-y-el-trabajo-de-desarrollo-de-software.aspx"&gt;La generación de código y el trabajo de desarrollo de software&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Nos leemos!&lt;/p&gt;  &lt;p&gt;Angel “Java” Lopez   &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>