Si trabajas con tecnología o tiene curiosidad sobre ella, probablemente ya hayas oído hablar de la programación funcional. No es nada nuevo, pero cada vez está recibiendo más atención debido a los cambios tecnológicos que estamos atravesando.

¿Qué es la programación funcional?

La programación funcional es un paradigma de programación, es decir, la forma de hacer algo. En programación, es la metodología utilizada para escribir códigos.

El paradigma funcional se basa en un modelo de cálculo muy antiguo llamado cálculo lambda. El cálculo lambda fue creado en 1930 por Alonzo Church (quien fue profesor del famoso matemático Allan Turing) y fue la base para la creación de LISP, una familia de lenguajes de programación desarrollada por John McCarthy en 1958.

Sin embargo, para saber qué es la programación funcional, es importante comprender otros paradigmas de programación famosos: la programación imperativa y la programación orientada a objetos (OOP).

Descubre las oportunidades

Programación Imperativa

El paradigma de programación más famoso. En lenguajes imperativos, como C y PHP, los códigos se escriben como una lista de acciones o comandos que ejecuta una computadora. Son como órdenes dadas a la máquina, por eso se llama programación imperativa.

Programación Orientada a Objetos

En cuanto a la programación orientada a objetos, un programador crea datos en forma de campos, conocidos como atributos, y códigos en forma de procedimientos, conocidos como métodos. Una de sus características es que el procedimiento de un objeto puede acceder o incluso cambiar los campos de datos del objeto al que está asociado.

Como ejemplo sencillo, imagina que un auto es un objeto y sus atributos son sus puertas, color, etc. Podrías tener un método en el que el procedimiento sería abrir la puerta del auto y otro cerrar la puerta del auto.

Algunos ejemplos de lenguajes de programación orientados a objetos son Java, Python y Ruby. Otros lenguajes, como JavaScript y PHP, admiten la orientación a objetos.

Programación Funcional

Cuando comprendemos otros tipos de paradigmas, resulta más fácil comprender el paradigma funcional.

A diferencia de la programación imperativa y orientada a objetos, la programación funcional considera todo como una función. No hay una lista de instrucciones u objetos que debe ejecutar la computadora, sino más bien una secuencia de funciones matemáticas que juntas resolverán un problema.

Eso significa que en el paradigma funcional las funciones son puras, no cambian el estado del objeto y dan énfasis a expresiones y declaraciones, en lugar de seguir instrucciones.

En el ejemplo del auto, si creamos una función pura para abrir la puerta del auto, esa función no cambiará el auto, que es la entrada inicial. Debes utilizar explícitamente el resultado de la función, que sería el coche con la puerta abierta, en lugar de acceder a la entrada inicial, que es el coche con la puerta cerrada.

Además de eso, no hay variables en el paradigma funcional, sólo constantes. Esto se traduce en códigos más objetivos con constantes que, en general, no cambian. Algunos ejemplos de lenguajes funcionales son Clojure, Haskell y Elixir.

¿Cuáles son los beneficios de la programación funcional?

Como se dijo antes, el código en programación funcional tiende a ser más objetivo y más corto que en otros tipos de paradigmas porque puedes aislar las funciones puras que obtendrán la lógica de tu negocio de las funciones que se llaman mutables, que son operaciones que realmente cambian el objeto, como modificar datos en una base de datos, por ejemplo. 

Otro beneficio es que, al basarse en funciones matemáticas, el paradigma funcional impulsa el uso del concepto de inmutabilidad. Un ejemplo de esto sería una función matemática simple, como f(x) = x + 2. Siempre que usemos el mismo valor para esa función, proporcionará un resultado igual e inmutable.

Por eso, el mantenimiento del código y los posibles cambios son más fáciles de aplicar. Es más sencillo agregar pruebas y aislar una función para realizar análisis y corregir fallas.

Puede parecer un pequeño detalle, pero al tener un código inmutable, estamos seguros de que cuando lo probemos, el código no actuará de forma inesperada en un entorno de producción.

Además de eso, los lenguajes funcionales son más amigables para la implementación de la computación paralela, lo que significa que diferentes procesadores ejecutan sin problemas diferentes partes del sistema. Esto se puede explicar por el hecho de que los códigos son predecibles e inmutables, sin efectos secundarios.

¿Cómo utilizamos la programación funcional en Nubank?

Cuando se fundó Nubank en 2013, buscamos tecnología que pudiera ayudarnos a alcanzar nuestros objetivos comerciales, mantener la eficiencia y crecer de manera segura y sostenible. 

En ese momento, el paradigma funcional parecía ser la mejor opción para los desafíos que teníamos que afrontar. Por eso, terminamos adoptando Clojure como lenguaje principal para nuestros servicios y Datomic como nuestra base de datos.

El principio de inmutabilidad del paradigma funcional alineado con Datomic es crucial para una institución financiera porque, como base de datos de solo anexo, Datomic mantiene un historial de operaciones. Con eso podemos, por ejemplo, reprocesar todos los datos de Nubank desde el primer día, si es necesario, o recalcular las operaciones de un día concreto.

El paradigma funcional también ayuda en el proceso de internacionalización de Nubank. La lógica del sistema financiero de un país puede ser diferente de la lógica de otro, pero no es necesario construirlo desde cero. Basta con reescribir la lógica del sistema financiero y reutilizar las otras partes del sistema. 

Es importante decir que utilizar un lenguaje funcional facilita las cosas, pero no es lo único necesario para alcanzar ese objetivo. En ello también influye el concepto de plataforma que utilizamos y el modelo C4.

Pero al fin y al cabo, es como jugar con Legos: Si una pieza no encaja, es fácil cambiarla por otra sin perder todo lo que ya estaba construido. – Concepto de arquitectura de software modular

De esa manera, podemos utilizar todos los beneficios de la programación funcional para crear soluciones que devuelvan a las personas el control sobre su propio dinero, independientemente del país en el que se encuentren.

Descubre las oportunidades