Cómo explicar a cualquiera qué es programar

Muy interesante la explicación a la pregunta How do I explain to non-programmers how complex, time-consuming, and error-prone software development is? que se ha planteado en Quora.

La respuesta dice:

Ask them to describe the steps needed to make a cup of tea, they will say something like:

  1. boil water
  2. put tea in a pot
  3. when the water is boiled pour it into the pot
  4. wait 5 mins
  5. pour the tea into cups
  6. add milk
  7. drink

Now the fun begins. You need to start asking these kinds of questions:

Boiling water?

  • where is the water coming from
  • where is the kettle
  • how do you get the water into the kettle
  • how do you know how much water to put into the kettle
  • what if there is no water/kettle/electricity?
  • what if your fill sensor fails?
  • what if your boiling sensor fails

Put tea in pot?

  • where’s the pot, what if there isn’t one? should we have thought of that before boiling the water?
  • where is the tea, which kind of tea? should we have asked first, perhaps we shouldn’t have started this if we don’t have the right tea?
  • similar questions about filling and sensors

Pouring boiling water?

  • are you sure it’s boiling? how can you make sure that the machine doing the pouring got the right ‘done’ signal from the kettle?
  • How do you make sure that the machine pourer knows where the pot is?
  • What if the pot tips over during pouring?
  • etc.

And so on – you can go on for hours. They will get bored and say “yes but this level of detail is silly”, you can sagely smile and say “exactly”.

ps. after all that tell them the customer actually wanted coffee to go with an extra shot and not a Japanese tea ceremony – surely you should have known that, wasn’t it obvious from the requirements?

Inteligencia artificial aplicada a realización de pruebas

Curioso y útil lo que se explica en Entrenando a los androides para soñar con captchas eléctricos:

La idea consiste en estandarizar las pruebas de modo que los agentes reciben una pequeña pantalla con la tarea a realizar (zona en amarillo) y luego inteactúen con los formularios y páginas web: botones, menús, cajas de texto, gráficos, etcétera para superar las pruebas como lo haría un ser humano: un reto al estilo de los captchas que distinguen «humanos de robots». El resultado se valora entre 0,0 (fallo) y 1,0 (éxito) y también se tiene en cuenta el tiempo. Entonces se repite el proceso, cientos, miles o millones de veces si es necesario y en teoría el agente debería tender a mejorar, si acaso le es posible.

I18n, otro de mis terrores favoritos

I18n es la abreviatura de la palabra Internacionalization que es la técnica implementar/diseñar un sitio web para que pueda soportar diferentes configuraciones regionales (no solo el idioma, sino también formatos de fecha, cantidades monetarias, etc.). Existe un término similar: L10n (Localization) que consiste en adaptar un sitio web a una nueva configuración regional.

Este es junto con los problemas de juegos de carácteres y los campos fecha mi tercer ‘terror’ favorito a la hora de implementar programas o desarrollar sitios web. Y no, no es un tema trivial. Porque traducir un sitio web a otro idioma no solo requiere dominar ese otro idioma o tener a mano un traductor, pues muchas veces las traducciones se realizan sin contexto y fallan.

Mirad este caso:

wu-ingEste es un fragmento de un sitio web en ingles, donde entre otras cosas los usuarios suben fotos y en este mensaje hablan de que ya se han sudibo casi dos millones de fotos. Ahora mirad el mismo sitio en castellano:

wu-esp

No se trata de un error, ni es nada grave, hasta se entiende, pero desde mi punto de vista lo que ha ocurrido yo ya lo he vivido. Alguien le ha pasado al traductor un fichero con los literales (cadenas de texto) del sitio web. En el literal en inglés decia: ‘photos uploaded!‘, lo cual el traductor, haciendo su trabajo, escribió: ‘¡fotos cargadas¡‘, sin saber que la cadena original en ingles formaba parte de una frase en la que faltaba el numero. En estos casos, el traductor además de los textos a traducir necesita tener CONTEXTO, poder ver las pantallas ya sea junto con el programador o bien tenerlas capturadas en imágenes.

De hecho en esta misma captura podemos ver otros fallos que si que pueden llegar a la categoría de errores:

  • el texto del botón no está traducido, ¿porque? puede ser porque este texto no esta en los ficheros de textos a traducir o bien está en otro fichero o se genera desde otra capa y ésta está sin traducir.
  • el título de la foto tampoco está traducido. En este caso se debe de tratar de contenidos añadidos por los usuarios, y claro cada usuario habla su idioma. Esto se puede ver en otros sitios, por ejemplo, cuando ves un video en youtube, los comentarios del mismo pueden estar en cualquier idioma. ¿es un error de programación? pues depende, si estuviesemos hablando de una tienda online, los datos si que deberian internacionalizarse, pero si es otro tipo de web, no siempre hace falta.

Al internacionalizar una web se deben contemplar dos tipos de contenidos:

  • los contenidos estáticos o estructurales de la web: textos del interface.
  • los contenidos dinámicos, los valores textuales de los datos que la web gestiona. En este caso, o bien la base de datos se ha diseñado con técnicas de i18n desde el principio o ‘localizarla’, es decir, añadirle textos traducidos en otros idiomas, puede ser muy, muy costoso.

Otro tema es cuando el programador, con toda su buena voluntad usa un traductor automático. Esto lo pude ver hace años de un compañero de mi propio equipo de trabajo que tradujo el texto ‘¿Seguro que desea borrar este dato?‘ al valenciano en un traductor automático y puso el siguiente texto tal cual: ‘Assegurança que desitja esborrar aquest text?‘. El traductor tradujo la palabra ‘seguro‘ por el sustantivo ‘assegurança‘ sin pensar que era un adjetivo. Para los que no sepais valenciano, es como si ese texto lo tradujesemos al inglés con el siguiente resultado: ‘Insurance you want to delete this item?‘.

Hay infinidad de errores de este tipo en la web, algunos leves y otros bastante graves, que hablan del cuidado que han puesto en internacionalizar la web sus autores, o quizas del presupuesto que tenian :-O

Sistema doblemente enlazado

En el sitio web Digitalisér.dk, el portal de datos abiertos de Dinamarca, utilizan un sistema de doble enlazado: cuando aparece una versión más moderna de un conjunto de datos abiertos, la versión anterior se enlaza con la más moderna. Además, existe una lista desplegable con todas las versiones de un recurso.

Por ejemplo, el recurso Postdistrikter, que son los distritos postales, posee tres versiones:

dinamarca-01

dinamarca-02

En McDonald’s no conocen el juego de caracteres

Visto en los tickets de un McDonald’s, podemos ver que palabras como “Rapidos” o “Despues” las escriben sin tilde:

img_20161208_161928

Las escriben sin tilde porque seguramente les saldrían mal impresas. Eso lo podemos comprobar en otro ticket de la misma máquina, donde palabras como “más”, “Válido” o “sólo” aparecen escritas como “m?s”, “V?lido” o “s?lo”:

img_20161208_161959

McDonald’s es una gran multinacional que sufre la pesadilla de los informáticos.

Ejemplo de que usar el placeholder es una mala idea

El siguiente formulario se encuentra en Mejor con lentillas:

placeholder-01

El aviso “* Campos obligatorios” al final del formulario en vez de al principio no es muy adecuado, pero ese no es el problema más grave de este formulario.

Para indicar el contenido de cada campo del formulario se emplea el atributo placeholder en vez de una etiqueta con <label>:

placeholder-02

 

Lo podemos comprobar viendo el código fuente:

placeholder-codigo

¿Por qué es una mala idea usar el placeholder? Imaginemos que me equivoco y en el campo para el teléfono escribo el DNI y en el campo para el DNI escribo el teléfono. El resultado será el siguiente:

placeholder-03

¿Qué está pasando? ¿Cuál es mi error? Si no me he fijado bien al rellenar el formulario, no recordaré qué debo introducir en cada campo. Para saberlo deberé ¡¡borrar lo he escrito!!

Además, desde un punto de vista de la accesibilidad web, algunos lectores de pantalla no reconocen el atributo placeholder, así que los usuarios que dependen de su uso para poder navegar por la Web no podrán rellenar este formulario de forma autónoma.