<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>La Naturaleza Del Software</title>
	<atom:link href="http://www.lnds.net/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://www.lnds.net/blog</link>
	<description>Nullius Addictus Jurare in Verba Magistris</description>
	<lastBuildDate>Mon, 16 Jan 2012 01:18:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>&#193;lbum conceptual</title>
		<link>http://www.lnds.net/blog/2012/01/lbum-conceptual.html</link>
		<comments>http://www.lnds.net/blog/2012/01/lbum-conceptual.html#comments</comments>
		<pubDate>Sat, 14 Jan 2012 22:54:34 +0000</pubDate>
		<dc:creator>Eduardo Díaz</dc:creator>
				<category><![CDATA[Sin categoría]]></category>

		<guid isPermaLink="false">http://www.lnds.net/blog/?p=2497</guid>
		<description><![CDATA[Intro Time is a gypsy caravan Steals away in the night En 1997 Rush era una banda exitosa, su baterista, Neil Peart era considerado el mejor del mundo, tanto por sus pares como por la crítica. Pero en ese año, su única hija, de 19 años, muere en un accidente automovilístico,&#160; diez meses después su mujer, quien nunca superó la pérdida, fallece afectada de cáncer. Un dolido Neil comunica a sus compañeros que ha decidido tomarse una pausa, para reflexionar, no sabe por cuanto tiempo, toma su motocicleta y parte a recorrer la carretera. El futuro de la banda es incierto. Estrofa We will pay the price, But we will not count the cost Nicholas Taleb nos diría que lo sucedido a Neil Peart es uno de esos eventos desastrosos que impacta profundamente nuestro entorno, algo totalmente impredecible, para lo cual no estamos preparados. Un “Cisne Negro”, tanto para el músico como para la banda, que a partir de este evento sufre un hiato de casi ocho años. La imagen del cisne negro, introducida en el libro The Black Swan, The Impact of the Highly Improbabble, de Nicholas Taleb,&#160; viene del hecho que por muchos años para los naturalistas europeos [...]]]></description>
			<content:encoded><![CDATA[<p><strong></strong></p>
<p><strong>Intro</strong></p>
<blockquote><p align="right">Time is a gypsy caravan      <br />Steals away in the night</p>
</blockquote>
<p>En 1997 Rush era una banda exitosa, su baterista, Neil Peart era considerado el mejor del mundo, tanto por sus pares como por la crítica. Pero en ese año, su única hija, de 19 años, muere en un accidente automovilístico,&#160; diez meses después su mujer, quien nunca superó la pérdida, fallece afectada de cáncer. Un dolido Neil comunica a sus compañeros que ha decidido tomarse una pausa, para reflexionar, no sabe por cuanto tiempo, toma su motocicleta y parte a recorrer la carretera. El futuro de la banda es incierto.</p>
<p><strong>Estrofa</strong></p>
<blockquote><p align="right">We will pay the price,      <br />But we will not count the cost</p>
</blockquote>
<p><a href="http://www.lnds.net/blog/wp-content/uploads/2012/01/cisne-negro.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="cisne-negro" border="0" alt="cisne-negro" align="left" src="http://www.lnds.net/blog/wp-content/uploads/2012/01/cisne-negro_thumb.jpg" width="184" height="244" /></a><a href="http://es.wikipedia.org/wiki/Nassim_Taleb">Nicholas Taleb</a> nos diría que lo sucedido a Neil Peart es uno de esos eventos desastrosos que impacta profundamente nuestro entorno, algo totalmente impredecible, para lo cual no estamos preparados. Un “Cisne Negro”, tanto para el músico como para la banda, que a partir de este evento sufre un hiato de casi ocho años.</p>
<p>La imagen del cisne negro, introducida en el libro <a href="http://amzn.to/zmPCl1">The Black Swan, The Impact of the Highly Improbabble</a>, de Nicholas Taleb,&#160; viene del hecho que por muchos años para los naturalistas europeos todos los cisnes era blancos, hasta que uno fue encontrado en Australia. Este concepto ilustra&#160; la fragilidad de nuestro conocimiento. Una simple observación invalida una afirmación general sostenida durante milenios tras la observación de millones de cisnes blancos.</p>
<p>En su libro, Taleb introduce el concepto del <strong>cisne negro</strong> como un evento que tiene tres atributos: primero es una cosa aislada de todas las expectativas regulares, porque nada en el pasado puede convincentemente dar indicios de su posibilidad. Segundo genera un impacto extremo, y en tercer lugar, a pesar de su carácter ajeno, nuestra naturaleza nos hace confeccionar explicaciones de su ocurrencia después del hecho, por lo que lo asimilamos como si fuera algo explicable y predecible.</p>
<p><strong>Riff</strong></p>
<blockquote><p align="right">Why are we here?      <br />Because we&#8217;re here       <br />Roll the bones       </p>
</blockquote>
<p>Taleb se auto define como un empirista escéptico, siguiendo la tradición de Montaigne, y sobretodo de David Hume, este autor nos recuerda la vieja máxima de que el pasado no sirve para explicar el futuro. Algo de lo que hemos hablado en “<a href="http://www.lnds.net/blog/2011/07/causas-imaginadas.html">causas imaginadas</a>”. El libro contiene muchos de los temas que hemos tratado <a href="http://www.lnds.net/blog/tag/sentido-comun">acá</a>, lo que no es de extrañar, pues se suma a una lista de textos que están hablando de los mismo: el manejo de la complejidad, la irracionalidad humana, y nuestras limitaciones cognitivas para lidiar con la realidad.</p>
<p>Lo que vamos a ver ahora es si esto aplica en la gestión de proyectos informáticos, porque al parecer tenemos cisnes negros. Lo que viene es una exploración de esta idea, también una respuesta a <a href="http://www.alejandrobarros.com/no-es-bueno-estar-cerca-de-un-proyectos-cisne-negro">un post</a> de mi estimado colega <a href="http://www.alejandrobarros.com/">Alejandro Barros</a>, con quien hemos sostenido más de alguna discusión sobre la realidad del concepto “crisis del software”, o la deuda en la eficiencia de la gestión de proyectos TI (ver [1] y [2]).</p>
<p><strong>Estribillo</strong></p>
<blockquote><p align="right">Why does it happen?      <br />Because it happens       <br />Roll the bones</p>
</blockquote>
<p><a href="http://www.lnds.net/blog/wp-content/uploads/2012/01/EinsteinRockero-300x298.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="EinsteinRockero-300x298" border="0" alt="EinsteinRockero-300x298" align="right" src="http://www.lnds.net/blog/wp-content/uploads/2012/01/EinsteinRockero-300x298_thumb.jpg" width="162" height="161" /></a>Fuimos engañados, <a href="http://www.lnds.net/blog/2011/11/comprensin-de-lectura.html">por gente que no entendía lo que leía</a>, y montones de libros enseñaban a los ingenieros de software como hacer mal las cosas, “<em>la maldición de la cascada”</em>, recién ahora algunos cuestionan a la peor metodología para desarrollar un proyecto de software que haya existido, pero aún hay gente que espera milagros, chocando con la realidad. “<a href="http://www.lnds.net/blog/2011/03/locura.html">Locura es hacer siempre lo mismo y esperar resultados diferentes</a>”.</p>
<p>Soy un convencido que debemos abandonar “la imagen del software como algo que se construye”.&#160; Me resisto a creer que este oficio deba ser asimilado a la construcción civil, o la ingeniería de obras, esa que construye puentes, porque esa visión es la fuente de tanta frustración y confusión.</p>
<p><strong>Puente</strong></p>
<blockquote><p align="right">Face up! There&#8217;s still time to turn the game around      <br />Face up! – Turn it up       <br />Or turn wild card down</p>
</blockquote>
<p align="left">Alejandro <a href="http://www.alejandrobarros.com/no-es-bueno-estar-cerca-de-un-proyectos-cisne-negro">nos informa</a> de un artículo llamado <em><strong><a href="http://www.alejandrobarros.com/media/users/1/50369/files/4363/Black_Swan.pdf">Why your IT Project may be riskier than you think</a>. </strong></em>El tema del artículo es el de siempre, los proyectos TI están condenados, somos pésimos estimando, y nuestros proyectos siempre terminan mal, bueno, no siempre, pero el promedio de costo de los proyectos está por sobre el 27%. Pero las malas noticias son que el 17% de los proyectos TI se transforman en cisnes negros.&#160; Lo que los autores del artículo definen como cisnes negros son proyectos que sorpresivamente suben sus costos por sobre el 200%.</p>
<p><strong>Break</strong></p>
<blockquote><p align="right">Shadows on the road behind      <br />Shadows on the road ahead       <br />Nothing can stop you now</p>
</blockquote>
<p align="left">Después de su pérdida Neil Peart recorrió 80.000 kilómetros en motocicleta por norteamérica, plasmó sus vivencias en un libro y una canción. El dolor se fue disolviendo en el tiempo, y de repente, mientras visitaba a un amigo en Los Ángeles, éste le presenta a la que terminaría siendo su segunda esposa. Después de esto hace una llamada a sus compañeros para anunciarles que está de vuelta, que quiere volver al estudio a grabar y componer, después de 14 meses Rush vuelve con “Vapor Trails”.</p>
<p><strong>Sólo</strong></p>
<blockquote><p align="right">Well, I was only a kid &#8212; didn&#8217;t know enough to be afraid      <br />Played the game, but not the way the big boys played       <br />Nothing to lose &#8212; maybe I had something to trade</p>
</blockquote>
<p align="left">No me considero una persona optimista, pero parece que lo soy. No me importan tanto los fracasos como la forma en que se superan. El éxito siempre es aburrido, la ingeniería es aburrida si no se presentan desafíos. Para mi la idea de que la metodología correcta llevará al éxito de los proyectos siempre es reconfortante, pero es pura fantasía, voluntarismo, que nace de no reconocer la naturaleza del desarrollo de software. Lo malo es que no puedes decirle eso a los que ponen el dinero, que esperan que el proyecto salga en el tiempo y el presupuesto. Y ahí está el problema.</p>
<p><a href="http://www.lnds.net/blog/wp-content/uploads/2012/01/NeilPeart.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="NeilPeart" border="0" alt="NeilPeart" align="right" src="http://www.lnds.net/blog/wp-content/uploads/2012/01/NeilPeart_thumb.jpg" width="244" height="184" /></a>Los autores del estudio mencionado arriba afirman haber recogido una muestra global de 1.471 proyectos TI, comparando sus presupuestos y beneficios esperados con los costos y resultados reales. El rango de los proyectos era de del tipo de implantación de sistemas de ERP, CRM y administración de información. El costo promedio de los proyectos fue de 167 millones de dólares, y el más grande de 33 mil millones de dólares. Eran proyectos grandes, varios planeados para ser ejecutados en periodos de varios años. El 92% de los proyecto fue en agencias públicas y el 83% estaba basado en USA. Pero como encontraron poca diferencia entre el 92% de los proyectos públicos con el 8% de los proyectos privados en su muestra, los autores estimaron que el comportamiento es el mismo en el sector privado. ¡Ah!, olvidé mencionar, los autores Bent Flyvbjerg es académico en Oxford, y Alexander Budzierno consultor en McKinsey &amp; Co. y candidato a&#160; PhD .</p>
<p>¿Qué puede alegar un (no tan) humilde desarrollador ante tamañas credenciales, y base muestral?</p>
<p>Pues yo creo que mucho. En primer lugar me parece que los autores cometen muchos de los errores que el autor de Black Swan se encarga de destacar en su libro. Sabemos que a fines del 2008, después de la crisis financiera, Taleb era referencia obligada, y muchos han citado su obra sin siquiera hojear la contratapa. Ha habido tantas malas interpretaciones de las ideas de Taleb que el autor decidió escribir un largo apéndice en la segunda edición de su libro:</p>
<blockquote><p>“El hecho es que muchos investigadores no se dan cuenta inmediatamente de que un Cisne Negro corresponde principalmente a un mapa incompleto del mundo, o que algunos investigadores deben resaltar esta cualidad subjetiva […] lo que nos lleva al problema histórico sobre la definición misma de probabilidad.[…] La noción de que dos personas pueden tener diferentes visiones del mundo, y luego expresarlas como diferentes probabilidades permanece extraña a los investigadores. Así que le ha tomado un tiempo a los científicos aceptar la noción no-Asperguer que diferentes personas pueden, siendo racionales, asignar diferentes probabilidades a diferentes estados futuros del mundo. Esto se llama “probablidad subjetiva” – Nicholas Taleb, “Probability has to be subjective”, Ensayo postscriptum: Sobre la robustez y fragilidad… Segunda Edición de El Cisne Negro.</p>
</blockquote>
<p>En ese párrafo está la clave para entender cuál es el problema con estos análisis, como veremos.</p>
<p><strong>Estribillo</strong></p>
<blockquote><p align="right">Do we have to be forgiving at last?     <br />What else can we do?      <br />Do we have to say goodbye to the past?      <br />Yes I guess we do</p>
</blockquote>
<p>No sólo hemos sido engañados, también nos hemos engañados nosotros mismos, hemos sufrido una amnesia imperdonable. Porque sabemos esto desde hace más de 30 años, las falacias de la estimación fueron enunciadas por Brooks en su clásico ensayo <a href="http://amzn.to/zhUwYa">The Mythical Man Month</a>. Cometemos errores porque olvidamos el pasado, vivimos como si el desarrollo de&#160; software se hubiera inventado ayer, como si todos estos problemas fueran nuevos. Taleb sonríe desde su escepticismo empirista…</p>
<p><strong>Estrofa</strong></p>
<blockquote><p align="right">I don&#8217;t believe in destiny     <br />Or the guiding hand of fate      <br />But I believe there&#8217;s a ghost of a chance</p>
</blockquote>
<p>A pesar de las objeciones que yo pudiera tener sobre la elección de la muestra, o la metodología del estudio de Flyvbjerg y Budzier, los números están ahí, cuando un proyecto TI se sale de la escala, el costo es muy alto. ¿Por qué pasa eso?</p>
<p>Al principio de su ensayo Brooks cita el menú del Restaurant Antoine de New Orleans:</p>
<blockquote><p>“La buena cocina toma tiempo. Si le hacemos esperar, es para servirle mejor, y complacerle”</p>
</blockquote>
<p>¡Cómo nos hace falta tener la actitud del Chef Antoine! Si negociaramos plazos y costos con la educada inflexibilidad del Chef, Alejandro Barros perdería tanto material para escribir… <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Guiño" src="http://www.lnds.net/blog/wp-content/uploads/2012/01/wlEmoticon-winkingsmile.png" /></p>
<p>Hace más de 30 años Brooks identificó los problemas con las estimaciones:</p>
<ul>
<li>Optimismo injustificado: los programadores son optimistas. Muchas de las estimaciones parten de la premisa de que todo irá bien. El código es un medio tan maleable que crea un sentido de control absoluto por parte del programador que es engañoso, porque confía que todo depende de su propia capacidad intelectual, de sus propias ideas. Pero nuestras ideas evolucionan, en la medida que entendemos mejor el problema, así que nuestro optimismo es inherentemente injustificado. Y este sentido además cae en la actitud aspelgueriana, de que no depende de nadie más, soy yo y el código ante mi. Todas las demás componentes respetarán la interfaz y no habrán problemas de compatibilidad, o en la infraestructura.</li>
<li>La falacia del hombre-mes: se usa la misma unidad en la estimación y en la programación o calendarización del trabajo: el hombre-mes. El costo es el producto de la cantidad hombres por el número de meses, pero el progreso no debe medirse así. “Usar el concepto de hombre-mes como unidad para medir el tamaño de un trabajo es un mito peligroso y engañoso”.</li>
</ul>
<p>Dice Brooks: “hombres y meses son productos intercambiables solo cuando el trabajo puede ser particionado entre muchos hombres sin comunicación entre ellos. Esto es verdad cuando cosechamos trigo, o recogemos algodón; no es siquiera aproximadamente verdad cuando hablamos de programación de sistemas.”</p>
<p>En el ensayo Brooks introduce varios gráficos que aclaran este problema. El primero nos muestra el tiempo versus el número de trabajadores en tareas que pueden particionarse en forma perfecta (como la cosecha de trigo):</p>
<p><a href="http://www.lnds.net/blog/wp-content/uploads/2012/01/trabajo-perfectamente-particionable.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Tiempo versus trabajadores en tareas perfectamente particionables" border="0" alt="Tiempo versus trabajadores en tareas perfectamente particionables" src="http://www.lnds.net/blog/wp-content/uploads/2012/01/trabajo-perfectamente-particionable_thumb.png" width="244" height="212" /></a></p>
<p>Si la tarea no se puede dividir (por ejemplo, al depurar) este es el gráfico del tiempo versus trabajadores:</p>
<p><a href="http://www.lnds.net/blog/wp-content/uploads/2012/01/trabajo-no-particionable.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="trabajo-no-particionable" border="0" alt="trabajo-no-particionable" src="http://www.lnds.net/blog/wp-content/uploads/2012/01/trabajo-no-particionable_thumb.png" width="244" height="244" /></a></p>
<p>Cuando tenemos interrelaciones complejas (como cuando desarrollamos un sistema) el trabajo y la división de la labor seguirá este comportamiento:</p>
<p><a href="http://www.lnds.net/blog/wp-content/uploads/2012/01/tareas-interrelaciones-complejas.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="tareas-interrelaciones-complejas" border="0" alt="tareas-interrelaciones-complejas" src="http://www.lnds.net/blog/wp-content/uploads/2012/01/tareas-interrelaciones-complejas_thumb.png" width="244" height="209" /></a></p>
<p>Sabemos esto, Brooks publicó estos ensayos en 1975. No es de extrañar que las estimaciones iniciales estuvieran subvaloradas. El último gráfico sirve para explicar muchas de las observaciones encontradas por Flyvbjerg y Budzier.</p>
<p>Otros&#160; de los problemas que también identificó Brooks es el famoso “efecto del segundo sistema”. Sospecho que muchos de los proyectos que Flyvbjerg y Budzier encontraron sufren de este problema. El “efecto del segundo sistema” es una trampa peligrosa en la cual caen los arquitectos al diseñar la segunda versión o la reimplementación de un proceso o sistema, tenderán a agregar todo aquello que no incorporaron en la primera etapa, debido a las restricciones de tiempo, y esto llevará a una sobrecarga, la curva de complejidad se desplazará de modo de el costo del proyecto aumente (adivinen en que porcentaje, 200% o más, exacto!)[3]</p>
<p><strong>Puente</strong></p>
<p><strong></strong></p>
<blockquote><p align="right">You just don&#8217;t get it     <br />What it is &#8230; well, you&#8217;re not really sure      <br />You move like you&#8217;re walking on thin ice      <br />Talking like you&#8217;re still insecure</p>
</blockquote>
<p>Los proyectos presentados en el paper de Flybjer no son cisnes negros. No satisfacen la definición de Taleb, pues representan problemas conocidos, el factor sorpresa no está, salvo como excusa. Puede que las empresas que se embarcaron en estos proyectos desconocieran las ideas de Brooks, no me extraña, muchos ingenieros de software aún las desconocen.</p>
<p>&lt;rant&gt;Brooks no se enseña en las universidades, es un viejito, “¡estamos hablando de un libro de 1975, ¿qué podría enseñarnos, que no sepamos?!”. Las universidades han decidido que sólo pueden enseñar en su aulas PhD y académicos de jornada completa, no gente con experiencia real en el desarrollo de software (el catedrático del que hablaba Andrés Bello). Entonces,&#160; ¿que podemos esperar como resultado de los arrogantes nuevos ingenieros que salen a repetir errores de 1960 en el desarrollo de sistemas para el sector público o corporativo?&lt;/rant&gt;</p>
<p><a href="http://www.lnds.net/blog/2011/07/condiciones-necesarias.html">History teach us nothing</a>, cantaba Sting…</p>
<p><strong>Colisión</strong></p>
<blockquote><p align="right">The odds get even     <br />You name the game      <br />The odds get even      </p>
</blockquote>
<p>Neil Peart reconstruyó su vida, Rush volvió, costó, pero&#160; volvió. Pero no sólo eso, sino que llegó&#160; a ser una banda más grande que antes.</p>
<p>El baterista de Rush dice que un concierto de ellos es como correr una maratón de tres horas mientras resuelves ecuaciones[4]. Bueno, programar es más o menos así <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Guiño" src="http://www.lnds.net/blog/wp-content/uploads/2012/01/wlEmoticon-winkingsmile.png" />. A pesar de la imagen que mucha gente pueda tener, el rock requiere mucha disciplina.&#160; (Hay una relación entre desarrollar software y el rock, tiene que haberla, ¡prometo que he de encontrarla!)</p>
<p>Lo más notable de la historia de Rush es su evolución. Es una banda que experimentó con sintetizadores, que volvió a lo básico, que adoptó elementos modernos del grunge, y el rock alternativo, incluso del hip hop y el jazz, sin perder su base progresiva. Los tres son virtuosos, inteligentes, cultos. Tuvieron fracasos económicos, y excedieron a veces el presupuesto asignado. Hombres brillantes orgullosos de su trabajo, los mejores en lo que hacen, personas sin miedo. </p>
<p>Los ingenieros de software, los desarrolladores de software deben tener esa actitud del músico de rock progresivo, no tener miedo. Yo creo que el desarrollo de software es mejor hoy que en 1975, o que en 1984, cuando Brooks escribió “No Silver Bullets” (otro texto olvidado). Brooks nos cuenta los errores que se cometen, no para darnos miedo, al contrario, para animarnos a enfrentarlos y superarlos.</p>
<p>Las metodologías pesadas, las asesorías, la literatura hasta la estimación de tiempos y esfuerzos está llena de miedo. La idea de que los proyectos de software van a fracasar siempre, o que tendrán un sobre costo. </p>
<p>Los cisnes negros son los nuevos hombres lobos[5].</p>
<p><strong>Coda</strong></p>
<blockquote><p align="right">The stakes are the same     <br />You bet your life&#8230;</p>
</blockquote>
<p>El software es desarrollado por gente para la gente. La gente se equivoca, estima mal, es optimista, es ignorante, es inteligente, es brillante, es deficiente. La gente es el factor clave. </p>
<p>La visión aspergueriana (para usar una expresión de Taleb), no considerará el factor humano, y terminará condenada a subestimar el trabajo, a entregar fuera de los plazos, y del presupuesto. </p>
<p>La clave del éxito de cualquier proyecto, y sobretodo de los proyectos TI es la administración de la gente. Olvidamos eso. La gestión del riesgo parte por la gestión del equipo humano.</p>
<p>No hay cisnes negros, hay mala gestión, sobretodo mala gestión de la gente: expectativas, comunicación, coordinación, confianza (desconfianza), actitud, etc.</p>
<p>El software se desarrolla, no se construye. Se desarrolla en un ambiente social, con gente inter conectada. Con eso en mente, hemos de mirar nuestros procesos, y cuestionarlos. Toda metodología es vana, si no va a la esencia de las cosas, pagamos el precio, pero no contamos el costo, así es como administramos nuestros proyectos.</p>
<p>Los cisnes negros son excusas.</p>
<p><strong>Reverencia</strong></p>
<p>Alejandro Barros tiene un <a href="http://www.alejandrobarros.com/">blog notable</a>, y que es una referencia obligada todos los que estamos preocupados de las TI, y que leo siempre que puedo, ustedes deberían seguirlo. </p>
<p>Esta pequeña polémica, que no creo que sea tal, sólo es un juego, y un tema de visiones más o menos optimistas sobre nuestra profesión, es estimulante. Le agradezco las horas de diversión que me dio el preparar esta respuesta a su post.</p>
<p>Todos los epígrafes son letras de las canciones del álbum <a href="http://amzn.to/x7DhLg">Roll The Bones</a> de <a href="http://www.rush.com/">Rush</a>, excepto el epígrafe bajo Break, que es del tema Ghost Rider del álbum Vapor Trails. Roll The Bones fue la banda sonora mientras escribía e investigaba para este post. Los títulos son, obviamente, los elementos de un tema rock.</p>
<p><a href="http://www.lnds.net/blog/wp-content/uploads/2012/01/rush-final.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="rush-final" border="0" alt="rush-final" src="http://www.lnds.net/blog/wp-content/uploads/2012/01/rush-final_thumb.jpg" width="333" height="251" /></a></p>
<p>&#8212;-</p>
<p><strong>Notas</strong></p>
<p>[1] <a href="http://www.alejandrobarros.com/content/view/691759/Comportamiento-de-proyectos-TI-Estan-en-deuda.html#content-top">Comportamiento de proyectos TI: Están en deuda!</a>, en el blog de Alejandro Barros, publicado en enero de 2010, visitado el 14 de enero de 2012.</p>
<p>[2] <a href="http://www.lnds.net/blog/2010/01/%C2%BFde-que-deuda-me-hablan.html">¿De qué deuda me hablan?,</a> mi respuesta al artículo en de Alejandro, publicado en este blog el 7 de enero de 2010.</p>
<p>[3] Tengo un ejemplo en mi trabajo, que sufrió del síndrome del segundo sistema, el esfuerzo final es el doble de estimación inicial, precisamente porque se trataron de introducir todas aquellas cosas que no estaban en la primera versión.</p>
<p>[4] Admiro a Peart, uno de los más grandes bateristas del rock. <a href="http://articles.latimes.com/2011/jul/25/health/la-he-fitness-neil-peart-20110725/2">En una entrevista</a> comenta que tocar batería es una manera de estimular a los chicos que odian los deportes, pero aman la música, para que hagan ejercicio. Yo hacía precisamente eso, sorprendiendo a mi profesor de educación física, que nunca entendió como yo, el peor en su ramo, podía tocar batería tan coordinadamente (true story <img src='http://www.lnds.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>[5] La referencia es a los werewolves de los que habla Brooks en No Silver Bullets.</p>
<h3 class='related_post_title'>Artículos relacionados</h3>
<ul class='related_post'>
<li>No se encontraron artículos relacionados</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.lnds.net/blog/2012/01/lbum-conceptual.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Frustración</title>
		<link>http://www.lnds.net/blog/2012/01/frustracion.html</link>
		<comments>http://www.lnds.net/blog/2012/01/frustracion.html#comments</comments>
		<pubDate>Sun, 08 Jan 2012 17:22:49 +0000</pubDate>
		<dc:creator>Eduardo Díaz</dc:creator>
				<category><![CDATA[Emprendimiento]]></category>
		<category><![CDATA[Evolución]]></category>
		<category><![CDATA[actitud]]></category>
		<category><![CDATA[contención]]></category>
		<category><![CDATA[entendimiento]]></category>
		<category><![CDATA[éxito]]></category>
		<category><![CDATA[frustración]]></category>
		<category><![CDATA[manejo]]></category>
		<category><![CDATA[vida]]></category>

		<guid isPermaLink="false">http://www.lnds.net/blog/?p=2490</guid>
		<description><![CDATA[La frustración es ese sentimiento que surge cuando no logramos nuestro deseos, cuando no cumplimos nuestras expectativas. No es un problema tener este sentimiento, el problema no surge del dolor ni de la frustración que vivimos, el problema es nuestra actitud frente a estos sentimientos. Baja tolerancia a la frustración, el gran problema de nuestro tiempo de búsqueda del &#8220;éxito&#8221; permanente. &#160; Tolerar la frustración significa enfrentar nuestros problemas y limitaciones, a pesar de las molestias, e incomodidades que nos provocan. La baja tolerancia a la frustración proviene de que tenemos una percepción equivocada, o exagerada de la situación que estamos viviendo, y de la creencia de que lo que experimentamos es horrible, y no lo queremos vivir ni aguantar. La frustración es parte de la vida, es imposible evitarla, pero debemos aprender a manejarla y superarla. Hay gente que tolera poco la frustración, y terminan desmotivados, abandonando metas y proyectos. Lo que corresponde es aprender, entender, y enmendar. Son aquellos que toman su frustración, la manejan, aprenden de sus errores, y realizan las mejoras los que superan esta locura, y logran el éxito. El éxito no es que todo salga bien y a la primera, o en forma perfecta, [...]]]></description>
			<content:encoded><![CDATA[<p>La frustración es ese sentimiento que surge cuando no logramos nuestro deseos, cuando no cumplimos nuestras expectativas.</p>
<p>No es un problema tener este sentimiento, el problema no surge del dolor ni de la frustración que vivimos, el problema es nuestra actitud frente a estos sentimientos.</p>
<p>Baja tolerancia a la frustración, el gran problema de nuestro tiempo de búsqueda del &#8220;éxito&#8221; permanente.</p>
<p><a href="http://www.lnds.net/blog/wp-content/uploads/2012/01/frustration.jpg"><img class="aligncenter size-medium wp-image-2491" title="frustration" src="http://www.lnds.net/blog/wp-content/uploads/2012/01/frustration-300x293.jpg" alt="" width="300" height="293" /></a></p>
<p>&nbsp;</p>
<p>Tolerar la frustración significa enfrentar nuestros problemas y limitaciones, a pesar de las molestias, e incomodidades que nos provocan.</p>
<p>La baja tolerancia a la frustración proviene de que tenemos una percepción equivocada, o exagerada de la situación que estamos viviendo, y de la creencia de que lo que experimentamos es horrible, y no lo queremos vivir ni aguantar.</p>
<p>La frustración es parte de la vida, es imposible evitarla, pero debemos aprender a manejarla y superarla. Hay gente que tolera poco la frustración, y terminan desmotivados, abandonando metas y proyectos.</p>
<p>Lo que corresponde es aprender, entender, y enmendar. Son aquellos que toman su frustración, la manejan, aprenden de sus errores, y realizan las mejoras los que superan esta <a href="http://www.lnds.net/blog/2011/03/locura.html">locura</a>, y logran el éxito. El éxito no es que todo salga bien y a la primera, o en forma perfecta, el éxito es superar los escollos y lograr vivir una <a href="http://www.lnds.net/blog/2011/09/vida-plena.html">vida plena</a>.<br />
<h3 class='related_post_title'>Artículos relacionados</h3>
<ul class='related_post'>
<li><a href='http://www.lnds.net/blog/2011/10/desde-siempre.html' title='Desde siempre&#8230;'>Desde siempre&#8230;</a></li>
<li><a href='http://www.lnds.net/blog/2011/08/encuadres.html' title='Encuadres'>Encuadres</a></li>
<li><a href='http://www.lnds.net/blog/2011/08/un-mundo-controlado-por-algoritmos.html' title='Un mundo controlado por algoritmos'>Un mundo controlado por algoritmos</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.lnds.net/blog/2012/01/frustracion.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fin de A&#241;o</title>
		<link>http://www.lnds.net/blog/2011/12/fin-de-ao.html</link>
		<comments>http://www.lnds.net/blog/2011/12/fin-de-ao.html#comments</comments>
		<pubDate>Sat, 31 Dec 2011 16:47:39 +0000</pubDate>
		<dc:creator>Eduardo Díaz</dc:creator>
				<category><![CDATA[Destacados]]></category>
		<category><![CDATA[Sin categoría]]></category>

		<guid isPermaLink="false">http://www.lnds.net/blog/?p=2486</guid>
		<description><![CDATA[El 2011 fue un año duro. Pero en lo personal tuve algunas satisfacciones, y logros que me permiten hacer un balance positivo. Que un año sea duro no significa que sea un mal año. Vivimos una época en que la gente no medita mucho, y es importante hacer la aclaración. La era digital tiene el problema que ha llevado a la gente a pensar en binario, 0 ó 1. El año es bueno o malo. En parte los informáticos somos culpables de eso, en facebook, las personas son amigas o no, me gusta o no, +1 o nada. Los invito a ver la vida como es en realidad, una realidad continua, no discreta, no digital. Con altos y bajos, con estados, con variables, con contradicciones y pocas certezas. Es hora de finalizar el año, de iniciar el nuevo, del que ya hablaremos. Es tiempo de re iniciar. Pero este post es de cierre, de recuento. Les dejo con mi selección personal de los artículos que me parecen los mejor logrados este año, y nos seguimos viendo el próximo. El Rey del Azúcar:&#160; dedicado a mis amigos que estudiaron en la Universidad Federico Santa María (por cierto, no me gusta la [...]]]></description>
			<content:encoded><![CDATA[<p>El 2011 fue un año duro. Pero en lo personal tuve algunas satisfacciones, y logros que me permiten hacer un balance positivo. Que un año sea duro no significa que sea un mal año. </p>
<p>Vivimos una época en que la gente no medita mucho, y es importante hacer la aclaración. La era digital tiene el problema que ha llevado a la gente a pensar en binario, 0 ó 1. El año es bueno o malo. En parte los informáticos somos culpables de eso, en facebook, las personas son amigas o no, me gusta o no, +1 o nada. Los invito a ver la vida como es en realidad, una realidad continua, no discreta, no digital. Con altos y bajos, con estados, con variables, con contradicciones y pocas certezas.</p>
<p>Es hora de finalizar el año, de iniciar el nuevo, del que ya hablaremos. Es tiempo de re iniciar. Pero este post es de cierre, de recuento. Les dejo con mi selección personal de los artículos que me parecen los mejor logrados este año, y nos seguimos viendo el próximo.</p>
<ol>
<li><a href="http://www.lnds.net/blog/2011/02/el-rey-del-azucar.html">El Rey del Azúcar</a>:&#160; dedicado a mis amigos que estudiaron en la Universidad Federico Santa María (por cierto, no me gusta la inicial USM: Universidad Santa María, lleva una connotación que sospecho no sería del agrado de Don Federico, de hecho, si leen esta historia se darán cuenta que las cosas no salieron de acuerdo a su voluntad).</li>
<li><a href="http://www.lnds.net/blog/2011/03/sobre-las-propiedades-del-cuerno-de-unicornio.html">Sobre las propiedades del cuerno de unicornio</a>, una reflexión sobre colaboración entre universidad e industria (me gusta mucho ese título).</li>
<li><a href="http://www.lnds.net/blog/2011/03/la-hora-como-un-parametro.html">La hora como un parámetro</a>, no sé por qué me di el tiempo de contestar las estupideces dichas por el ministro.</li>
<li><a href="http://www.lnds.net/blog/2011/04/tambores-parlantes.html">Tambores Parlantes</a>: descubrir el secreto de los tambores parlantes fue una epifanía, “Hombre blanco, espíritu en el bosque, ven, ven a la casa de los altos matorrales sobre el espiritu del hombre blanco en el bosque. La mujer con las batatas espera. Ven, ven.”</li>
<li><a href="http://www.lnds.net/blog/2011/04/dos-hombres-y-una-maquina-universal.html">Dos hombres y una máquina universal</a>. No está en este texto, pero descubrí hace poco que Von Neumann fue maestro de Turing y Shannon, y que durante la guerra volvieron a encontrarse, un episodio que deberé contar alguna vez.</li>
<li><a href="http://www.lnds.net/blog/2011/06/la-paradoja-del-sentido-comun.html">La paradoja del sentido común</a>: este post es el primero de una serie que fue un agrado de escribir.</li>
<li><a href="http://www.lnds.net/blog/2011/07/causas-imaginadas.html">Causas Imaginadas</a>: la falacia post hoc explicada, me he dado cuenta que esta falacia es bastante usada en nuestro debate nacional, el otro día la detecté en un amigo y se lo dije. Escribir sobre estos sesgos cognitivos fue lo mejor que hice en el blog este año.</li>
<li><a href="http://www.lnds.net/blog/2011/07/razonamiento-circular.html">Razonamiento Circular</a>: otro tipo de error de razonamiento bastante común.</li>
<li><a href="http://www.lnds.net/blog/2011/08/escuchar.html">Escuchar</a>: recuperemos esta capacidad.</li>
<li><a href="http://www.lnds.net/blog/2011/08/el-problema-con-la-razon.html">El problema con la razón</a>, los progresistas deben aprender ciencias cognitivas.</li>
<li><a href="http://www.lnds.net/blog/2011/09/poesia-caligrama-y-la-belleza-del-codigo.html">Poesía, Caligramas y la Belleza del Código</a>, programar es un arte…</li>
<li><a href="http://www.lnds.net/blog/2011/11/sobre-cmo-rascarse-una-oreja.html">Sobre cómo rascarse una oreja</a>, los informáticos se complican la vida más de lo necesario.</li>
<li><a href="http://www.lnds.net/blog/2011/10/ensaladas-y-algoritmos.html">Ensaladas y Algoritmos</a>, una rica receta de ensalada fresquita para el verano.</li>
<li><a href="http://www.lnds.net/blog/2011/12/java-debe-morir.html">Java debe morir</a>, para que viva Java.</li>
</ol>
<p><strong>Feliz 2012!!</strong></p>
<h3 class='related_post_title'>Artículos relacionados</h3>
<ul class='related_post'>
<li>No se encontraron artículos relacionados</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.lnds.net/blog/2011/12/fin-de-ao.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simplejizando&#8230;</title>
		<link>http://www.lnds.net/blog/2011/12/simplejizando.html</link>
		<comments>http://www.lnds.net/blog/2011/12/simplejizando.html#comments</comments>
		<pubDate>Tue, 20 Dec 2011 03:02:48 +0000</pubDate>
		<dc:creator>Eduardo Díaz</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[La Naturaleza del Software]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[lenguajes de programación]]></category>
		<category><![CDATA[Ogu]]></category>

		<guid isPermaLink="false">http://www.lnds.net/blog/?p=2481</guid>
		<description><![CDATA[Una de las ventajas de publicar Ogu en esta etapa es que me permite confrontar mi diseño con los lectores y potenciales usuarios. He recibido comentarios en el blog y en privado que me han permitido enriquecer y determinar algunos problemas en la sintáxis. El principal problema reside en la ambigüedad de las declaraciones, la gramática hasta ahora permitía el uso opcional de las palabras reservadas &#8216;def&#8217;, &#8216;var&#8217; y &#8216;val&#8217;. De este modo la siguiente declaración x := 1 era equivalente a esta otra: val x := 1 y obligaba al uso de var para las variables mutables: var x:= 1 Por otra parte la declaración de funciones era de la siguiente manera factorial : Int -&#62; Int factorial 0 = 1 factorial n = n * factorial (n-1) El problema es que una de las características de Ogu es que las funciones son first class, de este modo la siguiente declaración f : Int -&#62; Int es ambigua, puede ser la variable inmutable f de tipo función Int-&#62;Int, o la función f. La gramática actual exige que inmediatamente después de esta declaración debe venir una expresión que corresponde a la definición del cuerpo de la función, esto obliga al [...]]]></description>
			<content:encoded><![CDATA[<p>Una de las ventajas de publicar Ogu en esta etapa es que me permite confrontar mi diseño con los lectores y potenciales usuarios. He recibido comentarios en el blog y en privado que me han permitido enriquecer y determinar algunos problemas en la sintáxis.</p>
<p>El principal problema reside en la ambigüedad de las declaraciones, la gramática hasta ahora permitía el uso opcional de las palabras reservadas &#8216;def&#8217;, &#8216;var&#8217; y &#8216;val&#8217;.</p>
<p>De este modo la siguiente declaración</p>
<blockquote><p>x := 1</p></blockquote>
<p>era equivalente a esta otra:</p>
<blockquote><p>val x := 1</p></blockquote>
<p>y obligaba al uso de var para las variables mutables:</p>
<blockquote><p>var x:= 1</p></blockquote>
<p>Por otra parte la declaración de funciones era de la siguiente manera</p>
<blockquote><p>factorial : Int -&gt; Int</p>
<p>factorial 0 = 1</p>
<p>factorial n = n * factorial (n-1)</p></blockquote>
<p>El problema es que una de las características de Ogu es que las funciones son <em>first class</em>, de este modo la siguiente declaración</p>
<blockquote><p>f : Int -&gt; Int</p></blockquote>
<p>es ambigua, puede ser la variable inmutable f de tipo función Int-&gt;Int, o la función f. La gramática actual exige que inmediatamente después de esta declaración debe venir una expresión que corresponde a la definición del cuerpo de la función, esto obliga al uso de var o val si queremos que f sea una variable que almacenará una función.</p>
<p>Ante esto he decidido hacer los siguientes cambios:</p>
<ul>
<li>var, val y def son obligatorios al declarar variables o funciones.</li>
<li>al inferir tipos los dos puntos son opcionales.</li>
<li>También las palabras class y trait que eran opcionales ahora son obligatorias, y la definición de una clase debe ir precedida con la palabra reservada def</li>
<li>La consecuencia de esto es que ahora las clases pueden empezar con minúsculas (lo que me simplifica un problema con el runtime de java y los packages)</li>
</ul>
<p>Con estas consideraciones los ejemplos del primer artículo de esta serie quedan así:</p>
<blockquote><p><strong>val</strong> blog = “La naturaleza del software” // blog es de tipo String</p>
<p><strong>val</strong> ogú = Cavernícola(nombre: “ogú”) // ogú es de tipo Cavernícola</p>
<p><strong>val</strong> x, y := 1, 2 // x e y son de tipo Int, notar que el &#8216;:&#8217; es opcional</p></blockquote>
<p>Las funciones se definen de esta forma:</p>
<blockquote><p><strong>def</strong> factorial : Int –&gt; Int</p>
<p><strong>def</strong> factorial 0 = 1</p>
<p><strong>def</strong> factorial n = n * factorial (n-1)</p></blockquote>
<p>La forma abreviada es:</p>
<blockquote><p><strong>def</strong> factorial : (n:Int)–&gt; Int  =<strong>if  </strong>(n == 0) 1 <strong>else </strong> n * factorial(n-1)</p></blockquote>
<p>Lo interesante es que con este cambio también  se puede escribir de la siguiente manera:</p>
<blockquote><p><strong>def</strong> factorial 0 = 1</p>
<p><strong>def</strong> factorial n = n * factorial (n-1)</p></blockquote>
<p>Potenciando más la inferencia de tipos.</p>
<p>Este cambio permite desambiguar la siguiente declaración</p>
<blockquote><p><strong>val</strong> f : Int -&gt; Int</p></blockquote>
<p>Permitiendo lo siguiente:</p>
<blockquote><p>f = factorial</p></blockquote>
<p>Las clases se declaran de este modo ahora:</p>
<blockquote><p><strong>def</strong> Persona : <strong>class</strong> (nombre: String, edadInicial: Int) ={</p>
<p><strong>       var</strong> _edad = edadInicial</p>
<p><strong>      def</strong> saludar : () = println “hola “ + nombre</p>
<p><strong>       def</strong> celebrarCumpleaños : () = {<br />
_edad = _edad + 1<br />
println “¡¡ feliz cumpleaños “ + nombre + “!!”<br />
}<br />
}</p></blockquote>
<p>Los ejemplos del artículo anterior también deben ser re escritos:</p>
<blockquote><p><strong>def</strong> Stack{T}  : <strong>class</strong> () = {</p>
<p><strong>      var</strong> _data : [T] = []</p>
<p><strong>     def</strong> push : (x:T) = _data = x :: _data</p>
<p><strong>     def</strong> pop : ()-&gt;(r:T) = {<br />
r = head _data<br />
_data = tail _data<br />
}<br />
}</p></blockquote>
<p>Las interfaces en Ogu se llaman traits (rasgos), siguiendo la tradición de Scala:</p>
<blockquote><p><strong>def</strong> Figura : <strong>trait</strong> = {</p>
<p><strong>      def</strong> area : ()-&gt;Int<br />
<strong>       def</strong> perimetro : () –&gt; Int<br />
}</p>
<p><strong>def</strong> Circulo : <strong>class</strong> (radio:Int) ~ Figura = {</p>
<p><strong>         def</strong> area = pi * radio ^ 2</p>
<p><strong>         def</strong> perimetro = 2 * pi * radio</p>
<p>}</p>
<p><strong>def</strong> Cuadrado : <strong>class</strong> (lado:Int) ~ Figura ={</p>
<p><strong>         def</strong> area = lado*lado</p>
<p><strong>         def</strong> perimetro = lado*4</p>
<p>}</p></blockquote>
<p>Además con esto queda más claro que area y perimetro son funciones y no variables.</p>
<p>Este ejercicio me hizo darme cuenta de que estaba cayendo en el vicio que pretendía evitar, el vicio de la <em>simplejización</em>.  En el afán de ahorrarme algunas palabras reservadas estaba haciendo de Ogu un lenguaje con una sintáxis que terminaría siendo oscura e intimidante, que obligaría a pensar mucho para analizar una expresión. Estos cambios van en la linea de la simplicidad, sin perder el minimalismo sintáctico que espero que tenga Ogu.</p>
<p>&nbsp;<br />
<h3 class='related_post_title'>Artículos relacionados</h3>
<ul class='related_post'>
<li><a href='http://www.lnds.net/blog/2011/12/el-sistema-de-tipos-de-ogu-1.html' title='El sistema de tipos de Ogu (1)'>El sistema de tipos de Ogu (1)</a></li>
<li><a href='http://www.lnds.net/blog/2011/12/compiladores.html' title='Compiladores'>Compiladores</a></li>
<li><a href='http://www.lnds.net/blog/2011/12/java-debe-morir.html' title='Java debe morir'>Java debe morir</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.lnds.net/blog/2011/12/simplejizando.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>El sistema de tipos de Ogu (1)</title>
		<link>http://www.lnds.net/blog/2011/12/el-sistema-de-tipos-de-ogu-1.html</link>
		<comments>http://www.lnds.net/blog/2011/12/el-sistema-de-tipos-de-ogu-1.html#comments</comments>
		<pubDate>Sat, 17 Dec 2011 21:24:34 +0000</pubDate>
		<dc:creator>Eduardo Díaz</dc:creator>
				<category><![CDATA[La Naturaleza del Software]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[lenguajes de programación]]></category>
		<category><![CDATA[Ogu]]></category>

		<guid isPermaLink="false">http://www.lnds.net/blog/?p=2474</guid>
		<description><![CDATA[Es momento de analizar más detalles del lenguaje de programación Ogu, vamos a partir por su sistema de tipos, este artículo es una introducción al tema. &#160; Ogu es un lenguaje con declaración de tipos estáticos, aunque implementa inferencia de tipos. Veamos algunos ejemplos: i : Int = 0 j := i // j es de tipo Int s : String = “un string” t := s &#160; Ogu tiene “sacarina sintáctica” para soportar tuplas naipe : (Int,String) = (10, “espadas”)  // naipe es una tupla as := (1,”espadas”) Naipe = (Int,String) // Introduce el tipo Naipe como alias de la tupla (Int,String) Tambien hay sacarina para listas y hashes: vocales : [String] = [“a”, “e”, “i”, “o”, “u”] ListaDeStrings = [String] mapa : [String : Int] = [“Chile”:56, “Usa”:1] &#160; Las clases pueden ser genéricas: Stack{T}  : () = { var _data : [T] = [] push : (x:T) = _data = x :: _data pop : ()-&#62;(r:T) = { r = head _data _data = tail _data } } Las tuplas, listas y mapas se implementan en basa tipos genéricos. En realidad al declarar una variable de tipo [T] es lo mismo que declararla como Sequence{T}, y al [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.lnds.net/blog/wp-content/uploads/2011/12/typesystem.gif"><img class="alignleft size-thumbnail wp-image-2477" title="typesystem" src="http://www.lnds.net/blog/wp-content/uploads/2011/12/typesystem-150x150.gif" alt="" width="150" height="150" /></a>Es momento de analizar más detalles del <a href="http://www.lnds.net/blog/2011/12/compiladores.html">lenguaje de programación Ogu</a>, vamos a partir por su sistema de tipos, este artículo es una introducción al tema.</p>
<p>&nbsp;</p>
<p>Ogu es un lenguaje con declaración de tipos estáticos, aunque implementa inferencia de tipos. Veamos algunos ejemplos:</p>
<blockquote><p>i : Int = 0</p>
<p>j := i // j es de tipo Int</p>
<p>s : String = “un string”</p>
<p>t := s</p>
<p>&nbsp;</p></blockquote>
<p>Ogu tiene “sacarina sintáctica” para soportar tuplas</p>
<blockquote><p>naipe : (Int,String) = (10, “espadas”)  // naipe es una tupla</p>
<p>as := (1,”espadas”)</p>
<p>Naipe = (Int,String) // Introduce el tipo Naipe como alias de la tupla (Int,String)</p></blockquote>
<p>Tambien hay sacarina para listas y hashes:</p>
<blockquote><p>vocales : [String] = [“a”, “e”, “i”, “o”, “u”]</p>
<p>ListaDeStrings = [String]</p>
<p>mapa : [String : Int] = [“Chile”:56, “Usa”:1]</p></blockquote>
<p>&nbsp;</p>
<p>Las clases pueden ser genéricas:</p>
<blockquote><p>Stack{T}  : () = {</p>
<p>var _data : [T] = []</p>
<p>push : (x:T) = _data = x :: _data</p>
<p>pop : ()-&gt;(r:T) = {</p>
<p>r = head _data<br />
_data = tail _data<br />
}</p>
<p>}</p></blockquote>
<p>Las tuplas, listas y mapas se implementan en basa tipos genéricos. En realidad al declarar una variable de tipo [T] es lo mismo que declararla como Sequence{T}, y al declararla como [K:V] es lo mismo que Map{K,V}.  Tanto Sequence y Map son clases definidas en el runtime básico de Ogu.</p>
<p>Para crear un stack de enteros hacemos lo siguiente</p>
<blockquote><p>stackOfInt := Stack{Int}()</p>
<p>// otra manera</p>
<p>StackOfInt = Stack{Int} // type alias</p>
<p>stackOfInt := StackOfInt()</p></blockquote>
<p>Ogu soporta herencia de clases</p>
<blockquote><p>// un troglodita es un cavernicola que vive en una cueva</p>
<p>Troglodita : (nombre,grito,cueva : String) &gt; Cavernicola(nombre,grito)  = {<br />
_cueva := cueva</p>
<p>}</p>
<p>&nbsp;</p></blockquote>
<p><strong>Interfaces</strong></p>
<p>Consideremos un paquete que trabaja con figuras geométricas</p>
<blockquote><p>Circulo : (radio:Int) = {</p>
<p>area : ()-&gt;Int  = pi * radio ^ 2</p>
<p>perimetro: ()-&gt;Int = 2 * pi * radio</p>
<p>}</p>
<p>Cuadrado : (lado:Int) = {</p>
<p>area : () –&gt; Int = lado * lado</p>
<p>}</p>
<p>&nbsp;</p></blockquote>
<p>Supongamos que queremos crear una funcion que imprima el area de una figura geometrica:</p>
<blockquote><p>imprimeArea : (c:Cuadrado) = println(“el area es “+c.area())</p>
<p>imprimeArea : (c:Circulo) = println(“el area es “+c.area())</p></blockquote>
<p>el problema es que Ogu no nos permite sobrecargar funciones <img class="wlEmoticon wlEmoticon-sadsmile" style="border-style: none;" src="http://www.lnds.net/blog/wp-content/uploads/2011/12/wlEmoticon-sadsmile.png" alt="Triste" />. Hay tres maneras de solucionar esto, la primera es usando selectores de tipo:</p>
<blockquote><p>imprimeArea : (c:Cuadrado|Circulo) = println(“el area es “+c.area())</p></blockquote>
<p>lo que hemos hecho es que el tipo de la función imprimeArea puede ser un Cuadrado o un Circulo (Cuadrado | Circulo ).</p>
<p>Ahora si definimos esta función:</p>
<blockquote><p>imprimePerimetro : (c : Cuadrado|Circulo) =<br />
println(“el perimetro es “+c.perimetro())</p></blockquote>
<p>tendremos un error de compilación,  Cuadrado no define la función perímetro.</p>
<p>La otra forma de solucionar este problema es declarando una interfaz:</p>
<blockquote><p>Figura := {</p>
<p>area : ()-&gt;Int</p>
<p>perimetro : () –&gt; Int</p>
<p>}</p></blockquote>
<p>Una interfaz es como una clase, pero no tiene constructor y el cuerpo de las funciones es opcional.</p>
<p>De este modo puedo redefinir las clases Circulo y Cuadrado de esta manera:</p>
<blockquote><p>Circulo : (radio:Int) ~ Figura = {</p>
<p>area = pi * radio ^ 2</p>
<p>perimetro = 2 * pi * radio</p>
<p>}</p>
<p>Cuadrado : (lado:Int) ~ Figura ={</p>
<p>area = lado*lado</p>
<p>perimetro = lado*4</p>
<p>}</p></blockquote>
<p>e implementar nuestras funciones así</p>
<blockquote><p>imprimeArea : (f:Figura) = println(“el area es “+f.area())</p>
<p>imprimePerimetro : (f:Figura) = println(“el perimetro es”+f.perimetro())</p></blockquote>
<p>La tercera forma de implementar polimorfismo es mediante herencia y esa queda propuesta al lector.</p>
<p>Consideremos la interfaz Dibujo</p>
<blockquote><p>Dibujo :=  {</p>
<p>dibujar : () = println (“dibuja un ”+nombre)</p>
<p>nombre : String</p>
<p>}</p></blockquote>
<p>Podemos ahora extender Circulo y Cuadrado para que sean también dibujos:</p>
<blockquote><p>Circulo : (radio:Int) ~ Figura &amp; Dibujo = {</p>
<p>area = pi * radio ^ 2</p>
<p>perimetro = 2 * pi * radio</p>
<p>nombre = “circulo”</p>
<p>}</p>
<p>Cuadrado : (lado:Int) ~ Figura &amp; Dibujo ={</p>
<p>area = lado*lado</p>
<p>perimetro = lado*4</p>
<p>nombre = “circulo”</p>
<p>}</p></blockquote>
<p>&nbsp;</p>
<p>Este artículo es solo una introducción, y es un complemento a <a href="http://www.lnds.net/blog/2011/12/compiladores.html">la primera parte de la presentación de Ogu</a>. Espero sus comentarios.<br />
<h3 class='related_post_title'>Artículos relacionados</h3>
<ul class='related_post'>
<li><a href='http://www.lnds.net/blog/2011/12/simplejizando.html' title='Simplejizando&#8230;'>Simplejizando&#8230;</a></li>
<li><a href='http://www.lnds.net/blog/2011/12/compiladores.html' title='Compiladores'>Compiladores</a></li>
<li><a href='http://www.lnds.net/blog/2011/12/java-debe-morir.html' title='Java debe morir'>Java debe morir</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.lnds.net/blog/2011/12/el-sistema-de-tipos-de-ogu-1.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Compiladores</title>
		<link>http://www.lnds.net/blog/2011/12/compiladores.html</link>
		<comments>http://www.lnds.net/blog/2011/12/compiladores.html#comments</comments>
		<pubDate>Thu, 15 Dec 2011 02:51:26 +0000</pubDate>
		<dc:creator>Eduardo Díaz</dc:creator>
				<category><![CDATA[Destacados]]></category>
		<category><![CDATA[La Naturaleza del Software]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[lenguajes]]></category>
		<category><![CDATA[lenguajes de programación]]></category>
		<category><![CDATA[Ogu]]></category>

		<guid isPermaLink="false">http://www.lnds.net/blog/?p=2464</guid>
		<description><![CDATA[Compiladores ahora es un ramo electivo para ingeniería en computación, en la facultad en que estudié[1]. Al menos cuando yo estudié me parece que era obligatorio, y creo que debería ser un ramo obligatorio. Ignoro por que la Universidad de Chile decidió hacer este ramo optativo, ignoro también cuanta gente toma esta materia cada semestre,también he escuchado que la matrícula en computación ha bajado, espero que algún académico me confirme esa información. Como sea, creo que la la no obligatoriedad del curso de compiladores es un error, porque es uno de los ramos que mejor sintetiza todo lo aprendido en la carrera. Cuando haces un compilador aplicas: Estructuras de Datos (AST, Grafos de Colores) Algoritmos, Teorías de Autómatas, Teorías de Lenguajes Formales Fundamentos de Lenguajes de Programación (en el diseño del lenguaje) Optimización Programación en código de máquina (real o virtual) Modularidad, Integración, bajo acoplamiento (la estructura del analizador léxico, sintáctico, semántico y generación de código ayuda a entender y aplicar por primera vez los conceptos de arquitectura del software Ingeniería de software, diseño, análisis Construir un compilador es el desafío que te forma como verdadero desarrollador de software, todo aquel que se quiera desempeñar como ingeniero de software debería [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.lnds.net/blog/wp-content/uploads/2011/12/compilers.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border: 0px;" title="compilers" src="http://www.lnds.net/blog/wp-content/uploads/2011/12/compilers_thumb.jpg" alt="compilers" width="165" height="244" align="right" border="0" /></a>Compiladores ahora es un ramo electivo para ingeniería en computación, en la facultad en que estudié[1]. Al menos cuando yo estudié me parece que era obligatorio, y creo que debería ser un ramo obligatorio.</p>
<p>Ignoro por que la Universidad de Chile decidió hacer este ramo optativo, ignoro también cuanta gente toma esta materia cada semestre,también he escuchado que la matrícula en computación ha bajado, espero que algún académico me confirme esa información.</p>
<p>Como sea, creo que la la no obligatoriedad del curso de compiladores es un error, porque es uno de los ramos que mejor sintetiza todo lo aprendido en la carrera.</p>
<p>Cuando haces un compilador aplicas:</p>
<ul>
<li>Estructuras de Datos (AST, Grafos de Colores)</li>
<li>Algoritmos, Teorías de Autómatas, Teorías de Lenguajes Formales</li>
<li>Fundamentos de Lenguajes de Programación (en el diseño del lenguaje)</li>
<li>Optimización</li>
<li>Programación en código de máquina (real o virtual)</li>
<li>Modularidad, Integración, bajo acoplamiento (la estructura del analizador léxico, sintáctico, semántico y generación de código ayuda a entender y aplicar por primera vez los conceptos de arquitectura del software</li>
<li>Ingeniería de software, diseño, análisis</li>
</ul>
<p>Construir un compilador es el desafío que te forma como verdadero desarrollador de software, todo aquel que se quiera desempeñar como ingeniero de software debería intentar hacer un compilador alguna vez en su vida.</p>
<p>En mi vida profesional he construido 2 compiladores y diseñado 3 lenguajes (uno de los lenguajes usaba el pre procesador de C, así que era en realidad un conjunto de macros).</p>
<p>Estos lenguajes son lo que hoy llamamos DSL, lenguajes de dominio específico, diseñados para resolver un problema específico. El primero fue desarrollado en conjunto con Marco Zúñiga. Tenía un compilador, una máquina virtual propia, y hacíamos capacitaciones y lo licenciábamos, ganamos algunos buenos dólares con SanScript, como lo llamamos. Un DSL para automatizar tareas de comunicación de datos.</p>
<p>El segundo compilador era en realidad un traductor, que traducía de una suerte de markup tipo <a href="http://haml-lang.com/">Haml</a> y generaba páginas JSP. Lo divertido era que además eran resueltas con un filtro implementado con un servlet, que interpretaba los archivos con extensión .edc (mis iniciales) y generaba  las páginas jsp en un caché. Las contrapartes técnicas con que interactué en ese tiempo siempre me preguntaba que eran estas páginas con extensión ‘.edc’ <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.lnds.net/blog/wp-content/uploads/2011/12/wlEmoticon-smile.png" alt="Sonrisa" /></p>
<p>Pero nunca he hecho un compilador de un lenguaje de propósito general, a pesar de que tengo la idea de hacerlo desde hace muchos años. Ahora que <a href="http://www.lnds.net/blog/2011/12/java-debe-morir.html">todo el mundo tiene ganas de matar Java</a>, se me ocurrió que es momento de mostrar mi propuesta, de modo de que la primera versión de mi lenguaje corra sobra la Java Virtual Machine.</p>
<p><strong>Ogu</strong></p>
<p>El lenguaje se llama <a href="http://es.wikipedia.org/wiki/Og%C3%BA#Personajes">Ogu</a>, su nombre es un homenaje al personaje creado por el caricaturista chileno <a href="http://es.wikipedia.org/wiki/Themo_Lobos">Themo Lobos</a>, es un cavernícola muy simpático amigo de aventuras de <a href="http://es.wikipedia.org/wiki/Mampato">Mampato</a>[2].</p>
<p>Este es un sencillo programa en Ogu:</p>
<blockquote><p>println &#8220;Akarrú!!!&#8221;</p></blockquote>
<p>Ninguna novedad dirán ustedes, hasta python hace eso, aunque traten de escribir este programa en Java <img class="wlEmoticon wlEmoticon-winkingsmile" style="border-style: none;" src="http://www.lnds.net/blog/wp-content/uploads/2011/12/wlEmoticon-winkingsmile1.png" alt="Guiño" /></p>
<p>En este artículo voy a hacer una breve introducción, espero escribir más en los próximos días, donde iré describiendo las características de este nuevo lenguaje. Estoy aún en proceso de diseño, aunque hay ideas que tengo de hace años. Por cierto hay  influencias de otros lenguajes, como irán notando. Lo importante es que consideren de que es muy probable que las cosas cambien.</p>
<p>Lo primero que hay que notar es que es un lenguaje con tipos estáticos, como Java, como Scala o como Haskell, es decir, toda variable debe tener un tipo, así que toda declaración de un símbolo en Ogu debe tener su tipo.</p>
<p>Acá hay un ejemplo de declaraciones en Ogu:</p>
<blockquote><p>blog : String</p>
<p>ogú : Cavernícola</p>
<p>x, y : Int</p></blockquote>
<p>Los dos puntos ‘:’ separan a la variable de su tipo.</p>
<p>La asignación en Ogu es con el signo ‘=’, y sirve para inicializar una variable que ha sido declarada previamente, por ejemplo:</p>
<blockquote><p>blog = “La naturaleza del software”</p>
<p>ogú = Cavernícola(nombre:”Ogú”, grito: “akarrú!!!)</p>
<p>x = 1</p>
<p>y = 2</p></blockquote>
<p>Por supuesto las variables pueden tener un valor inicial al declararse:</p>
<blockquote><p>blog : String = “La naturaleza del software”</p>
<p>ogú : Cavernícola = Cavernícola(nombre : “ogú” )</p>
<p>x, y : Int = 1, 2</p></blockquote>
<p>Pero Ogu tiene cierta flexibilidad, que permite tranquilizar a los amantes de los lenguajes dinámicas, al inferir tipos:</p>
<blockquote><p>blog := “La naturaleza del software” // blog es de tipo String</p>
<p>ogú := Cavernícola(nombre: “ogú”) // ogú es de tipo Cavernícola</p>
<p>x, y := 1, 2 // x e y son de tipo Int</p></blockquote>
<p>Habrán notado que el nombre de las variables lleva acentos, esto porque Ogu acepta(rá) código escrito en Unicode.</p>
<p>Otra cosa importante, en Ogu si algo empieza con mayúsculas es la declaración de una clase, si empieza con minúsculas es una variable.</p>
<p>Pero todas las variables son inmutables, es decir, no puedes cambiarles el valor una vez asignada:</p>
<blockquote><p>x := 1</p>
<p>x = 2 // error!!!</p></blockquote>
<p>Si necesitas que las variables sean mutables debes declararlas anteponiendo la palabra reservada ‘var’:</p>
<blockquote><p>var x := 1</p>
<p>x = 2 // ok, porque x es mutable</p></blockquote>
<p>Esto es importante porque Ogu privilegia la programación funcional, como veremos más adelante.</p>
<p>Ogu es como el lenguaje <a href="http://www.scala-lang.org/">Scala</a>, soporta 2 paradigmas de programación: funcional y orientado al objeto. En Ogu la diferencia entre funciones y clases es algo difusa (el uso de mayúsculas para clases ayuda a desambiguarla).</p>
<p><strong>Funciones:</strong></p>
<p>Veamos como declarar una función:</p>
<blockquote><p>factorial : Int –&gt; Int</p>
<p>factorial 0 = 1</p>
<p>factorial n = n * factorial (n-1)</p></blockquote>
<p>Este ejemplo muestra que Ogu privilegia el paradigma funcional, y sigue una sintáxis muy parecida a la de Haskell.</p>
<p>El valor de una función está determinado por la expresión a la izquierda del signo ‘=’.</p>
<p>Lo que tenemos son patrones, o casos, que definen a la función. Podemos escribir factorial de esta forma abreviada:</p>
<blockquote><p>factorial : (n:Int)–&gt; Int  =  (n == 0) 1 else  n * factorial(n-1)</p></blockquote>
<p>Si hay más de una expresión en una función estas deben ir rodeadas de llaves {}.</p>
<p>En la forma abreviada deben ir los argumentos nombrados entre paréntesis, y es opcional nombrar el resultado.</p>
<p>El valor de la función será el valor de la última expresión, a menos que el resultado haya sido nombrado:</p>
<blockquote><p>suma : (a,b : Int) –&gt; Int = {<br />
a+b // el valor es a+b<br />
}</p>
<p>suma2 : (a, b : Int) –&gt; (resultado: Int) =  {<br />
resultado = a+b<br />
println “el resultado es “ + resultado // el valor de suma2 es resultado<br />
}</p></blockquote>
<p>Si la función no recibe argumentos se debe usar la expresión () –&gt; Tipo, esto con el fin de resolver ambiguedades:</p>
<blockquote><p>uno : () –&gt; Int = 1 // siempre retorna 1, pero es una función</p>
<p>uno := 1 //  es la variable uno</p></blockquote>
<p>Si la función no retorna valores se debe usar –&gt; Void, o solo colocar los parentesis:</p>
<blockquote><p>saludar : () –&gt; Void = println(“hola” )</p>
<p>saludar : () = println(“hola” )</p></blockquote>
<p>Veamos como declarar una clase</p>
<blockquote><p>Persona : (nombre: String, edadInicial: Int) ={</p>
<p><strong>var</strong> _edad = edadInicial</p>
<p>saludar : () = println “hola “ + nombre</p>
<p>celebrarCumpleaños : () = {<br />
_edad = _edad + 1<br />
println “¡¡ feliz cumpleaños “ + nombre + “!!”<br />
}<br />
}</p></blockquote>
<p>Como verán Ogu es un lenguaje que privilegia la economía sintáctica. Los argumentos nombre y edadInicial son atributos de la clase, y no es necesario declararlos en el cuerpo, _edad también es un atributo, pero privado. Los identificadores que empiezan con _ son privados, como en Python.</p>
<p>Los nombres que empiezan con mayúsculas son tipos o clases, y los nombres que  empiezan con minúsculas son nombres de funciones o variables. Si un nombre empieza con _ y luego viene mayúscula es un tipo privado.</p>
<p>Noten que junto con declarar la clase Persona, hemos definido el constructor de la clase.</p>
<p>Ahora podemos presentar la declaración de Cavernícola:</p>
<blockquote><p>Cavernícola : (nombre, grito : String)</p>
<p>Cavernícola  : (nombre : String)  = Cavernícola(nombre, “akarrú!!”)</p>
<p>Cavernícola = {</p>
<p>pelear : () = {<br />
println “yiko pelea!”<br />
println grito<br />
}<br />
}</p>
<p>&nbsp;</p></blockquote>
<p>Fíjense como hemos declarado Cavernícola con dos constructores.</p>
<p>Hay más cosas que contar, pero esto es un anticipo de Ogu, que espero les guste. El proyecto será opensource y se publicará en <a href="https://github.com/lnds/Ogu/">github</a>. Por ahora sólo existe un parser, el que aún tiene algunos problemas con ciertas ambigüedades. Espero tener pronto una primera versión para que empiecen a probarlo.</p>
<p>Este es el primer artículo sobre Ogu, en la medida que vaya resolviendo problemas de diseño iré publicando más.Espero sus opiniones, preguntas y sugerencias.</p>
<p>Notas</p>
<p>[1] Malla de Ingeniería Civil en Computación impartido por el DCC (para <a href="http://www.dcc.uchile.cl/node/114">los que ingresaron antes de 2007</a>, y <a href="http://www.dcc.uchile.cl/node/235">los que ingresaron después de 2007</a>).</p>
<p>[2] En realidad el personaje se llama Ogú (con acento en la u), y su grito de guerra es Akarrú, sí, <a href="http://www.akarru.org/blog/">Akarrú</a>.<br />
<h3 class='related_post_title'>Artículos relacionados</h3>
<ul class='related_post'>
<li><a href='http://www.lnds.net/blog/2011/12/simplejizando.html' title='Simplejizando&#8230;'>Simplejizando&#8230;</a></li>
<li><a href='http://www.lnds.net/blog/2011/12/el-sistema-de-tipos-de-ogu-1.html' title='El sistema de tipos de Ogu (1)'>El sistema de tipos de Ogu (1)</a></li>
<li><a href='http://www.lnds.net/blog/2011/12/java-debe-morir.html' title='Java debe morir'>Java debe morir</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.lnds.net/blog/2011/12/compiladores.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Java debe morir</title>
		<link>http://www.lnds.net/blog/2011/12/java-debe-morir.html</link>
		<comments>http://www.lnds.net/blog/2011/12/java-debe-morir.html#comments</comments>
		<pubDate>Thu, 08 Dec 2011 13:56:23 +0000</pubDate>
		<dc:creator>Eduardo Díaz</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[La Naturaleza del Software]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[cambio]]></category>
		<category><![CDATA[Ceylon]]></category>
		<category><![CDATA[evolución]]></category>
		<category><![CDATA[Gosu]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JRuby]]></category>
		<category><![CDATA[jvm]]></category>
		<category><![CDATA[Kotlin]]></category>
		<category><![CDATA[lenguajes]]></category>
		<category><![CDATA[lenguajes de programación]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Scala]]></category>
		<category><![CDATA[Xtend]]></category>

		<guid isPermaLink="false">http://www.lnds.net/blog/2011/12/java-debe-morir.html</guid>
		<description><![CDATA[“De todas las formas de adquirir libros se considera la más gloriosa el escribirlos uno mismo” – Walter Benjamin “’Ta muy malo el corralero, y allá en el potrero como viejo está. Hay que ayudarlo a que muera para que no sufra más.” – Sergio Sauvalle Esa pareces ser la consigna desde hace unos dos o tres años, java, como lenguaje de programación, debe dar el paso a lenguajes más modernos. Cuando uno ocupa durante mucho tiempo una herramienta empieza a descubrir sus limitaciones, y trata de hacer cambios para mejorarla, adaptaciones, o derechamente vas a adquirir otra. Es natural, somos seres tecnológicos, y uno de los elementos que nos diferencia es nuestro uso de las herramientas. Somos expertos en la mejora continua de nuestras herramientas, nuestra historia es, en cierto sentido, la historia de nuestras herramientas. De todas las herramientas disponibles para un programador el lenguaje es la más importante. Y vaya que ha evolucionado, aunque no siempre para mejor En 1973 el lenguaje C ya estaba establecido, en 1983 C++ aparece en escena. Para&#160; 1995 la introducción de Java supuso un hito importante en la historia de la programación. Ya en ese tiempo C++, tenía unos 12 años [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>“De todas las formas de adquirir libros se considera la más gloriosa el escribirlos uno mismo” – Walter Benjamin</p>
<p>“’Ta muy malo el corralero, y allá en el potrero como viejo está. Hay que ayudarlo a que muera para que no sufra más.” – Sergio Sauvalle</p>
</blockquote>
<p>Esa pareces ser la consigna desde hace unos dos o tres años, java, como lenguaje de programación, debe dar el paso a lenguajes más modernos.</p>
<p>Cuando uno ocupa durante mucho tiempo una herramienta empieza a descubrir sus limitaciones, y trata de hacer cambios para mejorarla, adaptaciones, o derechamente vas a adquirir otra.</p>
<p>Es natural, somos seres tecnológicos, y uno de los elementos que nos diferencia es nuestro uso de las herramientas. Somos expertos en la mejora continua de nuestras herramientas, nuestra historia es, en cierto sentido, la historia de nuestras herramientas.</p>
<p><a href="http://www.lnds.net/blog/wp-content/uploads/2011/12/tool-evolution.gif"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="tool-evolution" border="0" alt="tool-evolution" src="http://www.lnds.net/blog/wp-content/uploads/2011/12/tool-evolution_thumb.gif" width="339" height="484" /></a></p>
<p>De todas las herramientas disponibles para un programador el lenguaje es la más importante. Y vaya que ha evolucionado, aunque no siempre para mejor <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Guiño" src="http://www.lnds.net/blog/wp-content/uploads/2011/12/wlEmoticon-winkingsmile.png" /></p>
<p><a href="http://www.lnds.net/blog/wp-content/uploads/2011/12/evolution-of-languages.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="evolution-of-languages" border="0" alt="evolution-of-languages" src="http://www.lnds.net/blog/wp-content/uploads/2011/12/evolution-of-languages_thumb.jpg" width="644" height="404" /></a></p>
<p>En 1973 el lenguaje C ya estaba establecido, en 1983 C++ aparece en escena. Para&#160; 1995 la introducción de Java supuso un hito importante en la historia de la programación. Ya en ese tiempo C++, tenía unos 12 años y era tiempo de cambiarlo, parece que tenemos este ciclo de 10 a 12 años para empezar a cambiar lenguajes. ¿Por qué Java sigue con nosotros? (C# es una copia, como dijo Gosling[1], así que no vale[2].&#160; ¿Y Scala?, bueno, hablemos de eso más adelante).</p>
<p>La verdad es que Gosling tampoco lo entendió muy bien. Puede ser que C# sea una copia, y es porque los negocios lo forzaron a ir en esa dirección. El diseñador principal de C# es Anders Helsjberg, famoso por turbo Pascal, y por Delphi (Object Pascal). Puede que Hejlsberg nunca haya creado un lenguaje desde cero, pero ha tenido siempre la habilidad de llevar un lenguaje existente en direcciones muy interesantes e innovadoras.</p>
<p>Una cosa que hay que entender de la evolución es que no significa necesariamente progreso. Evolución es adaptación al cambio. En la evolución se prueban diversas alternativas ante condiciones nuevas, si funcionan se mantienen, si fracasan se desechan. </p>
<p>La figura de arriba es errada, porque la evolución no es lineal. La evolución se mueve a través de un árbol, de una estructura mucho más intrincada, con entrecruzamientos, atavismos, mutaciones, etc.</p>
<p>Cuando algo funciona bien en un nicho puede permanecer sin cambiar por mucho tiempo. Piensen en el cocodrilo, ¡básicamente es la misma especie desde hace 84 millones de años!</p>
<p>Entonces hay cosas de Java que han funcionado muy bien, es lo que llamamos la plataforma Java. Una plataforma que ha permitido crear un rico ecosistema. En este nicho Java, el lenguaje, se desplaza como un pesado saurópodo.</p>
<p>Quizás la mayor fuente de las críticas a Java tienen su origen en el concepto de “<strong>simplejidad</strong>”, que identificó muy bien Andres Hejlsberg, en <a href="http://www.artima.com/intv/simplexity.html">esta entrevista</a> que le hizo hace años Bill Venners:</p>
<blockquote><p><b>Bill Venners</b>: Una manera en que C# difiere de Java es en como propaga eventos a los objetos interesados. Java usa clases, a menod clases internas, que implementan interfaces listeners. C# usa delegates, que son un poco más como punteros a funciones. ¿Por qué delegates?</p>
<p><b>Anders Hejlsberg</b>: Déjame hablar primero un poco sobre como veo la simplicidad en general. Nadie aragumenta que la simplicidad no sea buena, pero la gente define simplicidad de muchas maneras. Hay un tipo de simplicidad que me gusta llamar <em><strong>simplejidad. </strong></em>Cuando tomas algo increiblemente complejo y tratas de envolverlo en algo más simple, a menudo terminas ocultando con un velo la complejidad. No diseñas realmente un sistema más simple. En cierto modo lo haces aún más complejo, porque ahora el usuario tiene que entender por qué fue omitido aquello que ellos necesitarán a veces. Eso es simplejidad. Así que para mi, la simplicidad debe ser verdadera, en el sentido de que cuando más abajo te internas más simple se vuelve. No debe volverse más complicado en la medida que&#160; profundizas.      <br />Los delegates agregan un grado de expresividad que no obtienes con clases o interfaces, por lo cual pienso que son importantes. Los lenguajes de programación que han estado antes que nosotros han reconocido su importancia. Tienen muchos nombres: punteros a funciones, punteros a funciones miembras. En LISP tienes closures (clausuras). Eso es de lo que se trata la programación funcional cuando se hace bien. Son tremendamente útiles.</p>
</blockquote>
<p><a href="http://www.lnds.net/blog/wp-content/uploads/2011/12/complicado.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="complicado" border="0" alt="complicado" align="right" src="http://www.lnds.net/blog/wp-content/uploads/2011/12/complicado_thumb.jpg" width="131" height="141" /></a>La simplejidad es otra forma de rascarse la oreja mal. Veamos un ejemplo, supongamos que queremos enseñar a programar, lo natural sería partir con el clásico programa hola mundo.</p>
<p>Consideren la primera clase de Python:</p>
<blockquote><p>Para crear un programa muy simple que imprima en pantalla la frase “hola mundo”, ustedes deben escribir la siguiente sentencia:</p>
</blockquote>
<blockquote><p align="center">print(“hola mundo”)</p>
<p align="left">print es una sentencia que toma este texto entre comillas y lo despliega en la consola (pantalla), etc.</p>
</blockquote>
<p align="left">Ahora piensen el esfuerzo del entrenador de Java:</p>
<blockquote><p align="left">Para crear un programa muy simple que imprima en pantalla la frase “hola mundo”, ustedes deben escribir el siguiente código:</p>
<p align="left">class HolaMundo {</p>
<p align="left">public static void main(String args[]) {</p>
<p align="left">&#160;&#160;&#160; System.out.println(“hola mundo”);</p>
<p align="left">}</p>
<p align="left">Por favor ignoren la sentencia class, ya lo vamos a explicar cuando veamos los conceptos de orientacíón a objetos.</p>
<p align="left">Por ahora ignoren que significa public static.</p>
<p align="left">void significa que esta es una función que no retorna ningún valor (wait, todavía no les enseño que es una función verdad?) </p>
<p align="left">System.out.println es una llamada a la clase System (ya vamos a aprender que es una clase, no se apuren), que tiene una variable pública llamada out que ha sido inicializada con la salida estandar (la consola, o pantalla).</p>
<p align="left">etc, etc.</p>
</blockquote>
<p align="left">Puedo imaginar la confusión de los alumnos, por eso que Java no debe ser enseñado en los primeros años!</p>
<p align="left">Y que hay de cosas más interesantes, ¿como delegates, o clausuras? ¿funciones de primer orden? Java 7 recién empieza a explorar estos temas, pero con sintaxis horribles.</p>
<p align="left">OK, pero hay que reconocer que esas cosas vienen de un paradigma distinto, el paradigma funcional es distinto al paradigma orientado al objeto sobre el que se basa Java, así que hay que ser justos.</p>
<p align="left">Lo que pasa es que necesitamos incorporar el paradigma funcional, porque, entre otras razones, porque debemos desarrollar más la computación paralela. Los procesadores multicore son cada vez más comunes, y los conceptos de la programación funcional son muy útiles en este nuevo mundo.</p>
<p align="left">Los nuevos lenguajes serán un híbrido entre los paradigmas funcionales y orientados al objeto, porque ambos paradigmas tienen características que deben sobrevivir en las nuevas condiciones y en los nuevos nichos ecológicos que se abren.</p>
<p align="left">La tendencia actual en el ecosistema de Java (la plataforma) es crear nuevos lenguajes (Scala, Groovy, Clojure), o adaptar otros (Jython, JRuby) para la JVM. </p>
<p align="left">Es curioso, cuando .Net nació se decidió diseñarla para que aceptara una gran variedad de lenguajes. El mismo Microsoft decidió iniciar la CLI con tres lenguajes: Visual Basic, C# y un dialecto de C++. La idea era crear una gran cantidad de lenguajes que se adaptaran a esta plataforma. A pesar&#160; de esto C# es el lenguaje más usado, y probablemente termine siendo el que se coma la mayor parte del pastel .Net.</p>
<p align="left">Pero sobre la JVM en el último tiempo ha empezado una verdadera carrera por crear el sucesor de Java.</p>
<p align="left"><a href="http://www.scala-lang.org/">Scala</a> es el asalto a los cielos más rimbombante hasta ahora, seguido por un modesto y más efectivo <a href="http://groovy.codehaus.org/">Groovy</a>. Otro candidato notablemente es <a href="http://jruby.org/">JRuby</a>, impulsado por la popularidad de <a href="http://www.ruby-lang.org/">Ruby</a>. Pero no hay un ganador claro. </p>
<p align="left">Aún así el empeño persiste, tenemos <a href="http://clojure.org/">Clojure</a>, y <a href="http://confluence.jetbrains.net/display/Kotlin/Welcome">Kotlin</a>, y <a href="http://gosu-lang.org/">Gosu</a>!</p>
<p align="left">Pero hay dos adiciones interesantes del último tiempo: <a href="http://www.eclipse.org/Xtext/xtend/">Xtend</a>, que tiene el respaldo de <a href="http://www.eclipse.org/">Eclipse</a> y <a href="http://ceylon-lang.org/">Ceylon</a> auspiciado por <a href="http://www.redhat.com/">RedHat</a>.</p>
<p align="left">¡Matemos a Java, para que Java viva! Yo creo que es interesante que se desarrollen estos lenguajes, veamos que pasa con esta <a href="http://es.wikipedia.org/wiki/Explosi%C3%B3n_c%C3%A1mbrica">explosión cámbrica</a>, exploremos estos lenguajes. </p>
<p align="left">Al menos yo voy a ir un paso más allá, y seguir los consejos de Walter Benjamin, aplicados a los lenguajes de programación, voy a escribir uno, y espero que ustedes me ayuden, así que atentos.</p>
<p>NOTAS:<br/>[1] La frase de Gosling, el creador de Java, es: &quot;The trite answer is, &#8216;imitation is the sincerest form of flattery&#8211;thank you very much, but the other answer is, &#8216;You guys (at Microsoft) still don&#8217;t get it,&#8217; because it&#8217;s sort of Java with reliability, productivity and security deleted.&quot; (La respuesta trillada es ‘la imitación es la forma más sincera de adulación’, muchas gracias, pero la otra respuesta es &#8216;ustedes chicos (en Microsoft) todavía no lo entienden’, porque es una especie de Java sin confiabilidad, productividad y la seguridad eliminada” (fuente: <a href="http://news.cnet.com/2008-1082-817522.html">http://news.cnet.com/2008-1082-817522.html</a>)</p>
<p>[2] Aunque a partir de&#160; C# 2.0 las cosas empezaron a cambiar, y C# 2.0 salió en 2005!, quizás deberían haberle cambiado el nombre.</p>
<h3 class='related_post_title'>Artículos relacionados</h3>
<ul class='related_post'>
<li><a href='http://www.lnds.net/blog/2010/10/barbaros-y-caballeros.html' title='Bárbaros y Caballeros'>Bárbaros y Caballeros</a></li>
<li><a href='http://www.lnds.net/blog/2011/12/compiladores.html' title='Compiladores'>Compiladores</a></li>
<li><a href='http://www.lnds.net/blog/2011/12/simplejizando.html' title='Simplejizando&#8230;'>Simplejizando&#8230;</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.lnds.net/blog/2011/12/java-debe-morir.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Carta de Derecho para los Usuarios de Redes Sociales</title>
		<link>http://www.lnds.net/blog/2011/11/carta-de-derecho-para-los-usuarios-de-redes-sociales.html</link>
		<comments>http://www.lnds.net/blog/2011/11/carta-de-derecho-para-los-usuarios-de-redes-sociales.html#comments</comments>
		<pubDate>Mon, 28 Nov 2011 00:46:33 +0000</pubDate>
		<dc:creator>Eduardo Díaz</dc:creator>
				<category><![CDATA[Identidad Digital]]></category>
		<category><![CDATA[Privacidad]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[identidad]]></category>
		<category><![CDATA[privacidad]]></category>
		<category><![CDATA[redes sociales]]></category>

		<guid isPermaLink="false">http://www.lnds.net/blog/2011/11/carta-de-derecho-para-los-usuarios-de-redes-sociales.html</guid>
		<description><![CDATA[En marzo de este año, y a raíz de los incidentes de Google y Facebook a fines del año pasado, que mostraban como estas compañías, y probablemente muchas más, no respetan la privacidad de sus usuarios, un grupo de panelistas de la conferencia SXSW en Estados Unidos redactaron un documento que denominaron Social Network Users’ Bill of Rights. Por cierto, esta carta no ha tenido mucha difusión, que yo sepa, pero es interesante, e importante. Creo que los usuarios de redes sociales deberíamos fomentar la creación de un documento como este, que tenga un real peso legal, ¿no les parece?, les dejo la traducción de este documento y espero sus opiniones. Nosotros los usuarios esperamos que los sitios de redes sociales nos provean de los siguientes derecho en sus Términos de Servicio, Políticas de Privacidad, y en la implementación de sus sistemas: Honestidad: Honren su política de privacidad y términos de servicio. Claridad: Aseguren que sus políticas, términos de servicio, y configuraciones sean fáciles de encontrar y entender. Libertad de Expresión: No borren o modifiquen mis datos sin una política clara y una justificación. Empoderamiento: Soporten las tecnologías asistenciales y la accesibilidad&#160; universal. Auto protección: Soporten tecnologías que mejoren la [...]]]></description>
			<content:encoded><![CDATA[<p>En marzo de este año, y a raíz de los incidentes de Google y Facebook a fines del año pasado, que mostraban como estas compañías, y probablemente muchas más, no respetan la privacidad de sus usuarios, un grupo de panelistas de la conferencia <a href="http://sxsw.com/">SXSW</a> en Estados Unidos redactaron un documento que denominaron <a href="http://schedule.sxsw.com/events/event_IAP7315">Social Network Users’ Bill of Rights</a>.</p>
<p>Por cierto, esta carta no ha tenido mucha difusión, que yo sepa, pero es interesante, e importante. Creo que los usuarios de redes sociales deberíamos fomentar la creación de un documento como este, que tenga un real peso legal, ¿no les parece?, les dejo la traducción de este documento y espero sus opiniones.</p>
<blockquote><p><em>Nosotros los usuarios esperamos que los sitios de redes sociales nos provean de los siguientes derecho en sus Términos de Servicio, Políticas de Privacidad, y en la implementación de sus sistemas:</em></p>
<ol>
<li><em>Honestidad: Honren su política de privacidad y términos de servicio.</em></li>
<li><em>Claridad: Aseguren que sus políticas, términos de servicio, y configuraciones sean fáciles de encontrar y entender.</em></li>
<li><em>Libertad de Expresión: No borren o modifiquen mis datos sin una política clara y una justificación.</em></li>
<li><em>Empoderamiento: Soporten las tecnologías asistenciales y la accesibilidad&#160; universal.</em></li>
<li><em>Auto protección: Soporten tecnologías que mejoren la privacidad.</em></li>
<li><em>Minimización de Datos: Minimicen la información que se requiere que entregue y comparta con otros.</em></li>
<li><em>Control: Permítanme controlar mis datos, y no faciliten la divulgación a menos que lo autorice primero.</em></li>
<li><em>Previsibilidad: Obtener mi consentimiento previo antes de cambiar significativamente quien puede ver mis datos.</em></li>
<li><em>Portabilidad de Datos: Facilitarme la obtención de una copia de mis datos.</em></li>
<li><em>Protección: Traten mis datos de forma tan segura como lo hacen con su propia información confidencial, a menos que yo escoja compartirlos, y notifíquenme si han sido comprometidos.</em></li>
<li><em>Derecho a conocer: Muéstreme como están usando mis datos y permítame ver quien y qué tiene acceso a estos.</em></li>
<li><em>Derecho a autodefinición: Déjeme crear más de una identidad y usar seudónimos. No los enlacen sin mi permiso.</em></li>
<li><em>Derecho a Apelar: Permítanme apelar a las acciones punitivas.</em></li>
<li><em>Derecho a Retiro: Permítanme borrar mi cuenta, y remover mis datos.</em></li>
</ol>
</blockquote>
<p>Vía <a href="http://www.identityblog.com/?p=1172">Identity Blog.</a></p>
<h3 class='related_post_title'>Artículos relacionados</h3>
<ul class='related_post'>
<li><a href='http://www.lnds.net/blog/2011/07/personas-especiales.html' title='Personas especiales'>Personas especiales</a></li>
<li><a href='http://www.lnds.net/blog/2011/02/sobre-la-proteccion-de-nuestros-datos-personales.html' title='Sobre la protección de nuestros datos personales'>Sobre la protección de nuestros datos personales</a></li>
<li><a href='http://www.lnds.net/blog/2011/01/dialogos-anacronicos.html' title='Diálogos anacrónicos'>Diálogos anacrónicos</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.lnds.net/blog/2011/11/carta-de-derecho-para-los-usuarios-de-redes-sociales.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gödel</title>
		<link>http://www.lnds.net/blog/2011/11/godel.html</link>
		<comments>http://www.lnds.net/blog/2011/11/godel.html#comments</comments>
		<pubDate>Thu, 24 Nov 2011 01:35:29 +0000</pubDate>
		<dc:creator>Eduardo Díaz</dc:creator>
				<category><![CDATA[La Naturaleza del Software]]></category>
		<category><![CDATA[Personajes]]></category>
		<category><![CDATA[Gódel]]></category>
		<category><![CDATA[lógica]]></category>
		<category><![CDATA[videos]]></category>

		<guid isPermaLink="false">http://www.lnds.net/blog/?p=2449</guid>
		<description><![CDATA[por Igor Kramer: Gödel from Igor Kramer on Vimeo. Artículos relacionados La respuesta La Paradoja de Pinocho y el Origen de la Computación Prioridades]]></description>
			<content:encoded><![CDATA[<p>por Igor Kramer:</p>
<p><iframe src="http://player.vimeo.com/video/7091945?title=0&amp;byline=0&amp;portrait=0" width="400" height="220" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
<p><a href="http://vimeo.com/7091945">Gödel</a> from <a href="http://vimeo.com/user2373181">Igor Kramer</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<h3 class='related_post_title'>Artículos relacionados</h3>
<ul class='related_post'>
<li><a href='http://www.lnds.net/blog/2011/11/la-respuesta.html' title='La respuesta'>La respuesta</a></li>
<li><a href='http://www.lnds.net/blog/2010/11/la-paradoja-de-pinocho-y-el-origen-de-la-computacion.html' title='La Paradoja de Pinocho y el Origen de la Computación'>La Paradoja de Pinocho y el Origen de la Computación</a></li>
<li><a href='http://www.lnds.net/blog/2011/08/prioridades.html' title='Prioridades'>Prioridades</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.lnds.net/blog/2011/11/godel.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vint Cerf</title>
		<link>http://www.lnds.net/blog/2011/11/vint-cerf.html</link>
		<comments>http://www.lnds.net/blog/2011/11/vint-cerf.html#comments</comments>
		<pubDate>Tue, 22 Nov 2011 23:34:14 +0000</pubDate>
		<dc:creator>Eduardo Díaz</dc:creator>
				<category><![CDATA[Cultura]]></category>
		<category><![CDATA[Emprendimiento]]></category>
		<category><![CDATA[Personajes]]></category>
		<category><![CDATA[eventos]]></category>
		<category><![CDATA[historia]]></category>
		<category><![CDATA[historia de la computación]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[personajes]]></category>
		<category><![CDATA[red]]></category>
		<category><![CDATA[redes]]></category>
		<category><![CDATA[Vint Cerf]]></category>

		<guid isPermaLink="false">http://www.lnds.net/blog/2011/11/vint-cerf.html</guid>
		<description><![CDATA[En 1963 Joseph Licklider escribió su famoso memorandum, ¿lo recuerdan? ¿no? bueno, la historia la conté en este post. Su idea era crear la “red intergaláctica de computadoras”, el era el hombre del sueño. Leonard Kleinrock, el chico que quería un condensador para construir la radio que salía en la contratapa del comic Superman (la historia está aquí), nos dió la teoría matemática para poder construir una red basada en packet switching, el fue el hombre de la teoría. Después Lawrence Roberts dirigió al equipo que construyó ARPANET, la red predecesora de internet. Se llama Internet, porque es una red de redes: inter-net, “entre redes”. Alrededor de 1973 habían varias redes que se estaban interconectando entre ellas y con ARPANET. En ese tiempo se hizo evidente que se necesitaba un mecanismo que permitiera unificar las redes. Para resolver este problema Robert E. Khan reclutó a Vinton Cerf, un joven estudiante de doctorado, para trabajar en la especificación de un nuevo protocolo. El fruto de ese primer trabajo fue el RFC 675, que describe TCP/IP, el protocolo básico de la red. Este documento también contiene el primer uso de la palabra internet, para quienes les interese ese tipo de cosas. Vint [...]]]></description>
			<content:encoded><![CDATA[<p>En 1963 Joseph Licklider escribió su famoso memorandum, ¿lo recuerdan? ¿no? bueno, la historia la conté en <a href="http://www.lnds.net/blog/2011/01/el-memorandum.html">este post</a>. Su idea era crear la “red intergaláctica de computadoras”, el era el hombre del sueño. Leonard Kleinrock, el chico que quería un condensador para construir la radio que salía en la contratapa del comic Superman (<a href="http://www.lnds.net/blog/2008/04/todo-por-un-condensador-variable.html">la historia está aquí</a>), nos dió la teoría matemática para poder construir una red basada en packet switching, el fue el hombre de la teoría. Después Lawrence Roberts dirigió al equipo que construyó ARPANET, la red predecesora de internet.</p>
<p><a href="http://www.lnds.net/blog/wp-content/uploads/2011/11/vint_cerf.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="vint_cerf" border="0" alt="vint_cerf" align="left" src="http://www.lnds.net/blog/wp-content/uploads/2011/11/vint_cerf_thumb.jpg" width="171" height="244" /></a>Se llama Internet, porque es una red de redes: inter-net, “entre redes”. Alrededor de 1973 habían varias redes que se estaban interconectando entre ellas y con ARPANET. En ese tiempo se hizo evidente que se necesitaba un mecanismo que permitiera unificar las redes. Para resolver este problema <a href="http://en.wikipedia.org/wiki/Robert_E._Kahn">Robert E. Khan</a> reclutó a <a href="http://en.wikipedia.org/wiki/Vint_Cerf">Vinton Cerf</a>, un joven estudiante de doctorado, para trabajar en la especificación de un nuevo protocolo. El fruto de ese primer trabajo fue el <a href="http://tools.ietf.org/html/rfc675">RFC 675</a>, que describe TCP/IP, el protocolo básico de la red. Este documento también contiene el primer uso de la palabra internet, para quienes les interese ese tipo de cosas.</p>
<p>Vint Cerf estuvo hoy acá en Santiago, y tuve la oportunidad, el honor, de estrechar su mano y saludarle, pero sobretodo escuchar sus palabras en una charla que dictó hoy en la <a href="http://escuela.ing.uchile.cl/">Escuela de In<strong>J</strong>eniería</a>. </p>
<p>Habló de la importancia de la innovación, compartió con nosotros sobre las características de un ambiente innovador como Sillicon Valley, y qué se requiere y quizás falta en Chile para lograr esto, comop no castigar el fracaso del emprendedor y tener gente educada y bien capacitada. Habló sobre el futuro, sobre como vamos a tener mucha más información a nuestro alcance. De la internet de las cosas, por que debemos promover, e incluso exigir el soporte de IPv6 de nuestros ISPs. Sobre privacidad y seguridad en la red, sobre participación ciudadana en la red, sobre infraestructura de la red, e incluso sobre energía (con algunas propuestas interesantes, como su analogía de packet switching y la necesidad de desarrollar el concepto de “buffering”, pero con la energía). </p>
<p>Felicito a los organizadores de la charla, a Patricio Poblete y el equipo de NIC Chile, fue una gran oportunidad, un evento memorable.</p>
<h3 class='related_post_title'>Artículos relacionados</h3>
<ul class='related_post'>
<li><a href='http://www.lnds.net/blog/2011/10/desde-siempre.html' title='Desde siempre&#8230;'>Desde siempre&#8230;</a></li>
<li><a href='http://www.lnds.net/blog/2011/04/tambores-parlantes.html' title='Tambores parlantes'>Tambores parlantes</a></li>
<li><a href='http://www.lnds.net/blog/2011/03/galeano-sobre-alan-turing.html' title='Galeano sobre Alan Turing'>Galeano sobre Alan Turing</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.lnds.net/blog/2011/11/vint-cerf.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

