@ agnasg

agnasg


Flow (flujo)

16-03-2007 10:05 AM

Los psicólogos han identificado un estado de la mente llamado flow (flujo) en el cual somos capaces de increible concentración y productividad. La importancia del flow para la programación ha sido reconocida desde hace dos décadas, tal como se describe en el libro acerca de los factores humanos en la programación “Peopleware: Productive Projects and Teams by Tom DeMarco and Timothy Lister (Dorset House, 1987). Los dos factores más importantes acerca del flow son que toma alrededor de 15 minutos para lograr ese estado y que hasta la más mínima interrupción puede terminar el estado, requiriendo otros 15 minutos para volver nuevamente al flow. DeMarco y Lister, así como otros autores posteriores, se ocuparon principalmente de destructores del flow como llamadas teléfonicas y visitas inoportunas del jefe (para preguntar tonterías como ¿cómo va eso? (NT)). Menos frecuentemente considerado pero probablemente tan importante para los programadores son las interrupciones causadas por nuestras herramientas de trabajo. Lenguajes que requiere una compilación que tarda mucho puede ser perturbador del flow de la misma manera que un teléfono o un jefe ruidoso. Así, una manera de ver a Lisp (un lenguaje de programación que no requiere compilación) como un lenguaje diseñado para mantenerlo a Ud. en estado de flow.
(Psychologists have identified a state of mind called flow in which we’re capable of incredible concentration and productivity. The importance of flow to programming has been recognized for nearly two decades since it was discussed in the classic book about human factors in programming Peopleware: Productive Projects and Teams by Tom DeMarco and Timothy Lister (Dorset House, 1987). The two key facts about flow are that it takes around 15 minutes to get into a state of flow and that even brief interruptions can break you right out of it, requiring another 15-minute immersion to reenter. DeMarco and
Lister, like most subsequent authors, concerned themselves mostly with flow-destroying interruptions such as ringing telephones and inopportune visits from the boss. Less frequently considered but probably just as important to programmers are the interruptions caused by our tools. Languages that require, for instance, a lengthy compilation before you can try your latest code can be just as inimical to flow as a noisy phone or a nosy boss. So, one way to look at Lisp is as a language designed to keep you in a state of flow. (Tomado una nota al pie en el capítulo I de Practical Common Lisp))

En realidad y pensando detenidamente en esto, creo que yo tengo una larga lista de interruptores del flow adicional a la mencionada.

Un post que se hizo esperar

07-03-2007 9:14 AM

yahoo está presentando problemas (esta página está alojada en geocities) , así que esta es la tercera vez que escribo esto (tuve que usar gmail como mecanismo de almacenamiento temporal del post, al menos más seguro). Decía que estos días he estado muy ocupado (no voy a repetir por qué, es un cuento muy largo), así que no me he podido dedicar a lo importante: programar juegos, escribir y leer cuentos y aprender un nuevo lenguaje de programación. ¿Cómo? Estuve buscando quién fue el que dijo que todo buen programador debe aprender al menos un nuevo lenguaje de programación al año, pero no lo encontré. Otro axioma que se aplica a los programadores es que son resolvedores (esta es una palabra que acabo de inventar) de problemas natos. Ejemplo de esto último es este blog donde el comentarista menciona que es increíble cómo muchos supuestos programadores en realidad no saben programar, y dice para demostrarlo, que una prueba muy simple que le coloca los aspirantes al cargo de programador, el 70% o algo así es incapaz de hacerlo: el problema es, mis estimados y desocupados lectores el siguiente: escribir un programa que escriba los números del 1 al 100. Pero si el número es divisible entre 3, el programa debe escribir Fizz. Si el número es divisible entre 5 debe escribir Fuzz, pero si es divisible por ambos debe escribir FizzFuzz. El blog se llenó con cientos de comentarios (ver aqui) de reales programadores que resolvieron el problema en cualquier lenguaje de programación imaginable (conté docenas de soluciones en C, C++, php, lisp, assembler, etc). Yo hice mi versión en bash, uno de los lenguajes script de Unix. Ud. debe ser un programador si está leyendo esto (asumo), le invito a resolv
er este problema en su lenguaje de programación favorito. Una observación: Ud. no debería tomarse más de 5 minutos en hacerlo. Claro, quizás le dedique otros diez minutos a refinarlo, y ponerlo más elegante (cosa que yo estuve haciendo durante media hora).

Ya antes he hablado que he estado estudiando nuevas posibilidades de lenguajes funcionales para enriquecer el lenguaje de definición de aventuras conversacionales que en estos momentos (es un decir) estoy desarrollando. En uns cuantos nanosegundos descarté Haskel, y debido a esta discusión (common lisp, hmm, que raro, gmail group está presentando problemas 500 Internal error igual que yahoo… algo está pasando) giré mis ojos 45 grados hacia Lisp. Yo estudié por primera vez Lisp a los 20 años y algo. Me pareció demasiado recursivo, lo cual por aquella época me parecía malo, porque la primera vez un profesor nos explicó eso (el peor profesor que he conocido en toda mi vida) nos lo presentó como algo difícil de entender, cuando la realidad que es el concepto más simple que hay, la vida está llena de recursión. Inclusive, este comics de xkcd sugiere que Dios programó el universo en Lisp…).

Como quiera que sea, estoy comenzando a estudir Lisp nuevamente. Algo tendré que hacer con los paréntesis, el caracter más usado en todos los programas lisp, y justamente lo que me ha hecho correr despavorido todas las veces que he intentado acercarme a lisp (afortunamente hay cientos de caminos a Lisp). Ya hablaré algo sobre mis avances más adelante.

Enlaces que no se hacen esperar

Un mapa de ruta, una idea y un business case

13-02-2007 10:56 AM

I am going to be a game developer, even if it kills me.
-Chris Aardappel, Technical Agent, Intergalactic Crime Prevention Unit
“Yo voy a ser un programador de juegos, así sea me cueste la vida”
(… famosas últimas palabras)

Como ya estoy en las fases finales de desarrollo de mi aventura conversacional (conjuntamente con el interprete/parser que desarrollé) y es inminente su pase a betatesting, ya estoy pensando nuevamente hacia dónde apuntar mis energías de desarrollador de juego frustrado. Y un juego MMORPG me parece una formidable idea. De hecho he estado desarrollando una interfase. ¿Un cliente desarrollado en C++, tipo Eternal Lands? Nope. Totalmente DHTML-Javascript-PHP-Ajax. No me quiero ver envuelto nuevamente en un interminable desarrollo de 3 años que nunca termina. Pienso que un juego 100% browser es más inmediato, disponible, simpático, etc.. El último juego que atrapó durante 3 meses mi atención (antes de Aardwolf ) fue UrbanDead, un juego totalmente html-cgi-etc., tiene una base de 500 mil jugadores, asi que la idea no me parece descabellada. Por lo demás, ayer 12 de febrero de 2007 ingresaron 3 nuevos juegos MMORPG a la lista de MPOGD, así que el ambiente está bien activo para este tipo de juegos. Brandon Sheffield dice que hay algunos inversionistas dispuestos a disputarle el puesto a WOW en la escena de los MMO grandes ligas (6 millones de jugadores), lo cual implica una
inversión de 10-15 millones de $$$. Es decir, el negocio resulta atractivo, y hace sentido. La interfase (la que estoy dasarrollando, bozo) ya tiene listo un mapa que se mueve con el mouse, una ventana de chat para comunicación via comandos de texto con el juego y el resto de los jugadores, y un diseño de bases de datos. Originalmente estaba pensando en un juego de conquista-interplanetaria-y-guerra-económica, pero naah, me cansé de jugar juegos de estrategia. Además el tipo Marple Story, WOW, Guild Wars, parece ser el más popular. El contenido e idea del juego sería basado en mi ambiente de Nunsoot (el mismo donde se desarrolla la aventura conversacional que casi tengo lista), así que las razas, lenguajes, mitología, ambientación y argumentos están listos. ¿Es esto acaso algo así como un business case? Sí.

Enlaces en el orden en que presentan a las misses (en cualquier orden)

  • Un gráfico de uso de los distintos lenguajes de programación en Sourceforge.net. Mis 3 lenguajes favoritos, C, C++ y PHP aglutinan el 46% del uso, nada sorprendente. Java tiene un 18% y creciendo lentamente.
  • ¿Sabían Uds que aardwolf (mi MMORPG favorito en estos días) tiene 508 comandos disponibles, y que típicamente hay 300-350 jugadores conectados todo el tiempo, lo cual implica una base de jugadores activos de 6000-8000?
  • La historia de los lenguajes.
  • Siempre me han fascinado los países que están bajo un regimen totalitario. Albania fue uno, Cuba y Corea del Norte se mantienen así desde hace 60 años. Philippe Chancel tuvo la rara oportunidad de tomar algunas fotos de Corea del Norte, nada reveladoras de la tiranía a la que está sometido ese pueblo, pero que muestran el culto a la personalidad de un dictador. Luis XVI fue ejecutado hace 3 siglos por pretender que tenía derecho celestial a gobernar una nación como mejor le parecía, y hoy, en pleno siglo XXI, todavía hay naciones bajo el yugo de personas que piensan lo mismo.

Hay responsabilidades sin nombre

11-02-2007 12:29 PM

Hay responsabilidades sin nombre que ni siquiera reconocemos como tales. La responsabilidad de los recuerdos compartidos, por ejemplo. Adquirimos estos compromisos en una conversación, compartiendo un momento, mirando juntos por la ventana, asistiendo juntos a un evento, a un matrimonio, a un cumpleaños, a un velorio. Y ahi quedan. Y ahi están. Silenciosos. Como escondiéndose detrás de la puerta. Mirándonos de reojo, subrepticios, reticentes, abren la boca y se quedan callados. No nos dicen nada pero explotan como un día sin nubes cuando menos lo esperamos. Y nos abruma su presencia, su inocultable realidad. ¿Y cómo pudo suceder esto? ¿De dónde salieron estos recuerdos? Y como una deuda adquirida con descuido, nos negamos a reconocerlos. No son nuestros. Yo no estuve ahi. No era yo. Yo no quería, pero me obligaste. Si yo hubiera sabido, jamás hubiese accedido. Queremos devolverlos, pero no podemos. No quieren. Parecen un parásito amarrado a nuestra carne, y si los arrancamos se llevan con ellos un brazo, media cara, un pulmón. Y no podemos respirar. Y queda aquella cara recriminatoria. Y ese mar de sufrimientos apagados. Y aquel torbellino de pensamientos encendidos. Agotados quedamos con tantos recuerdos no cancelados que nos señalan con el dedo en forma inequivoca y sin posibilidad de evasión por los tiempos de los tiempos y hasta el final de nuestra vida. Y siguen. Y sobreviven. Y nos sobreviven. ¡Dios!, ¿quién podrá vencerlos?

Indice