En el pasado hubo guerras de sistemas operativos libradas en varios dispositivos y con costosas bajas para la alianza redmond-finlandia. Siguen en activo guerras de frameworks front-end, con nuevas escaramuzas y nuevos contendientes en cada estación. Los antiguos programadores nos hablan de guerras de lenguajes. Y los augurios parecen indicar el resurgir de una nueva una guerra, la guerra entre paradigmas.

Pero ¿tienen sentido? ¿son estas batallas necesarias? ¿aportan algo a la comunidad?.

Pues como casi siempre... depende.

El conflicto puede tener un origen pernicioso o beneficioso.

La defensa tribal provoca conflicto

La defensa enconada de una tecnología por gusto propio o por mero desconocimiento del resto es inútil, o mucho peor: demuestra falta de visión y exceso de tribalismo. Así que defender que algo es superior sin particularizar o sin reconocer ninguna alternativa no aporta nada más que mero conflicto... y pegatinas para el portátil.

La evolución competitiva provoca conflicto

Pero al mismo tiempo todo es mejorable. Y si la mejora no parte de su creador, partirá de otro. Y potencialmente generará un conflicto. Si de esa competición surge una carrera de mejora continua, bienvenida sea.

De hecho, esta es la base de la evolución competitiva del mundo tal y como lo conocemos. La idea de que yo lo puedo hacer mejor, o más ajustado a un caso, o más general, o más rápido, o más fácil, o !qué demonios¡ al menos lo haré distinto.

Pero en el caso de los paradigmas, ¿hay evolución? ¿hay tribalismo?. Para empezar, ¿sabemos qué es un paradigma?

Qué es un paradigma

La definición que más me gusta de paradigma de programación es :

Estilo de programación documentado que sirve de ejemplo para escribir programas

  • Estilo de programación: no cuantificable, subjetivo
  • Documentado: algo formal que se puede transmitir entre generaciones
  • Sirve de ejemplo: es un modelo a imitar, una guía a seguir
  • Escribir programas: al final todo es código

Los lenguajes de programación escogen, siguen, se acercan o promueven estos estilos. Pero ¿es posible una guerra basada en esta definición? ¿hay algo que pueda ser absolutamente mejor y por tanto defendible sobre el resto?

Qué paradigmas participan

Para empezar deberíamos saber quienes luchan. Hay dos grandes bloques antagónicos:

Los imperativos:

Se centran en decir cómo se deben hacer las cosas. Paso a paso. Instrucción a instrucción. Esta es la familia más prolífica, que a su vez a generado facciones y tienen soldados famosos en sus filas.

  • Procedural: PL/1, Cobol
  • Estructurada: C, Pascal
  • Orientada a Objetos: C++, C#, Java, JavaScript

Los declarativos:

Mucho más preocupados por el qué se espera que ocurra. Expresan claramente lo que desean, pidiendo los resultados sin importarles los medios necesarios. En este caso hay grupúsculos guerrilleros, que algunos ni consideran dignos de un uniforme. Y por otro lado cuerpos de élite que no admiten a cualquiera en sus filas. Dejo al lector la asignación de estas malintencionadas caracterizaciones.

  • Pura: SQL, HTML
  • Funcional; Haskell, Erlang, Scala, Lisp, JavaScript

¿JavaScript?

Parece que este lenguaje es un follonero que últimamente está en todas las peleas. Pero así es él. La demostración de que pueden convivir estilos distintos de programación, incluso en un mismo en un mismo lenguaje.

Todos los paradigmas tienen su razón de ser. Quizá sean los lenguajes, que cada uno es hijo de su tiempo y necesidad, los que deban evolucionar o desaparecer. Pero creo que los paradigmas, como ejemplos documentados de estilos de programación, van a seguir entre nosotros otros tantos años. Y que prefiero conocerlos antes que luchar por ellos.