Skip to main content

This is my blog, more about me at marianoguerra.github.io

🦋 @marianoguerra.org 🐘 @marianoguerra@hachyderm.io 🐦 @warianoguerra

Sobre lenguajes estaticos y dinamicos

En los últimos dos meses he estado desarrollando un software en C# junto a otras 6 personas y he notado una cosa:

Se pasa mucho tiempo debugueando y traceando excepciones que (obviamente) saltan en tiempo de ejecución.

mi primera opinión sobre eso fue que era una forma de desarrollar de mis compañeros, ya que yo programo en python y no se ni como se debuguea, seguir excepciones obviamente si lo he hecho pero supuse que era algo que solo pasaba en lenguajes dinámico, pero no, también pasa en los lenguajes estáticos.
En un proyecto de 7 personas y con mucho código no escrito por uno, no se suelen controlar todas las excepciones que pasan, y esto no es de este grupo, uno normalmente no maneja todas las excepciones que pueden llegar a saltar en todo momento en el código. Esto hace que una gran parte de los errores del programa (escrito en un lenguaje inherentemente estático) sean detectados en tiempo de ejecución y no de compilación, los otros errores mas comúnmente encontrados son:

* errores en nombres de variables
* problemas de tipos en declaraciones
* referencias a nulo por no inicializar una variable

de esos tres, el primero es el único que sucede en python y que en C# lo detecta el compilador (aunque en python lo detecta pylint ;)).
El segundo en python no existe ya que no se declaran tipos (gracias al bendito ducktyping) y el tercero casi no aparece ya que las variables se declaran cuando se inicializan, así que si no es nuestra costrumbre andar usando None en todos lados (cosa que no hago mas que en parámetros de métodos para variables mutables) este problema desaparece.

A donde quiero llegar con esto?

A que el ser un lenguaje estático no me trae ninguna ventaja como desarrollador, ya que me enfrento a la misma incertidumbre en tiempo de ejecución a que errores no detectados durante la compilación surjan (y que son muchos).

Para terminar, aquí java se merece una mención ya que nos obliga a tratar una excepción o mencionar que es "Throweada" así que SI sabemos que excepciones pueden surgir durante el desarrollo, mientras que en .NET solo podemos saberlo mirando la documentación (cosa que el 99% del tiempo no hacemos).

Resumen, aguanten los lenguajes dinámicos :P