Trabe
Asís & David
https://trabe-teaching.github.io/los-peligros-del-framework
Los peligros* del framework
Sobre nosotros
- Desarrollamos front/back con JS (+15 años).
- Desarrollamos frameworks para otros desarrolladores.
- Hemos trabajado con múltiples stacks y frameworks: RoR, JEE, .NET, PHP.
- Entrevistamos candidatos, formamos en casa y a la competencia.
La cruda realidad con el paso de los años, sin ánimo de generalizar
- Los candidatos tienen menos capacidad para resolver problemas, menos autonomía. Son incapaces de arrancar proyectos de cero.
- Se avanza más si es en base a copy-paste-modify.
- Es necesario bajar el nivel de las pruebas técnicas.
- El mercado laboral permite encontrar trabajo aunque los skills no sean suficientes*.
- Los años de experiencia son una métrica distorsionada*.
Nuestro objetivo
- Daros nuestra visión. La de una empresa que necesita desarrolladores para un trabajo de bajo nivel* y que no los encuentra.
WARNING
Esta es nuestra opinión.
Y os puede parecer una 💩.
¿A qué creemos que se debe esto?
Cuando los dinosaurios reinaban sobre el planeta...
- Aplicaciones nativas (CLIs, Text UIs, Windows).
- Lenguajes de bajo nivel, compiladores, ensamblador.
- Librerías del lenguaje, de una distro o de un fabricante de software.
- No hay internet: documentación con manuales y libros.
Era fácil* (y casi obligatorio*) conocer el detalle a bajo nivel de las cosas.
// C
int file = open("example.txt", O_RDONLY);
struct stat file_info;
fstat(file, &file_info);
char *buffer = (char *)malloc(file_info.st_size + 1);
read(file, buffer, file_info.st_size);
buffer[file_info.st_size] = '\0';
close(file);
¿Qué ha pasado en los últimos 20 años? (I)
- Boom de internet.
- Más medios para distribuir software: escritorio, web, apps, etc.
- Crecimiento exponencial de tecnologías.
- Nuevos lenguajes de programación para simplificar (GC para no gestionar memoria).
- Nuevos lenguajes para aislar del metal (Java VM).
¿Qué ha pasado en los últimos 20 años? (II)
- El framework como base: aislar del bajo nivel (incluso aislar del lenguaje).
- El framework como opinión: aislar la toma de decisiones técnicas/arquitecturales.
- Herramientas: pasa lo mismo que con los frameworks.
- Auge del OSS: miles de librerías para usar.
- Auge de blogs, stack overflow programming: la información es contradictoria o no 100% confiable.
const text = (await fs.readFile("some.txt")).toString();
¿Problemas? Meta soluciones.
- Demasiadas opciones. Aparecen los meta frameworks, los generadores de aplicaciones, etc.
- Más opinión. Aleja de la toma de decisiones sobre frameworks/tooling/arquitectura.
- Gut feeling. Inercia.
Es complicado conocer el detalle de las cosas a bajo nivel
- Demasiadas tecnologías, ámbitos, ideas...
- Más especialización.
- Problema: especialistas en frameworks no en ámbitos (desarrollador React vs desarrollador web).
Ventajas
- Facilidad para hacer desarrollo de software. Eliminar el boilerplate.
- Rapidez para diseñar/desarrollar.
- Reducir la barrera de entrada a nuevos desarrolladores.
- Reducción de bugs* si se usan herramientas bien mantenidas.
Ventaja*
Homogeneidad => Programadores reemplazables
Desventajas
- Desconocer implicaciones de usar una API u otra (leer fichero 20Gb en memoria vs streaming).
- ¿Y si la versión opinionada no vale? Falta capacidad para decidir.
- Problemas de mantenibilidad si se usan malas herramientas: falta criterio para vetar.
- Dificultad para depurar errores de bajo nivel* (TS transpilado a JS).
- Dependencia de terceros.
- Sobreingeniería.
Desventaja*
Deskilling => Programadores remplazables
La formación como estudiantes
- Guiada por la situación y demanda del mercado: nosotros nos formamos en J2EE.
- ¿Qué pasa cuando el mercado cambia? Reciclarse o morir.
- Lo importante son las ideas y los conceptos, no las técnicas/herramientas concretas.
- Si es una caja negra mágica, investiga más.
- Lo importante es saber lo que hay para poder profundizar cuando lo necesites.
La web y el desarrollo web acentúa todos los males
- La web es ubicua. Hay una versión web de todo.
- Basada en una infinidad de estándares y especificaciones.
- Specs vs implementadores: los browsers.
- Problema: desarrollador framework _ponga aquí su framework_ vs desarrollador web.
No tendría por qué ser así. Especialmente con la web.
¿Cómo virar el rumbo?
- ¿Volver al pasado? Imposible. Pero sí recuperar hábitos del pasado.
- Leer la documentación en detalle.
- No depender tanto de terceros y aprender a vetar => leer código de terceros.
- Usar menos herramientas: Vanilla JS.
- La web son 4 cositas: HTML, CSS, JavaScript, el DOM y otras API.
El futur-ish
- LLMs: Ya no se lee la doc, se pregunta a ChatGPT. Falta criterio para vetar respuestas. Alucinaciones* (Bullshit).
- IA Agents: Virtual programmers.
- Programadores humanos reemplazables.
- El ecosistema capitalista fomenta esto.
En resumen
- Hay que usar buenas herramientas que simplifiquen el trabajo, como un buen framework.
- Evitar la sobreingeniería. Go Vanilla.
- Tener una idea de los internals de las cosas.
- No leer en diagonal la documentación.
- Cuidado con los LLMs.
- Está bien especializarse, pero no limitarse.