Factorio teaches you software engineering, seriously.

Factorio teaches you software engineering, seriously.

¿Qué es la informática y cómo se relaciona con Factorio?

Introducción a la informática y Factorio

  • La informática se plantea como el estudio de la computación, pero también se cuestiona su relación con conceptos como la entropía de información.
  • Se invita al espectador a un viaje para explorar estas preguntas en el contexto del juego Factorio.

Descripción de Factorio

  • Factorio es un juego adictivo sobre automatización donde los jugadores deben construir un cohete en un planeta alienígena utilizando recursos naturales.
  • La ingeniería de software implica crear y mantener aplicaciones, desde redes sociales hasta programas como Microsoft Word, similar a lo que ocurre en Factorio.

Tesis central

  • El transporte y procesamiento de materiales en Factorio refleja cómo fluye la información en las aplicaciones modernas, destacando similitudes entre ambos campos.

Spaghetti: Un término común

  • "Spaghetti" es un término familiar tanto para jugadores de Factorio como para ingenieros de software, utilizado para describir patrones complejos e ineficientes.
  • Se presenta una analogía con una red telefónica desorganizada que ilustra cómo surgen complicaciones al intentar conectar múltiples usuarios sin una estructura clara.

Ejemplo visual y comparación

  • Se muestra una imagen del "spaghetti" en Factorio comparada con diagramas arquitectónicos de microservicios, resaltando similitudes en la complejidad estructural.
  • Ambas comunidades han llegado independientemente a utilizar el término "spaghetti" para describir patrones similares en sus respectivos campos.

Trazado de código (Code Tracing)

  • El trazado de código se compara con el proceso de identificar problemas dentro del juego; seguir pistas puede ser complicado si hay demasiados elementos interconectados.

¿Cómo la legibilidad del código afecta su utilidad?

La importancia de la legibilidad en el código

  • El orador comparte una experiencia personal sobre su tiempo como pasante en una gran empresa tecnológica, donde escribió un código recursivo que generaba todas las permutaciones de un arreglo. Se sentía muy orgulloso de su trabajo.
  • A pesar de su orgullo inicial, al regresar un año después como empleado a tiempo completo, se dio cuenta de que el código era confuso y difícil de entender, lo que cuestionó su calidad.
  • Resalta que si el código es complicado y nadie puede entenderlo cuando falla, se vuelve inútil. Esto plantea la pregunta sobre si uno mismo podrá trabajar con ese código en el futuro.
  • El orador enfatiza que la eficiencia algorítmica no compensa el dolor y tiempo perdidos por otros ingenieros tratando de comprender o arreglar un código ilegible.
  • Reconoce excepciones donde la complejidad puede ser necesaria, como en algoritmos para comercio de alta frecuencia donde cada milisegundo cuenta.

Escalabilidad: Un concepto clave

  • Introduce el tema de escalabilidad y cómo se relaciona con los sistemas informáticos. Menciona que la falta de procesamiento es un problema común a resolver.
  • Explica cómo Internet consiste en computadoras interconectadas (servidores), cada una encargada de manejar tráfico y servir información.
  • Compara servidores con máquinas en un juego (Factorio), sugiriendo que ambos pueden escalarse para manejar más carga procesal.
  • Presenta tres ejes para escalar servidores:
  • Escalado vertical: Aumentar los recursos dentro del mismo servidor.
  • Escalado horizontal: Añadir más servidores para distribuir la carga.

¿Qué es el escalado y cómo afecta al tráfico en la web?

Introducción al escalado

  • El escalado se refiere a las técnicas utilizadas para asegurar que grandes sitios web como Google, Amazon y Facebook no colapsen bajo alta demanda.
  • Se introducen dos conceptos clave: autoescalado y balanceo de carga, que son fundamentales para entender cómo funciona Internet.

Autoescalado

  • Los ingenieros de software han automatizado el proceso de escalado, utilizando sensores para detectar la necesidad de más recursos computacionales.
  • Por ejemplo, si el uso de Facebook aumenta, el sistema puede añadir automáticamente más servidores sin intervención humana.

Balanceo de carga

  • El balanceo de carga distribuye equitativamente la entrada entre los servidores para evitar que uno esté sobrecargado mientras otros están subutilizados.
  • Servicios como AWS ofrecen herramientas específicas para autoescalado y balanceo de carga, lo cual es una práctica común en la industria actual.

Conocimiento público y automatización

  • La información sobre estas prácticas no es un secreto; son ampliamente conocidas y accesibles para cualquier persona interesada en ingeniería del software.
  • La tendencia hacia la automatización busca reducir la dependencia del trabajo manual, facilitando así operaciones más eficientes.

¿Cómo afectan las dependencias al funcionamiento del internet?

Dependencias en sistemas informáticos

  • Las dependencias entre servicios son cruciales para mantener el funcionamiento fluido del internet.
  • En términos de procesamiento, materiales o datos fluyen desde insumos menos valiosos a productos finales más valiosos.

Impacto del tráfico en los servicios downstream

  • El modelar el flujo de información permite identificar posibles cuellos de botella que pueden afectar a otros sistemas conectados.
  • A diferencia de Factorio (un juego), donde las acumulaciones son aceptables, en software esto puede resultar en pérdidas económicas debido a interrupciones en el servicio.

Importancia del diseño sistemático

  • Cada sistema impacta a otro dentro de una red interconectada; por lo tanto, es vital considerar cómo cada parte interactúa con las demás.

¿Cómo afectan las dependencias en la arquitectura de servicios?

Impacto de la entrada y salida en el diseño del sistema

  • La forma en que se transmite información entre los servicios afecta directamente el diseño del sistema. Si un servicio upstream tiene una alta capacidad de salida, esto influye en cómo se debe diseñar la entrada para los servicios downstream.
  • Las ideas de grupos de escalado automático, balanceo de carga y dependencias entre servicios son fundamentales para entender cómo funcionan los sistemas. Estos conceptos se combinan para crear soluciones efectivas ante fallos.

Problemas comunes al acceder a servicios

  • Cuando un servicio no está disponible, como intentar iniciar sesión en Apex Legends o Facebook, surge la pregunta sobre por qué ocurre esto a pesar de contar con grandes recursos tecnológicos.
  • Existen varios problemas que pueden causar fallos:
  • Problemas de escalado donde no hay suficiente capacidad.
  • Problemas de balanceo donde un servidor recibe toda la carga.
  • Problemas por dependencias upstream o downstream que afectan el flujo de información.

Comprendiendo el funcionamiento del internet

  • Los jugadores de Factorio ya comprenden estos conceptos sin ser ingenieros. El juego enseña sobre sistemas robustos y auto-reparables que pueden manejar tráfico elevado, lo cual es aplicable al funcionamiento real del internet.

Reflexiones sobre el contenido y su desarrollo

  • A medida que se desarrolla el contenido, se reconoce que hay mucho más por discutir sobre ingeniería de software y arquitecturas orientadas a servicios.
Video description

https://www.patreon.com/TonyButPatreon https://twitter.com/TonyButX https://www.instagram.com/tonyneedsattention/ https://www.twitch.tv/tonybutlive A video essay about how Factorio shares an incredible amount of similarities with Software Engineering and Computer Science. And how playing the game makes you a Software Engineer! (kinda sorta really). If you're feeling ~especially~ generous, feel free to check out my Amazon wish list: https://www.amazon.com/hz/wishlist/ls/1PLUKXBN04Y43?ref_=wl_share Unless otherwise specified, all assets (besides logos) are either licensed legally through Envato Elements (not sponsored just paranoid) or self-created. Business Inquiries: doyouhavemoneyfortony@gmail.com