En los años 80, la forma más fácil de iniciar una pelea de empollones era proclamar que tu lenguaje de programación favorito era el mejor. ¿C, Pascal, Lisp, Fortran? Los programadores pasaban horas explicando exactamente por qué su forma particular de elaborar una cláusula if-then-else era superior a la tuya.
Eso era entonces. Hoy en día, las batallas relacionadas con la sintaxis y la estructura han terminado en gran medida porque el mundo ha convergido en unos pocos estándares simples. Las diferencias entre los puntos y comas, las llaves y demás en C, Java y JavaScript son menores. Siguen existiendo debates interesantes sobre la tipificación y los cierres, pero la mayoría son discutibles porque la automatización está cerrando la brecha. Si no te gusta especificar un tipo de datos, hay muchas posibilidades de que el ordenador sea capaz de deducir exactamente lo que quieres decir. Si tu jefe quiere JavaScript pero a ti te gusta Java, un compilador cruzado convertirá todo tu Java de tipado estático en JavaScript minificado, listo para ejecutarse en un navegador. ¿Por qué luchar cuando la tecnología nos cubre las espaldas?
Hoy, la acción interesante está en los frameworks. Cuando me senté con otros miembros de la facultad en la Universidad Johns Hopkins para planificar un nuevo curso, los frameworks dominaron la conversación. ¿Es Angular mejor que Ember? ¿Es Node.js todo eso?
Diseñamos un curso de encuesta que exploraría la arquitectura de los paquetes de software más importantes que son la base de Internet. Este fue el centro de la acción, digno de un curso de encuesta que exploraría la arquitectura de los paquetes de software más importantes que ciñen la Internet actual.
En este sentido, los frameworks son los nuevos lenguajes de programación. En ellos se encuentran las últimas ideas, filosofías y aspectos prácticos de la codificación actual. Algunos se apagan, pero muchos se están convirtiendo en los nuevos bloques de construcción fundamentales de la programación. Aquí hay siete facetas que alimentan la tendencia de los frameworks – y que hacen que los frameworks sean el nuevo caldo de cultivo favorito para las peleas de empollones.
La mayor parte de la codificación consiste en encadenar APIs
Hubo un tiempo en el que escribir software significaba desplegar todo tu conocimiento del lenguaje de programación para exprimir al máximo el código. Tenía sentido dominar la complejidad de los punteros, las funciones y el ámbito de aplicación: la calidad del código dependía de hacer lo correcto. Hoy en día, la automatización se encarga de gran parte de esto. Si dejas declaraciones sin valor en el código, no te preocupes. El compilador elimina el código muerto. Si dejas punteros colgando, el recolector de basura probablemente lo resolverá.
Además, la práctica de la codificación es diferente ahora. La mayor parte del código es ahora una larga línea de llamadas a la API. Hay un reformateo ocasional de los datos entre las llamadas a la API, pero incluso esas tareas suelen ser manejadas por otras APIs. Unos pocos afortunados consiguen escribir código inteligente, que golpea los bits y hace malabarismos con los punteros, para las tripas de nuestras máquinas, pero la mayoría de nosotros trabajamos con las capas superiores. Simplemente ejecutamos tuberías entre APIs.
Por ello, es más importante entender cómo se comporta una API y qué puede hacer. Qué estructuras de datos acepta? Cómo se comportan los algoritmos cuando el conjunto de datos crece? Este tipo de preguntas son más importantes en la programación actual que las relativas a la sintaxis o el lenguaje. De hecho, en la actualidad existen varias herramientas que facilitan la llamada a una rutina de un lenguaje desde otro. Por ejemplo, es relativamente sencillo enlazar bibliotecas C con código Java. Entender las APIs es lo que importa.
Vale la pena subirse a los hombros de los gigantes
Imagina que te has convertido en un discípulo de Erlang o de otro lenguaje nuevo. Decides que ofrece la mejor plataforma para escribir una aplicación estable y sin errores. Es un sentimiento agradable, pero podría tardar años en reescribir todo el código disponible para Java o PHP en su último lenguaje de elección. Seguro que tu código podría ser mucho mejor, pero ¿merece la pena el tiempo extra?
Los frameworks nos permiten aprovechar el duro trabajo de los que nos precedieron. Puede que no nos guste la arquitectura que eligieron y que discutamos sobre los detalles de implementación, pero es más eficiente reprimir nuestras quejas y encontrar una manera de vivir con las diferencias. Es mucho más fácil heredar todo lo bueno y lo malo de la base de código a través de un framework. Tomar la ruta del macho escribiendo todo tú mismo en tu nuevo lenguaje favorito en lugar de uno de sus frameworks más populares no te permitirá disfrutar de la crema de tu nueva elección tan rápidamente como lo haría simplemente diferir a los creadores de frameworks y sus APIs.
Conocer la arquitectura es lo que importa, no la sintaxis
Cuando la mayor parte de la codificación es encadenar llamadas a la API, no hay mucha ventaja en aprender la idiosincrasia del lenguaje. Claro, usted podría convertirse en un experto en cómo Java inicializa los campos estáticos en los objetos, pero sería mucho mejor averiguar cómo aprovechar el poder de Lucene o JavaDB o algún otro montón de código. Podrías pasarte meses aprendiendo las rutinas de optimización de los compiladores de Objective-C, pero aprender los entresijos de la última librería del núcleo de Apple hará que tu código chirríe. Llegarás mucho más lejos aprendiendo los detalles más quisquillosos del framework que la sintaxis del lenguaje en el que se apoya el framework.
La mayor parte de nuestro código pasa la mayor parte de su tiempo en los bucles internos de las librerías. Conseguir los detalles del lenguaje correctos puede ayudar, pero saber lo que ocurre en las bibliotecas puede dar sus frutos de forma espectacular.
Los algoritmos dominan
Aprender un lenguaje de programación puede ayudarte a hacer malabares con los datos escondidos en las variables, pero eso sólo te lleva hasta cierto punto. El verdadero obstáculo es conseguir que los algoritmos sean correctos, y esos suelen estar definidos e implementados por los frameworks.
Muchos programadores entienden que es peligroso y una pérdida de tiempo volver a implementar algoritmos y estructuras de datos estándar. Claro, puede que lo afines un poco a tus necesidades, pero te arriesgas a cometer errores sutiles. Los frameworks han sido ampliamente probados a lo largo de los años. Representan nuestra inversión colectiva en una infraestructura de software. No hay muchos ejemplos de cuándo tiene sentido «salirse de la red», dejar de lado el duro trabajo de otros y construir una cabaña algorítmica con tus propias manos.
El enfoque correcto es estudiar los frameworks y aprender a usarlos para tu mejor ventaja. Si eliges la estructura de datos incorrecta, podrías convertir un trabajo lineal en uno que tarda un tiempo que es una función cuadrática del tamaño de la entrada. Eso es una gran molestia una vez que te vuelves viral.