<?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>Angel "Java" Lopez : Desarrollo de Software, Programación</title><link>http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/Programaci_F300_n/default.aspx</link><description>Tags: Desarrollo de Software, Programación</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Entrevista y Podcast</title><link>http://msmvps.com/blogs/lopez/archive/2013/03/23/entrevista-y-podcast.aspx</link><pubDate>Sat, 23 Mar 2013 10:47:32 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1825715</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1825715</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2013/03/23/entrevista-y-podcast.aspx#comments</comments><description>&lt;p&gt;Hoy paso a comentar dos entregables que se publicaron: una entrevista, y una charla como podcast.&lt;/p&gt;  &lt;p&gt;El año pasado, el bueno de &lt;a href="https://twitter.com/santiagobasulto"&gt;@santiagobasulto&lt;/a&gt; (desarrollador de software, emprendedor, programador Python, colaborador en proyectos de código abierto) tuvo la paciencia de hacerme una entrevista en persona, acá en Buenos Aires, tomándose el trabajo de viajar desde su La Plata en un día atareado. Estuvimos charlando como dos horas (en un bar histórico de la ciudad, donde se filmó la escena del billete y el mozo, de la película “Nueve Reinas”, les dejo como trabajo para el hogar averiguar cuál es). Justamente, ese bar tiene también algo que ver con la entrevista, porque he pasado por él varias veces en las décadas que llevo de programar.&lt;/p&gt;  &lt;p&gt;Santiago la pasó en limpio, la pueden leer en:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://charliedontcode.com/entrevistas/2012/08/12/entrevista-angel-java-lopez.html" href="http://charliedontcode.com/entrevistas/2012/08/12/entrevista-angel-java-lopez.html"&gt;http://charliedontcode.com/entrevistas/2012/08/12/entrevista-angel-java-lopez.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Algo más de contexto, lo escribí hace algo más de cuatro años:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://msmvps.com/blogs/lopez/archive/2008/12/31/treinta-a-241-os-en-desarrollo-de-software.aspx" href="http://msmvps.com/blogs/lopez/archive/2008/12/31/treinta-a-241-os-en-desarrollo-de-software.aspx"&gt;http://msmvps.com/blogs/lopez/archive/2008/12/31/treinta-a-241-os-en-desarrollo-de-software.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Visiten el blog de Santiago:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://charliedontcode.com/" href="http://charliedontcode.com/"&gt;http://charliedontcode.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Muy buena la escena de cine de donde toma el nombre (ya me imagino a &lt;a href="https://twitter.com/santiagobasulto"&gt;@santiagobasulto&lt;/a&gt; cruzándose con Robert Duvall, acá en Buenos Aires, supongo que en otro bar histórico, La Biela ;-).&lt;/p&gt;  &lt;p&gt;Y también tuve una charla, esta vez a distancia, con los buenos &lt;a href="http://twitter.com/roundcrisis"&gt;@roundcrisis&lt;/a&gt; &lt;a href="http://twitter.com/dvilchez"&gt;@dvilchez&lt;/a&gt;, publicada hoy como podcast:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.32minutos.net/?p=106" href="http://www.32minutos.net/?p=106"&gt;http://www.32minutos.net/?p=106&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Ah! Pusieron una foto mía, debe ser la “clásica” ;-) (no me saco muchas fotos). Tratamos temas de desarrollo de software, algo de desarrollo ágil, insistí bastante sobre el tema TDD, también sobre generación de código como sistema experto, y “ver la luz”. Y hasta apareció algo de Anglish ;-). &lt;/p&gt;  &lt;p&gt;Vean que han producido varios podcast en:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.32minutos.net/" href="http://www.32minutos.net/"&gt;http://www.32minutos.net/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;como el de &lt;a href="http://www.32minutos.net/?p=85"&gt;Programación Funcional&lt;/a&gt; con el bueno de &lt;a href="http://twitter.com/martinsalias"&gt;@martinsalias&lt;/a&gt;, o el de &lt;a href="http://www.32minutos.net/?p=32"&gt;Node.js&lt;/a&gt; con &lt;a href="http://twitter.com/woloski"&gt;@woloski&lt;/a&gt;, &lt;a href="http://twitter.com/jfroma"&gt;@jfroma&lt;/a&gt; y &lt;a href="http://twitter.com/theprogrammer"&gt;@theprogrammer&lt;/a&gt;. Hace unas semanas grabamos otro podcast, esta vez con Martin, para 32 minutos, y se conversó bastante sobre agilidad. Veremos si queda publicado en estos días. Estén atentos.&lt;/p&gt;  &lt;p&gt;Les agradezco a los tres haberme permitido conversar y expresar algunas ideas, que pueden servir o no. &lt;/p&gt;  &lt;p&gt;Pero lo bueno que están haciendo, es dejar entregables consumibles. Eso es importante. Internet (y la Web en particular) está permitiendo la generación de contenido y compartirlo con todos los interesados, de una forma accesible. Pienso que es una revolución tan grande como la de Gutenberg, y los primeros libros de Manuccio.&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;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1825715" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Historia+de+la+Computaci_26002300_243_3B00_n/default.aspx">Historia de la Computaci&amp;#243;n</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+Agil/default.aspx">Desarrollo Agil</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/TDD/default.aspx">TDD</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Programaci_F300_n/default.aspx">Programación</category></item><item><title>Remember the Links</title><link>http://msmvps.com/blogs/lopez/archive/2013/03/21/remember-the-links.aspx</link><pubDate>Thu, 21 Mar 2013 14:30:28 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1825583</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1825583</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2013/03/21/remember-the-links.aspx#comments</comments><description>&lt;p&gt;Cuando investigo un tema, voy anotando qué recursos he utilizado, ya sea libros, notas, enlaces, etc. Es algo que he tomado como hábito, luego de adaptar una recomendación de &lt;a href="http://en.wikipedia.org/wiki/Clifford_Stoll"&gt;Clifford Stoll&lt;/a&gt; en su libro The Cuckoo’s Egg: llevar una libreta (notebook) con lo que se hace (algo que Stoll recibió del premio nobel Alvarez). Cuando es algo que está público en Internet, desde hace años uso mi cuenta de Delicious para ir anotando esa información:&lt;/p&gt;  &lt;p&gt;&lt;a title="https://delicious.com/ajlopez" href="https://delicious.com/ajlopez"&gt;https://delicious.com/ajlopez&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Y sí, también mantengo libretas (de papel) con notas, ideas y lo que fui haciendo para resolver algo.&lt;/p&gt;  &lt;p&gt;Cada tanto voy publicado en mi blog en inglés (o en Anglish) lo que me pareció interesante compartir. Siempre pueden entrar en:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://ajlopez.wordpress.com/category/links" href="http://ajlopez.wordpress.com/category/links"&gt;http://ajlopez.wordpress.com/category/links&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Los temas que más me han importado en estos años:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ajlopez.wordpress.com/2013/03/10/tdd-links-news-and-resources-8/"&gt;Test-Driven Development&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2013/02/28/artificial-intelligence-links-and-resources-3/"&gt;Artificial Intelligence&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2013/02/22/node-js-links-news-and-resources-15/"&gt;Node.js&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2013/02/21/cqrs-links-news-and-resources-6/"&gt;CQRS&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/category/distributed-computing/"&gt;Distributed Computing&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2013/01/27/bioinformatics-links-news-and-resources-3/"&gt;Bioinformatics&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2013/01/18/smalltalk-links-news-and-resources-11/"&gt;Smalltalk&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2013/01/10/python-links-news-and-resources-12/"&gt;Python&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2012/12/20/cobol-links-news-and-resources-2/"&gt;COBOL&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2012/11/26/game-development-links-news-resources-6/"&gt;Game Development&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2012/11/08/genetic-algorithms-links-and-resources-2/"&gt;Genetic Algorithms&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2012/11/03/socket-io-links-news-and-resources-2/"&gt;Socket.IO&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2012/11/02/express-links-news-and-resources-2/"&gt;Express&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2012/10/31/mongodb-links-news-and-resources-1/"&gt;MongoDB&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;y mil temas más.&lt;/p&gt;  &lt;p&gt;Aprovecho este post de recuerdo, para agregar otros posts con links de temas que no son de desarrollo de software, pero que pueden interesar:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ajlopez.zoomblog.com/archivo/2013/03/20/teoria-de-Categorias-Enlaces-y-Recurso.html"&gt;Teoría de Categorías&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.zoomblog.com/archivo/2013/03/15/gauss-Enlaces-y-Recursos-1.html"&gt;Gauss&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.zoomblog.com/archivo/2013/03/13/fermat-Enlaces-y-Recursos-1.html"&gt;Fermat&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.zoomblog.com/archivo/2013/03/06/topologia-Enlaces-y-Recursos-2.html"&gt;Topología&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.zoomblog.com/archivo/2013/03/01/teoria-de-Numeros-Enlaces-Novedades-y-.html"&gt;Teoría de Números&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.zoomblog.com/archivo/2013/02/16/teoria-de-Grupos-Enlaces-y-Recursos-3.html"&gt;Teoría de Grupos&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.zoomblog.com/archivo/2013/02/08/geometria-Enlaces-y-Recursos-2.html"&gt;Geometría&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.zoomblog.com/archivo/2013/02/06/astronomia-Enlaces-Novedades-y-Recurso.html"&gt;Astronomía&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.zoomblog.com/archivo/2013/01/15/historia-de-las-Matematicas-Enlaces-y-.html"&gt;Historia de las Matemáticas&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.zoomblog.com/archivo/2012/08/23/matematicas-Enlaces-Novedades-y-Recurs.html"&gt;Matemáticas&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.zoomblog.com/archivo/2012/06/22/calculo-Enlaces-Novedades-y-Recursos-2.html"&gt;Cálculo&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.zoomblog.com/archivo/2012/11/27/teoria-de-Cuerdas-Enlaces-y-Recursos-2.html"&gt;Teoría de Cuerdas&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://ajlopez.zoomblog.com/archivo/2012/11/20/richard-Feynman-Enlaces-y-Recursos-2.html"&gt;Richard Feynman&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;y de nuevo, mil temas más.&lt;/p&gt;  &lt;p&gt;Tantos temas interesantes, una sola vida &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lopez.metablogapi/0876.wlEmoticon_2D00_smile_5F00_4BBC2858.png" /&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;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1825583" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Enlaces+y+Noticias/default.aspx">Enlaces y Noticias</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Programaci_F300_n/default.aspx">Programación</category></item><item><title>TDD y Baby Steps</title><link>http://msmvps.com/blogs/lopez/archive/2013/01/31/tdd-y-baby-steps.aspx</link><pubDate>Thu, 31 Jan 2013 14:04:27 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1823335</guid><dc:creator>lopez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1823335</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2013/01/31/tdd-y-baby-steps.aspx#comments</comments><description>&lt;p&gt;Ya saben que TDD (Test-Driven Development) es uno de mis temas favoritos. Y no sólo porque me gusta, sino porque creo que es uno de los temas a difundir para mejorar la calidad de nuestro trabajo, tanto en el código entregado como en la calidad de vida de nuestro día laboral. Soy un convencido de que el código de producción escrito SIN TDD debería estar prohibido, directamente. Y si insisto con el tema, es porque no veo que se aplique y entienda TDD, por lo menos en estos lares, Buenos Aires y Argentina. Por ejemplo, escucho por ahí:&lt;/p&gt;  &lt;p&gt;- “TDD es más lento”, no lo veo así, es un caso de “vísteme despacio que estoy apurado”.&lt;/p&gt;  &lt;p&gt;- “TDD no es para los programadores junior”, no, cuanto más inexperto es el programador, más va a aprender y mejorar haciendo TDD y usando el cerebro, claro ;-) TDD no produce mejores programadores, pero los hace pensar en lo que están haciendo.&lt;/p&gt;  &lt;p&gt;- “TDD es hacer test y code coverage”, por favor, no me presenten a una persona que piense así. O que piense que TDD es aprender a hacer test unitarios, sea lo que sea que “unitario” signifique.&lt;/p&gt;  &lt;p&gt;- “TDD es aburrido”, para mí es como un juego, cada test en verde es como superar un nivel de juego.&lt;/p&gt;  &lt;p&gt;Una de las actividades que me nacen naturalmente cuando hago TDD, es que lo que escribo va creciendo de a poco, de a “baby steps”, de a pasos de bebé. En vez de hacer un gran salto en la implementación, si uno realmente programa con TDD va agregando poco código en cada test que se agrega. Y no se agrega código que no nazca, que no tenga una traza que lo remita a la necesidad de un test. Esto consiga que el software que vamos creando, crezca como si fuera un organismo vivo, desarrollándose de a poco. Esto trae varias consecuencias:&lt;/p&gt;  &lt;p&gt;- Cada código agregado tiene su función específica: hacer que un test pase a verde&lt;/p&gt;  &lt;p&gt;- No aparece código “por las dudas” o por casos de uso todavía no implementados.&lt;/p&gt;  &lt;p&gt;- No pensamos “por adelantado”, poniendo código que todavía no necesitamos (evitamos romper &lt;a href="http://en.wikipedia.org/wiki/You_aren&amp;#39;t_gonna_need_it"&gt;YAGNI&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;- No se adopta tecnología o soluciones (librerías, frameworks, base de datos, etc… ) hasta el momento en el que REALMENTE se necesitan.&lt;/p&gt;  &lt;p&gt;Y algo menos evidente:&lt;/p&gt;  &lt;p&gt;- El código que vamos armando es pasible de refactorización en cualquier momento&lt;/p&gt;  &lt;p&gt;- Y aún puede haber más que refactorización, sino también cambiar algo de nuestro diseño, sin grandes “dolores”&lt;/p&gt;  &lt;p&gt;Ahora les advierto: no se puede aplicar todo esto con TDD, si parte del código QUE ESCRIBIMOS NOSOTROS no lo hacemos con TDD. Porque entonces vamos a &amp;quot;sufrir&amp;quot; cuando lleguemos un día a necesitar refactorizar, o rediseñar, y entonces la parte del código que habíamos escrito SIN TDD nos va a pesar y nos va a complicar ese paso de refactor o de rediseño.&lt;/p&gt;  &lt;p&gt;Me gustaría mostrarles un ejemplo, pueden ver los posts y series:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2012/05/25/tdd-paso-a-paso-6-la-semana-del-panadero.aspx"&gt;TDD Paso a Paso&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2011/06/27/writing_2D00_an_2D00_application_2D00_using_2D00_tdd_2D00_part_2D00_5_2D00_adding_2D00_views.aspx"&gt;Escribiendo una aplicación con TDD&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2011/01/28/writing_2D00_an_2D00_interpreter_2D00_in_2D00_net_2D00_part_2D00_9.aspx"&gt;Escribiendo un Intérprete en .NET&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2012/06/18/van-en-alt-net-hispano-desarrollando-una-aplicaci-243-n-con-tdd.aspx"&gt;VAN en Alt.NET Hispano: Desarrollando una Aplicación con TDD&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;con video en &lt;a href="http://altnethispano.org/wiki/van-2012-06-23-desarrollando-una-aplicacion-con-tdd-desde-0.ashx"&gt;Desarrollando una aplicación con TDD desde cero&lt;/a&gt; con código en &lt;a title="https://github.com/ajlopez/TddOnTheRocks/tree/master/TddApp" href="https://github.com/ajlopez/TddOnTheRocks/tree/master/TddApp"&gt;https://github.com/ajlopez/TddOnTheRocks/tree/master/TddApp&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;y &lt;a href="http://msmvps.com/blogs/lopez/archive/tags/TDD/default.aspx"&gt;mis posts de TDD&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Pero cada día, en &lt;a href="https://github.com/ajlopez"&gt;mi cuenta de GitHub&lt;/a&gt;, voy haciendo commits por test, así que pueden entrar a algún proyecto y ver cómo va evolucionando. Por ejemplo, hoy voy a empezar a codificar &lt;a href="https://github.com/ajlopez/SimpleKeeper"&gt;SimpleKeeper&lt;/a&gt; (una especie de &lt;a href="http://zookeeper.apache.org/"&gt;ZooKeeper&lt;/a&gt; pero en Node.js). Pueden en cualquier momento entrar a ver la lista de commits e ir revisando si cumplo o no cumplo con TDD y “baby steps”.&lt;/p&gt;  &lt;p&gt;Algo muy interesante, y relacionado con este post, es:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://moleseyhill.com/blog/2009/05/18/kent-becks-four-hats/"&gt;Kent Beck’s Four Hats&lt;/a&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Controlling the size of your checkout is a valuable coding skill. You should be able to take small, baby steps, and check-in at any time. There are a number of benefits. If you check-in frequently the merge to source control becomes trivial. Your colleagues won’t get annoyed, because that change which they need is never far away. Most importantly you are in control of your work.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Vean ahí los cuatro sombreros de Kent Beck.&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;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1823335" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/TDD/default.aspx">TDD</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Programaci_F300_n/default.aspx">Programación</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Programaci_F300_n+Extrema/default.aspx">Programación Extrema</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Proyectos+de+C_26002300_243_3B00_digo+Abierto/default.aspx">Proyectos de C&amp;#243;digo Abierto</category></item><item><title>Resoluciones del Nuevo Mes: Noviembre 2012</title><link>http://msmvps.com/blogs/lopez/archive/2012/11/07/resoluciones-del-nuevo-mes-noviembre-2012.aspx</link><pubDate>Wed, 07 Nov 2012 16:15:49 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1818911</guid><dc:creator>lopez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1818911</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2012/11/07/resoluciones-del-nuevo-mes-noviembre-2012.aspx#comments</comments><description>&lt;p&gt;Revisión de &lt;a href="http://msmvps.com/blogs/lopez/archive/2012/10/02/resoluciones-del-nuevo-mes-octubre-2012.aspx"&gt;mis resoluciones de Octubre&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;- Dar una charla sobre lenguajes de programación en Javascript &lt;strong&gt;&lt;font color="#008000"&gt;[completo]&lt;/font&gt;&lt;/strong&gt; &lt;a href="http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=khbun9jb2T8"&gt;ver video&lt;/a&gt;     &lt;br /&gt;- Dar una chalar sobre Node.js/Socket.IO, aplicaciones web de tiempo real &lt;strong&gt;&lt;font color="#008000"&gt;[completo]&lt;/font&gt;&lt;/strong&gt; &lt;a href="http://msmvps.com/blogs/lopez/archive/2012/11/01/node-js-express-y-socket-io-en-udadev-2012-cuenca-ecuador.aspx"&gt;ver post&lt;/a&gt;    &lt;br /&gt;- Trabajar en PythonSharp &lt;strong&gt;&lt;font color="#008000"&gt;[completo]&lt;/font&gt;&lt;/strong&gt; &lt;a href="https://github.com/ajlopez/PythonSharp"&gt;ver repo&lt;/a&gt;     &lt;br /&gt;- Trabajar en AjTalk para Java &lt;strong&gt;&lt;font color="#800000"&gt;[pendiente]&lt;/font&gt;&lt;/strong&gt;     &lt;br /&gt;- Trabajar en AjConsorSite &lt;font color="#800000"&gt;&lt;strong&gt;[parcial]&lt;/strong&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;strong&gt; &lt;/strong&gt;solo tuve demo y reuniones&lt;/font&gt;     &lt;br /&gt;- Trabajar en GameServer &lt;font color="#800000"&gt;&lt;strong&gt;[parcial] &lt;/strong&gt;&lt;font color="#000000"&gt;&lt;strong&gt;&lt;/strong&gt;solo tuve demo y reuniones&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Adicionalmente, estuve trabajando en:&lt;/p&gt;  &lt;p&gt;- Actualizar mis ejemplos de Node.js &lt;strong&gt;&lt;font color="#008000"&gt;[completo]&lt;/font&gt;&lt;/strong&gt; &lt;a href="https://github.com/ajlopez/NodeSamples"&gt;ver repo&lt;/a&gt;     &lt;br /&gt;- Autómata celular en Javascript/Node.js &lt;strong&gt;&lt;font color="#008000"&gt;[completo]&lt;/font&gt;&lt;/strong&gt; &lt;a href="https://github.com/ajlopez/Cellular"&gt;ver repo&lt;/a&gt;     &lt;br /&gt;- Mejoras menores de &lt;a href="https://github.com/ajlopez/AjTalkJs"&gt;AjTalkJs&lt;/a&gt; y &lt;a href="https://github.com/ajlopez/AjLispJs"&gt;AjLispJs&lt;/a&gt;     &lt;br /&gt;- Comenzar mi Basic Script (para Javascript/Node.js) &lt;font color="#008000"&gt;&lt;strong&gt;[completo] &lt;/strong&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;a href="https://github.com/ajlopez/BasicScript"&gt;ver repo&lt;/a&gt;       &lt;br /&gt;- Comenzar a portar AjGroups (librería de grupos finitos) a Javascript/Node.js &lt;/font&gt;&lt;font color="#008000"&gt;&lt;strong&gt;[completo] &lt;/strong&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;a href="https://github.com/ajlopez/AjGroupsJs"&gt;ver repo&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;Para este nuevo mes:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;- Trabajar en PythonSharp      &lt;br /&gt;- Dar una charla sobre Implementando Python, en PyCon 2012 Argentina       &lt;br /&gt;- Trabajar en AjTalk para Java       &lt;br /&gt;- Trabajar en AjTalk para Javascript       &lt;br /&gt;- Trabajar en BasicScript (quiero comenzar a usarlo para que se pueda definir la lógica de un juego ejemplo de mi GameServer)       &lt;br /&gt;- Comenzar páginas markdown con Tutorial de Java, en español&amp;#160; &lt;br /&gt;- Comenzar páginas markdown con Tutorial de Node.js en español&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;Nos leemos!&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&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;/font&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1818911" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Smalltalk/default.aspx">Smalltalk</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Lenguajes+de+Programaci_26002300_243_3B00_n/default.aspx">Lenguajes de Programaci&amp;#243;n</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Programaci_F300_n/default.aspx">Programación</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Python/default.aspx">Python</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Proyectos+de+C_26002300_243_3B00_digo+Abierto/default.aspx">Proyectos de C&amp;#243;digo Abierto</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/NodeJs/default.aspx">NodeJs</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Juegos/default.aspx">Desarrollo de Juegos</category></item><item><title>Día del Programador, en Buenos Aires, Córdoba y Rosario</title><link>http://msmvps.com/blogs/lopez/archive/2012/09/05/d-237-a-del-programador-en-buenos-aires-c-243-rdoba-y-rosario.aspx</link><pubDate>Wed, 05 Sep 2012 14:45:58 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1815900</guid><dc:creator>lopez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1815900</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2012/09/05/d-237-a-del-programador-en-buenos-aires-c-243-rdoba-y-rosario.aspx#comments</comments><description>&lt;p&gt;A partir de la semana que viene, tendremos reuniones gratuitas, en tres ciudades de mi país, organizadas (en parte, por lo menos la de Buenos Aires) por el Microsoft User Group de Argentina, para festejar el día del programador:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.programmerday.info/"&gt;http://www.programmerday.info/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;El martes 11 de septiembre tenemos en Buenos Aires:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.mug.org.ar/Eventos/3806.aspx"&gt;http://www.mug.org.ar/Eventos/3806.aspx&lt;/a&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Martes, Septiembre 11, 2012     &lt;br /&gt;Lugar: Salón Dorado, Legislatura de la Ciudad de Buenos Aires, Perú 160.      &lt;br /&gt;Una jornada dedicada a compartir código y códigos. Se dice que el día 256 del año es el “Día del Programador”. Anticipándonos a la fecha invitamos a colegas y amigos a participar de este encuentro.&lt;/p&gt;    &lt;p&gt;&lt;b&gt;Orador: Rodo Finochietti,Daniel Cazzulino,Nico Paez,Johnny Haliffe,Fabio Maulo,Pablo Cibraro,Angel López&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Horario: 9:00 a 13:00 hs. Atención el evento comienza y termina puntualmente.&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;Sesiones estrictamente dedicadas a programación a cargo de conocidos picadores de código. Si sos analista, gerente de proyecto u otra gente que &amp;quot;no compila&amp;quot;, pero te interesa compartir el momento, estás invitado.&lt;/p&gt;    &lt;p&gt;09:00 - Acreditación&lt;/p&gt;    &lt;p&gt;09:10 - Aplicaciones web de punta a punta&amp;#160; - &lt;strong&gt;Rodolfo Finochietti       &lt;br /&gt;&lt;/strong&gt;09:40 - TDD y Mocking – &lt;strong&gt;Daniel Cazzulino       &lt;br /&gt;&lt;/strong&gt;10:10 - Pharo Smalltalk – &lt;strong&gt;Nico Paez&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;10:40 - Break&lt;/p&gt;    &lt;p&gt;11:00 - Node.js - &lt;strong&gt;Johnny Haliffe       &lt;br /&gt;&lt;/strong&gt;11:30 - Colas en Azure&amp;#160; - &lt;strong&gt;Fabio Maulo       &lt;br /&gt;&lt;/strong&gt;12:00 - Web API - &lt;strong&gt;Pablo Cibraro &lt;/strong&gt;      &lt;br /&gt;12:30 - Sistemas distribuidos&amp;#160; - &lt;strong&gt;Angel López&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;El miércoles 12 de Septiembre, habría reunión en Córdoba:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.mug.org.ar/Eventos/3807.aspx"&gt;http://www.mug.org.ar/Eventos/3807.aspx&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Día del Programador - Córdoba   &lt;br /&gt;Miércoles, Septiembre 12, 2012    &lt;br /&gt;Lugar: Colegio Universitario IES Siglo 21, Salón SUM - Buenos Aires 563, Córdoba.    &lt;br /&gt;Una jornada que organizamos en conjunto con el IES21 dedicada a compartir código, experiencias y novedades. Se dice que el día 256 del año es el “Día del Programador”. Justo en coincidencia con la fecha invitamos a colegas y amigos a participar de este encuentro.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Orador: Matías Iácono, José Romaniello&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Horario: 18:00 a 22:00 hs, acreditación a partir de las 18:00 hs.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Temario:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Introducción a Node.js - José Romaniello&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Servicios RESTFul con WCF, jQuery y JSon. - Matías Iácono&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Introducción a Visual Studio 2012 - Matías Iácono&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Y el lunes 24 de septiembre (revisar, puede que hoy se declare feriado nacional, por el bicentenario de la batalla de Tucumán):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.mug.org.ar/Eventos/3808.aspx"&gt;http://www.mug.org.ar/Eventos/3808.aspx&lt;/a&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Día del Programador - Rosario - Aplicando Metodologías Ágiles y TDD con MVC3     &lt;br /&gt;Lunes, Septiembre 24, 2012      &lt;br /&gt;Lugar: SUM UTN Facultad Regional Rosario, Zeballos 1341 Planta Baja, Rosario Pcia de Santa Fe.      &lt;br /&gt;Una jornada ágil con código y demos. Se dice que el día 256 del año es el “Día del Programador”. PAra celebrarlo, unos días pasada la fecha, invitamos a colegas y amigos a participar de este encuentro.&lt;/p&gt;    &lt;p&gt;&lt;b&gt;Orador: Sebastián Pilafis, Sebastián Scandolo, Máximo Jesús García, Pablo Giménez Parera &lt;/b&gt;&lt;/p&gt;    &lt;p&gt;Sebastián P.: Solutions Manager en Velocity Partners. Ingeniero de Sistemas (UNC). MCP. CSM.     &lt;br /&gt;Sebastián S.: Sr Team Lead en Velocity Partners. Licenciado en Ciencias de la Computación (UNR). Docente de la cátedra Análisis de Sistemas e Ingeniería de Software de LCC en la UNR. CSM.      &lt;br /&gt;Máximo: Sr .Net Developer en Velocity Partners. MCTS.      &lt;br /&gt;Pablo: Sr .Net Developer en Velocity Partners. MCTS.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Horario: 18:30 a 21:30 hs&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;Comenzaremos con una introducción a los fundamentos de Agile y conceptos&amp;#160; Scrum. Posteriormente desarrollaremos Test Driven Development como técnica de diseño con ejemplos.&amp;#160; Para culminar, exploramos&amp;#160; MVC3 con un ejemplo integrador de las tecnologías y metodologías vistas.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Los tres eventos requieren registración, y son gratuitos.&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;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1815900" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+Agil/default.aspx">Desarrollo Agil</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Programaci_F300_n/default.aspx">Programación</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Argentina/default.aspx">Argentina</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Buenos+Aires/default.aspx">Buenos Aires</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Reuniones/default.aspx">Reuniones</category></item><item><title>Mentoring en Desarrollo de Software</title><link>http://msmvps.com/blogs/lopez/archive/2012/03/29/mentoring-en-desarrollo-de-software.aspx</link><pubDate>Thu, 29 Mar 2012 16:44:15 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1808127</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1808127</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2012/03/29/mentoring-en-desarrollo-de-software.aspx#comments</comments><description>&lt;p&gt;Estoy preparando una charla virtual (VAN) para Alt.NET Hispano, sobre varios lenguajes de programación (Clojure, Javascript, Erlang, Python, Ruby, Scala). Investigando sobre las comunidades de esos lenguajes, me encuentro con la página de la gente de Python Argentina:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://python.org.ar/pyar"&gt;http://python.org.ar/pyar&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Ayer encontré ahí esta interesante propuesta en línea&lt;/p&gt;  &lt;p&gt;&lt;a href="http://python.org.ar/pyar/AdoptaUnNewbie" target="_blank"&gt;Adopta a un newbie&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Leo ahí&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;gente se postula como mentores&lt;/li&gt;    &lt;li&gt;gente se postula como mentados&lt;/li&gt;    &lt;li&gt;los intereses comunes se juntan&lt;/li&gt;    &lt;li&gt;se acuerda la forma de intactuar (IM, Skype, en persona)&lt;/li&gt;    &lt;li&gt;el mentor dedica unas horas semanales a ayudar al mentado&lt;/li&gt;    &lt;li&gt;el mentado documenta lo que va aprendiendo en un blog&lt;/li&gt;    &lt;li&gt;     &lt;p&gt;al terminar el proceso presenta una charla de lo aprendido en un evento (&lt;a href="http://python.org.ar/pyar/PyDay"&gt;PyDay&lt;/a&gt;, &lt;a href="http://python.org.ar/pyar/PyCamp"&gt;PyCamp&lt;/a&gt;, &lt;a href="http://python.org.ar/pyar/PyCon"&gt;PyCon&lt;/a&gt; etc.)&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;todos felices&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Me gusta que se documente lo que se vaya aprendiendo en un blog, así queda disponible la experiencia para otros. Ya conocía la idea de mentoring, que me parece excelente. Ver mis enlaces en:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://delicious.com/ajlopez/mentoring"&gt;http://delicious.com/ajlopez/mentoring&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Recomiendo en especial:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.davidgcohen.com/2011/08/28/the-mentor-manifesto/" target="_blank"&gt;The mentor manifesto&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;The Mentor Manifesto&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Be socratic. &lt;/li&gt;    &lt;li&gt;Expect nothing in return (you’ll be delighted with what you do get back). &lt;/li&gt;    &lt;li&gt;Be authentic / practice what you preach. &lt;/li&gt;    &lt;li&gt;Be direct. Tell the truth, however hard. &lt;/li&gt;    &lt;li&gt;Listen too. &lt;/li&gt;    &lt;li&gt;The best mentor relationships eventually become &lt;a href="http://www.feld.com/blog/archives/2006/11/reflections_on.html"&gt;two-way&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Be responsive. &lt;/li&gt;    &lt;li&gt;Adopt at least one company every single year. Experience counts. &lt;/li&gt;    &lt;li&gt;Clearly separate opinion from fact. &lt;/li&gt;    &lt;li&gt;Hold information in confidence. &lt;/li&gt;    &lt;li&gt;Clearly commit to mentor or do not. Either is fine. &lt;/li&gt;    &lt;li&gt;Know what you don’t know. Say I don’t know when you don’t know. “I don’t know” is preferable to bravado. &lt;/li&gt;    &lt;li&gt;Guide, don’t control. Teams must make their own decisions. Guide but never tell them what to do. Understand that it’s their company, not yours. &lt;/li&gt;    &lt;li&gt;Accept and communicate with other mentors that get involved. &lt;/li&gt;    &lt;li&gt;Be optimistic. &lt;/li&gt;    &lt;li&gt;Provide specific actionable advice, don’t be vague. &lt;/li&gt;    &lt;li&gt;Be challenging/robust but never destructive. &lt;/li&gt;    &lt;li&gt;Have empathy. Remember that startups are hard.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.hbr.org/hmu/2011/02/demystifying-mentoring.html" target="_blank"&gt;Desmystifying Mentoring&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Myth #1: You have to find one perfect mentor   &lt;br /&gt;Myth #2: Mentoring is a formal long-term relationship    &lt;br /&gt;Myth #3: Mentoring is for junior people    &lt;br /&gt;Myth #4: Mentoring is something more experienced people do out of the goodness of their hearts&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.readwriteweb.com/start/2010/09/the-importance-of-trust-and-me.php" target="_blank"&gt;The importance of Trust and Mentorship for Startups&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Pero me resultó novedoso que una comunidad en Argentina fomentara esta práctica. Sería interesante ver esto aplicado en otras comunidades, como Ruby Argentina, Alt.NET Hispano, o en grupos de usuarios como el MUG de Argentina.&lt;/p&gt;  &lt;p&gt;También en empresas, consultoras, fábricas de software. Si Ud. va a proponer un programa así, recomendaría que fuera público, abierto, con cierto soporte de la consultora (tantas horas disponibles por persona), pero que sea emergente, no un programa formal. Es decir, que sea la gente la que se proponga como mentor o mentado en distintos temas. Eso permite ver quienes son más proactivos, y tienen ganas de compartir y aprender. Expone habilidades que quisiéramos tener en los miembros de nuestros equipos ágiles: curiosidad, capacidad de comunicación, inquietud, disciplina, etc.&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;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1808127" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+Agil/default.aspx">Desarrollo Agil</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Programaci_F300_n/default.aspx">Programación</category></item><item><title>Enlaces, Novedades y Recursos</title><link>http://msmvps.com/blogs/lopez/archive/2011/09/24/enlaces-novedades-y-recursos.aspx</link><pubDate>Sat, 24 Sep 2011 10:49:46 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1800119</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1800119</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2011/09/24/enlaces-novedades-y-recursos.aspx#comments</comments><description>&lt;p&gt;Mi sitio personal comenzó como una forma de compartir recursos y enlaces de distintos temas, pero desde hace unos años directamente uso &lt;a href="http://ajlopez.zoomblog.com/archivo/2011/07/01/mi-Delicious.html"&gt;mi Delicious&lt;/a&gt;, dejando mi sitio para publicar material de cursos presenciales. &lt;/p&gt;  &lt;p&gt;En mi blog en inglés he publicado colecciones de enlaces sobre temas que me interesan. Están bajo &lt;a href="http://ajlopez.wordpress.com/category/links/"&gt;la categoría Links&lt;/a&gt;. Hay enlaces en inglés, pero también en español. Espero que algunos temas les sirvan, otros les resulten nuevos pero interesantes. En general, los publico primero en email privado en mi cliente principal (espero que alguien los lea, además de &lt;a href="http://msmvps.com/blogs/lopez/archive/2010/03/09/me_2D00_and_2D00_my_2D00_aunt_2D00_charlotte.aspx"&gt;mi Tía Carlota&lt;/a&gt; ;-) y luego encuentran su curso para ser publicados en mi blog en inglés. He aquí los post publicados:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ajlopez.wordpress.com/2011/09/21/closures-links-news-and-resources-1/"&gt;Closures&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2011/09/20/c-5-links-news-and-resources-1/"&gt;C# 5&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2011/09/16/windows-8-and-winrt-links-news-and-resources/"&gt;Windows 8 and WinRT&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2011/09/03/ruby-links-news-and-resources-1/"&gt;Ruby&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2011/08/29/lambda-calculus-links-news-and-resources-1/"&gt;Lambda Calculus&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2011/08/24/erlang-links-news-and-resources-1/"&gt;Erlang&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2011/08/23/node-js-links-news-resources-2/"&gt;Node.js (2)&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2011/08/22/haskell-links-news-and-resources-1/"&gt;Haskell&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2011/08/18/mock-objecs-links-news-and-resources-1/"&gt;Mock Objects&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2011/08/11/scalability-links-news-and-resources-1/"&gt;Scalability&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2011/08/09/mapreduce-links-news-and-resources-1/"&gt;MapReduce&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2011/08/02/tdd-links-news-and-resources-1/"&gt;TDD&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2011/07/27/git-links-news-resources-1/"&gt;Git&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2011/07/26/domain-driven-design-links-news-resources-1/"&gt;Domain-Driven Design&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2011/07/23/game-development-links-news-resources-1/"&gt;Game Development&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2011/07/14/rest-links-news-and-resources-1/"&gt;REST&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2011/07/13/javascript-links-news-resources-1/"&gt;Javascript&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2011/07/09/html5-links-news-and-resources-1/"&gt;HTML5&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2011/06/20/links-news-and-resources-windows-azure-1/"&gt;Windows Azure&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2011/06/15/links-news-resources-node-js-1/"&gt;Node.js&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2011/02/19/link-news-resources-object-oriented-programming-1/"&gt;Object Oriented Programming&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Para conseguir los tutoriales o videos de esa colección, ver el post mi Delicious sobre la forma en que “taggeo” estos enlaces.&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;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1800119" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Enlaces+y+Noticias/default.aspx">Enlaces y Noticias</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Programaci_F300_n/default.aspx">Programación</category></item><item><title>Los Principios de la Buena Programación</title><link>http://msmvps.com/blogs/lopez/archive/2011/08/17/los-principios-de-la-buena-programaci-243-n.aspx</link><pubDate>Wed, 17 Aug 2011 10:27:16 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1797767</guid><dc:creator>lopez</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1797767</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2011/08/17/los-principios-de-la-buena-programaci-243-n.aspx#comments</comments><description>&lt;p&gt;Encuentro en estos días el post &lt;a href="http://www.artima.com/weblogs/viewpost.jsp?thread=331531"&gt;The Principles of Good Programming&lt;/a&gt;, de Christopher Diggins.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Christopher Diggins is a software developer and freelance writer. Christopher loves programming, but is eternally frustrated by the shortcomings of modern programming languages. As would any reasonable person in his shoes, he decided to quit his day job to write his own ( &lt;a href="http://www.heron-language.com"&gt;www.heron-language.com&lt;/a&gt; ). Christopher is the co-author of the &lt;a href="http://www.cpp-cookbook.com"&gt;C++ Cookbook&lt;/a&gt; from O&amp;#39;Reilly. Christopher can be reached through his home page at &lt;a href="http://www.cdiggins.com"&gt;www.cdiggins.com&lt;/a&gt;.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Me gustaría transcribir en mis palabras la lista de principios de ese post. Veamos:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;DRY – Don’t repeat yourself&lt;/strong&gt; – No repetirse a sí mismo. Podría remontarme a Ada Lovelace y su idea de rutinas para encontrar el germen de este principio. Funciones, métodos, clases son todos artefactos que fueron apareciendo en la historia de la programación para evitar la repetición. Ver &lt;a title="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself" href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself"&gt;http://en.wikipedia.org/wiki/Don%27t_repeat_yourself&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Abstraction Principle&lt;/strong&gt; – Principio de Abstracción. Es una forma de llegar al DRY de arriba. “Cada pieza de funcionalidad significativa en un programa debe ser implementada en un sólo lugar del código fuente”. Ver &lt;a title="http://en.wikipedia.org/wiki/Abstraction_principle_(programming" href="http://en.wikipedia.org/wiki/Abstraction_principle_(programming"&gt;http://en.wikipedia.org/wiki/Abstraction_principle_(programming&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;KISS (Keep it simple, stupid)&lt;/strong&gt; – Manténgalo simple, estúpido! Tal vez mi principio preferido. Ante tanta complejidad accidental, temas de tecnologías, frameworks y librerías, la mejor solución a un problema es la más simple. Menos código, menos bugs. Ver &lt;a title="http://en.wikipedia.org/wiki/KISS_principle" href="http://en.wikipedia.org/wiki/KISS_principle"&gt;http://en.wikipedia.org/wiki/KISS_principle&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Avoid Creating a YAGNI (You aren’t going to need it)&lt;/strong&gt; – Evitar crear algo que no vamos a necesitar. Es común tratar de ver el futuro y comenzar a crear abstracciones que todavía no estamos usando. Una de las razones por las que prefiero trabajar con TDD (Test-Driven Development) es que nos permite alcanzar éste y otros principios (como el KISS y los que siguen abajo) de una forma natural. Muchas veces digo: “No hay que cruzar al puente antes de llegar al puente”. Ver &lt;a title="http://en.wikipedia.org/wiki/YAGNI" href="http://en.wikipedia.org/wiki/YAGNI"&gt;http://en.wikipedia.org/wiki/YAGNI&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Do the simplest thing that could possibly work&lt;/strong&gt; – Haga lo más simple que funcione. Siempre hay que preguntarse ¿qué es lo más simple que tengo que escribir para que esto funcione? De nuevo, TDD me lleva a este principio. Al no introducir complejidad a cada paso, vamos manteniéndonos en el camino de la simplicidada. Ver &lt;a title="http://c2.com/xp/DoTheSimplestThingThatCouldPossiblyWork.html" href="http://c2.com/xp/DoTheSimplestThingThatCouldPossiblyWork.html"&gt;http://c2.com/xp/DoTheSimplestThingThatCouldPossiblyWork.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Don’t make me think&lt;/strong&gt; – No me haga pensar. Hay un libro de Steve Krug con este título (&lt;a href="http://www.amazon.com/Dont-Make-Me-Think-Usability/dp/0321344758"&gt;Don&amp;#39;t Make Me Think: A Common Sense Approach to Web Usability, 2nd Edition&lt;/a&gt;) Así como la interfaz tiene que ser algo que no nos haga pensar ¿y ahora, cómo lo hago? el código que escribamos tiene que ser consumible de la misma forma: evitar lo “tricky”, los nombres de las funciones deben declarar claramente lo que hacen, etc. Por ejemplo, a veces veo código Fluent que hay que hacer un curso en la NASA para ver qué hacen, de tanto lambda que aparece en los parámetros ;-). Pero tengo que reconocer que pueden ser útiles una vez uno entiende el concepto.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Open/Closed Principle&lt;/strong&gt; – Principio Abierto/Cerrado. Uno de los principios S.O.L.I.D. (ver &lt;a title="http://en.wikipedia.org/wiki/SOLID_%28object-oriented_design%29" href="http://en.wikipedia.org/wiki/SOLID_%28object-oriented_design%29"&gt;http://en.wikipedia.org/wiki/SOLID_%28object-oriented_design%29&lt;/a&gt;) Entidades de software (clases, módulos, funciones) deben estar abiertas a la extensión, pero cerradas a la modificación. Hay que escribir clases, no para que otros las modifiquen, sino para que otras las usen y extiendan.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Write Code for the Maintainer&lt;/strong&gt; – Escriba código para el que va a mantenerlo. Yo diría: escriba código para sí mismo dentro de seis meses. Otro punto donde TDD me ayuda. No hay que escribir código “cool”, hay que escribir código claro que haga cosas “cool”. Muchas veces veo código brillante, pero inmantenible. Tomemos nuestro tiempo, y pongamos “algo de amor” en el código ;-). Dice el post que comento: “Escriba el código como si el que tuviera que mantenerlo fuera un sicópata asesino que conoce donde vives” Ver &lt;a title="http://c2.com/cgi/wiki?CodeForTheMaintainer" href="http://c2.com/cgi/wiki?CodeForTheMaintainer"&gt;http://c2.com/cgi/wiki?CodeForTheMaintainer&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Principle of least astonishment&lt;/strong&gt; – Principio del menor asombro. Se aplica en general a la interfaz de usuario, pero también se puede aplicar al código. El texto del código no debe provocar sorpresa. Ejemplo: el nombre de una función debería corresponder con lo que hace. Hasta la indentación del código y las convenciones ayudan. Ver &lt;a title="http://en.wikipedia.org/wiki/Principle_of_least_astonishment" href="http://en.wikipedia.org/wiki/Principle_of_least_astonishment"&gt;http://en.wikipedia.org/wiki/Principle_of_least_astonishment&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Single Responsability Principle&lt;/strong&gt; – Principio de Responsabilidad Unica. Un componente de código (clase, función) debe ejecutar una única y bien definida tarea. Otro de los principios S.O.L.I.D. Ver &lt;a title="http://en.wikipedia.org/wiki/Single_responsibility_principle" href="http://en.wikipedia.org/wiki/Single_responsibility_principle"&gt;http://en.wikipedia.org/wiki/Single_responsibility_principle&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Minimize Coupling&lt;/strong&gt; – Minimizar el acoplamiento. Cada componente (bloque de código, clase, función, etc.) debe minimizar las dependendencias de otros componentes. Por ejemplo, usar lo menos posible variables en común. Cuando un componente A tiene que usar el componente B, debe tratar de conocer lo menos posible de B: por ejemplo, sólo consumir lo necesario de su funcionalidad, y no entrar en temas como crear a B (de ahí el uso de inyección de dependencias). No hacer cosas como B.propiedad.propiedad2.metodo() (un caso de la ley de Demeter de más abajo). El minimizar el acoplamiento trabaja junto con el maximizar la cohesión. Ver &lt;a title="http://en.wikipedia.org/wiki/Coupling_%28computer_programming%29" href="http://en.wikipedia.org/wiki/Coupling_%28computer_programming%29"&gt;http://en.wikipedia.org/wiki/Coupling_%28computer_programming%29&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Maximize Cohesion&lt;/strong&gt; – Maximizar Cohesión. Un componente debe tener funcionalidad altamente relacionado. Evitar implementar en un componente dos funcionalidades que no están relacionadas, cumpliendo tareas que no tienen relación. Ver &lt;a title="http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29" href="http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29"&gt;http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Hide Implementation Details&lt;/strong&gt; – Ocultar Detalles de Implementación. Ejemplo, no exponer variables de estado interno: preferir propiedades controladas o mejor, directamente métodos. Concentrarse en exponer lo que los demás van a consumir, antes que los detalles de cómo cumplimos con nuestra tarea. Esto permite llegar a cambiar la implementación sin afectar al resto del sistema. En lenguajes tipados como C# y Java, se puede llegar a algo de esto consumiendo interfaces definidas. &lt;a title="http://en.wikipedia.org/wiki/Information_Hiding" href="http://en.wikipedia.org/wiki/Information_Hiding"&gt;http://en.wikipedia.org/wiki/Information_Hiding&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Law of Demeter&lt;/strong&gt; – Ley de Demeter. Los componentes de código deben comunicarse con los directamente relacionados. Usar B si se referencia desde A, pero evitar usar B.C.D.metodoE(). A se relaciona directamente con B si lo recibe en su constructor, o como parámetro de un método. También se puede tomar como “directo” la funcionalidad heredada de una superclase. Ver &lt;a title="http://en.wikipedia.org/wiki/Law_of_Demeter" href="http://en.wikipedia.org/wiki/Law_of_Demeter"&gt;http://en.wikipedia.org/wiki/Law_of_Demeter&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Avoid Premature Optimization&lt;/strong&gt; – Evitar la Optimización Prematura. Otro caso de “no hay que cruzar el puente hasta llegar al puente”. Hay que evitar pensar en optimizar código, si apenas lo estamos armando. Ir armando el código de tal forma que podamos refactorizarlo, cambiar implementación, concentrar los cambios en pocos lados (todo esto ayudado por los otros principios, y TDD) para cuando llegue el tiempo de optimizar (si es que llega). Para optimizar, hay que medir, no intuir. &amp;quot;We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil&amp;quot; - Donald Knuth. &lt;a href="http://en.wikipedia.org/wiki/Program_optimization"&gt;http://en.wikipedia.org/wiki/Program_optimization&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Code Reuse is Good&lt;/strong&gt; – El Reúso de Código es Bueno. Aprovechar código ya escrito, si es buen código (esperamos que cumpla los otros principios). Mejora el tiempo de desarrollo, y si es código ya usado y probado, mejora el resultado. Ver &lt;a title="http://en.wikipedia.org/wiki/Code_reuse" href="http://en.wikipedia.org/wiki/Code_reuse"&gt;http://en.wikipedia.org/wiki/Code_reuse&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Separation of Concerns&lt;/strong&gt; – Separación de Preocupaciones. Un componente no debe ocuparse de dos o más tareas, especialmente si tienen poca relación no accidental entre sí. Por ejemplo, el manejo de la autorización a ejecutar un método debería quedar, en lo posible, fuera del código de ese método. Ver &lt;a title="http://en.wikipedia.org/wiki/Separation_of_concerns" href="http://en.wikipedia.org/wiki/Separation_of_concerns"&gt;http://en.wikipedia.org/wiki/Separation_of_concerns&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Embrace Change&lt;/strong&gt; – Abraza el cambio. El cambio es una constante en el desarrollo de software: cambio en los requerimientos, la funcionalidad, la tecnología, la evolución de un sistema exitoso. No hay que luchar contra el cambio, sino trabajar para estar preparado para él. Programación ágil, TDD, integración continua, Scrum, iteraciones cortas, revisión en cada iteración, son todas prácticas que soportan este principio. Ver &lt;a href="http://www.amazon.com/gp/product/0321278658"&gt;Extreme Programming Explained: Embrace Change (2nd Edition)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Alguno más? Comentarios? Supongo que puedo escribir algún post de cada uno, con algún ejemplo. Veremos! ;-)&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;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1797767" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+Agil/default.aspx">Desarrollo Agil</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Programaci_F300_n/default.aspx">Programación</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Programaci_F300_n+Extrema/default.aspx">Programación Extrema</category></item><item><title>Aprendiendo Java</title><link>http://msmvps.com/blogs/lopez/archive/2011/05/11/aprendiendo-java.aspx</link><pubDate>Wed, 11 May 2011 11:24:25 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1793006</guid><dc:creator>lopez</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1793006</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2011/05/11/aprendiendo-java.aspx#comments</comments><description>&lt;p&gt;Ya varias veces me preguntaron por Twitter sobre recursos de Java para estudiar. Sea este post un intento de respuesta a esta pregunta, ampliada: no sólo recursos, sino, qué estudiar de Java (lo que dependerá del trabajo a encarar), y estudiar algo más amplio: programar.&lt;/p&gt;  &lt;p&gt;El mundo de Java se ha ido expandiendo desde la aparición pública en 1995 del lenguaje, Java Virtual Machine, y librería de clases, de la mano de Sun. Siguieron versiones del lenguaje y librería. El mayor cambio ha sido en las versiones 1.5 y 1.6, donde aparecieron nuevas “features” del lenguaje, y se esperan más para el 1.7. Sin embargo, para gran parte de lo que se necesita para COMENZAR a aprender Java, es suficiente con saber manejarse con lo común a cualquier versión. Como saben, hace un tiempo Oracle compró a Sun, y veremos qué pasa con el desarrollo de las nuevas versiones, y el futuro de Java en general.&lt;/p&gt;  &lt;p&gt;Para estudiar Java, hay que recordar:&lt;/p&gt;  &lt;p&gt;- Se implementa sobre una JVM (Java Virtual Machine) multiplataforma   &lt;br /&gt;- Tiene una extensa librería de clases    &lt;br /&gt;- Como lenguaje, es orientado a objetos    &lt;br /&gt;- No tiene un entorno “prefijado” o preferido de desarrollo (IDE, Integrated Development Environment)&lt;/p&gt;  &lt;p&gt;Paso a enumerar algunos recursos. Primero, el burro por delante ;-)… Tienen un curso incompleto pero espero que interesante, en mis recursos en línea:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ajlopez.net/cursos/Course.php?Id=1"&gt;Curso: Introducción a Java&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Ahí también tienen otros cursos en línea. Luego, pueden ver ejemplos en mi Skydrive, de los cursos de Java que fui dando: &lt;a href="http://cid-9f903f3d6db0c176.office.live.com/browse.aspx/Examples/Java"&gt;Ejemplos de Java&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Luego, lo más recomendable en línea debe ser lo que había armado Sun, ahora bajo la égida de Oracle:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://download.oracle.com/javase/tutorial/index.html"&gt;The Java Tutorials&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Comenzaría por &lt;a href="http://download.oracle.com/javase/tutorial/java/index.html"&gt;Learning the Java Language&lt;/a&gt;, &lt;a href="http://download.oracle.com/javase/tutorial/essential/index.html"&gt;Essential Java Classes&lt;/a&gt;, &lt;a href="http://download.oracle.com/javase/tutorial/collections/index.html"&gt;Collections&lt;/a&gt;. Tienen en esa página temas más especializados.&lt;/p&gt;  &lt;p&gt;Visitaría a la gente de Java Hispano: &lt;a href="http://www.javahispano.org"&gt;http://www.javahispano.org&lt;/a&gt;. En especial su documentación &lt;a title="http://www.javahispano.org/documentacion/" href="http://www.javahispano.org/documentacion/"&gt;http://www.javahispano.org/documentacion/&lt;/a&gt; que es variada (en nivel, calidad, algunos elementos también tienen sus años).&lt;/p&gt;  &lt;p&gt;Pero ahora viene parte de mi respuesta a la pregunta extendida: ¿Qué estudiar de Java? Yo recomiendo:&lt;/p&gt;  &lt;p&gt;- Estudiar el lenguaje, que es sencillo, concentrándose en los conceptos de objetos   &lt;br /&gt;- Comenzar a estudiar la librería, con algunas colecciones.    &lt;br /&gt;- Seguir con algo que todos manejamos en otros lenguajes: acceso a archivos, descubriendo que en Java tenemos streams en general. Ver algo de sockets para ir viendo que “leer/escribir” es algo que se puede abstraer desde java.io. Ver ejemplos en mi Skydrive &lt;a href="http://cid-9f903f3d6db0c176.office.live.com/self.aspx/Examples/Java/Claseio.zip"&gt;ClaseIo.zip&lt;/a&gt;, &lt;a href="http://cid-9f903f3d6db0c176.office.live.com/self.aspx/Examples/Java/ClaseClienteServidor.zip"&gt;ClaseClienteServidor.zip&lt;/a&gt;.     &lt;br /&gt;- Ver acceso a base de datos usando &lt;a href="http://download.oracle.com/javase/tutorial/jdbc/index.html"&gt;JDBC&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Luego, lo que venga después, depende de lo que quieran hacer y el trabajo que tengan que encarar. Si tienen que hacer aplicaciones de escritorio, seguramente tendrán que elegir estudiar: Swing (ver &lt;a href="http://download.oracle.com/javase/tutorial/index.html"&gt;los tutoriales de Java&lt;/a&gt;, por ejemplo &lt;a href="http://download.oracle.com/javase/tutorial/ui/index.html"&gt;Swing&lt;/a&gt;, &lt;a href="http://download.oracle.com/javase/tutorial/uiswing/index.html"&gt;Creating a GUI with Swing&lt;/a&gt;) o &lt;a href="http://www.eclipse.org/swt/"&gt;SWT The Standard Widget Toolkit&lt;/a&gt;. Si tiene que hacer aplicaciones web (algo casi inescapable en estos días), recomiendo:&lt;/p&gt;  &lt;p&gt;- Bajar, instalar y jugar con &lt;a href="http://tomcat.apache.org/"&gt;el Tomcat&lt;/a&gt; de la fundación Apache    &lt;br /&gt;- Sólo si es necesario, ver JBoss (en mi opinión: “too much”, un Application Server que ha ido creciendo a partir de las especificaciones de Sun. Tiene una arquitectura microkernel, y eso es interesante. Pero para desarrollo web, aprendan con Tomcat.&lt;/p&gt;  &lt;p&gt;Y comiencen a estudiar &lt;a href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/JSPIntro.html"&gt;JavaServer Pages&lt;/a&gt;: sé que no es la “última tecnología web” pero si no entienden JSP no van a poder entender todo los modelos web de Java. Estudien en ese momento el modelo de Servlets, que es la base de todos los modelos. Luego, estudien Javascript en el cliente, y Ajax. Les debo enlaces sobre ese tema. Ver por ahora &lt;a href="http://delicious.com/ajlopez/javascript+tutorial"&gt;http://delicious.com/ajlopez/javascript+tutorial&lt;/a&gt; y &lt;a href="http://delicious.com/ajlopez/ajax+tutorial"&gt;http://delicious.com/ajlopez/ajax+tutorial&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Otro ámbito sería la programación para dispositivos móviles. Ahí les debo recomendaciones y enlaces, porque nunca me ha tocado aún ese tipo de programación. &lt;/p&gt;  &lt;p&gt;Algo más, antes que me olvide: NO ESTUDIEN Enterprise JavaBeans, a no ser que su vida esté en peligro. Esa especificación de Sun,&amp;#160; a pesar de las mejores de 3.x, debería ser borrada de la historia humana. Tengo una teoría: los extraterrestres existen, nos vienen observando desde hace décadas. Vieron que manejamos armas nucleares, tuvieron gran debate, pero decidieron: “Démosle una oportunidad a los terráqueos”. Vieron que seguimos con guerras. Debatieron de nuevo: “Veamos de seguir dándoles una oportunidad”. Sus científicos de computación vieron que desarrollamos EJB (Enterprise JavaBeans) y Web Services sobre WCF (Windows Communication Foundation) y decretaron inmediatamente: “No tienen cura, están completamente perdidos en la irracionalidad, declaremos cuarentena” ;-).&lt;/p&gt;  &lt;p&gt;Había planteado que en Java no hay una IDE prederminada. Pueden hacer todo desde la línea de comando, si quieren, y configurar su editor preferido para compilar y lanzar las aplicaciones que construyan. Pero recomiendo bajarse y estudiar &lt;a href="http://www.eclipse.org"&gt;el Eclipse&lt;/a&gt;. Van a encontrar diferentes versiones, ya preparadas, algunas orientadas a desarrollo web. Lo bueno de Eclipse: es sencillo, multiplataforma, maneja sus propios widgets gráficos basados en SWT (con lo que se adapta al sistema gráfico nativo), tiene una comunidad activa, es muy usado en los ambientes de desarrollo, está al nivel de cualquier IDE comercial. Es fácil de instalar y desinstalar (prácticamente copiar archivos). Sólo tendrán que tener paciencia en la elección de los plugins que quieran usar: Eclipse es totalmente extensible por plugins, y de ahí que uno extrañe un poco lo que se tiene en .NET: una IDE (el Visual Studio) que tiene prácticamente todo lo necesario para programar sistemas “out-of-the-box”. Pero Eclipse “out-of-the-box” es totalmente adecuado para estudiar Java. El tema es configurarlo para el trabajo que encaren: he ido a consultoras donde cada máquina y proyecto tienen un Eclipse distinto ;-)&lt;/p&gt;  &lt;p&gt;Pero no es sólo visitar la librería de clases, y ver el Eclipse. Hay que aprender a programar, a pensar en objetos, y sobre técnicas de programación que hoy tenemos disponibles. Para el tema de pensar en Java con objetos, no sólo programar, pueden bajarse el libro Thinking in Java de Bruce Eckel, la tercera edición:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.mindviewinc.com/downloads/TIJ-3rd-edition4.0.zip" href="http://www.mindviewinc.com/downloads/TIJ-3rd-edition4.0.zip"&gt;http://www.mindviewinc.com/downloads/TIJ-3rd-edition4.0.zip&lt;/a&gt; (hay que hacer un curso para encontrar este enlace desde &lt;a title="http://www.mindview.net/Books/TIJ/" href="http://www.mindview.net/Books/TIJ/"&gt;http://www.mindview.net/Books/TIJ/&lt;/a&gt; ;-) Tiene otros libros para bajar de Bruce Eckel desde &lt;a title="http://www.mindviewinc.com/downloads/" href="http://www.mindviewinc.com/downloads/"&gt;http://www.mindviewinc.com/downloads/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Otra cosa, una opinión sobre la certificación: pienso que no hace falta, sólo para el currículum y búsqueda de trabajo. La mejor certificación es la experiencia en el desarrollo. Vean que Java es más que un lenguaje, es una tecnología con amplia librería de clases, utilitarios, librerías adicionales, servidores, etc. Es un mundo muy amplio. Vayan de a poco, aprendiendo las partes que recomendé y luego viendo las partes que necesitan para cada trabajo en particular. También van a encontrar que muchas veces tiene sus “bordes ásperos”, y hay que armarse de paciencia para conseguir algún resultado.&lt;/p&gt;  &lt;p&gt;Un ejemplo de algo que se necesita en Java, pero no he visto que sea necesario en .NET, es &lt;a href="http://maven.apache.org/"&gt;el utilitario Maven&lt;/a&gt;. Van a tener que aprenderlo. Pero es un ejemplo de algo que a muchos en el ambiente Java les fascina, pero yo lo veo de otra manera: es una gran herramienta para solucionar un problema, que no DEBERIA ser un problema tan grande. A mucha gente le gusta, porque soluciona la complejidad de tantas librerías con tants versiones: pero es un remedio que oculta el problema inicial, la complejidad de esa tarea. Si tienen que estudiar Maven, recomiendo antes estudiar algo más simple, ubicuo, entendible y poderoso: el &lt;a href="http://ant.apache.org/"&gt;Apache Ant&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Cuando dominen JDBC para acceder a base de datos, pueden comenzar a estudiar y usar &lt;a href="http://www.hibernate.org/"&gt;Hibernate&lt;/a&gt;. Parece que no terminan nunca los temas ;-). Bueno, uno más: para tener un panorama de los problemas y soluciones al desarrollo de Java, recomiendo estudiar (lo simple primero, luego sólo los temas que necesitan) el &lt;a href="http://www.springsource.org/"&gt;Spring Framework&lt;/a&gt;, donde encontrarán también nuevos utilitarios que se montaron para facilitar el desarrollo en Java. Al estudiar Spring, verán distintas implementaciones de interfaz web, como usar MVC (Model-View-Controller), sus distintas implementaciones, y otras tecnologías como JavaServer Faces. &lt;/p&gt;  &lt;p&gt;El mejor libro para ir entendiendo cómo todo eso se usa en conjunto, lo comento en mi post:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ajlopez.wordpress.com/2008/11/25/agile-java-development-with-spring-hibernate-and-eclipse/"&gt;Agile Java Development With Spring, Hibernate And Eclipse&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Quiero aprovechar este post para agregar algunos puntos que van más allá de la programación en Java. Primero, Uds. no tienen que ser “programadores Java”. Sólo al principio. Uds. tienen que, diría, luchar, esforzarse por ser “desarrolladores de software”, es más, “desarrolladores de software profesionales”: gente que se toma en serio el trabajo que realiza, y trata cada mes, semana, día, de aprender algo nuevo y mejorar en las prácticas que realiza. Tiene que pensar más allá de “programar en Java”. Tienen que pensar en “desarrollar software”. Ya no hay programadores de un lenguaje. Para ver algunos temas casi imprescindibles en nuestra profesión, les recomiendo el libro de &lt;a href="http://twitter.com/karlseguin"&gt;@karlseguin&lt;/a&gt;: &lt;a href="http://codebetter.com/karlseguin/2008/06/25/foundations-of-programming-ebook/"&gt;Foundations of Programming&lt;/a&gt;. Para los que estudian Java, encontrarán que tiene más orientación a .NET, pero no se engañen: todo lo de ese libro se puede aplicar a otras tecnologías. Traten también de ser &lt;a href="http://polyglotprogramming.com/"&gt;polyglot programmers&lt;/a&gt;, cosa que si aprenden Java, conseguirán estudiando los lenguajes y tecnologías montadas sobre la JVM, como &lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt;, &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt;, &lt;a href="http://clojure.org/"&gt;Clojure&lt;/a&gt;, &lt;a href="http://www.jruby.org/"&gt;JRuby&lt;/a&gt;, y más.&lt;/p&gt;  &lt;p&gt;Me recomiendo a mí mismo ;-) leer:&lt;/p&gt;  &lt;p&gt;&lt;a href="https://msmvps.com/blogs/lopez/archive/2008/01/02/aprendiendo-de-jason-bourne.aspx"&gt;Aprendiendo de Jason Bourne&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2008/09/07/programmer-competency-matrix/"&gt;Programmer Competency Matrix&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2008/09/21/codethinked-what-is-your-strategy-for-becoming-a-better-developer/"&gt;What is your strategy for become a better developer&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Si son seguidores de esto blog (es decir, &lt;a href="https://msmvps.com/blogs/lopez/archive/2010/03/09/me_2D00_and_2D00_my_2D00_aunt_2D00_charlotte.aspx"&gt;yo y mi Tía Carlota&lt;/a&gt; ;-) ya saben lo que viene ahora:&lt;/p&gt;  &lt;p&gt;- Estudien y apliquen Test-Driven Development (TDD, leer &lt;a href="https://msmvps.com/blogs/lopez/archive/tags/TDD/default.aspx"&gt;mis posts&lt;/a&gt; sobre el tema)&lt;/p&gt;  &lt;p&gt;- Trabajen en équipos ágiles (leer mis posts sobre &lt;a href="https://msmvps.com/blogs/lopez/archive/tags/Scrum/default.aspx"&gt;Scrum&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;Van a aprender que la complejidad de Java (todos lo que hay que tener en cuenta para armar una aplicación profesional) fue en gran parte madre de mi iniciativa sobre &lt;a href="http://msmvps.com/blogs/lopez/archive/tags/Generaci_26002300_243_3B00_n+de+C_26002300_243_3B00_digo/default.aspx"&gt;generación de código&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Si están en Buenos Aires, o en Argentina, hay varias actividades ágiles, ver actividades en Latinoamérica en:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.agiles.org/" href="http://www.agiles.org/"&gt;http://www.agiles.org/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;TDD es prácticamente un “must be done”. Pueden estudiar TDD en curso presencial, acá en Buenos Aires, con el bueno de &lt;a href="http://twitter.com/hernanwilkinson"&gt;@hernanwilkinson&lt;/a&gt;: &lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.10pines.com/content/construcci%C3%B3n-de-software-robusto-con-tdd" href="http://www.10pines.com/content/construcci%C3%B3n-de-software-robusto-con-tdd"&gt;http://www.10pines.com/content/construcci%C3%B3n-de-software-robusto-con-tdd&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Finalmente, les recuerdo que voy coleccionando enlaces sobre Java en:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://delicious.com/ajlopez/java+tutorial"&gt;http://delicious.com/ajlopez/java+tutorial&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/java+example"&gt;http://delicious.com/ajlopez/java+example&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Vean que de cada tema del universo, tengo enlaces en delicious ;-) ;-)&lt;/p&gt;  &lt;p&gt;Bueno, ya es tiempo de cerrar este post, e irme a luchar contra &lt;a href="http://ajlopez.zoomblog.com/archivo/2008/10/17/el-Efecto-Coto.html"&gt;el Efecto Coto&lt;/a&gt;. Cualquier duda, recomendación, les pido colaboren con comentarios. Pero más allá de todo esto, de Java y demás, siempre recuerden, parafraseando a Rambo II: “La mejor herramienta es una mente despierta” ;-)&lt;/p&gt;  &lt;p&gt;Bueno, eso es todo por hoy, salud, mis queridos chichipíos, vermú con papa fritas, y gud shou!!&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;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1793006" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx">Java</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Programaci_F300_n/default.aspx">Programación</category></item><item><title>Presentando Patrones de Diseño (Design Patterns)</title><link>http://msmvps.com/blogs/lopez/archive/2010/10/18/presentando-patrones-de-dise-241-o-design-patterns.aspx</link><pubDate>Mon, 18 Oct 2010 09:31:24 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1780182</guid><dc:creator>lopez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1780182</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2010/10/18/presentando-patrones-de-dise-241-o-design-patterns.aspx#comments</comments><description>&lt;p&gt;&lt;img style="margin:0px 20px 20px 0px;display:inline;" align="left" src="http://www.ajlopez.com/images/articles2/designpatterns01.png" alt="" /&gt; Como &lt;a href="http://msmvps.com/blogs/lopez/archive/2010/10/13/alt-net-hispano-van-sobre-patrones-de-dise-241-o.aspx" target="_blank"&gt;ya había anunciado&lt;/a&gt;, el sábado 16 de Octubre participé de una VAN de &lt;a href="http://altnet-hispano.pbworks.com/" target="_blank"&gt;la comunidad ALT.NET Hispano&lt;/a&gt;, sobre Patrones de Diseño. En cualquier momento, la gente de ALT.NET Hispano publica el video de la VAN (Des-conferencia virtual). Mientras, les dejo acá la presentación &lt;a href="http://cid-9f903f3d6db0c176.office.live.com/self.aspx/Presentations/DesignPatterns.pptx" target="_blank"&gt;DesignPatterns.pptx&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;La idea fue presentar algunos patrones a través de un ejemplo. Usé para eso el patrón Interpreter: estuvimos explorando el código de un intérprete escrito en C#. Lo pueden bajar desde mi proyecto Google &lt;a href="http://code.google.com/p/ajcodekatas/" target="_blank"&gt;AjCodeKatas&lt;/a&gt; (en el &lt;a href="http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/Patterns" target="_blank"&gt;directorio Patterns&lt;/a&gt;), donde posiblemente vaya evolucionando, o pueden tomar la versión actual desde &lt;a href="http://cid-9f903f3d6db0c176.office.live.com/self.aspx/Examples/DotNet/Patterns20101017.zip" target="_blank"&gt;Patterns20101017.zip&lt;/a&gt; (noten que los namespaces que usé fueron elegidos para describir patrones, más que para un intérprete real). El ejemplo fue desarrollado con &lt;a href="http://msmvps.com/blogs/lopez/archive/tags/TDD/default.aspx" target="_blank"&gt;TDD (Test-Driven Design)&lt;/a&gt;, pero no vimos el proceso en la charla: vimos el resultado, directamente. Para los que quieran ver un intérprete desarrollado usando TDD pueden seguir mi serie de posts sobre el tema en &lt;a href="http://msmvps.com/blogs/lopez/archive/tags/TDD/default.aspx" target="_blank"&gt;el tag TDD&lt;/a&gt; ejemplo: &lt;a href="http://msmvps.com/blogs/lopez/archive/2010/10/05/escribiendo-un-int-233-rprete-en-net-parte-7.aspx" target="_blank"&gt;Escribiendo un intérprete en .NET (Parte 7)&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;También mencionamos código de NHibernate, pero no llegamos a verlo. Comenté sobre Facade y Strategy usando una aplicación de demo generada con AjGenesis y que usa NHibernate. Pueden bajar la versión actual (work in progress) de &lt;a href="http://cid-9f903f3d6db0c176.office.live.com/self.aspx/Examples/DotNet/AjTestNh20101017.zip" target="_blank"&gt;AjTestNh20101017.zip&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Acá va una lista de los patrones que vimos, y el código elegido para ejemplicar cada uno:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Interpreter&lt;/strong&gt;: con el intérprete de expresiones que escribí como base de la charla.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Composite&lt;/strong&gt;: con comandos en el intérprete. Uno de los comandos contiene una lista de comandos.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Template Method&lt;/strong&gt;: lo encontrarán en el método Evaluate de las BinaryExpressions: se evalúan dos expresiones, y el resultado final se calcula invocando al método .Apply, que es reimplementado en las subclases.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Strategy&lt;/strong&gt;: En vez de escribir un objeto de una clase por Strategy, escribí Func&amp;lt;obj,obj,obj&amp;gt; a aplicar dentro de la evaluación de ArithmeticBinaryExpression.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Decorator&lt;/strong&gt;: a cada comando y expresión del intérprete, se le pasa un IContext, que tiene la responsabilidad de mantener los valores de las variables que manejamos. Lo decoré para tener un IContext que avise con eventos qué variables y valores se consultan y modifican.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Observer&lt;/strong&gt;: usé directamente eventos de .NET, que son una evolución de este tema.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Adapter&lt;/strong&gt;: cuando quise consumir un archivo como TextReader, con código del lenguaje a interpretar, necesitaba leer, no líneas, sino palabras del lenguajes (clase Token). El Lexer del ejemplo es un adapter para eso.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Abstract Factory&lt;/strong&gt;: acá me aparté del intérprete y usé una implementación que termina usando los providers de ADO.NET, que a su vez funcionan como Abstract Factory.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Facade&lt;/strong&gt;: junto con Strategy, son los más importantes a aprender. Todo Strategy nos deriva a composición en lugar de herencia, y a Dependency Injection, Inversion of Control y contenedores. Como Facade mencioné la “API de Negocios” que ya había comentado en otra VAN, y mostré una capa fina de servicio lógico en la aplicación de NHibernate que mencioné más arriba.&lt;/p&gt;  &lt;p&gt;No llegué a presentar Facade en el ejemplo intérprete, pero pueden ver la clase Machine, que termina usando por debajo a Parser (otra especie de Adapter), Lexer, archivos, y Context, sin que tengamos que manejar esos objetos desde “afuera”.&lt;/p&gt;  &lt;p&gt;Y también encontrarán un ejemplo de Visitor, que toma un programa del intérprete y lo “decompila” a texto.&lt;/p&gt;  &lt;p&gt;Tiene más ejemplos y los diagramas UML (que usé en la charla) en:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.dofactory.com/Patterns/Patterns.aspx" href="http://www.dofactory.com/Patterns/Patterns.aspx"&gt;http://www.dofactory.com/Patterns/Patterns.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Terminó la presentación y vino una discusión, muy interesante. Alguien de Guatemala (disculpen, no recuerdo el nombre) necesitaba trabajar en un caso: para un sistema, hay que calcular el precio de los productos, pero esas reglas cambian mucho en el tiempo y por producto. Surgieron ideas: poner una Factory que genere la Strategy a aplicar en cada caso, y hasta tener una Strategy que interprete código que se levante de un texto. Me hizo recordar a sistemas de sueldos y jornales que ví acá en Argentina. Ahí mencioné que pueden usar el ejemplo de:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2009/01/31/un-ejemplo-de-dynamic-expressions.aspx" target="_blank"&gt;Un ejemplo de Dynamic Expressions&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;donde se compila una expresión lambda escrita en texto. Ahí se mencionan otras alternativas.&lt;/p&gt;  &lt;p&gt;Otro camino es usar AjSharp como intérprete, &lt;a href="http://msmvps.com/blogs/lopez/archive/tags/AjSharp/default.aspx" target="_blank"&gt;ver los posts de AjSharp&lt;/a&gt; Debería escribir un post sobre cómo resolver un tema parecido al planteado en la VAN. También pueden ver a AjSharp como un intérprete mucho más terminado que el ejemplo de la charla. Es parte de &lt;a href="http://code.google.com/p/ajcodekatas/" target="_blank"&gt;AjCodeKatas&lt;/a&gt; y pueden &lt;a href="http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/AjLanguage" target="_blank"&gt;verlo aquí&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Otro camino (debo post sobre mi charla en el pasado CodeCamp de Buenos Aires, sobre Intérpretes y Compiladores en .NET), es usar Dynamic Language Runtime:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://dlr.codeplex.com/" href="http://dlr.codeplex.com/"&gt;http://dlr.codeplex.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Y hay también facilidades en .NET para compilar “on the fly”, usando CodeDOM, Reflection.Emit, y el compilador de .NET. Pero eso pienso que sería un camino más duro. Escribiré sobre eso en el post que debo sobre mi charla en el CodeCamp.&lt;/p&gt;  &lt;p&gt;Gracias a la comunidad ALT.NET Hispano y en especial, al flamante MVP &lt;a href="http://twitter.com/jorgegamba" target="_blank"&gt;@jorgegamba&lt;/a&gt; y también al bueno de &lt;a href="http://twitter.com/fabiomaulo" target="_blank"&gt;@fabiomaulo&lt;/a&gt; que me acercó información de nuevos patrones, y a todos los que colaboran con la grabación, edición del video y la organización de todas estas actividades.&lt;/p&gt;  &lt;p&gt;Ah! Y en cerca del principio del video, hay una sorpresa … ;-)&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;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1780182" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Patrones/default.aspx">Patrones</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/ALT.NET/default.aspx">ALT.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Programaci_F300_n/default.aspx">Programación</category></item></channel></rss>