El otro día me topé con un artículo de Hackanoon que planteaba algunas ventajas de desarrollar una web desde cero. A la brava. A pelo. From scratch...
El autor asegura que prefiere desarrollar sus productos línea a línea, sin usar librerías ni frameworks. Que así es como uno aprende, dice. Y la verdad es que estoy de acuerdo en ese punto: desarrollar un website desde cero es la mejor forma de aprender.
¿Pero proporciona alguna otra ventaja interesante? ¿Merece la pena la inversión de esfuerzo? Y lo más importante: ¿quién en su sano juicio programaría en 2019 una página web etiqueta a etiqueta?
La pregunta puede resultar algo capciosa. Primero hablemos de ventajas e inconvenientes:
Inconvenientes de programar un sitio web desde cero
I. Poco ágil
En ciertos proyectos el time-to-market es de vital importancia. Desde ese punto de vista, desarrollar desde cero no es nada ágil, sobretodo si estamos en un marco de trabajo tipo Scrum o si el objetivo es montar un prototipo. Reciclar código de terceros, total o parcialmente, permitiría hacer una web mucho más rápido.
II. Curva de aprendizaje
Los lenguajes front-end deben convertirse en tu segundo idioma. Eso requiere mayor tiempo de aprendizaje del que necesitas para adaptar un simple framework. Para eso sólo tendrás que leerte la documentación sin necesidad de entender qué hay debajo..
Además de ser un experto en esos lenguajes también deberás dominar las buenas prácticas de programación. Y hay que hacer mucho hincapié en esto, pues los frameworks ya implementan esas buenas prácticas.
III. Difícil de mantener
El código escrito desde cero requiere mayor esfuerzo de mantenimiento. Refactorizar y actualizar será una tarea constante durante el ciclo de vida. En ese sentido se trata de una responsabilidad muy grande. Casi como cuidar de un perro o un gato. Además esto implica un requisito adicional: mantenerte constantemente informado y formado, para que tu producto no deje de funcionar después del último release de Firefox.
IV. Compatibilidad entre navegadores
Muchos frameworks ya vienen preparados para cubrir las particularidades de múltiples plataformas. Hacer una aplicación cross-browser a pelo puede ser una tarea mortificante, que puede llevar a tener que reescribir un CSS diferente para cada navegador.
V. Coste elevado
El esfuerzo necesario para desarrollar desde cero una web puede ser mucho mayor que si partimos de un template. Esto se traduce, naturalmente, en un incremento en los costes ya sea en tiempo, dinero o ambos. Sin embargo, en el largo plazo es posible que se dé justamente la situación contraria…
Pero esto lo veremos en las ventajas:
Ventajas de programar un sitio web desde cero
I. Aprendizaje acelerado
Si programas a pelo, vas a aprender sí o sí. Puede que al principio tú código no sea el más limpio, pero a la larga te convertirías en un verdadero experto, cosa que no lograrías se te limitaras a usar o modificar un framework. De hecho hoy día no es fácil encontrar expertos con un entendimiento profundo de un lenguaje de programación, son rara avis muy cotizados.Desde ese punto de vista también es una ventaja, pues es una inversión para tu currículum.
II. Máximo control
Programar línea a línea te proporciona una comprensión de tu proyecto casi absoluta. Sabes exactamente qué es lo que hay y cómo está hecho. Conoces sus puntos fuertes y sus puntos débiles. Esto te permite mantenerlo limpio y eficiente hasta puntos insospechados. Sin contar con la facilidad para detectar bugs o malfuncionamientos, lo cual te ahorraría en el largo plazo muchos quebraderos de cabeza.
III. Tu código, tus reglas
Cuando adaptas una plantilla/framework de terceros tienes que someterte al criterio de otros. Programar es una actividad creativa, algunos de hecho lo consideraran un arte. Programar a tu manera no sólo te va a permitir desarrollar tu creatividad, también te va a permitir desarrollar nuevos patrones mentales para alcanzar un diseño con mínimo esfuerzo.
IV. Optimización al máximo
Muchas librerías incluyen una cantidad de funciones que quizás en tu proyecto nunca utilizarás. Por eso, en un código artesano nunca verás líneas HTML de más, ni funciones JS que están ahí sin que sean utilizadas. Además podrás introducir mejoras de rendimiento específicas para tus requisitos, cosa que sólo puede hacerse a mano y después de un profundo análisis.
V. Independencia
Esta ventaja compensa la dificultad del mantenimiento, pues nuestra aplicación no depende de las actualizaciones (o ausencia de ellas) por parte del proveedor del framework. Nuestra web nunca estaría sometida por las cadenas caprichosas de un tercero.
Cuándo usar plantillas o frameworks
A modo de conclusión
No te dejes engañar por la pregunta del título. Yo creo que a veces tiene mucho sentido desarrollar un producto web desde cero. No me parece ninguna locura, a pesar de la tendencia actual de usar frameworks para todo, especialmente si estamos desarrollando algo muy específico para lo que no existen templates ni frameworks ni librerías adecuadas.
Por otra parte hay que tener cuidado con lo de dejarse llevar por el perfeccionismo ni por ese afán de programar por amor a la misma programación. Decía Shaw:
¿Qué hombre inteligente si le dieran a elegir escoger entre vivir sin rosas o vivir sin berzas no correría a asegurar las berzas?
Así pues, usemos el sentido común para determinar: 1) cuál es nuestro caso y 2) hasta qué punto nos conviene 2.1) trabajar «from scratch», 2.2) utilizar una plantilla o 2.3) un enfoque mix-and-match.
¿Y vosotros, qué opináis?
Yo no conozco a nadie, pero seguro que deben de haber gente que dice «Yo mi coche me lo he construido desde cero, escogiendo y montando el motor, caja de distribución, suspensión, chasis, …, todo a medida.»
Pues con la programación de una web igual.
¿Vale la pena NO usar un framework que te resuelve el 80% de la funcionalidad que ha de tener cualquier desarrollo web, o tiene alguna ventaja reinventar la misma rueda?
Ser un hacker y/o hacer de «programador heroico» suena muy «cool», pero no es nada eficiente, es más bien algo romántico.
Es mi opinión como programador y desarrollador de servicios para la web.
«Yo mi ordenador lo he escogido desde cero, escogiendo placa base, procesador, tarjeta gráfica… Todo a medida.»
Feliciano, esos son buenos puntos. Pero en mi opinión no se trataría sólo de dárselas de «programador heroico». Creo que depende del caso, pues no todas las aplicaciones web son iguales. Pongamos por ejemplo que nuestro cliente nos pide desarrollar una aplicación de e-commerce. ¿Se trata de una tienda online para vender tostadoras? Entonces mejor le instalamos un Prestashop o un WooCommerce en el que como máximo le vamos a construir un theme personalizado con una base de Bootstrap.
Ahora te pongo el caso de mi proyecto actual, en el que ejerzo de Product Owner. ¿Se trata de una aplicación de eCommerce para vender productos extremadamente complejos con parámetros de compra muy variables y que además deben ser reservados mediante geolocalización? ¿Necesita un panel de administración integrado con los procesos del negocio existentes? Entonces probablemente no encontrarás un solo framework que te dé todo lo que necesitas. Quizás incluso te veas obligado a emplear una combinación de varios, reutilizando componentes de uno y de otros según los vas necesitando. Algunos de esos componentes cambiarán tanto con las sucesivas adaptaciones, que acabarán siendo irreconocibles. En estos casos, al final te estarás enfrentando con un desarrollo prácticamente a medida en el que utilizas o adaptas muchas librerías y en el que tienes que invertir mucho esfuerzo de programación heroica (a.k.a. ingeniería de software pura y dura). También te puedes encontrar con que esos frameworks pueden ser realmente pesados para realizar ciertas funciones: por ejemplo, un batch nocturno que importaba cientos de gigas de datos, hubo que «despellejarlo» del framework (el modelo de Django) para reducirlo a sentencias crudas de SQL. A pelo, a medida.
Y siguiendo con el ejemplo de la fabricación de un coche: ni siquiera BMW (que construye sus modelos desde cero) se fabrica todos los componentes por sí solo. Los frenos se los compra a Continental, el alternador a Bosch, las ruedas a Bridgestone y así sucesivamente. Si eres un fabricante de software, a menudo tendrás que programar desde cero eligiendo y adaptando el motor, la caja de distribución, la suspensión y el chasis. Utilizarás muchos componentes prefabricados, pero en última instancia… todo a medida 🙂