El cero existe

by

Tras el período de exámenes que ha supuesto un parón en el blog por la proliferación del trabajo, volvemos a la carga. Y volvemos para intentar erradicar lo que nos parece un tremendo error de concepto que estamos viendo en algunos estudiantes de programación. Queremos dar nuestra visión sobre cómo estamos viendo que trabajan algunos estudiantes con un aspecto muy concreto de la programación: la posición cero de los arrays.

El artículo es un poco largo, porque necesito explicar un par de conceptos, pero os aseguro que merece la pena tomarse un cuarto de hora para su lectura.

Calabacín lucha contra el absurdo

Calabacín lucha contra el absurdo desaprovechamiento de memoria

Quiero explicar el problema de forma que lo entienda todo el mundo, tanto aquél que estudió programación en su día, como aquél que no tiene ni idea de programar. Creo que es especialmente interesante para toda aquella persona que esté aprendiendo a programar ahora mismo.

Muchos estudiantes han comenzado a programar en Pascal, un lenguaje muy didáctico pero poco potente. El aprendizaje de la algoritmia y la programación se consigue, posiblemente, de forma más fácil en Pascal que en otros lenguajes como C y sus derivados o Java y sus objetos. Los estudiantes deben después pasar a usar otros lenguajes más potentes como los citados o, en ocasiones, empiezan directamente a trabajar en Java o C pero usando métodos de aprendizaje pensados para Pascal.

Antes de continuar necesito que el lector del artículo conozca lo que es un Array. Podemos entender un array como una colección de elementos, por ejemplo números. Así que pensemos en una colección de números. Cada número de dicha colección estará en una posición. Por ejemplo, podríamos tener el siguiente ejemplo:

Ejemplo de Array de 8 números

Ejemplo de Array de 8 números

Para poder trabajar con esos números tenemos que tener en cuenta en qué posición están. Y aquí viene el problema. En Pascal, el lenguaje usado hasta la fecha en la asignatura de marras, muchos programadores tienen la costumbre de decidir que la primera posición es la UNO. Así, en el ejemplo anterior el número 23 está en la posición UNO, el número 11 en la posición DOS, … Y, por ejemplo, en la posición SIETE tenemos el número 48.

Por contra, en la mayoría de los lenguajes que se usan hoy en día (C, C++, Java, C#, php, asp, J#…) la primera posición del array es la posición CERO. Esto produce un pequeño cambio: ahora el 23 está en la posición CERO, el número 11 en la posición UNO… Y, ahora, en la posición SIETE tenemos al 62. Es importante que el lector se pare un momento a asegurarse que ha entendido lo expuesto en los dos últimos párrafos.

Pensemos ahora en un alumno que ha pasado de Pascal (los arrays pueden empezar en la posición UNO) a Java (los arrays empiezan en la posición CERO). Puede parecer una chorrada, pero puedo asegurar que este es uno de los mayores problemas a los que se enfrenta un programador cuando da el salto de Pascal a cualquier otro lenguaje. Estoy seguro de que muchos alumno o ex-alumnos de Deusto que ya haya llegado a cursar Laboratorio I (en C++) me darían la razón. Así que una de las ventajas de empezar directamente en Java o C++ es que el alumno se habitúa desde el comienzo a trabajar en arrays que empiezan en la posición CERO.

Lejos de aprovechar esta ventaja, algunos alumnos trabajan de forma bastante inapropiada: trabajan con los arrays de Java (empiezan en CERO) como si fuesen de Pascal (como si empezasen desde UNO). ¿Cómo? Pues definiendo los arrays de una posición más de las necesarias y dejando la posición primera (la CERO) sin utilizar. De tal modo, que nuestro array ejemplo pasa ahora a ser así:

Array absurdo

Array absurdo

Por sistema se ha decidido desaprovechar una posición de memoria en cada array que se defina y todo ello… ¿por qué? No sabemos qué les habrá impulsado a una forma de trabajar que puede hacerles en el futuro quedar en ridículo ante cualquier equipo de programadores competente.

Cualquier programador profesional, a estas alturas del artículo, esté posiblemente debatiéndose entre la carcajada y la lágrima, pero puede que el lector que no tenga fundamentos en programación no alcance a ver la dimensión del error. Comentándolo el otro día, un amigo programador (gracias Kala) hizo un símil que será de ayuda al profano. Traslademos la situación a la arquitectura. Imaginemos que en cierta universidad enseñan a los arquitectos a hacer las casas sin piso CERO. La casa tiene que empezar en el piso UNO. E imaginemos que el ayuntamiento obliga a que las casas tengan piso CERO. Nuestros intrépidos arquitectos, siguiendo con la analogía, deciden pues hacer casas de un piso más de lo necesario siempre, llenando la planta baja de hormigón armado.Es decir, si quieren hacer una casa de 10 pisos, ellos harán la casa de once (con el desaprovechamiento de materiales que conlleva) y después dejarán inservible (desaprovecharán) el piso CERO del edificio, siendo el piso UNO el primer piso habitable. Evidentemente estos arquitectos iban a tener que tirar de muchas amistades para conseguir que alguien les dejase diseñar un edificio.

Advertisement

5 comentarios para “El cero existe”

  1. mrfoxtalbot Dice:

    Tienes toda la razón del mundo… pero parece que la actitud en las universidades es “vamos a ir al ritmo del más tonto”. En fin.

    Y hablando de arrays: 4 8 11 16 23 43

  2. mrfoxtalbot Dice:

    42!

  3. Mikel Dice:

    Joder, cómo no se me ocurrió hacer el ejemplo con esos números…

  4. jore Dice:

    me encantaria saber si se pueden cambia de lugar ya capturados los numeros y como se aria?, es decir?

    ke tengake ordenarlos de numero mayor a menor
    como se modificaria el arrays?

    graciasp
    asta pronto
    pato_lelo@hotmail.com

  5. Mikel Dice:

    Claro, tú puedes modificar cualquier posición en cualquier momento. Si escribimos C++ y queremos colocar, por ejemplo, al 7 en primer lugar, cambiándolo por el 23, pondríamos algo así (suponiendo que el array se llama a):

    int aux=a[0];
    a[0]=a[5];
    a[5]=aux;

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s


Seguir

Get every new post delivered to your Inbox.