<?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>Geeks &#38; Linux Atelier! &#187; programar</title>
	<atom:link href="http://www.glatelier.org/tag/programar/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.glatelier.org</link>
	<description>El Taller de GNU/Linux..., pero Chileno!</description>
	<lastBuildDate>Wed, 08 Feb 2012 18:12:34 +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>Programación Para Newbies: Fortran 6: Vectores y Arrays</title>
		<link>http://www.glatelier.org/2010/02/programacion-para-newbies-fortran-6-vectores-y-arrays/</link>
		<comments>http://www.glatelier.org/2010/02/programacion-para-newbies-fortran-6-vectores-y-arrays/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 13:59:52 +0000</pubDate>
		<dc:creator>Felipe Portales</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Programación para Newbies]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[fortran]]></category>
		<category><![CDATA[programar]]></category>

		<guid isPermaLink="false">http://www.glatelier.org/?p=5512</guid>
		<description><![CDATA[Acá desarrollaremos el manejo más básico de vectores y arrays (también conocidos como arreglos en español) en el lenguaje Fortran.]]></description>
			<content:encoded><![CDATA[<p id="top" />
<blockquote>Acá desarrollaremos el manejo más básico de vectores y arrays (también conocidos como arreglos en español) en el lenguaje Fortran.</p></blockquote>
<p>A muchos les puede sonar conocida la palabra vector, para algunos, es un organismo que transmite enfermedades, para otros (los más matemáticos) es una cantidad dirigida, o un elemento de una estructura algebraica conocida como espacio vectorial, por lo tanto partimos definiendo ¿qué es un vector o un array en Fortran?.</p>
<p>Básicamente un vector (o array también) es una manera de manejar una gran cantidad de datos de manera más cómoda, ¿a qué nos referimos con esto? se preguntarán algunos, bueno, más especificamente un vector es un tipo de variable, que <strong>dentro de si contiene distintos valores</strong>.</p>
<p>Por ejemplo, en matemáticas, podemos definir el vector A=(x,y,z) en el espacio de 3 dimensiones, en Fortran es muy similar (recordemos que el objetivo del lenguaje es ayudar en tareas de matemáticas, ciencia e ingeniería), podemos definir vectores con cuantas componentes queramos. Los arrays son un poco distintos, estos trabajan (por dar un par de ejemplos) en distintas dimensiones, con esto me refiero a filas, columnas, etc, estas imágenes son más explicativas:</p>
<p><span id="more-5512"></span></p>
<div id="attachment_5513" class="wp-caption aligncenter" style="width: 512px"><img class="size-medium wp-image-5513" src="http://www.glatelier.org/wp-content/uploads/2010/02/array-2d-502x375.png" alt="" width="502" height="375" /><p class="wp-caption-text">Ejemplo de un array en 2D</p></div>
<p>En cada celda del recuadro cabe un valor distinto (aunque no necesariamente) y al estar en un  array se tratan como uno solo, osea, se hacen las mismas operaciones sobre todos los elementos.</p>
<p>Un array 3D sería:</p>
<div id="attachment_5514" class="wp-caption aligncenter" style="width: 578px"><img class="size-medium wp-image-5514" src="http://www.glatelier.org/wp-content/uploads/2010/02/array-3d-568x374.png" alt="" width="568" height="374" /><p class="wp-caption-text">Ejemplo de un Array 3D</p></div>
<p>Acá cada cubo representaría un valor dentro del array. no puedo poner imágenes en 4D ya que es como imposible salirse del espacio normal xD; pero ya entendieron la idea.</p>
<p>Tenemos que introducir una cierta terminología para que estar seguros de que entendernos lo mismo:</p>
<ul>
<li><strong>Rango</strong>: número de dimensiones (1D, 2D, 3D,&#8230;)</li>
<li><strong>Extensión</strong>: número de elementos de una dimensión.</li>
<li><strong>Forma</strong>: vector de rango 1 que contiene en sus entradas la extensioń de cada dimensión.</li>
<li><strong>Tamaño</strong>: número de elementos.</li>
</ul>
<p>Hemos de saber que tenemos, nuevamente, dos tipos de arrays, estáticos y dinamicos.</p>
<p>Ahora que sabemos lo básico, veamos como trabajar con ellos:</p>
<p style="text-align: center;"><span style="text-decoration: underline;"><strong>Arrays Estáticos</strong></span></p>
<p>Reciben el nombre estático ya que <strong>SE DEBE</strong> declarar con anterioridad sus dimensiones y su extensión, siendo estas <strong>inalterables</strong>.</p>
<p>Al ser declarados como variables, su sintaxis es un poco distinta, respondiendo a su distinta naturaleza, digamos que queremos trabajar con vectores y arrays con entradas del tipo <code>real</code>, la declaración sería:</p>
<p><code>program muestra_array1<br />
real,dimension(5)::a<br />
real,dimension(7,8)::r,s<br />
real,dimension(6,9)::t<br />
real::b(7)<br />
...<br />
end program</code></p>
<p>Acá se tiene que <code>a</code> es un vector con 5 entradas, <code>b</code> es también un vector, pero de 7 entradas. <code>r</code> y <code>s</code> son arrays de 7&#215;8 y <code>t</code> es un array de 6&#215;9, <code>r</code>,<code>s</code>,<code>t</code> son de dos dimensiones.</p>
<p style="text-align: center;"><span style="text-decoration: underline;"><strong>Arrays Dinámicos</strong></span></p>
<p>A diferencia de los estáticos, la extensión de los arrays dinámicos podemos establecerla sobre la marcha, ya sea con una variable, o un valor arbitrario, para ello hacemos uso de la sentencia ALLOCATE, al declararlo sería:</p>
<p><code>program muestra_array2</code><code><br />
integer::n<br />
real,dimension(:)::a<br />
...<br />
ALLOCATE(a(n))<br />
...<br />
end program</code></p>
<p>En este caso particular, <code>a</code> es un vector con <code>n</code> entradas, la sintaxis para declarar arrays es la misma.</p>
<p>Ahora pasaremos a la manera de como trabajar, propiamente tal, con los arrays, hay una sola regla de oro: <strong>dos arrays o vectores se pueden operar, si y solo si, ambos tienen las mismas dimensiones y extensiones</strong>. Casi todo intento de operación que no cumpla esto, no es aceptable para el programa, la excepción es la multiplicación por un escalar, un escalar es una variable normal, estas al multiplicar, se &#8220;expanden&#8221; afectando a todos las entradas del array.</p>
<p>La suma, resta multiplicación y división se realizan elemento a elemento, ejemplo:</p>
<div id="attachment_5517" class="wp-caption aligncenter" style="width: 439px"><img class="size-full wp-image-5517" src="http://www.glatelier.org/wp-content/uploads/2010/02/mult.png" alt="" width="429" height="72" /><p class="wp-caption-text">Ejemplo de multiplicación de arrays</p></div>
<p>Podemos llamar a un cierto elemento de un array indicando su posición, por ejemplo, si decimos que a es el primer array mostrado en la imagen anterior <code>print*,a(1,2)</code> nos muestra el valor <code>4</code>. En dos dimensiones siempre se convoca <code>array(fila,columna)</code>.</p>
<p>Las sentencias maxval y minval buscan el valor máximo y el valor mínimo dentro del array. Ej: <code>b=maxval(a) !a b se le asigna el máximo valor dentro de a.</code></p>
<p>Finalmente, sum nos da la suma de todos los valores dentro de un array. Ejemplo <code>b=sum(a) !b es la suma de todos las entradas de a.</code></p>
<p>Bueno, estos son los aspectos más básicos del manejo de arrays en Fortran, con este post, llegamos al fin de la serie de Programación para Newbies: Fortran. Espero lo hayan disfrutado, como yo lo hice :D</p>
<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.glatelier.org/2010/02/programacion-para-newbies-fortran-6-vectores-y-arrays/" data-text="Programación Para Newbies: Fortran 6: Vectores y Arrays" data-count="horizontal">Tweet</a>]]></content:encoded>
			<wfw:commentRss>http://www.glatelier.org/2010/02/programacion-para-newbies-fortran-6-vectores-y-arrays/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>¿Qué son los lenguajes dinámicos?</title>
		<link>http://www.glatelier.org/2010/01/que-son-los-lenguajes-dinamicos/</link>
		<comments>http://www.glatelier.org/2010/01/que-son-los-lenguajes-dinamicos/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 03:00:30 +0000</pubDate>
		<dc:creator>PaBLoX</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Programación para Newbies]]></category>
		<category><![CDATA[código]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[evaluación]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[lenguajes dinámicos]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[orientación a objetos]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programar]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[terminologías]]></category>
		<category><![CDATA[tiempo de compilación]]></category>
		<category><![CDATA[tiempo de ejecución]]></category>

		<guid isPermaLink="false">http://www.glatelier.org/?p=5071</guid>
		<description><![CDATA[¡Hola, Lectores! Ustedes pudieron apreciar que yo uso lenguajes como PHP, Python y Ruby. Éstos tienen características especiales, por lo que se les llama &#8220;lenguajes dinámicos&#8221;. Pero, ¿cuál es la diferencia con un lenguaje estático?, más bien, ¿qué es lo que hace a estos lenguajes dinámicos? Cada lenguaje de programación tiene sus propias &#8220;terminologías&#8221;. Vale [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />¡Hola, Lectores!</p>
<p>Ustedes pudieron apreciar que yo uso lenguajes como PHP, Python y Ruby. Éstos tienen características especiales, por lo que se les llama &#8220;lenguajes dinámicos&#8221;. Pero, ¿cuál es la diferencia con un lenguaje estático?, más bien, ¿qué es lo que hace a estos lenguajes dinámicos?</p>
<p>Cada lenguaje de programación tiene sus propias &#8220;terminologías&#8221;. Vale decir, <strong>dependiendo de la manera en que cada lenguaje aborde un problema, crea un idioma para que los desarrolladores se comuniquen</strong>. Hay muchos ejemplos, pero no quiero confundirles, así es que les daré sólo uno: los lenguajes interpretados <strong>no tienen &#8220;tiempo de compilación&#8221;</strong>, porque el lenguaje <strong>no se compila</strong>. La idea es que un lenguaje de programación dinámico agregue todas estas características en tiempo de &#8220;ejecución&#8221;, no en tiempo de &#8220;compilación&#8221; o de &#8220;carga&#8221;.</p>
<p>La definición de un lenguaje dinámico es: todo aquel lenguaje que posea características que permitan alterar el curso del lenguaje de manera legítima, a través de la inyección de código o de la ejecución de funcionalidades especiales. Describiré, pues, algunas de las maneras de agregar dinamismo a un lenguaje de programación e intentaré explicarlas con pseudocódigo.</p>
<p><span id="more-5071"></span></p>
<p><a rel="attachment wp-att-5087" href="http://www.glatelier.org/2010/01/que-son-los-lenguajes-dinamicos/php/"><img class="size-full wp-image-5087 alignright" src="http://www.glatelier.org/wp-content/uploads/2010/01/php.png" alt="Lenguaje de programación PHP" width="175" height="92" /></a></p>
<h2>1.- Evaluación de código</h2>
<p>Un lenguaje puede tener un mecanismo (una función <code>eval()</code> o una clase del tipo función) que permite &#8220;evaluar&#8221; (leer, corregir e implementar) código en el lenguaje que escribimos. Esto nos da mucha flexibilidad pero también conlleva a riesgos de seguridad, permitiendo a gente con malas intenciones escribir código que no queremos que se ejecute. Una utilidad de esto es aplicar un filtro a una función:</p>
<pre class="brush: php; title: ; notranslate">function recordsetfilter(Recordset $rs, $filter)
{
$newrs = new Recordset();
foreach($rs as $record)
{
$rec = new Record();
$rec = $record;
$rec-&amp;gt;setNombre(
eval($filter)
);
$newrs-&amp;gt;add($record)
}
return $newsrs;
}
// ... código que nos genera un Recordset

$rs = recordsetfilter($rs, 'strtoupper($this-&gt;getNombre())');
</pre>
<p>Las funciones de <strong>rango mayor</strong> son funciones que toman una o más funciones como una entrada y/o entregan una función como una salida. La misma función descrita arriba es una implementación pobre de la función <code>map()</code>, que toma <strong>una función y una lista o arreglo de elementos</strong>, y que retorna como resultado una lista con la función aplicada a cada elemento de la lista de entrada. PHP tiene una función llamada <code>usort()</code> que permite tomar una función de comparación y dependiendo de lo que esta función entregue, el algoritmo hace un ordenamiento.</p>
<h2>2.- Alteración del objeto en tiempo de ejecución</h2>
<p>Esto es un poco complejo, pero se refiere al cambio de la herencia del objeto.</p>
<p>Por ejemplo, tengo una clase <strong>automóvil</strong> que extiende a la clase <strong>vehículos</strong> y también a la clase <strong>bienes</strong>. El resultado de esta operación es que un automóvil puede ser <strong>acelerado</strong>, <strong>frenado</strong>, con el motor <strong>encendido</strong>, con el motor <strong>apagado</strong>; y además puede ser <strong>comprado</strong>, <strong>vendido</strong>, <strong>traspasado</strong> o efectuarse una <strong>tasación</strong> sobre éste.</p>
<h2>3.- Programación Funcional</h2>
<p>Me gustaría escribir un artículo completo relacionado con programación funcional. Es un tópico totalmente entretenido, aunque es difícil de comprender a la primera. La idea de la programación funcional es definir funciones matemáticas que luego se aplican sin importar su estado. Algo como esto en PHP.</p>
<pre class="brush: php; title: ; notranslate">&lt;php

$a = array(1, 2, 3, 4);
$i = 0;

foreach($a as $e)
{
$a[$i] = funcion1(funcion2($e));
$i++;
}

foreach($a as $e)
{
echo $e.' ';
}

?&gt;</pre>
<p>&#8230;puede ser escrito como esto:</p>
<pre class="brush: php; title: ; notranslate">funcion = lambda(funcion1, funcion2) { funcion1 ( funcion2 (x) ) }
destino = map(funcion(funcion1, funcion2), a)</pre>
<p>La idea es decir que <code>funcion()</code> toma como parámetros las funciones <code>funcion1()</code> y <code>funcion2()</code>, y definir que a un elemento x dado se le aplicará primero <code>funcion2()</code> y al resultado se le aplicará <code>funcion1()</code>, luego se puede mapear el arreglo a para aplicarle nuestra nueva función a cada uno de los elementos. Elementos propios de la programación funcional son los closures, las continuaciones y la reflexión de datos.</p>
<h2>4.- Macros</h2>
<p>Las macros permiten hacer introspección dentro del código y evaluación del mismo. Ruby provee la mayor parte de la funcionalidad de las macros a través de su sistema de orientación a objetos.</p>
<p><a rel="attachment wp-att-5090" href="http://www.glatelier.org/2010/01/que-son-los-lenguajes-dinamicos/ruby/"><img class="size-full wp-image-5090 alignright" src="http://www.glatelier.org/wp-content/uploads/2010/01/ruby-e1263752984643.png" alt="" width="150" height="150" /></a></p>
<p>Recuerdo que decidí volver a utilizar Ruby cuando <a href="http://www.randomhacks.net/articles/2005/12/03/why-ruby-is-an-acceptable-lisp" target="_blank">leí un artículo</a> que trataba precisamente de la diferencia entre las macros de LISP y la sintáxis natural de Ruby. (en inglés, pero fácil de leer).</p>
<p>Espero que esta densa explicación sea de utilidad para ustedes. Que les vaya bien y hasta otra entrega.</p>
<p>Ya saben, el castellano no es mi idioma nativo, así es que si tienen dudas o preguntas sobre algún párrafo, ¡háganmelas saber!</p>
<p>Auf Wiederlesen!</p>
<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.glatelier.org/2010/01/que-son-los-lenguajes-dinamicos/" data-text="¿Qué son los lenguajes dinámicos?" data-count="horizontal">Tweet</a><p><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fque-son-los-lenguajes-dinamicos%2F&amp;linkname=%C2%BFQu%C3%A9%20son%20los%20lenguajes%20din%C3%A1micos%3F" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fque-son-los-lenguajes-dinamicos%2F&amp;linkname=%C2%BFQu%C3%A9%20son%20los%20lenguajes%20din%C3%A1micos%3F" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fque-son-los-lenguajes-dinamicos%2F&amp;linkname=%C2%BFQu%C3%A9%20son%20los%20lenguajes%20din%C3%A1micos%3F" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fque-son-los-lenguajes-dinamicos%2F&amp;linkname=%C2%BFQu%C3%A9%20son%20los%20lenguajes%20din%C3%A1micos%3F" title="Digg" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_meneame" href="http://www.addtoany.com/add_to/meneame?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fque-son-los-lenguajes-dinamicos%2F&amp;linkname=%C2%BFQu%C3%A9%20son%20los%20lenguajes%20din%C3%A1micos%3F" title="Meneame" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/meneame.png" width="16" height="16" alt="Meneame"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fque-son-los-lenguajes-dinamicos%2F&amp;linkname=%C2%BFQu%C3%A9%20son%20los%20lenguajes%20din%C3%A1micos%3F" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_button_tumblr" href="http://www.addtoany.com/add_to/tumblr?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fque-son-los-lenguajes-dinamicos%2F&amp;linkname=%C2%BFQu%C3%A9%20son%20los%20lenguajes%20din%C3%A1micos%3F" title="Tumblr" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/tumblr.png" width="16" height="16" alt="Tumblr"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fque-son-los-lenguajes-dinamicos%2F&amp;title=%C2%BFQu%C3%A9%20son%20los%20lenguajes%20din%C3%A1micos%3F" id="wpa2a_2">Compartir</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.glatelier.org/2010/01/que-son-los-lenguajes-dinamicos/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Programación para Newbies II: Introducción</title>
		<link>http://www.glatelier.org/2009/06/programacion-para-newbies-parte-ii-introduccion/</link>
		<comments>http://www.glatelier.org/2009/06/programacion-para-newbies-parte-ii-introduccion/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 02:14:48 +0000</pubDate>
		<dc:creator>PaBLoX</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programación para Newbies]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[basico]]></category>
		<category><![CDATA[desarrollar]]></category>
		<category><![CDATA[dummies]]></category>
		<category><![CDATA[newbies]]></category>
		<category><![CDATA[principiante]]></category>
		<category><![CDATA[programar]]></category>

		<guid isPermaLink="false">http://glatelier.wordpress.com/?p=2620</guid>
		<description><![CDATA[Nota: No es que la segunda parte tenga otra introducción, a la primera parte le cambié el título a Prefacio. Sólo modifiqué el título y no el link, porque no quería que fallaran los enlaces. Antes de querer aprender a hacer algo, es necesario saber qué es lo que vamos a aprender, ¿no?. Puede ser [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />
<blockquote><strong>Nota:</strong> No es que la segunda parte tenga otra introducción, a la primera parte le cambié el título a Prefacio. Sólo modifiqué el título y no el link, porque no quería que fallaran los enlaces.</p></blockquote>
<p>Antes de querer aprender a hacer algo, es necesario saber <em>qué</em> es lo que vamos a aprender, ¿no?. Puede ser un poco obvio, pero nunca está de más detenerse a pensar que <em>realmente</em> significa lo que vamos a intentar aprender.</p>
<h2>Programar, programas&#8230;. ¿ah?</h2>
<p>Todos como usuarios de un equipo sabemos de la existencia de distintos programas (o aplicaciones), hay algunas para escribir (procesador de texto), para calcular (calculadora), otros para ver/escuchar multimedia (reproductores) y así podríamos continuar mencionando varios (y seguramente no terminaríamos nunca). Así podemos ver que cada programa cumple una tarea específica, en el procesador de texto no se puede jugar ni tampoco ver un video de YouTube. Podríamos decir entonces que cada programa resuelve algún problema en particular y como los problemas del mundo tienden al infinito, por tautología, tendríamos que la variedad de programas es prácticamente inacabable. <abbr title="creo...">Lógicamente</abbr>, esto es directamente proporcional con la dificultad para escribir un programa. Hacer que un programa te pregunte el nombre y luego te salude debería ser <strong>bastante más simple</strong> que un programa que muestre dos ejércitos enfrentándose entre sí mientras esquivan una lluvia de flechas ardiendo por el ejército enemigo y fuego que es escupido por dragones que zurcan un estrellado cielo con 3 lunas.</p>
<p><span id="more-2620"></span></p>
<div id="attachment_2638" class="wp-caption aligncenter" style="width: 609px"><a title="Zsuzsanna Kilián" href="http://www.sxc.hu/photo/1177309"><img class="size-full wp-image-2638" title="Keyboard" src="http://www.glatelier.org/wp-content/uploads/2009/06/keyboard.png" alt="nkzs | stock.xchng" width="599" height="227" /></a><p class="wp-caption-text">nkzs | stock.xchng</p></div>
<p>Para lograr esto, debemos decirle al computador <em>qué</em>, <em>cómo</em> y <em>cuándo</em> realiza una determinada tarea. El computador <strong>no</strong> &#8220;piensa&#8221; <abbr title="aún... ¡afortunadamente!">por sí mismo</abbr> por lo que es mi tarea como <abbr title="ya quisieras...">programador</abbr> darle las instrucciones adecuadas. Por último, un programa no hace más que decirle al computador como recibir una entrada de datos (generalmente por parte del que utiliza la aplicación), manipularla y escupirla de vuelta, idealmente de una manera comprensible para un ser humano común y corriente. WordPress por ejemplo, recibe de entrada las teclas que yo presiono (<em>input</em>), lo manipula dándole formato y luego lo entrega en un texto <abbr title="¿?">comprensible</abbr> para ustedes (espero).</p>
<h2>¿Difícil? Nahh&#8230; sólo dame un minuto más</h2>
<p>Wallace Wang en <a title="A reference for the rest of us!" href="http://www.dummies.com/store/product/Beginning-Programming-For-Dummies-4th-Edition.productCd-0470088702.html" target="_blank">Beginning Programming for Dummies</a> (¡gracias por tan buen libro!) dice que programar no es precisamente difícil, sino más bien consume mucho tiempo. Básicamente, si eres capaz de dar instrucciones escritas de como llegar a tu casa o como preparar un queque deberías ser capaz de escribir un programa.</p>
<ol>
<li>Mezclar azúcar y mantequilla hasta que quede una sustancia cremosa</li>
<li>Agregar 3 huevos</li>
<li>Mezclar y agregar 2 tazas de harina</li>
<li>Cocinar en un horno a llama baja por 45 minutos</li>
</ol>
<p><a href="http://www.sxc.hu/photo/1170293" target="_blank"><img class="alignright size-full wp-image-2637" title="Recipe" src="http://www.glatelier.org/wp-content/uploads/2009/06/recipe.png" alt="Recipe" width="290" height="232" /></a>Por muy razonablemente claras sean estas instrucciones (si sé que faltaron pasos), tenemos que recordar que el computador hace exactamente lo que le pidamos -ni más, ni menos- por lo que es más bien estúpido (por cierto, diría que esta es la primera premisa que deberías asimilar). Al tratar de ingresar esas instrucciones se detendrá y nos preguntará:</p>
<ol>
<li>¿Dónde está el ázucar y la mantequilla? ¿Cuánto tiempo se debe batir? *cof* ¿qué significa batir? ¿qué tan cremosa debe ser la sustancia?</li>
<li>¿Dónde están los huevos? ¿se ponen enteros o se deben romper antes?</li>
<li>¿Dónde está la harina? ¿qué tan llenas deben estar las tazas?</li>
<li>¿Qué tipo de horno? ¿qué significa <em>llama baja</em>?</li>
</ol>
<p>Como se pueden dar cuenta, la programación puede ser sumamente frustrante, por lo que deberíamos recordar que es aún más básico que intentar hacer entender a un niño que tiene (o no tiene) que hacer. Sencillamente, al menos que explicites precisamente lo que quieres, el equipo lisa y llanamente <strong>no</strong> hará lo que le solicitaste.</p>
<p>Para cerrar esta introducción diría que la mejor manera de enfrentar la difícil tarea de escribir un programa, es dividir el <em>gran problema</em> en problemas más pequeños. No sólo para ahorrar tiempo, sino también por sanidad mental.</p>
<p>En la <a title="GNU/Linux Atelier - Programacion para Newbies III - Lenguajes... ¿Qué son?" href="http://www.glatelier.org/2009/06/13/programacion-para-newbies-iii-lenguajes-que-son/" target="_blank">siguiente</a> parte revisaremos un concepto muy utilizado, el de los lenguajes de programación (¡tema que me gusta en particular!).</p>
<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.glatelier.org/2009/06/programacion-para-newbies-parte-ii-introduccion/" data-text="Programación para Newbies II: Introducción" data-count="horizontal">Tweet</a><p><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2009%2F06%2Fprogramacion-para-newbies-parte-ii-introduccion%2F&amp;linkname=Programaci%C3%B3n%20para%20Newbies%20II%3A%20Introducci%C3%B3n" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2009%2F06%2Fprogramacion-para-newbies-parte-ii-introduccion%2F&amp;linkname=Programaci%C3%B3n%20para%20Newbies%20II%3A%20Introducci%C3%B3n" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2009%2F06%2Fprogramacion-para-newbies-parte-ii-introduccion%2F&amp;linkname=Programaci%C3%B3n%20para%20Newbies%20II%3A%20Introducci%C3%B3n" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2009%2F06%2Fprogramacion-para-newbies-parte-ii-introduccion%2F&amp;linkname=Programaci%C3%B3n%20para%20Newbies%20II%3A%20Introducci%C3%B3n" title="Digg" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_meneame" href="http://www.addtoany.com/add_to/meneame?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2009%2F06%2Fprogramacion-para-newbies-parte-ii-introduccion%2F&amp;linkname=Programaci%C3%B3n%20para%20Newbies%20II%3A%20Introducci%C3%B3n" title="Meneame" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/meneame.png" width="16" height="16" alt="Meneame"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2009%2F06%2Fprogramacion-para-newbies-parte-ii-introduccion%2F&amp;linkname=Programaci%C3%B3n%20para%20Newbies%20II%3A%20Introducci%C3%B3n" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_button_tumblr" href="http://www.addtoany.com/add_to/tumblr?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2009%2F06%2Fprogramacion-para-newbies-parte-ii-introduccion%2F&amp;linkname=Programaci%C3%B3n%20para%20Newbies%20II%3A%20Introducci%C3%B3n" title="Tumblr" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/tumblr.png" width="16" height="16" alt="Tumblr"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.glatelier.org%2F2009%2F06%2Fprogramacion-para-newbies-parte-ii-introduccion%2F&amp;title=Programaci%C3%B3n%20para%20Newbies%20II%3A%20Introducci%C3%B3n" id="wpa2a_4">Compartir</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.glatelier.org/2009/06/programacion-para-newbies-parte-ii-introduccion/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

