Vandalismo cualificado

En un lugar recóndito de la Facultad de Ciencias, en una pared exterior de la planta baja, justo enfrente de uno de los sitios donde tenemos clase los informáticos –casualidades– podemos encontrar esta pintada tan atípica en tiza…

Sólo para frikis

Por si acaso no se entiende en esta fotografía de móvil, la transcripción es:

[sourcecode language=»c»]
#INCLUDE <STDIO.H>
VOID MAIN(VOID)
{
PRINTF("HOLA");
}
[/sourcecode]

Que seguro que casi todos identificáis como código escrito en lenguaje C. Aparentemente el código es correcto, pero hay un fallo importante por el que este programa no funcionaría jamás tal como está escrito… A ver si a alguien se le ocurre y nos lo cuenta…

Y al volver la vista atrás…

Para mis primeros intentos en la web, hace algunos años, me conformaba con programar en HTML con algunos retoques en JavaScript. Justo cuando ya creía dominar todo aquello hizo su aparición XHTML con su amiguete CSS, y hubo que desaprender una parte para ponerse al día. Creo que lo peor fue acostumbrarse a escribir el código en minúsculas, pero en general valió la pena.

Al poco tiempo descubrí PHP, y pensé que realmente aquello era la tecnología definitiva (años más tarde comprendí que eso no existe). Sin embargo, no todo puede arreglarse del lado del servidor, así que JavaScript volvió a echar una mano. Además ¿de qué servía PHP sin bases de datos? Mejor aprender a conectarlo con MySQL. Qué páginas. Qué dinamismo. Qué rapidez. Wow.

Sin embargo el mundo nunca es suficiente, y hace unos días llegué a ese punto en que JavaScript no da más de sí. «¿Por qué no usas AJAX?», me comentó un amigo.

Y hoy me he descubierto a mí mismo desarrollando un sitio web con PHP + MySQL + AJAX + JS + XHTML + CSS. Lo que más me sorprende es que semejante embrollo funcione.

Curso de ética ingenieril (III)

(Música clásica de fondo)

Sean bienvenidos, queridos lectores, a esta nueva edición de nuestro Curso de Ética Ingenieril. En esta ocasión vamos a referirnos al libro «Programación en C», editado por el Departamento de Informática y Automática de la Universidad de Salamanca; en cuya página 164 se nos regalan estas líneas:

El resultado serán dos líneas con las dos primeras estrofas de la famosa poesía de Gustavo Adolfo Bécquer:
Con cien cañones por banda,
viento en popa a toda vela…

Se trata de hacer un programa muy sencillo que muestra esas dos líneas en pantalla. Pero si uno lo lee despacio comienza a sufrir un ataque de nervios que puede llevarle a arrancarse los ojos de inmediato.

En primer lugar, lo que muestra el programa no son dos estrofas sino dos versos. En segundo lugar, no son cien cañones sino diez. Con cien cañones por banda, el velero necesitaría propulsión por energía nuclear para surcar los siete mares. Y en tercer lugar, ese poema, llamado «La canción del pirata» no es de Bécquer sino de José de Espronceda.

El Curso de Ética Ingenieril, comprometido con la corrección y el rigor de los textos de informática, recomienda la adopción de la siguiente propuesta:

El resultado serán dos líneas con los dos primeros versos de la famosa poesía «La canción del pirata», de José de Espronceda:
Con diez cañones por banda,
viento en popa a toda vela…

Aunque si queremos rizar el rizo, siempre podemos escribir:

El resultado serán dos líneas con las siete primeras letras del famoso relato de Yola Berrocal:
Con 2 cañones por banda,
viento en popa a toda vela…

Recomendando encarecidamente la adopción de la primera propuesta, nos despedimos hasta la siguiente edición de nuestro Curso de Ética Ingenieril, no sin antes presentar, a modo de desagravio, las dos primeras estrofas de «La canción del pirata»:

Con diez cañones por banda,
viento en popa, a toda vela,
no corta el mar, sino vuela
un velero bergantín.
Bajel pirata que llaman,
por su bravura, El Temido,
en todo mar conocido
del uno al otro confín.

La luna en el mar riela
en la lona gime el viento,
y alza en blando movimiento
olas de plata y azul;
y va el capitán pirata,
cantando alegre en la popa,
Asia a un lado, al otro Europa,
y allá a su frente Istambul.

José de Espronceda

¡Y por fin es viernes!

Bucles infinitos

No me he cansado de repetir (todavía) que los programas informáticos no son otra cosa que conjuntos de instrucciones que el ordenador «comprende» y ejecuta secuencialmente. Por ejemplo, imaginemos un programa formado por tres instrucciones que se leerán en orden (primero la 1, luego la 2 y por último la 3):

  1. Pide al usuario que escriba su nombre
  2. Escribe en la impresora el nombre del usuario
  3. Fin

Es fácil ver entonces que, a lo largo de la ejecución de un programa, el ordenador irá leyendo y procesando estas órdenes de una en una. Claro que no todo es linealidad pura y dura: muchas veces, al diseñar un programa, nos interesaría repetir algunas instrucciones un determinado número de veces, o ejecutarlas sólo si se dan ciertas condiciones.

Todo esto son mecanismos que nos permiten alterar de alguna manera el flujo del programa. Imaginemos que quisieramos pedir e imprimir el nombre de 3 usuarios con el programa anterior. Una forma sería:

  1. Pide al usuario que escriba su nombre
  2. Escribe en la impresora el nombre del usuario
  3. Pide al usuario que escriba su nombre
  4. Escribe en la impresora el nombre del usuario
  5. Pide al usuario que escriba su nombre
  6. Escribe en la impresora el nombre del usuario
  7. Fin

Pero esto no parece muy productivo… tal vez podríamos hacer algo así:

  1. Repite las siguientes instrucciones 3 veces:
    1. Pide al usuario que escriba su nombre
    2. Escribe en la impresora el nombre del usuario
  2. Fin

Esta estructura se conoce como «bucle«, pues supone introducir un ciclo en el orden de ejecución del programa. Un bucle está formado por una condición y un conjunto de instrucciones que se ejecutan mientras se verifica esa condición. En nuestro caso, la condición sería que «el número de iteraciones del bucle sea menor o igual a 3», pero podemos poner la condición que queramos.

Y también puede ser que la condición que seleccionemos se verifique siempre… con lo cual el ordenador quedará permanentemente ejecutando las instrucciones que compongan el bucle. Por ejemplo, el bucle…

  1. Repite la siguiente instrucción siempre que 1 sea igual a 1
    1. No hagas nada

… dejará al ordenador en un ciclo continuo de no hacer nada. Tampoco será un problema serio, pues el bucle sólo afectará al programa que lo contenga, y en principio el Sistema Operativo no se desestabilizará. Este tipo de bucles son conocidos en informática como bucles infinitos, y pueden causar fallos bastante graves…

Tal vez piense que evitarlos debe de ser trivial, pero rara vez se sabe de antemano cuántas veces se ejecutará un bucle, y puede ser que suceda algo que no hayamos previsto en el diseño que desencadene una secuencia sin fin… tiene su cosa, no crea…

Bien, ahora imagine un programa con esta pinta:

  1. Ejecuta la instrucción número 1

¿Qué hará el ordenador? Leerá la instrucción 1. ¿Qué dice? Que ejecute la instrucción 1. Vale, voy a leerla. ¿Qué dice? Que ejecute la instrucción 1… y así hasta el infinito (o hasta que el Sistema Operativo arrebate el procesador al programa)

Por cierto, que tiene usted mucha suerte: si fuera un ordenador jamás habría llegado a leer esto, sino que se habría quedado eternamente leyendo el bucle anterior… ¿Por qué? Bien, se trata de algo que veremos en la próxima entrada :-P