lunes, 1 de enero de 2024

Erlang: funciones y otras cosas más

Como vimos en un post anterior de Erlang vimos cómo emplear algunas funciones. En este post vamos a ver como emplear funciones propias de Erlang y a crear las nuestras.

Pero antes vamos a repasar algunas cosas sobre módulos en Erlang:

fundamentos.erl

%% @doc Fundamentos en Erlang.
%% @copyright Codemonkey Junior 2023.

%% Nombre de nuestro módulo.
-module(fundamentos).

%% autor del módulo
-author("Codemonkey Junior").

%% versión del módulo
-version("1.0.0").

%% Exportamos las funciones que vamos a usar.
-export([start/0]).

%% Para importar funciones.
-import(io, [fwrite/1]).

%% Para exportar todas las funciones.
-compile(export_all). 

%% Para exportar todas las funciones sin warnings.
-compile(nowarn_export_all).

Como buena práctica podemos documentar el código usando las etiquetas @doc. También escribir comentarios de lo que hace cada función. En este caso exponemos como importar y exportar funciones en nuesto módulo. Para obtener información de nuestro módulo podemos hacer algo como esto:

$ erl
> c(fundamentos).
> fundamentos:module_info().

La función module_info() mostrará la información del módulo. 

Como vimos en un post anterior. Podemos crear funciones para realizar alguna acción. En el caso de abajo, se trata de una función para convertir números binario, octal y hexadecimal a decimal.

-module(fundamentos).
-author("Codemonkey Junior").
-version("1.0").
-export([start/0,convierte/0]).


println(Cosa) -> io:format("~p~n", [Cosa]).


start()->
    println(" ==== Erlang ===="),
    Funcion = fun(X)-> X*2 end,
    println(Funcion(45)),
    println(self()),
    convierte().

convierte()->
    X = 2#101,
    Y = 8#0677,
    Z = 16#AE,
    io:format("De binario a decimal: ~p~n",[X]),
    io:format("De octal a decimal: ~p~n",[Y]),
    io:format("De hexadecimal a decimal: ~p~n",[Z]).

% erl
% c(fundamentos).
% fundamentos:start().

Entramos al REPL o Shell de Erlang, cargamos el programa e invocamos la función.

Erlang al igual que otros lenguajes de programación funcionales plantean una nueva forma de pensar para los programadores que usan Java, C#, C, C++ o Python. Mientras que los programadores Java requieren crear clases y clases, módulos y módulos para resolver un problema planteado con Erlang (Haskell, etc.) bastarán algunos bloques de código para hacer lo mismo. Aunque el código, en un principio, parezca incomprensible.


Cosas por aprender... cosas nuevas por aprender

 

Quien se dedique a la programación debería saber que SIEMPRE HAY ALGO NUEVO QUE APRENDER.  Quien ose de creer que lo sabe todo en un futuro estará obligado (quiera o no) a demostrar que así es. Lo que antes era moda hoy es casi "obsoleto" (VB .Net, PHP, Delphi, Informix, etc.). Cosas como Docker, Kubernetes, Terraform, gRPC y demás cosas son lo de hoy. Y llegará un futuro en el que vendrán otros a decir "Esto es lo de hoy, olvídate del pasado". 


El programador incipiente dirá cosas como: "¡No puede ser! ¡Apenas estoy aprendiendo a programar en Angular y ya salió su reemplazo!"

Y es que las cosas son así: Evolucionas o te estancas

"Pepepero, ¿Debo aprender todo lo que salga? ¿Debo convertirme en un Todologo?

Dirán tanto el programador incipiente y como experto. Y la respuesta más discordante y neurótica será: Si y no. Si, porque debes familiarizarte con lo actual. No, porque es imposible saber al 100% algo. Es bueno saber que existe X o Y cosa, y mejor si se puede especializarse en algo. Muy difícil sería saberlo todo (nadie lo sabe todo aunque así lo crea).

Y no todo es sobre programación

También debemos aprender a comunicarnos. Saber escribir, saber leer correctamente. Saber como comunicar nuestras ideas. Saber como resolver cosas antes de que éstas ocurran.

El modelado de sistemas, procesos, etc. también es muy útil. El programador debe saber modelar, esto para evaluar si la organización para la que trabajas está logrando sus objetivos y si está satisfaciendo las necesidades de sus clientes.

En está época donde las IAs están siendo cada vez más populares el programador o quien trabaja con grandes cantidades de información debe familiarizarse con ellas o comenzar a pensar a que se dedicara en un futuro, pues nada se detiene, todo avanza y cambia. El que no vaya a la misma velocidad quedará atrás de todos.



¿Y qué con otros idiomas?

En este post ya hablamos un poco de la importancia de los idiomas (entre otras cosas).  Saber más de un idioma es indispensable en el mundo de informática. Ya sea para leer y entender documentación o hablar con clientes o usuarios. Incluso para exponer proyectos, crear manuales, o resolver incidencias.

Saber un idioma extra al que ya hablas es una ventaja. Saber más de 3 idiomas te pone arriba de otros. Y si hablas más de 3 o 6 podrías trabajar en cualquier parte del mundo, sobre todo si entre éstos son Inglés, Alemán , Koreano o Mandarín.

Certificaciones

Una certificación no te hace experto en algo. Indica que sabes ciertas cosas, solo eso. La experiencia muchas veces es lo que te ayuda a resolver problemas, no un papel. 

Es bueno tener certificaciones si tu trabajo lo requiere. Si eres programador Backend una certificación en Consumo y creación de APIs es un plus para tu carrera. Y si eres más de administración, tener certificaciones en Gestión de proyectos te abrirá otras puertas.

Todos los días podemos aprender cosas nuevas o reforzar lo que ya sabemos (o creemos saber).

Solo basta abrir un poco los ojos y ver en qué podemos mejorar.