Acerca del curso Design Patterns in Javascript

29 agosto 2021

¡Muy buen curso si quieres una introducción a los patrones de diseño! Probablemente typescript hubiera sido una elección más adecuada, o con menos triquiñuelas. Pienso que el verdadero desafío con los patrones es identificar las situaciones donde usarlos (la idea no puede ser forzarlos) y eso es más difícil de enseñar. Se me ocurre preguntar: ¿Qué proyectos open source son una buena referencia del uso de patrones de diseño? Sería un buen ejercicio revisar el historial antes/después del patrón.

Acerca del curso NestJS Zero to Hero - Modern Typescript Back-end Development

5 septiembre 2021

Si recién estás llegando al mundo de los frameworks para NodeJS, las primeras secciones de este curso son un buen punto de partida, aunque recomiendo partir con un framework más “low level” y simple como Express, Fastify o Koa, en parte porque NestJS es una abstracción encima de alguno de estos (excepto Koa). Si ya tienes experiencia con cualquier otro framework, entonces mejor ve directo a la documentación de NestJS y ahórrate unos minutos ;). La ultima sección sin dudas lo mejor: NestJS + GraphQL. Para mi se queda con varias deudas:

  • En GraphQL muestra solo la variante “code first” y no el “schema first”, o escenarios más complicados con Apollo Federation.
  • No muestra escenarios de comunicación entre microservicios diferente a HTTP, sin dudas de las características que han hecho a este framework popular es la facilidad de integración con otros sistemas como Kafka, Nats, RabbitMQ, Redis, gRPC, websockets, etc.

Por suerte en la documentación se puede encontrar lo básico sobre estos temas.

Acerca del curso Introduction to Database Engineering

11 septiembre 2021

¡Interesante curso! Se complementa muy bien con el libro “Design Data-Intensive Applications”, incluso lleva a ejemplos aun más terrenales los diferentes conceptos que se exponen en ambos.

Si quieres tener una idea rápida de porque es importante conocer las diferencias entre los distintos Database Storage Engines, esta lectura de aproximadamente 5 minutos es un buen punto de partida (A busy developers guide to database storage engines the basics).

En un mundo donde pueden coexistir varios servicios se hace cada vez más recurrente el tener que elegir entre una base de datos u otra, y la clave no debe ser cual es más popular o moderna, sino cual se ajusta mejor a tu caso de uso:

  • Proporción y cantidad de lecturas vs escrituras.
  • Tipo de consultas más frecuentes(consultas filas específicas o rangos grandes de filas).
  • La cantidad de datos que manejarás.
  • Cuán importante es para el caso la consistencia de los datos(y ACID en general).

Son todas preguntas cuyas respuestas las dicta el negocio, y este curso brinda las herramientas para tomar después la mejor decisión.

Acerca del curso Pragmatic System Design

20 septiembre 2021

Este es un curso que me habría gustado ver hace 5 años, cada sección puede ser la introducción de otro curso completo. Desde mi punto de vista lo mejor es el razonamiento detrás de determinado diseño:

  • Si necesita 50 ops ¿para qué una cola o una caché?
  • Si necesitas 300K ops ¡no importa cuántas colas, el cuello de botella estará en la bd!

El tipo de operación (lectura o escritura) importa! Y todo esta dado por números que son específicos del negocio, en resumen no hacer ni sub ni sobreingeniería, hacer lo que piden los datos. PD: yo también siento que el sistema está más cool cuando tiene n colas y cachés y balanceadores de carga y etc, pero no siempre es lo mejor.

Acerca del curso Guía completa de ELK Stack: Elasticsearck, Logstash, Kibana

26 septiembre 2021

La observabilidad es una de las claves en la correcta operación/evolución de los sistemas a escala, hay decenas de herramientas de excelente calidad para recopilar métricas, logs y hacer tracing (los pilares de la observabilidad), en general una práctica común es complementarlas para aprovechar las fortalezas de cada una porque como en casi todo no hay “silver bullets”. Este curso es un excelente manual para la configuración y el uso de uno de los stacks más populares, el ELK. Creo que la mayor dificultad no está en aprender a usar las herramientas, el desafío está en recopilar/sintetizar/mostrar/alertar lo importante y necesario, ni más ni menos.

Acerca del curso Redis - World's Fastest Database - Beginners to Advance

2 octubre 2021

Personalmente me gustan los cursos que más allá de una tecnología muestran ideas, formas de abordar los problemas, estrategias, algo que aunque esa tecnología quede deprecada(lo que sin dudas ocurrirá) pueda perdurar. Las especificidades de la tecnología se pueden encontrar fácilmente, Redis no es la excepción, así que no creo que vale el esfuerzo aprender de memoria todo. Las secciones dedicadas a replicación y alta disponibilidad de este curso es sin duda lo mejor que tiene, aunque creo que fue más dilatado de lo necesario. Si has usado Redis alguna vez y entendiste de que va, difícilmente saques provecho de este curso; si nunca lo has escuchado, pues en ese caso es mejor que nada, pero bien se podría partir directamente por https://redis.io/documentation.

Acerca del curso Go: The Complete Developer's Guide(Golang)

10 octubre 2021

Como desarrollador backend es una buena estrategia dominar al menos 1 lenguaje de tipado fuerte(estático) como Java, C#, Go, y 1 de tipado dinámico, dígase Python, Javascript, etc. Soy un fan de C++, fue mi entrada a la programación y lo único que utilicé a diario durante un buen tiempo, luego me sumergí en la web y no es que los framework en C++ sean muy populares :D, desde entonces he navegado entre Javascript, C#, Java, Python, PHP, y hace poco más de 2 años tuve que usar Go por primera vez; la sensación inicial fue contradictoria, la simplicidad me gustaba, pero esa misma simplicidad me tuvo horas buscando como resolver una situación al estilo que ya estaba acostumbrado, solo para descubrir que no era “The Go Way”: mantener las cosas simples y lo más obvio posible es clave, y uno de los principales objetivos desde la concepción misma del lenguaje. Este curso sin entrar en casos de uso avanzados sirve como muy buena introducción a las estructuras de control y tipos de datos más utilizados de Go(tampoco es que sean muchos), hace 2 años me habría ayudado mucho, ahora igual me gustó reafirmar algunos puntos.

Acerca del curso SOLID Principles: Introducing Software Architecture & Design

11 octubre 2021

Recuerdo la primera vez que leí sobre los principios SOLID, era una tesis de grado y me parecía extraño cada cosa que leía, luego cuando vi el código real entendí que me faltaba mucho para llegar a ser (lo que para mí era)un ingeniero decente. SOLID no es una camisa de fuerza, ni una receta a seguir, no es simple encontrar el equilibrio ideal, y muchas veces no hay un “ideal”, aquí aplica muy bien el dicho “la práctica hace al maestro”. La ventaja demostrada de SOLID está en que es una inversión para el futuro:

  • Pasaremos más tiempo leyendo/manteniendo nuestro código que el que nos tomó escribirlo,
  • La tecnología avanza tan rápido que mantener el código es una necesidad natural,
  • El negocio evoluciona, crece,

Y todo eso es más fácil con un código preparado para evolucionar. Una muy buena lectura para entender SOLID es el libro “Clean Architecture”, más allá de que nos guste esta arquitectura para un sistema (u otra de las que persiguen como objetivo la separación de conceptos), los principios SOLID son los pilares bajo los que se sostiene un sabor u otro, de manera que simplemente con dominarlos ya es una ganancia importante. Este curso expone de forma simple en que consiste cada uno, perfecto como introducción, lo demás es práctica.

Acerca de Software Architecture Case Studies

19 octubre 2021

La idea de este curso me parece buenísima: analizar y proponer soluciones a sistemas reales, incluso se me hizo corto. Dicho esto hay varias cosas que creo podrían tener análisis diferentes, por ejemplo:

  • Plantearse desde un inicio tener una arquitectura de microservicios no es necesariamente algo bueno, sobre todo si el nivel de operación esperado es bajo y el sistema relativamente simple, como en el caso de uso #1, un monolito es y seguirá siendo la mejor solución en muchas situaciones.
  • Aunque varias de las implementaciones de colas soportan el envío de mensajes de gran tamaño, no son su intensión principal, en esos casos vale la pena considerar tener un almacenamiento separado para los mensajes(archivos en este caso) y transmitir solamente algún tipo de referencia; es un aspecto que dado el corte del curso se debía al menos considerar en el caso de uso #4.
  • No se consideran aspectos importantes relativos a la seguridad e integridad de los datos que en algunos de los casos de estudio parecía interesante y necesario.

Para mí, lo mejor es que se presenta un método para analizar los problemas y construir buenas soluciones iniciales. Los sistemas no son estáticos, y lo mejor en ese sentido es permitir el cambio incremental en la arquitectura con el tiempo, de ahí la importancia del bajo acoplamiento y que en muchas ocasiones cuando se define lo que es un microservicio se incluya que deben poder desplegarse independientemente.

Built with Next.js, Tailwind and Vercel