<?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>Gustavo Villavizar &#187; Top</title>
	<atom:link href="http://villavizar.com/category/top/feed/" rel="self" type="application/rss+xml" />
	<link>http://villavizar.com</link>
	<description>Life of a Webmaster</description>
	<lastBuildDate>Fri, 02 Jul 2010 12:23:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>[Top 10+6] cosas que molestan a un programador</title>
		<link>http://villavizar.com/programacion/top-106-cosas-que-molestan-a-un-programador/</link>
		<comments>http://villavizar.com/programacion/top-106-cosas-que-molestan-a-un-programador/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 17:33:59 +0000</pubDate>
		<dc:creator>Gustavo Villavizar</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Top]]></category>

		<guid isPermaLink="false">http://villavizar.com/?p=222</guid>
		<description><![CDATA[Ayer leía con una sonrisa en mi rostro un tema escrito por Keving William Pang llamado &#8220;Top 10 Things That Annoy a Programmer&#8221; y aunque estoy 100% de acuerdo con el, creo que solo 10 cosas no son suficientes, así que aquí van las 10 cosas que según él molestan a un programador (traducidas por [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fvillavizar.com%2Fprogramacion%2Ftop-106-cosas-que-molestan-a-un-programador%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fvillavizar.com%2Fprogramacion%2Ftop-106-cosas-que-molestan-a-un-programador%2F&amp;source=gvillavizar&amp;style=normal&amp;service=bit.ly&amp;hashtags=Programaci%C3%B3n" height="61" width="50" /><br />
			</a>
		</div>
<p>Ayer leía con una sonrisa en mi rostro un tema escrito por <strong>Keving William Pan</strong><strong>g</strong> llamado &#8220;<a href="http://www.kevinwilliampang.com/2008/08/28/top-10-things-that-annoy-programmers/" target="_blank">Top 10 Things That Annoy a Programmer</a>&#8221; y aunque estoy 100% de acuerdo con el, creo que solo 10 cosas no son suficientes, así que aquí van las 10 cosas que según él molestan a un programador (traducidas por mi) y luego MIS 10 cosas que molestan a un programador.<br />
<span id="more-222"></span></p>
<h2>10. Comentarios que explican el &#8220;cómo&#8221; pero no el &#8220;porqué&#8221;</h2>
<p>Esto es típico, estamos programando en el código de otro y nos encontramos con esto:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">r <span style="color: #339933;">=</span> n <span style="color: #339933;">/</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Set r to n divided by 2</span>
<span style="color: #666666; font-style: italic;">// Loop while r - (n/r) is greater than t</span>
<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">abs</span><span style="color: #009900;">&#40;</span> r <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span>n<span style="color: #339933;">/</span>r<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> t <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
r <span style="color: #339933;">=</span> <span style="color:#800080;">0.5</span> <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span> r <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>n<span style="color: #339933;">/</span>r<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Set r to half of r + (n/r)</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Y el principal problema con esto es que yo entiendo lo que hace el código, si estoy trabajando con tu código es porque sé cómo funciona un while(), lo que no entiendo (y necesito entender) es con qué objetivo usaste un while en esta parte del programa. A veces cuando comentamos no nos detenemos a pensar la relevancia del comentario, sino que como está comentado ya estamos cumpliendo, tomen por ejemplo el código anterior, cambiemos el comentario y veamos si entendemos algo.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// square root of n with Newton-Raphson approximation</span>
r <span style="color: #339933;">=</span> n <span style="color: #339933;">/</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">abs</span><span style="color: #009900;">&#40;</span> r <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span>n<span style="color: #339933;">/</span>r<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> t <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    r <span style="color: #339933;">=</span> <span style="color:#800080;">0.5</span> <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span> r <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>n<span style="color: #339933;">/</span>r<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Ok, para muchos seguirá siendo incomplensible, pero para un programador al menos nos pone en el camino correcto de qué hace este bloque de código. Es una de las peores cosas de trabajar con el código de otro.</p>
<h2>9. Interrupciones</h2>
<p>Muy pocos programadores pueden ir de 0 a código en un instante. Por lo general un programador toma tiempo para introducirse en el código, pero una vez que lo hacemos podemos escribir miles y miles de líneas de código semánticas sin detenernos. Desafortunadamente es muy dificil entrar en la zona de programación cuando estamos siendo constantemente distraídos por clientes, compañeros de trabajo o jefes todo el tiempo, incluso otros programadores.</p>
<p>Algo que aprendí en mi trabajo en <a href="http://www.comunique.com.do" target="_blank">comuniQue </a>es que lo mejor para programar definitivamente es desconectarse del resto del mundo.</p>
<p>Mientras programamos debemos manejar demasiada información en nuestra mente, es decir, antes de comenzar debemos tener una visión del objetivo final y luego separar ese objetivo en partes y trabajar en pequeñas porciones, pero cada porción debe ir de la mano con las demás para que mantengan concordancia. Esto es algo dificil de entender para la mayoría de los no-programadores. Las distracciones nos sacan de nuestra área y generalmente toma demasiado tiempo volver a ella.</p>
<h2>8. Scope creep</h2>
<p>Desde <a href="http://en.wikipedia.org/wiki/Scope_creep" target="_blank">Wikipedia</a>:</p>
<blockquote><p>Scope creep (also called focus creep, requirement creep, feature creep, and sometimes kitchen sink syndrome) in project management refers to uncontrolled changes in a project’s scope. This phenomenon can occur when the scope of a project is not properly defined, documented, or controlled. It is generally considered a negative occurrence that is to be avoided.</p></blockquote>
<p>No tengo mucho que decir de esto, solo pensarlo me pone los nervios de punta&#8230;pero miremos un ejemplo práctico que Kevin da:</p>
<ul>
<li>Versión 1: Mostrar un mapa de la ubicación</li>
<li>Versión 2: Mostrar un mapa <strong>3D</strong> de la ubicación</li>
<li>Versión 3: Mostrar un mapa <strong>3D</strong> de la ubicación <strong>en la que el usuario pueda navegar</strong></li>
</ul>
<p>Así de sencillo un requerimiento que en el primer planteamiento fue relativamente sencillo y de unas pocas horas de integración se convirtió en un total dolor de cabeza para cualquier programador. Este tipo de &#8220;adiciones&#8221; a un requerimiento generalmente ocurren <em>durante</em> el desarrollo y esto requiere reescribir, reestructurar y a veces votar porciones de código que previamente teníamos.</p>
<h2>7. Gerencia que no entiende de programación</h2>
<p>Resumiendo: Cuando la gerencia no conoce ni los conceptos básicos de nuestro trabajo, terminamos con Scope Creep, deadlines irrealistas y en general frustración de ambos lados de la mesa. Esta es una queja común entre programadores y la fuente de mucho enojo.</p>
<h2>6. Documentar nuestras aplicaciones</h2>
<p>Ok, desde siempre se nos ha dicho que debemos documentar todas nuestras aplicaciones, pero es un dolor en el @$$, miren todos los programas open source que hay en internet, qué es lo que normalmente buscan cuando alguien se ofrece a ayudar&#8230;&#8221;escribir la documentación&#8221;.</p>
<p>La causa de esto es simple, para cualquiera que esté en este trabajo es porque <strong>disfruta</strong> este trabajo. Siendo realistas, nadie escribiría 3786 lineas de código de no disfrutarlo. Documentar no es parte de nuestro trabajo, estamos a gusto escribiendo código que solo unos pocos entienden, pero la verdad carecemos de la capacidad de escribir una documentación que cualquiera pueda entender&#8230;a la hora de escribir documentación <strong>no podría hacerlo alguien más</strong>?</p>
<h2>5. Aplicaciones sin documentación</h2>
<p>Si, es una contradicción completa al punto anterior, estamos de acuerdo en que <strong>odiamos documentar</strong>, pero eso no significa que no la necesitemos.</p>
<h2>4. Hardware</h2>
<p>Es un error común el creer que solo porque somos programadores podemos reparar una computadora que no sube, una impresora que no imprime o una máquina que no tiene acceso al servidor. En muchos casos es cierto, pero en muchos otros no. Los no-programadores o en este caso no-informáticos en general tienden a creer que cualquiera que trabaje con algo relacionado a las computadoras debe saber repararlas, y esto no es cierto.</p>
<p>Un programador solo desea que las cosas funcionen  como deben de funcionar para que podamos seguir con nuestro trabajo. Esto pasa en compañías que tienen programadores pero no tienen nadie encargado de TI, así que en muchas ocasiones el programador debe dejar de programar y pararse a ayudar a un vendedor que no puede abrir una presentación de powerpoint en su pc, siendo que la presentación es para 2007 y la pc tiene 2003&#8230;y eso, eso <strong>es frustrante</strong>!</p>
<h2>3. Vaguedad</h2>
<p>Antes que todo si, <a href="http://buscon.rae.es/draeI/SrvltConsulta?TIPO_BUS=3&amp;LEMA=vaguedad" target="_blank">la palabra existe</a>.</p>
<p>Ahora al punto, &#8220;el website no funciona&#8221;, &#8220;no puedo loguearme&#8221;. Es un caos trabajar con requerimientos vagos. Es sorprendente ver como los no-programadores se ponen cuando se les pide que reproduzcan el error para el programador. Parecen no entender que &#8220;está dañado, repáralo&#8221; no es suficiente información para resolverlo.</p>
<p>Por eso muchas veces se dice &#8220;intenté reproducir el error y no logré hacerlo, por tanto, <strong>todo está funcionando correctamente</strong>&#8220;, esto no significa que el programador sea vago, significa que necesitamos saber el navegador, el sistema operativo, la velocidad de conexión, los datos que se estaban introduciendo, desde donde y hacia donde se dirigía cuando surgió el problema, si los CAPS Lock estaban activados o no, si el teclado es en inglés o en español&#8230;todo esto es necesario para poder encontrar y reparar un error.</p>
<h2>2. Otros programadores</h2>
<p>No comentarios en este punto&#8230;el título es muy obvio.</p>
<h2>1. El código propio, 6 meses después</h2>
<p>Para un no-programador puede ser dificil entender este punto, pero la base de un buen programador es la evolución constante. Un programador que no evolucione en 6 meses ya no puede llamarse a si mismo programador.</p>
<p>Lo cierto es que cada vez que tenemos que volver a trabajar en una aplicación que hicimos hace 6 meses o un año, muchas veces preferimos escribir el código desde 0. Esto no es malo, es solo que a un programador le cuesta mucho seguir las malas prácticas, la tecnología y la programación como tal evolucionan, la forma de hacer algo hoy es mucho más sencilla que la forma de hacer eso mismo hace 6 meses, por tanto es repulsivo tener que trabajar con un código no óptimo.</p>
<p>Les pongo un simple ejemplo, en cierto proyecto necesitaba mostrar una fecha en español desde la base de datos. Este fue el primer código que usé:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$fecha</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; &quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$item</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'fecha'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$date</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;-&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$fecha</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$time</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;:&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$fecha</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$dia</span> <span style="color: #339933;">=</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;l&quot;</span><span style="color: #339933;">,</span> <span style="color: #990000;">mktime</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$time</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$time</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$time</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$date</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$date</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$date</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$search</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Sunday&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Monday&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Tuesday&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Wednesday&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Thursday&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Friday&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Saturday&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$replace</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Domingo&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Lunes&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Martes&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Miércoles&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Jueves&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Viernes&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Sábado&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$dia</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$search</span><span style="color: #339933;">,</span><span style="color: #000088;">$replace</span><span style="color: #339933;">,</span><span style="color: #000088;">$dia</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$mes</span> <span style="color: #339933;">=</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;M&quot;</span><span style="color: #339933;">,</span> <span style="color: #990000;">mktime</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$time</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$time</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$time</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$date</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$date</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$date</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$search2</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Jan&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Apr&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Aug&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$replace2</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Ene&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Abr&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Ago&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$mes</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$search2</span><span style="color: #339933;">,</span><span style="color: #000088;">$replace2</span><span style="color: #339933;">,</span><span style="color: #000088;">$mes</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$meridiano</span> <span style="color: #339933;">=</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;a&quot;</span><span style="color: #339933;">,</span> <span style="color: #990000;">mktime</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$time</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$time</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$time</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$date</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$date</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$date</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Rústico si, pero funcionó bastante bien. Luego perfeccioné ese código, en un nuevo proyecto descubrí que puedo lograr el mismo resultado con el siguiente código:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">setlocale</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'es_ES'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">strftime</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'%A %d de %b del %Y a las %X'</span><span style="color: #339933;">,</span><span style="color: #990000;">strtotime</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'fecha'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Cool eh? Acabo de convertir 12 líneas de código en 2&#8230;imagínen mi impresión cuando tuve que volver a trabajar con el primer proyecto y me encontré con ese código&#8230;qué creen que hice, lo dejé tal cual y resolví el asunto o lo cambié por el nuevo código? Por supuesto que lo cambié, si no lo hubiera hecho no habría podido dormir esa noche (si, así de grave es mi caso), en este caso no vale eso de que si no está roto no lo arregles, porque desde el punto de vista de un programador <strong>SI ESTA ROTO</strong>.</p>
<p>Estas son las 10 cosas que molestan a un programador según <a href="http://www.kevinwilliampang.com/">Kevin William Pang</a>, ahora les expreso otras 6 cosas que molestan a un programador según <strong>Gustavo Villavizar</strong>.</p>
<h2>6. La superposición del cliente</h2>
<p>La superposición del cliente indica cuando un cliente solicita un nuevo feature a una aplicación, el contacto del cliente le dice &#8220;Ok&#8221;. Esa persona no hace preguntas, no sabe hacerlas, por tanto le queda al programador la tarea de realizar ese requerimiento sin importar si conviene o no, si es factible, si es posible, pero hay que hacerlo porque ya se le dijo al cliente que si.</p>
<h2>5. Trabajar con el código de otro</h2>
<p>Este caso indica una relación entre varios puntos que he mencionado antes&#8230;es dificil trabajar con el código de otro.</p>
<h2>4. Demasiados nodos en la cadena</h2>
<p>Esto es demasiado común. Cuando hay muchos intermediarios entre el cliente y el programador se hace mucho más dificil desarrollar los requerimientos del cliente. El cliente hace un requerimiento, tarda mucho tiempo en llegar al programador y si el programador lo rechaza tarda mucho en llegar de nuevo al cliente, en esta etapa el cliente entiende que al haber pasado tanto tiempo su requerimiento fue aceptado y que se está trabajando en eso, es problemático cuando se le cambia la idea al cliente con la respuesta del programador.</p>
<h2>3. Gente que cree que sabe programar</h2>
<p>Un ingeniero de sistemas graduado en 1993, un programador de Cobold, un programador de aplicaciones Win32 que creen que saben cómo programar para web&#8230;¡esto es fatal! Por favor entiéndelo, Windows y la Web no funcionan igual.No eres programador web así que deja de pensar que entiendes mi trabajo o pero aún, que sabes más que yo del mismo.</p>
<p>Esta es una de las principales razones por las cuales un programador independiente rechaza un proyecto luego de haberlo iniciado, no es por falta de responsabilidad, es que se vuelve imposible trabajar así.</p>
<h2>2. Clientes que lidian con términos complejos de los cuales no entienden</h2>
<p>A veces, cuando las estrellas se alínean, algún no-programador lee un post sobre programación o escucha una conferencia y aprende términos nuevos, y los quieren usar.</p>
<p>Cuando te piden un proyecto minimalista como el website de Apple, generalmente quieren una página con fondo blanco y muchas imágenes. Cuando te piden que el proyecto tenga la tendencia KISS pero que tenga 13 mil features, cuando te piden que la página sea fácil de usar pero que tenga comunicación de marca, etc.</p>
<h2>1. Cuando creen que el programador también es diseñador y hasta copywriter</h2>
<p>¿Alguien se siente identificado con esto? El cliente hace un requerimiento y el programador debe realizarlo, integrarlo con el diseño y escribir el texto correcto en el website&#8230;cuesta trabajo decirle a un cliente que somos programadores, no diseñadores ni copywriters, y peor aún es cuando se lo has dicho en los dos requerimientos anteriores y en este tienes que repetirselo.</p>
<p>Leyendo todo el post nuevamente parece una especie de rabieta, pero estoy seguro de que mis colegas programadores y algunos no-programadores se sentirán identificados con algunos de los puntos que expreso en esta entrada.</p>
<p>Si olvidé alguno, son bienvenidos a expresarlos en los comentarios.</p>
<img src="http://villavizar.com/?ak_action=api_record_view&id=222&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://villavizar.com/programacion/top-106-cosas-que-molestan-a-un-programador/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>[Top 5] Cosas que un website corporativo debe tener</title>
		<link>http://villavizar.com/top/top-5-cosas-que-un-website-corporativo-debe-tener/</link>
		<comments>http://villavizar.com/top/top-5-cosas-que-un-website-corporativo-debe-tener/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 14:33:43 +0000</pubDate>
		<dc:creator>Gustavo Villavizar</dc:creator>
				<category><![CDATA[Top]]></category>

		<guid isPermaLink="false">http://villavizar.com/index.php/?p=43</guid>
		<description><![CDATA[Hace poco tuve una reunión con un cliente donde me definieron lo que querían lograr con su página web. Lo que pude ver fue muy agradable, me di cuenta de que realmente quieren sacarle provecho a su página web (en contraste con lo que tenían anteriormente en una página meramente informativa). Generalmente los website &#8220;corporativos&#8221; [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fvillavizar.com%2Ftop%2Ftop-5-cosas-que-un-website-corporativo-debe-tener%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fvillavizar.com%2Ftop%2Ftop-5-cosas-que-un-website-corporativo-debe-tener%2F&amp;source=gvillavizar&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Hace poco tuve una reunión con un cliente donde me definieron lo que querían lograr con su página web. Lo que pude ver fue muy agradable, me di cuenta de que realmente quieren sacarle provecho a su página web (en contraste con lo que tenían anteriormente en una página meramente informativa).</p>
<p>Generalmente los website &#8220;corporativos&#8221; se caracterizan por transmitir la imágen de la empresa, pero muy a menudo pierden algo fundamental, y es la usabilidad. Muchas veces he visto en websites corporativos donde la mayor interactividad que el usuario tiene con la página es llenar un formulario de contacto.</p>
<p>He recopilado una serie de cosas que, a mi entender, un website corporativo <strong>debe</strong> tener para que pueda servir de algo para el cliente de la empresa.<br />
<span id="more-43"></span></p>
<p><strong>1. Sección de Noticias</strong><br />
Cuando visito un website corporativo, quiero ver si la empresa todavía está viva, es decir, quiero saber qué ha estado haciendo la empresa en el ámbito corporativo, si ha crecido, si ha participado en eventos, si ha realizado mejoras en sus actividades, etc.</p>
<p>Pero no basta con tener una sección de noticias y listo. Esta sección debe serme útil, debe ofrecerme opciones que vayan más allá de solo leer las noticias.</p>
<div><img class="alignnone" src="http://villavizar.com/wp-content/uploads/2008/09/untitled-1.jpg" alt="" width="500" height="129" /><br />
<small><em>El sistema de noticias de <a href="http://www.bnet.com" target="_blank"><strong>BNET</strong></a> te permite descargar la noticia en formato PDF, enviarla<br />
por email, compartir la noticia, imprimirla, recomendar la noticia o votar por ella.</em></small></div>
<p>Esta es una de las razones por las que muchas compañías escojen un blog frente a un sistema de noticias para manejar las de su empresa.</p>
<p><strong>2. Listado de sus clientes</strong><br />
Esta es un arma de doble filo, pero que no debe quedarse fuera de un website corporativo. La empresa debe demostrar que está orgullosa de sus clientes y que tiene clientes en primer lugar. Al enlistar sus clientes, una empresa demuestra que son confiables, que tienen calidad y que tienen profesionalidad, mientras más grande el cliente mejor.</p>
<p>Lo malo de esta parte es que a menudo las empresas deciden listar en sus páginas únicamente a aquellos clientes grandes que puedan darle representación. Pero sus clientes medianos y pequeños se sienten como si la compañía los considerara insuficientes para ser listados en el website de la empresa cuyo servicio contrataron.</p>
<p>Otro problema de mencionar solo los clientes grandes, es que cuando un cliente mediano o pequeño ve la lista de clientes, a veces duda siquiera de contactar con la empresa pues siente que no posee el perfil adecuado para contratar esta compañía. Ejemplo; un cliente que requiera de un pack de íconos para su nueva aplicación no contactaría al diseñador que solo muestra en su portafolios trabajos para Apple, Microsoft, Dell, etc. Simplemente busca algo un poco más cercano a su budget sin siquiera preguntar por precios o paquetes.</p>
<div><a href="http://yellowicon.com/services/clients" target="_blank"><img src="http://villavizar.com/wp-content/uploads/2008/09/untitled-11.jpg" alt="" width="500" height="129" /></a><br />
<small><em><a href="http://yellowicon.com/services/clients" target="_blank"><strong>Yellow Icon</strong></a> muestra por orden alfabético a todos sus clientes,<br />
sin importar que tan grandes o pequeños sean.</em></small></div>
<p>Es importante mencionar todos los clientes ya sean grandes y pequeños, o al menos una buena cantidad de cada uno.</p>
<p><strong>3. Equipo</strong><br />
La mayoría de las empresas (por no decir todas) dicen en sus textos que su equipo es una parte vital de la empresa y lo orgulloso que están de ellos, sin embargo muy pocos tienen una página dedicada a su equipo.</p>
<p>Las personas contratan personas, no contratan computadoras, por esto, es bueno que las personas sepan a quiénes están contratando.</p>
<p>Puede ser solamente una foto del equipo, una foto acompañada del nombre, una pequeña &#8220;bio&#8221; de cada empleado o ir mucho más allá y poner un link a la página personal del empleado, la forma de incluirlo dependerá de la empresa, pero siempre es bueno saber a quién se debe admirar o aborrecer por las acciones de la compañía.</p>
<div><a href="http://www.dellustrations.com/" target="_blank"><img src="http://villavizar.com/wp-content/uploads/2008/09/untitled-1.gif" alt="" width="500" height="278" /></a><br />
<small><em><a href="http://www.dellustrations.com/" target="_blank"><strong>Dellustrations</strong></a> incluye una página entera dedicada a su equipo e incluso van más allá<br />
y ponen links al perfil de LinkedIn de cada uno cuando aplica.</em></small></p>
<div><strong><br />
4. Historia<br />
</strong>Todo website corporativo debería incluir una historia de la trayectoria de la empresa. Nos gustan las personas emprendedoras, no es malo mostrar que la empresa ha fallado en algún momento pero que ha aprendido de sus errores y ha seguido adelante. No importa que tan corta o larga sea la historia (mientras esté bien segmentada), quiero saber desde cuándo ha estado ahí la empresa para poder determinar si seguirá ahí siempre que la necesite.</p>
<div><a href="http://www.duarte.com/" target="_blank"><img style="border: 1px solid black;" src="http://villavizar.com/wp-content/uploads/2008/09/untitled-11.gif" alt="" width="500" height="203" /></a><br />
<small><em><a href="http://www.duarte.com/" target="_blank"><strong>Duarte</strong></a> tiene una hoja de historia bastante completa con fotos de<br />
todas las eras de la compañía.</em></small></div>
</div>
</div>
<p><strong><br />
5. Definiciones</strong><br />
Algo que me parece curioso es que la mayoría de las empresas se dirígen directamente a un público que entiende lo que se está vendiendo.</p>
<p>Considero que al momento de enlistar los servicios o productos que ofrece una página, es vital incluir una pequeña definición de dicho producto o servicio para aclarar al cliente sobre cualquier duda que pueda surgir. A veces navegamos por una página pero no sabemos todo lo que hace la compañía, a lo mejor lo que la compañía me vende es justo lo que yo necesito, pero no tengo el conocimiento para entender que lo que me venden es lo que estoy necesitando.</p>
<div><a href="http://www.comunique.com.do/" target="_blank"><img style="border: 1px solid black;" src="http://villavizar.com/wp-content/uploads/2008/09/untitled-12.gif" alt="" width="500" height="184" /></a><br />
<small><em><strong><a href="http://www.comunique.com.do/" target="_blank">comuniQue</a></strong> ofrece definiciones claras y precisas sobre<br />
cada uno de los servicios que ofrece en su web.</em></small></div>
<p>Al final cada website corporativo debe ser único, pero aún así hay prácticas que cada uno debe emplear para que su negocio pueda ser confiable y rentable. Quiero aclarar que los conceptos emitidos en este post son de mi criterio personal, un website puede ser usable sin necesidad de estos elementos, pero los considero factores clave para que la empresa transmita una mejor imágen de si mismo.</p>
<img src="http://villavizar.com/?ak_action=api_record_view&id=43&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://villavizar.com/top/top-5-cosas-que-un-website-corporativo-debe-tener/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>[Top 5] Razones por las que no usar intros en flash</title>
		<link>http://villavizar.com/top/top-5-razones-por-las-que-no-usar-intros-en-flash/</link>
		<comments>http://villavizar.com/top/top-5-razones-por-las-que-no-usar-intros-en-flash/#comments</comments>
		<pubDate>Thu, 14 Aug 2008 13:41:37 +0000</pubDate>
		<dc:creator>Gustavo Villavizar</dc:creator>
				<category><![CDATA[Top]]></category>
		<category><![CDATA[flash]]></category>

		<guid isPermaLink="false">http://villavizar.com/index.php/?p=11</guid>
		<description><![CDATA[Con el trabajo de un proyecto (que por cierto aún no puedo mostrar), el cliente pidió un intro en flash para su página. Le recomendé que no lo hiciera, que ya no se usaban, que eran molestos, etc&#8230;pero el cliente lo quería&#8230; A continuación doy 5 razones por las que no usar intros en flash. [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fvillavizar.com%2Ftop%2Ftop-5-razones-por-las-que-no-usar-intros-en-flash%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fvillavizar.com%2Ftop%2Ftop-5-razones-por-las-que-no-usar-intros-en-flash%2F&amp;source=gvillavizar&amp;style=normal&amp;service=bit.ly&amp;hashtags=flash" height="61" width="50" /><br />
			</a>
		</div>
<p>Con el trabajo de un proyecto (que por cierto aún no puedo mostrar), el cliente pidió un intro en flash para su página. Le recomendé que no lo hiciera, que ya no se usaban, que eran molestos, etc&#8230;pero el cliente lo quería&#8230;</p>
<p>A continuación doy 5 razones por las que no usar intros en flash.</p>
<p><strong>5. Mucho tiempo de espera</strong></p>
<p>Un problema de los intros en flash es que nos obligan a ver una animación que no nos interesa en un tiempo que para nosotros es valioso. Recordemos que lo importante es captar la atención del usuario en un lapso de 30 segundos&#8230;¿cómo podemos captar la atención de los usuarios si no les mostramos algo que desean ver durante 30 o 45 segundos que dura una animación?</p>
<p>Claro, podemos poner un botón para &#8220;saltar intro&#8221; pero entonces <em>¿para qué es el flash?</em></p>
<p>Y quiero hacer énfasis en este punto. Para que la animación pueda verse satisfactoriamente, es necesario una muy buena conexión a internet o en su defecto que el flash cargue toooodo lo que va a utilizar antes de empezar a correr. Esto suma tiempo a la duración de la animación, así que imagínense tener que esperar 1 ó 2 minutos a que cargue una animación de 30 segundos que tampoco me es útil.</p>
<p><strong>4. No distinguen las necesidades del usuario<br />
</strong></p>
<p>Imagínese entrar a <a href="http://amazon.com">amazon.com</a> a comprar un nuevo libro y tener que soportar un flash con los productos de oferta del momento (laptops de $900 dólares, televisores de $700 dólares, etc.). Esto no es lo que yo busco, yo tengo un interés y quiero llegar a la información que busco cuanto antes. Si quieren mostrarme las ofertas del momento, pongan los anuncios en la página que yo entré a ver (en este caso los libros).</p>
<p><strong>3. No representan los gustos del usuario<br />
</strong></p>
<p>Si su website es sobre animales, la única forma de llamar la atención de sus usuarios es incluir todos los animales que tiene en la animación, pero esto aumenta el tiempo del flash. Puede incluir algún animal en específico, pero de nuevo, esto no es lo que estoy buscando. En este sentido, es necesario poner algo que les llegue a todo el mundo o algo que definitivamente solo le llegará a unos pocos.</p>
<p><strong>2. Siguen solo un estilo de animación</strong></p>
<p>Hay diversas formas de animar un intro. Pueden hacerlo al estilo <a href="http://www.jumbo.com.do">Jumbo</a> (rapido y radical), al estilo <a href="http://www.provaltur.com">Provaltur</a> (lento y suave), etc. El problema es que cada usuario tiene gustos muy específicos en cuanto a esto. Un website <strong>no debe discriminar a sus usuarios</strong>.</p>
<p><strong>1. Mucha repetición</strong></p>
<p>Dado el hipotético caso de que el flash no cumpla con los 4 requisitos que mencioné anteriormente, he aquí uno que no se escapa a ningún intro en flash del internet. <strong>La repecitión</strong>. Solo es interesante la primera vez que lo vemos, luego se convierte en un click extra para ver lo que queremos ver. El usuario se cansa de tener que ver el mismo flash cada vez que entra, claro, podemos poner un botón para &#8220;Saltar Intro&#8221; pero repito, entonces <em>¿para qué es el flash?</em></p>
<p>¿Qué hay de ustedes? ¿Tienen alguna otra razón por las que no se deben usar intros en flash? De su parte ¿qué es lo que realmente opinan de esta tendencia que, gracias a Dios, se está quedando en el pasado?</p>
<img src="http://villavizar.com/?ak_action=api_record_view&id=11&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://villavizar.com/top/top-5-razones-por-las-que-no-usar-intros-en-flash/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
