Pages

8.19.2007

"Como 5 minutos... debajo del agua"

Creo que ha valido la pena leer esto. Me hacía falta, pero sobre todo, gracias Salvador.

7.07.2007

Un tripié

¿Has tenido problemas entendiendo cómo usar un nuevo aparato eléctrico, aún cuando éste debería tener la misma funcionalidad que uno que ya conocías anteriormente? ¿Has pensado por qué o cómo aprendiste a usar otros aparatos como unos audífonos, una perilla, una pluma, el apagador de pared para un foco? Alguien podría pensar que los aparatos de la pregunta anterior son demasiado comunes como para no saber cómo usarlos; que no son tan complejos como una nueva computadora, un reproductor de DVDs o algún nuevo aparatito brillante y lleno de botoncitos listos para ser mal utilizados; pero estoy convencido de que las anteriores son verdad es a medias.

Casi todo adolescente en la actualidad ha tenido contacto con un reproductor portátil de música y sabe cómo ponerse unos audífonos comunes y corrientes, cualquiera arriba de la edad de cinco años ha usado una pluma, cualquiera tiene una perilla en su puerta para mantener a alguien fuera de su cuarto o de su casa, cualquiera ha prendido o apagado un foco en su vida. Sí, pero no por eso es fácil hacer esas cosas.

Una perilla es un aparato complejo, dudo mucho que alguno de nosotros pueda construir una de un día para otro aun siendo fácil usarlas. Las dimensiones del tubo que contiene la tinta de una pluma deben ser lo suficientemente exactas para que la tinta no se derrame pero que sí permitan una salida moderada cuando sea necesario. El apagador tiene que ser seguro o de lo contrario quien desee apagar un foco tendría que cortar directamente los cables o hacer algo arriesgado para así poder irse a la cama y apagar la luz. Hacemos uso todos los días de estos y otros objetos tan comunes porque hacen bien su trabajo y facilitan el nuestro; son aparatos comunes y fáciles de usar porque son objetos bien diseñados.

Sí, las computadoras son un aparato complejo, esto por las leyes físicas y reglas lógicas que los gobiernan; pero es obvio que no tienes que ser un ingeniero o científico para saber usarlas. Idealmente no debería ser necesario leer siquiera un manual. Una vez que el usuario sepa qué quiere hacer, el trabajo ya debe estar casi hecho. Lo anterior toma mucho tiempo, cuidado y, sí, inteligencia. ¿De parte del usuario? En cierto modo sí, ya que a cualquiera nos ha pasado que después de oir un tema desconocido nos hemos quedado en un estado de incomprensión tal que no supimos ni qué preguntar. Pero nuevamente, la respuesta completa contiene otros elementos.

Para que un diseño sea exitoso, necesita primero cubrir una necesidad bien delimitada y la labor de delimitarla está del lado de quien diseña. Entre los programadores hay un dicho muy conocido que dice que el usuario es estúpido por naturaleza; yo tengo ahora la costumbre de pensar que no, lo que el usuario no tiene es idea y que el estúpido es tal vez el programador o quien está orquestando el diseño. ¿Idea de qué, como para que el estúpido sea quien diseña? Pues bien, el usuario no tiene idea de cómo trabajar con un diseño complejo para lo que él desea; esa es la realidad.

Pero, ¿qué es un diseño complejo? Podemos afirmar que un diseño complejo es aquel que contiene muchas características, opciones, elementos y componentes; lo cual es correcto, pero la expresión "diseño complejo para lo que se desea" se refiere más a un diseño sobrado, que va más allá de lo necesario. Esto es conocido como complejidad accidental. También existe lo contrario: un sistema que carece de funciones para lo que se desea hacer, lo cual representa un problema grande por sí mismo que ocurre demasiadas ocasiones. La clave del diseño es mantener las cosas lo suficientemente sencillas como para no revolver al usuario (ni a uno mismo), pero lo bastante complejas como para resolver el problema inicial y que no sean obsoletas de un momento a otro.

¿Y por qué estoy escribiendo de esto ahora? Pues bien, hace unas semanas tuve una charla con un amigo, en la cual hacíamos notar algunos errores de diseño en un programa, el cual fallaba en mostrar los íconos que nosotros esperábamos para las acciones que queríamos (ya para que dos personas que son programadores y se conocen noten esa falla es que el problema existe). Otra razón es que estuve desarrollando en estas vacaciones un sistema para administrar ciertas actividades de una incubadora de empresas que forma parte del ayuntamiento del municipio en el que vivo y me percaté de que no todos tienen en cuenta estas preguntas, además que el darles una respuesta en el diseño del sistema es un trabajo muy difícil. La otra razón que de plano me colmó el plato fue que el fin de semana pasado salí de compras con mis padres a cierta tienda de abarrotes y fue una odisea, parecía que sólo tenían computadoras para confundir a los empleados y como consecuente molestar al comprador.

En la tienda había varias promociones de artículos al 2 x 1, al 3 x 2, paquetes armados y cosas así, pero al llegar a la caja veíamos cómo el sistema que tienen para registrar artículos no marcaba nada acerca de estas promociones: todo pasaba como si fuera un artículo con precio normal. Al preguntarle a la cajera ella no decía mucho. Posteriormente encontramos que el precio de un producto estaba mal marcado y fue un problema para verificar que el precio fuera correcto; en la tienda tuvieron que movilizar a siete personas para dar una respuesta. Me pregunté si eso no podía ser arreglado por medio de un sistema bien hecho y sigo con la interrogante; se me han ocurrido ideas, pero aún está por discutirse su plausibilidad.

En fin, lo que más me llamó la atención del sistema de la tienda fue el ticket de compra que entregaron, finalmente los artículos sí se marcaron correctamente pero tuvimos que revisar de cerca el ticket. Encontré grotesco cómo marcaban las promociones en el caso de los artículos de de promoción o paquetes armados ya que, digamos que si hay un producto que está al 3 x 2, el sistema imprime en la lista los 2 primeros productos al precio normal, pero el tercero lo marca con un númer negativo. ¿Parece buena la solución? No, es pésima. Si sumaras los precios que aparecen en la lista, obtendrías una cuenta total menor que la real, ya que al tener un producto un número negativo restarías esa cantidad de los que te están cobrando y tienen un número positivo. ¿por qué decidieron hacer esto así? Lo ignoro. Mi padre argumentó que es para que si alguien quisiera saber cuánto ahorro, sólo sumara los productos marcados con números negativos; lo cual no me resultó una buena solución si esa fuera la intensión de la tienda. Si te interesara hacerle saber al comprador cuánto ahorró, imprimirías al final de la cuenta que sí pagó una lista de productos con sus precios y el total de lo que ahorró. Si en cambio, lo que querían con imprimir los números negativos era mostrar que ese artículo no estaba siendo cobrado debieron tal vez marcarlo dos veces, una ocasión marcaría el precio normal del producto y la segunda vez registrándolo con números negativos mostraría el hecho de que está siendo descontado. La otra posibilidad es simplemente marcar ese producto una sola vez con un precio en ceros. A mí me parece más correcta esta última opción además de imprimir al final la lista de productos que no fueron cobrados y el total ahorrado.

Pero bueno, ¿de qué se pierde una empresa o grupo al no cumplir con un diseño bien realizado? Hace unos momentos pensaba que el tener un mal diseño llevaba a una pérdida inminente de usuarios pero me parece que aún no es el caso, al menos no en México, ya que irónicamente la tienda a la que fuimos siempre está abarrotada por compradores (¿no será esto una señal de que las cosas no van bien en lugar de una señal de éxito?). Lo principal que pierden, o más bien desperdician las empresas, es su inversión ya que tienen que hacer más gastos, irónicamente, en dar soporte, ya sea humano o computacional, a un sistema que debería ser una solución y no un problema. Es sencillo hacer una comparación, es como si se tuviera una mesa de tres patas y una de ellas es más corta y frágil que las otras, tardará poco en tirar todo lo que sostiene y antes de que lo haga se echará al vacío una cantidad ridícula de recursos sólo para sostener lo insostenible. Lo mismo pasa con con el software.

Para finalizar, me gustaría hacer una cita...

1.4 Los objetivos de la IHC (Interacción Humano Computadora)
[...]
Los objetivos de la IHC son desarrollar o mejorar:
  • la seguridad
  • la utilidad
  • la efectividad
  • la eficiencia
  • la usabilidad
  • el atractivo

de los sistemas incluyendo las computadoras [Eason 1988]

Seguridad puede significar "seguridad de los usuarios", "seguridad de los datos" o ambas. [...]
Utilidad tiene que ver con los servicios que el sistema provee. Efectividad concierne la habilidad de llevar acabo un objetivo deseado o completar un trabajo. Un sitio web puede proveer toda la información, instrucciones y soporte del lado del servidor requerido para concretar una compra; los cuales todos son ejemplo de utilidad. Sin embargo, si los usuarios no logran comprender cómo encontrar los los productos que quieren comprar, es que el sitio carece de efectividad.
Eficiencia es una medida de qué tan rápido los usuarios pueden completar el objetivo deseado o finalizar su trabajo cuando usan el sistema. Usabilidad incluye facilidad de aprendizaje y facilidad de uso, y atractivo describe qué tanto le gusta el sistema a los usuarios, incluyendo consideraciones tales como primeras impresiones y satisfacción a largo plazo.

  • McCracken Daniel D., Wolfe Rosalle J. User Centered Website Development, Ed. Pearson.

El fragmento anterior es una explicación correcta de las características que debe tener un buen diseño pero para hacer las cosas un poco más fáciles me gustaría olvidar los términos y mejor enumerar su significado así:

  • ¿Pone en peligro tu integridad personal y física o las de los demás mientras lo usas?
  • ¿Hace lo que tiene que hacer?
  • ¿Te ayuda a ahorrar tiempo?
  • ¿Es fácil de usar así como de aprender?
  • ¿Te gusta?
  • y finalmente, para los que son diseñadores: ¿Lo usarías tú mismo?

"If you have to explain it, try to rewrite it".

6.29.2007

México en la Edad Media

El presidente en turno, así como el anterior, se merecen ser santificados.
Benditos ellos, que han llevado a México a una nueva Edad Media, donde puedan hacer desaparecer de modo mediático o fáctico cualquier voz crítica en su contra.
Grupo Monitor será bien recordado y extrañado.

6.04.2007

¡Hackea el mundo!

La frase que lleva por título esta entrada la escuché en una película que vi en mi niñez. La película, en ese momento, me pareció muy interesante y entretenida. Trataba acerca del cliché computacional de siempre: unos adolescentes hábiles con las computadoras entrando a sistemas en pos de si no marcar territorio, al menos de demostrar superioridad; que consecutivamente tienen que defenderse de un crimen no cometido. La trama para objeto de esta entrada no tiene mucha importancia, lo importante fue que formó parte de mi niñez. No recuerdo bien si cuando vi la película ya tenía computadora o no, pero lo que me gustó fue ver a personas jóvenes descubriendo y disfrutando por sí solos, un mundo que no todos comprenden.

Desde hace un buen rato, he estado buscando en internet libros en línea, tutoriales o algo parecido para aprender Ruby; he encontrado algunos muy buenos y prometedores, como the poignant guide y the pickaxe. Encontré además otra cosa que me inspiró demasiado y me hizo recordar mi niñez nuevamente. Lo que encontré es un proyecto llamado Hackety Hack! del mismo tipo loco que escribió the poignant guide, quien se hace llamar _why.

Su idea, que sosamente enunciaré como darle acceso a usuarios jóvenes a una (o varias) plataformas para que puedan aprender y disfrutar a programar, me inspira y me contagia esas ganas de hacer accesible a los más pequeños nuestro trabajo como programadores. Él menciona como referencia y punto de partida una época que yo no conocí, la época de la Commodore 64. La Commodore 64 fue una computadora que avispó las mentes de muchos jóvenes en su época, los ayudó a acercarse (y a amar) este mundo de las computadoras. Me parece que ninguno de mis conocidos ni yo tuvimos la oportunidad de utilizar esa máquina o alguna parecida que tuviera esas características: un sistema robusto, accesible, configurable, programable y divertido.

Mi primer computadora fue una HP con Windows 95 (imagínense). Me recuerdo a mí mismo pensando que MS-DOS era increíble. Borrar, mover, crear y modificar muchos archivos con simples y pocas líneas de órdenes mientras te olvidabas del bailecito "apunta, haz click y arrastra" que se ejecuta con el mouse. En esos momentos pensaba que era lo más cerca que se podía estar con las partes internas de una computadora y por eso me gustaba más. ¿Estúpido, no? De seguro sí, pero era mi primer acercamiento a una computadora ignorando que tenía mucho camino por recorrer. Cambió mi vida, aun siendo una pésima herramienta. No creo haber sido el único niño que vivió eso pero sí creo que sigue pasando algo parecido estos días.

Observo las computadoras que utilizan mis familiares, todas Windows, y no creo que sean una buena herramienta para un adulto, mucho menos para un niño. No porque la computación sea algo difícil por naturaleza, sino porque son herramientas que no están diseñadas para ser útiles o cómodas (lo cual es contradictorio) mucho menos divertidas. Observo sistemas fríos que no tienen alma ni personalidad. Observo un mundo al revés donde esa computadora nos convierte a nosotros en una herramienta para poder funcionar, donde tenemos que adaptarnos a ella y no al revés. Los sistemas *nix son una historia aparte, pero tampoco creo que estén cerca de la Commodore 64.

¿Es en verdad tan difícil realizar un sitema robusto y entretenido que ayude más que a hacer un trabajo a cambiar mentes? Por mi experiencia debo decir que sí, pero que vale la pena intentarlo. ¿Valdrá la pena desde un punto de vista comercial proveer esas plataformas? Supongo que sí, juegos como Quake y Doom fueron revolucionarios y un éxito en su época, además por ser un avance en las técnicas de desarrollo de videojuegos, porque incluían las herramientas necesarias para que el usuario lo suficientemente interesado en la empresa de crear sus modificaciones, minijuegos y más cositas lo hiciera.

Pienso, también, que sería aún más importante del lado del usuario tener la oportunidad de no símplemente usar una máquina, sino amar usarla. Estoy seguró que no hay argumento en contra cuando uno asegura que los grandes avances en ciencia y arte han sido realizados por gente que amaba y disfrutaba lo que hacía. Realizar sistemas que cambien la mente de quienes lo usan es una oportunidad de conquistar nuevos y excitantes parajes. Una oportunidad de conquistar los lodosos terrenos que rodean la industria de la computación estos días.

Bueno, tal vez esté exagerando y esté demasiado extasiado con estas ideas, pero al menos estoy seguro que vale la pena darle un vistazo al proyecto de _why, además de contribuir en lo posible (anque sea divulgación) con este u otros proyectos parecidos. Las nuevas generaciones (al menos) deberían tener una experiencia grata con las computadoras y ese es un trabajo que nosotros, los programadores de hoy, tenemos que tener en mente.

PS: Sí, ya sé que la película trata más de crackers y no de hackers, pero en mi niñez creí que lo que ellos hacían era revolucionario.