Hoy en día existen lenguajes que no tiene un tipificado fuerte. Como viejo “roquero” este tipo de enfoque en los lenguajes no es santo de mi devoción. El más conocido o extendido, de este tipo de lenguajes, quizás sea Python. El cual conozco algo, pero mis viejas costumbres o hábitos, no acaban de encajar con este lenguaje. Y lo poco que he trabajado con él, me ha chocado su filosofía de que todo vale. Este enfoque me ha hecho pensar que no es un buen lenguaje. Aunque esta idea sobre los lenguajes de este tipo ha cambiado recientemente, tras la siguiente vivencia.
Contexto
A finales de la década de los años 80, cuando empecé en el mundo de la programación, existía el lenguaje “Basic”, en sus múltiples variantes. Era un lenguaje tipo Script, ya que no se compilaba. Pero tenía sus virtudes. Una de las que recuerdo, que era un lenguaje con un tipificado fuerte. Tenías que declarar las variables indicando que tipo de dato iba a contener, y no podía ser alterado.
Si te enganchaba este mundillo de la programación, podías dar el paso a C, Turbo Pascal, Clipper, etc. Todos estos lenguajes mucho más potentes, algunos muy especializados como Clipper, tenía en común entre ellos, y su “hermano pequeño” el lenguaje Basic, que eran lenguajes de tipificado fuerte, más complejos que Basic, pero todos los fundamentos y/o hábitos que aprendías con Basic, no solamente eran útiles, sino fundamentales para adentrarte en estos lenguajes.
¿Que me hizo reflexionar?
Recientemente me contactó Miguel Costas, comercial de Balluf. Miguel y yo hace más de 25 años que nos conocemos. Empezamos juntos a trabajar en el mundo de la automatización, y aunque el tiempo nos ha llevado por diferentes empresas y puestos, otras veces nos ha vuelto a juntar en la misma empresa, hemos mantenido el contacto y la amistad.
Miguel me comenta, que un cliente le ha hecho una consulta. Me dice que tiene un cliente al que le ha vendido unos sensores RFID. El cual está tratando de usar en un programa desde un PC, apoyándose en una librería escrita en Python. Cómo soy muy técnico, le digo que le pregunte por el nombre de la librería y/o que envíe el código fuente que le está dando problemas.
Tras recabar más información, me comenta que el problema es que un trozo de código eleva una excepción tras leer la información del sensor. Esta excepción se produce cuando se lee el byte número 32, de la trama que recibe del sensor, y se compara con el byte 31. Si son diferentes, se eleva la excepción y el programa se detiene.
Observo el fragmento de código que enviaron y es correcto. Al ser diferentes ambos bytes, se genera la excepción. Le comento que lo veo correcto. Y que el programa debe gestionar esa excepción para que no se detenga “bruscamente” e informar al usuario, de una manera amigable, que hubo un problema, darle opciones, etc.
Tras unos días, volvemos a hablar del tema, y me dice que el cliente insiste que tiene que a haber un problema en el sensor RFDI, ya que, según la documentación del sensor, este envía 32 bytes y que el último byte y el penúltimo deben ser iguales.
Echo un vistazo a la documentación del sensor, y no veo nada que necesite configurarse. Vuelvo al código y lo observo con detalle. Como mi conocimiento de Python es limitado me surgen preguntas. Así que me planteo como haría yo ese código usando un lenguaje como Object Pascal o C.
Lo primero que me viene a la cabeza, es que, para leer un buffer de un tamaño determinado tras recibirlo, debo comprobar si ha llegado la cantidad de bytes esperada. Ya que trato de leer el byte 32 y no se han recibido 32 bytes, se va a producir un error en tiempo de ejecución y mi programa se detendrá, se producirán fugas de memoria, quizás mi programa esté gestionando algún proceso automático, etc.
Para mi sorpresa, el código escrito en Python simplemente lee el último y el penúltimo byte y los compara. ¿Y sino se recibió la cantidad esperada? Efectivamente, ese era el problema.
El problema no es del lenguaje Python, el cual es flexible y práctico. Cualquiera puede escribir unas líneas. Es el programador el que hace un mal uso de este. Se están olvidando las buenas prácticas, la metodología y los fundamentos. Aquellos conceptos, debías tener presente hace unas décadas, sino no conseguías ejecutar una línea de código ni en Basic.
Los lenguajes modernos han traído muchas mejoras y avances cara a simplificar el trabajo de los programadores. Hay mucha más “libertad” a la hora de escribir código. Es más accesible a todo el mundo. Pero esa libertad no se puede convertir en libertinaje. Es responsabilidad del programar seguir haciendo uso de la buenas prácticas que había antes, y también de las que han aparecido con los nuevos lenguajes.
No hay un lenguaje malo, hay programadores con malas prácticas.
Saludos