El diseño de sistemas es un tema recurrente en entrevistas para desarrolladores de software, sobre todo para los niveles que requieren más experiencia, pero más allá de eso, es una habilidad fundamental a dominar si quieres avanzar en tu carrera.
Es por eso que vamos a empezar a hablar más de ese tema, contando nuestra experiencia, pero al mismo tiempo aprendiendo a diseñar mejor.
En este post hablaremos de algunos recursos con los que puedes empezar a aprender.
Libros
Un libro que se ha recomendado mucho sobre todo en esta época en la que los datos son cada vez más importantes es Designing Data-intensive Applications que, como su nombre lo dice, te enseña a construir aplicaciones en donde los datos son muy importantes.
Hay un libro que se enfoca justamente en la parte de entrevistas llamado System Design Interview, con la mayoría de las opiniones como positivas, pero algunas resaltan un punto muy importante: gran parte del contenido se encuentra en las referencias, así que si quieres profundizar tienes que buscarlas. A mi esto me parece positivo porque en vez de intentar abarcar todo y diluirse, este libro puede servir como un índice o una referencia para aprender más.
Finalmente, te vamos a recordar un libro del que hemos hablado continuamente tanto en nuestros videos como en los posts de este blog: A Philosophy of Software Design de John Ousterhout. Este es uno de los mejores libros que puedes leer acerca del diseño de software en general, y de las prácticas que llevan a crear software bien diseñado. No habla de diseño de sistemas a gran escala, sino de organización y división modular y cómo deberías aplicarla.
Cursos y videos
Codely, una plataforma de cursos para desarrolladores, tiene un curso de introducción a la arquitectura hexagonal, que es una muy buena base para deseñar sistemas, aquí puedes ver una pequeña prueba: Intro a arquitectura hexagonal y aquí puedes ver el curso completo: Arquitectura Hexagonal.
Principios SOLID Aplicados es otro curso con aplicaciones prácticas que puedes ver para aprender más sobre estos principios que ayudan a crear código y sistemas más mantenibles.
En Educative.io tiene un curso llamado Grokking the System Design Interview que tiene ejemplos de diseño explicados como blogposts, abarcando varias etapas del diseño, desde el primer borrador (back of the envelop) hasta análisis de cuellos de botella junto con diseño detallado.
Y finalmente, tenemos una recomendación Open Source y gratuita: System Design Primer que contiene incluso tarjetas de Anki un software para estudio mediante repetición espaciada.
Extras
Un sitio en el que puedes aprender a diseñar sistemas que requieran mucho cuidado por la afluencia de usuarios que tendrán es High Scalability. Ahí podrás ver algunos ejemplos reales sobre como crear sistemas web más grandes en contenido, más rápidos y más confiables.
Si quieres una ruta de aprendizaje completa, Educative.io tiene además la ruta de cursos que te pueden ayudar aprender aspectos teóricos y prácticos: Scalability and System Design for developers.
Cómo representar el diseño
Después de tener clara la idea de cómo resolver los problemas es buena idea tener un lenguaje visual y una guía par representar y comunicar todas las partes del sistema. Aquí te podemos recomendar el paper Architectural Blueprints–The “4+1” View Model of Software Architecture y el estilo creado por Simon Brown: El modelo C4.
Cualquiera de estos dos modelos tienen las herramientas suficientes para poder visualizar y comunicar tu arquitectura desde diferentes perspectivas y a diferentes niveles.
Conclusión
Aprender diseño de sistemas tiene que ver con estudiar mucho, pero sobre todo con aplicar lo aprendido. En el canal de YouTube tuvimos una plática sobre este tema, tomando de nuestras experiencias, lo puedes ver aquí:
En el futuro tendremos más pláticas sobre estos temas, con algunos ejercicios para ver la teoría en acción.
Comentar