# Tech stack ## Frontend - [React](https://es.reactjs.org/): Librería de JS - [NextJS](https://nextjs.org/): Framework para [SSR](https://pwaexperts.io/blog/server-side-rendering-pwa) ## Backend - [NodeJS](https://nodejs.org/es/): Intérprete de JS en servidor - [ExpressJS](https://expressjs.com/es/): Librería para montar servers web en NodeJS - [NestJS](https://nestjs.com/): Framework que trabaja encima de ExpressJS (o Fastify, alternativa a ExpressJS), con muchas herramientas que ayudan a desarrollar un backend de forma cómoda. - [PostgreSQL](https://www.postgresql.org/): Sistema de DDBB relacional OpenSource con muchas librerías (alternativa a MySQL) ## Mobile - [React Native](https://reactnative.dev/): Framework para desarrollar apps basada en React que posteriormente te construye una app para iOS y otra para Android con el mismo código ## Common techs - [TypeScript](https://www.typescriptlang.org/): Lenguaje basado en JavaScript que añade tipado y alguna que otra cosa más para suplir las carencias de JS. Luego, se traspila a JS que puede ser interpretado por Node. - [Docker](https://www.docker.com/): Herramienta para crear contenedores, "micromáquinas virtuales" con lo justo y necesario para levantar un servicio como por ejemplo MySQL, un servidor de Minecraft, tu propio proyecto desarrollado en cualquier lenguaje o incluso un OS como Linux o Windows. - [Kubernetes](https://kubernetes.io/es/docs/concepts/overview/what-is-kubernetes/): Orquestador de contenedores para automatizar la gestión de los mismos. - [Github](https://github.com/): Plataforma para subir tus repositorios de git, hace también de red social de desarrolladores. También cuenta con herramientas de planificación de proyectos, CI/CD con [Github Actions](https://github.com/features/actions)...etc ## Infrastructure - [AWS](https://aws.amazon.com/es/): Servicios en la nube de Amazon, cuenta con una buena capa gratuíta pero es poco amigable de primeras. Tiene una buena curva de aprendizaje. De aquí recomendaría ver las herramientas de [RDS (Bases de datos SQL)](https://aws.amazon.com/es/rds/), [EC2 (Servidor en la nube con el SO que quieras para hacer lo que quieras con el)](https://aws.amazon.com/es/ec2/) y [Amplify (Desplegar frontends)](https://aws.amazon.com/es/amplify/). Como alternativa recomendaría servicios en la nube más fáciles de usar que también cuentan con capas gratuítas como [Netlify](https://www.netlify.com/) o [Vercel](https://vercel.com/), aunque hay muchos más. Además, tanto Google ([Google Cloud](https://cloud.google.com/?hl=es)) como Microsoft ([Azure](https://azure.microsoft.com/es-es/)) tienen sus propios servicios en la nube con capas gratuítas y muy completos. ## Development - [Testing](https://www.youtube.com/watch?v=_DzBez4qMi0): Una parte en la que se hace poco hincapié normalmente es el testing de un proyecto, pero es una piedra angular. Para NodeJS se utiliza mucho la librería [Jest](https://jestjs.io/es-ES/). Como recursos para leer sobre el tema (agnósticos a el lenguaje que se utilice) recomiendo leer sobre la [pirámide del testing](https://www.youtube.com/watch?v=raNxF0L5kXo) para ver los diferentes tipos de tests, y sobre el [Test Driven Development](https://www.youtube.com/watch?v=1gttkO9JKtU). - [SOLID](https://www.youtube.com/watch?v=2X50sKeBAcQ): Principios que te ayudan a tener una arquitectura resiliente y sólida. También son agnósticos de las tecnologías que uses. - [Domain Driven Design](https://www.youtube.com/watch?v=dH5aSQLXtKg): Filosofía de diseño de software orientada a hacer software escalable y entendible por todos los equipos de un proyecto (no solo el equipo técnico). Esto es bastante bastante denso, pero de aquí me quedaría con la [Arquitectura hexagonal](https://www.youtube.com/watch?v=y3MWfPDmVqo), que viene a ser una alternativa al típico [MVC](https://www.youtube.com/watch?v=kCgjV2QeRyk). ## Books and resources - [Refactoring](https://www.amazon.es/Refactoring-Improving-Existing-Addison-wesley-Signature/dp/0134757599/ref=pd_lpo_1?pd_rd_i=0134757599&psc=1): Libro con muchos ejemplos, todos prácticos, de como mejorar tu código para hacerlo más legible y óptimo. Muchos ejemplos de antes y después de refactorizar, y el por qué de los cambios. - [Clean Code](https://www.amazon.es/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882): Libro sobre buenas prácticas en tu estilo de código, muy recomendado y fácil de leer, entender y aplicar. Con muchos ejemplos prácticos. - [Clean Architecture](https://www.amazon.es/Clean-Architecture-Craftsmans-Software-Structure/dp/0134494164): Segunda parte del Clean Code, pero enfocado a nivel de arquitectura de software. Aquí se definen por primera vez los principios SOLID y se explican muy bien. También con muchos ejemplos. - [CodelyTV](https://codely.tv/): Empresa que se dedica a dar cursos de conceptos de programación, muy bien explicados y con muchos ejemplos. Tienen muchos videos en Youtube que merece la pena ver, y sus cursos de pago los tenemos en la empresa y valen muchísimo la pena. - [BettaTech](https://www.youtube.com/channel/UCSf6S_PAhXsqGMTPDiKgdRg): Canal de Youtube de vídeos cortos explicando conceptos de programación, muy recomendable - [midudev](https://midu.dev/): Otro youtuber y streamer de programación, explica genial y sube mucho contenido - [HolaMundo](https://www.youtube.com/channel/UC4FHiPgS1KXkUMx3dxBUtPg): Similar a BettaTech, muy completo también - [manz](https://manz.dev/): Streamer de programación y profesor de bootcamp y ULL, genial explicando y muy enfocado tanto temas de Linux como Frontend. En su web tiene cheatsheets que vale la pena ver y tener a mano, asi como webs con documentacion hecha por el (arriba del todo en su web). Organiza bootcamps en Tenerife super completos con profesores super talentosos (**MUY RECOMENDABLE**)