Escribir código idiomático

Joel Ibaceta
joelibaceta

--

Cuando un extranjero llega a una ciudad donde se habla un idioma distinto a su lengua materna es probable que aunque haya aprendido el idioma local con anterioridad sea fácilmente reconocible como foráneo debido a que su comprensión del idioma es básica y genérica, le tomará tiempo adoptar las particularidades y modismos de la ciudad, quizás años hasta que su comunicación sea completamente fluida.

Esto sucede debido a que cuando aprendemos un nuevo lenguaje tendemos a tratar de comparar su uso con expresiones y frases que solemos construir en nuestra lengua materna, lo que no necesariamente es un proceso fiable, ya que las construcciones lingüísticas podrían responder a patrones y reglas distintas, por lo que fácilmente podemos encontrarnos con que nuestras expresiones no existen en ese idioma, generar malentendidos, descubrir que debemos construir nuestros pensamientos en un orden distinto o darnos con la sorpresa de que hay palabras o frases sin una traducción exacta.

Sucede exactamente lo mismo cuando pasamos de un lenguaje de programación a otro

Por lo general en este punto tenemos un lenguaje base con el ya escribimos código y nos sentimos cómodos, o quizas es aquel que nos llevó a desarrollar nuestra capacidad de razonamiento lógico y algorítmico con el que estamos muy familiarizados

Pero probablemente hayamos abrazado tanto los conceptos intrínsecos propios de ese lenguaje durante nuestro aprendizaje, sus paradigmas y estructuras que cuando nos movemos a otro lenguaje luego de aprender su sintaxis, escribimos código de la misma manera como lo hacíamos con nuestro lenguaje primario, lo que no necesariamente es correcto pues los distintos lenguajes de programación suelen implementar paradigmas distintos, implementan conceptos nuevos o proponen formas distintas de abordar los problemas.

Es en ese momento, cuando escribimos código quizas en Python tal y como lo hacíamos en Java y usamos objetos todo el tiempo, cuando tratamos y no podemos usar los mismos métodos que aprendimos en PHP en JS o cuando que nuestro nuevo lenguaje no cuenta con las estructuras Switch o las Constantes que soliamos usar o quizas el nuevo lenguaje no implementa la programación orientada a objetos, pero aun así tratamos de simular objetos solo por el hecho de que es la forma en la que aprendimos a resolver las cosas, aun cuando eso signifique sacrificar el buen funcionamiento de nuestros programas o el código convierta en un texto extraño para los programadores nativos del lenguaje.

Es cuando entonces debemos tomar decisiones, de si decidimos reaprender o forzamos al lenguaje a parecerse a lo que conocemos.

De turistas a nativos

Cuando aprendemos un nuevo lenguaje por primera vez, somos turistas, no entendemos como funcionan las cosas y nos aferramos a nuestro conocimiento general y experiencias previsa y no esta mal, pero para poder aprovechar de mejor manera nuestra experiencia de viaje debemos adaptarnos.

Escribir código en un nuevo lenguaje como un nativo significa entender sus particularidades, limitaciones, sus paradigmas y ventajas, de esta manera no solo habremos cambiado de sintaxis sino que estaremos haciendo un uso eficiente del lenguaje y pasaremos de ser turistas a ser nativos.

¿Por que es importante ser un nativo del lenguaje que usamos?

  • Mejora la legibilidad: Si trabajamos en un equipo donde hay programadores que empezaron usando Python como lenguaje principal probablemente esperen que el código siga ciertas reglas y se vea de cierta manera, introducir código con acento de otros lenguajes podría generar confusión en el resto del equipo o la intención del código escrito podría no ser fácilmente reconocible, esto se vuelve más relevante según el tamaño del equipo va creciendo. puede afectar la productividad del equipo.
  • Simplifica la curva de aprendizaje: Si un nuevo miembro se suma al equipo de desarrollo probablemente esperara encontrar código escrito de forma similar a la que aprendió en algún curso o entrenamiento o si desea resolver algún problema con el código es mas probable que encuentre la respuesta adecuada si el código escrito se ve similar al que se suele usar para resolver problemas similar.
  • Aprovecha mejor el lenguaje: Si tenemos un lenguaje enfocado en alto rendimiento, pero no aprovechamos las herramientas que el lenguaje nos brinda para ello por que en nuestro lenguaje primario no existían, por más que hayamos cambiado nuestro código a un lenguaje de alto rendimiento no conseguiremos mejorar el performance de nuestra aplicación por que no estamos usando las herramientas que harían eso posible.

Veamos un ejemplo

Este es un ejemplo de un programa básico escrito en Java para sumar dos números enteros, el cual recibe sus parámetros de entrada desde el terminal y muestra el resultado como una cadena de texto.

Suma de dos numeros en Java

Y el mismo código en Python podría verse de la siguiente manera:

Suma de dos numeros en Python

No te preocupes si no entiendes el código escrito, vamos a enfocarnos en algunas características fáciles de identificar, como podrás notar en el código escrito en Java usamos llaves para encapsular las estructuras y bloques, existe una clase principal main, pues es un lenguaje orientado a objetos, donde todo debe ser un objeto, entre otras cosas.

Pero veamos que pasaría si un nativo en Java que acaba de aprender Python tratase de escribir lo mismo, quizas se vería algo así.

Código en Python con acento Java

Este código va a funcionar sin problema aunque posee algunas implementaciones innecesarias o elementos extraños para un nativo, veamos que problemas podríamos tener si seguimos escribiendo código de la forma en la que lo hacemos en este ejemplo:

Comportamiento inesperado del programa

  • En Java especificar el tipo de dato en la declaración de una variable o los parametros de una función, te permiten validar que sus valores respeten el tipo durante la ejecución u obtendremos un error de tipos.
  • En Python tenemos inferencia de tipos por lo que a pesar de ayudarnos de los alias de tipo para indicar el tipo de datos de una variable, esto puede cambiar durante la ejecución del programa y no recibiremos ningún aviso de esto, asumir que si lo hara ( debido a que en Java si sucede ), podría generarnos comportamientos inesperados que en algunos casos podrían ser difíciles de identificar pues no sospecharemos que el problema es el tipado dinámico.

Elementos extraños inesperados

  • En Java se suele escribir un punto y coma “;” al final de cada sentencia ( Aunque en las ultimas versiones es opcional, se mantiene la costumbre ).
  • Un programador nativo de Python no esperara ver un punto y coma “;” en el código a menos que haya una muy buena razón para ello, pero un programador nuevo podría considerar que son necesarias debido a su experiencia previa con Java y al ver que el programa no retornar errores, podría hacerlo durante un buen tiempo hasta entender que en el nuevo lenguaje son considerados elementos extraños.

Abuso de la orientación a objetos

  • En Java todo método debe estar dentro de una clase, por lo que es probable que un programador este acostumbrado a usarlo no solo como estructura nominal sino como herramienta de encapsulación y agrupamiento de metodos.
  • Un programador Python por lo general esperara que siempre haya una buena razón para que uses clases en el código, pues el lenguaje aporta multiples formas de encapsular funciones.

Si analizamos programas mas complejos podríamos ver muchos mas escenarios en los que hacer las cosas en un lenguaje de la misma forma en la que lo hacíamos con uno anterior puede traernos problemas de legibilidad, predictibilidad, performance o comportamiento inesperado; podriamos perder performance, generar errores, ir en contra del paradigma principal, etc, pero espero el ejemplo haya podido ilustrarlo.

Reflexion:

Escribir código no idiomático no está mal, tampoco es que tu aplicación dejará de funcionar, pero como en un país nuevo siempre será más cómodo escribir código de la manera en la que los nativos lo hacen y aprovechar las herramientas y particularidades que ese lenguaje te ofrece para poder resolver tus problemas.

Así como aprender un idioma nuevo es más que solo aprender la gramática, aprender un lenguaje de programación va mucho más allá que solo adoptar su sintaxis, todo es parte de un proceso que te invito a seguir, no dejemos nunca de aprender y si vamos a aprender un nuevo lenguaje tratemos de hacerlo con mente abierta y dispuestos a reaprender.

--

--

Joel Ibaceta
joelibaceta

CTO at Kwema Inc. #developer #traveler #investor #packtauthor #fintechexpert #entrepeneur Github: https://github.com/joelibaceta, Instagram: joelibaceta