Actualmente crear aplicaciones web conlleva escoger tecnologías en una variedad enorme lenguajes de programacion (JavaScript, Typescript, Java, C#, Go, Rust), Frameworks de frontend (React, Vue, Svelte, Svelte), Frameworks de Backend (Express, Django, Laravel), bases de datos (MySQL, Postgres, Mongodb, Redis), entras otras herramientas.
Sin embargo cada desarrollador debido al tipo de aplicaciones que crea tiene su conjunto de tecnologías o tambien llamado Stack, que prefiere utilizar, asi que en este video me gustaria comentarles el mio.
¿Que desarrollo?
Una de las sistemas más tipicos que desarrollo son servicios SaaS, es decir aplicaciones donde usuarios se registran y pagan algun tipo de contenido, servicio o herramienta. Esto es de las aplicaciones más comunes actualmente.
¿Que hay de los CMS (Content Management System)?
Y por cierto en este articulo no hablaré de CMS, a pesar que puede ser tambien una herramienta muy comun y bastante util para crear aplicaciones del mismo tipo (Blog, E-commerce, etc). para luego empezar a monetizarlo de algun modo, así que ese lo dejaré para un siguiente video acerca de un Top de CMS, que tambien llego a utilizar.
el día de hoy me enfocaré en el desarrollo.
Frontend
Estos días para crear aplicaciones Frontend, uso principalmente Nextjs, la razon es que es uno de los Frameworks para frontend más versatiles que he encontrado, genera contenido estatico, procesa interfaces en el backend (Server Components), Client Side Rendering, e incluso permite crear APIS Backend.
Asi que dependiendo de lo que necesita el framework da bastante opciones a optimizarlo facilmente, de hecho tambien permite optimizar carga de scripts, carga de imagenes, y como esta basado en React, la mayoria de componentes populares son faciles de usar.
Sin embargo si React no es lo tuyo, otras opciones similares en otro frameworks y biblioteas podrian ser Nuxtjs en Vue, Sveltekit en Svelte, y Solid Start en Solidjs.
Estos tambien los he llegado a usar en alguno proyectos intermedios pequeños, sin embargo, la enorme cantidad de componentes ya creados en React hace que me incline más por Next, pero si no tienes inconveniente con desarrollar tus propios componentes de Drag and drop, animaciones, WYSISYG, o componentes tipicos de proyectos web, puedes ir por estas opciones sin ningun problema, de hecho la diferencias principales de estos es que ofrecen sintaxis mucho más simple, patrones de código más faciles de entender, o convierten código más optimizado que React.
Y otra herramienta que pueden llegar a probar tambien es Astro, este genera principalmente contenido estatico pero tambien permite usar conceptos muy similares a Next, solo que permite integrar componentes de React, Vue, SVelte, lit, alpine y solid al mismo tiempo. Puedes saber un poco más en el video ¿Qué es AStro?
Framework de CSS
En cuanto a los estilos, en muchos proyectos uso de Frameworks, y evito desarrollar mi propio Sistema de Diseño CSS, debio a que tambien tengo que desarrollar otras partes y quiero evitar enfocarme solo en la parte visual.
El framework que uso es TailwindCSS, este es muy similar a escribir codigo de CSS, pero dandote nombres de clases ya creados, quita estilos sin usar, y tambien ofrece exteniones de autocompletado que se integran con tu editor.
Aunque tambien uso mucho su Tailwindui.com que es un servicio de Tailwind que te cobra una sola vez de por vida, y te da componentes y plantillas de multiples proyectos, usandolo he llegado a crear muchos proyectos en poco tiempo, cada uno con un diseño variado y que lucen bastante profesionales.
Otras opciones buenas tambien son los tipicos como Bootstrap. Material UI, o Chakra UI, sin embargo ya no los uso tanto en comparacion.
Backend
Ahora aunque nextjs y las otras opciones que te he mencionado, te permite crear aplicaciones backend como REST APIS o GraphQL API, no lo uso para este proposito.
La razon principal es que desarrollar APIs que van creciendo necesitan sus propias modificaciones, y si tengo en el mismo proyecto backend y frontend juntso, esto significaria que si despliego el frontend, tambien lo haria el backend, ademas que el entorno de desarrollo se vuelve más pesado al abrir un proyecto con muchos más archivos.
Esto que te menciono esta relaciona a los MonoRepos, que tambien es otra opcion de crear proyectos hoy en día. De hecho Vercel la empresa que desarrolla nextjs, tambien tiene una herramienta de Monorepos llamada TurboRepo que permite crear pipelines en la nube.
Pero en lo personal a pesar que muchas veces desarrollo proyectos en solitario, prefiero tenerlos por separados como una forma de desarrollarlos indpendientemente o pasarle el desarrollo a otro programador eventualmente.
Y en cuanto a los lenguajes estos días tengo dos opciones para el Backend que uso es Typescript junto con Nodejs y Go. Personalmente prefiero usar mucho más express junto con Typescript y mi propia organizacion de proyectos, pero si lo tuyo es aumentar aun más la productividad puedes ir por Nestjs, este es mi segunda opcion, que permite crear un proyecto de Typescript con todo ya hecho desde los modulos hasta las integraciones con base de datos y demas.
Si voy por Go, es simplemente porque a veces prefiero tener manejo de concurrencia mucho más efectivo y simple que node, y se que eventualmente el proyecot podrá crecer a un equipo pequeño que podra facilmente continuar con la base que he desarrollado.
En cuanto a Go frameworks que uso son echo, gin y fiber. Siendo echo el que más me gusta.
Con estos Frameworks tipicamente prefiero desarrollar APIs de GraphQL si es para aplicaciones frontend o moviles, aunque si es para Dashboard o paneles de control no tengo inconvenientes con usar REST al ser más simple, y no necesitar de todas las optimizaciones que ofrece GraphQL. Otra opcion que he implementado este año tambien es tRPC, que es una alternativa a GraphQL, sin embargo esta la he usado muy poco en comparación asi que aun no lo recomendaria, al incluso no haber mucha informacion en comparación. Igual publicare un curso pronto del tema.
Base de datos
En cuanto a base de datos actualmente uso mucho PostgreSQL, Mongodb y Redis, en muchos hasta he llegado a usar dos tipicamente. ya sea Postgre o Mongodb como base de datos principal, y Redis como base de datos para caching. usando servicios de Hosting como Mongodb Atlas para Mongodb, Railway (PostgreSQL), y Digitalocean Manage databases para Redis.
Antes desplegaba mucho en VPS (Virtual Private Servers), pero esto ya solo lo hago para proyectos personales o rara vez, para proyectos de clientes uso más plataformas PaaS (Railway, Heroku, Vercel, Netlify, etc)
ORM y ODMs
Ahora, como muchos proyectos usan la misma base de datos, en lugar de hacer las mismas consultas CRUD, tipicamente hago uso de ORMs (Object Relational Mapping) y ODMS (Object Document Mapping) para estas operaciones sencillas.
Algunos de los que más uso son:
- Mongoose para Mongodb
- Sequelize, TypeORM y Prisma para SQL (PostgreSQL)
Aunque cuando son queries complejas o procedimientos almacenados uso consultas escritas en SQL o uso bibliotecas como Knexjs, que son un intermedio entre los ORMS y el código puro de SQL, ofreciendote escribir consultas en código como los ORMs pero siendo más explicitos al momento de escribirlas.
Docker
El backend tiendo a usar contenedores cuando se trata de deplegar en mi propia infraestructura (IaaS), pero si tengo la opcion de desplegar en servicios Paas como mencione, trato de ir más por este ruta, para evitar psar mucho tiempo administrando computadores en lugar de desarrollar.
Testing
En cuanto a Testing para el Backend uso Jest y supertest para E2E testing y unit testing, y en cuanto al frontend prefiero dejarselo a Cypress, al ser una solucion en la nube más facil para integrar desde E2E hasta unit testing, aunque si tuviera que escoger una opcion local iria por Playwright, o Vitest, aunque para este ultimo esperae un poco más ya que aun esta en desarrollo.
Deploy
Para despliegue actualmente uso las siguientes plataformas PaaS:
- Heroku
- Railway
- Vercel
- Netlify
y para IaaS uso Digitalocean y AWS.
usando estos servicios practicamente puedes desplegar lo que sea desde base de dato hasta aplicaciones frontend, backend, y serverless.
Otros servicios
Finalmente otras servicios que he llegado a usar para crear aplicaciones fullstack son:
- SendGrid, sendinblue para correos transaccionales
- Mailchimp para suscripcion de correos
- Twilio SMS para notificacion por SMS
- Stripe, Paddle y Paypal para pagos online. Aunque algunos no estan disponibles en todas los paises de latinoamerica, asi que una opcion es ir por los metodos locales de tu pais, o servicios como mercadopago, o en todo caso formalizar empresa en estados unidos, sacr una cuenta de banco y usar stripe, de hecho todo este tramite se encarga Stripe Atlas, el cual sirve para que puedas cobrar a nivel global con Stripe.
- S3 y Cloudinary para Hoting de archivos
- AWS Lambda para funciones serverless, cuando se trata de algun evento como enviar correos basado en eventos, o notificaciones y similares.
Y aunque muchas veces pruebo servicios de Google, Microsoft (Azure) o Servicios indpendientes, siempre trato de usar entre los más funcionales, populares, al ser fáciles de integrar y no perder tanto tiempo integrandolos.
Conclusión
En conclusion, este es el Stack que uso actualmente:
- Typescript
- Nextjs
- TailwindCSS
- Nodejs (Express) con Typescript
- APIs, GraphQL, tRPC
- Mongodb (Mongoose), PostgreSQL (Sequelize)
- Docker
- Digitalocean, AWS
Como pueden ver hay varias herramientas pero de hecho yo diria que son tecnologías muy populares. Una razon fuerte para usarlas, es que como hay mucha información de estas es fácil implementarlas y desplegarlos. Así que segun preveo seguire usandolas este año entrante, aunque este año ya tengo una lista de herramientas, servicios y tecnologías que quiero aprender para ir conociendo alternativas, pero eso lo veran en un siguiente video, asi que de momento cuentenme, cual es su Stack Favorito para crear tencologías web.