Be Software Architecture Wise
Be Wise Apps

Read in English · Lire en français · Auf Deutsch lesen

Capítulo 0 de 12 · Principiante

Empieza aquí: cómo funciona el software

Este capítulo es la puerta de entrada al curso. Da por hecho que has usado aplicaciones y sitios web, pero que nunca has programado, y explica desde cero qué es el software, cómo representa y procesa los datos, cómo se organiza el código, cómo se comunican las computadoras a través de las redes, dónde se almacenan los datos, cómo colaboran sistemas independientes mediante API, qué son los servidores y la nube, y cómo los equipos construyen y lanzan software. Los ingenieros con experiencia pueden hojearlo como un vocabulario compartido; todos los demás deberían leerlo antes del Capítulo 1, porque cada capítulo posterior se apoya en estas ideas.

Introducción en video al capítulo 0

6 min · narrado en inglés, con subtítulos
Solo escuchar (audio)
Leer la transcripción

Bienvenido a Be Software Architecture Wise y al Capítulo cero: Empieza aquí, cómo funciona el software. Este capítulo es la puerta de entrada a todo el curso. Da por hecho que has usado aplicaciones y sitios web, pero que nunca has escrito un programa. Al terminarlo, tendrás el vocabulario en el que se apoya cada capítulo posterior.

La arquitectura de software trata de las grandes decisiones de un sistema de software: cuáles son sus partes principales, cómo se comunican entre sí, dónde residen los datos y qué cualidades, como la velocidad, la fiabilidad y la seguridad, debe lograr el diseño. Esas decisiones se toman con un vocabulario propio: procesos e hilos, índices y cachés, interfaces y dependencias, transacciones, API y contenedores. Los arquitectos usan estas palabras con precisión, así que necesitas saber qué significa realmente cada una y qué cuesta. Este capítulo está escrito para alguien que nunca ha programado. Cada sección comienza con una analogía cotidiana antes de explicar el mecanismo real. Si ya eres ingeniero, puedes hojearlo como un vocabulario compartido.

Este capítulo no se apoya en nada anterior. No supone ninguna formación técnica, y por eso es el lugar adecuado para empezar. Conduce directamente al Capítulo 1, que usa estos bloques básicos para explicar qué es la arquitectura de software y por qué las grandes decisiones importan tanto. Cuando un tema merece más profundidad, el capítulo remite a la sección posterior que lo trata a fondo.

El capítulo tiene ocho secciones, en tres grupos. Las tres primeras se quedan dentro de una sola máquina. La sección cero punto uno explica cómo el código escrito por personas se convierte en instrucciones que un procesador puede ejecutar, y por qué los datos en memoria desaparecen al reiniciar. La sección cero punto dos presenta las estructuras de datos de uso diario, como las listas, los diccionarios y las colas. Con la notación O grande, explica por qué una forma de encontrar a un cliente sigue siendo rápida con un millón de clientes, mientras que otra se hunde. La sección cero punto tres sube de las funciones a los módulos, los objetos y las interfaces. Explica la diferencia entre una biblioteca y un framework, advierte del costo oculto de las dependencias y ofrece un primer vistazo al acoplamiento y la cohesión.

Las tres secciones siguientes salen de la máquina única. La sección cero punto cuatro explica cómo el DNS convierte nombres en direcciones y cómo funcionan las solicitudes y respuestas HTTP. También muestra que el retardo de la red tiene un límite inferior fijado por la velocidad de la luz. La sección cero punto cinco trata de los archivos y las bases de datos: tablas, consultas SQL, índices y transacciones, ilustradas con una transferencia bancaria que nunca debe quedarse a medias. También presenta las principales bases de datos no relacionales y cuándo encaja cada una. La sección cero punto seis explica cómo cooperan sistemas independientes mediante API. Una API es un contrato. Verás la diferencia entre esperar una respuesta y enviar un mensaje a través de una cola, y por qué romper una API perjudica a todos los que dependen de ella.

Las dos últimas secciones tratan de dónde se ejecuta el software y cómo se construye. La sección cero punto siete muestra qué es realmente un servidor, cómo las máquinas virtuales y los contenedores permiten que muchas cargas de trabajo compartan una sola máquina física, y qué venden los proveedores de nube. La sección cero punto ocho pasa de la tecnología a la práctica: requisitos, control de versiones, pruebas, integración y entrega continuas, y formas de trabajar. Termina siguiendo un toque en Hacer pedido en una aplicación de reparto de comida a través de cada parte del capítulo.

Merece la pena echar un primer vistazo a ese recorrido ahora, porque muestra hacia dónde va todo el capítulo. Un cliente ha llenado un carrito y toca Hacer pedido. Sigue los números. Primero, el teléfono pregunta al DNS la dirección de la empresa. Después envía el pedido por HTTPS a un balanceador de carga dentro de la región en la nube de la empresa, donde termina la conexión segura. El balanceador de carga pasa la solicitud al servicio de pedidos. Ese servicio llama a un proveedor de pagos externo a través de su API y después escribe el pedido en su base de datos dentro de una transacción. A continuación, pone un mensaje Order Placed en una cola. Un servicio de notificaciones lo recoge y pide al servicio push de Apple o de Google que envíe una notificación al teléfono del cliente. Fíjate en las flechas discontinuas: esa última parte es asíncrona. Si el servicio de notificaciones está caído, los pedidos se siguen aceptando y los mensajes simplemente esperan en la cola. Alguien tuvo que decidir eso, y tomar decisiones así es arquitectura.

Esta es la idea que debes llevarte de todo el capítulo. Cada sistema que aparece en él está construido con partes que ocultan sus detalles tras un límite acordado: un módulo tras su interfaz, una base de datos tras SQL, un proveedor de pagos tras su API. Los límites son donde están los compromisos importantes. Una llamada a función es rápida y fiable, mientras que una llamada a través de la red es más lenta y puede fallar. Una dependencia ahorra esfuerzo pero introduce riesgo. Una caché ahorra tiempo pero puede servir datos obsoletos. Decidir dónde van esos límites, qué los cruza y qué compromisos aceptar es la arquitectura de software. Cada sección termina con una breve nota sobre por qué su tema importa para la arquitectura, así que estate atento a ellas.

¿Cómo deberías estudiarlo? Si eres nuevo en el tema, lee las secciones en orden, porque cada una se apoya en la anterior. Si ya conoces parte de él, ve directamente a las secciones que necesites. Leer todo el capítulo lleva unas tres horas. Cada sección termina con unas cuantas preguntas de autoevaluación. Respóndelas mentalmente antes de mirar las respuestas. Te muestran rápidamente qué se te ha quedado y qué vale la pena volver a leer. Cuando estés listo, puedes hacer la prueba opcional del capítulo: veinte preguntas de opción múltiple y dos respuestas escritas. Calcula unos cuarenta y cinco minutos. La nota de aprobado es el ochenta por ciento. Antes de empezar la prueba, comprueba que puedes responder las preguntas de autoevaluación de cada sección y vuelve a leer el resumen de cualquier sección que todavía no tengas clara.

Ese es el mapa del Capítulo cero. Empieza por la sección cero punto uno, donde veremos qué es el software y qué ocurre realmente cuando una computadora ejecuta un programa. Nos vemos allí.

Descargar el capítulo (PDF)Leer en la app

De un vistazo

Aprenderás a

  • Explicar qué ocurre, paso a paso, cuando se ejecuta un programa, desde el código fuente hasta el procesador, pasando por el sistema operativo.
  • Distinguir las estructuras de datos habituales y usar la notación O grande (Big-O) para predecir cuánto se ralentiza una operación a medida que crecen los datos.
  • Describir cómo las funciones, los módulos, los objetos y las interfaces dividen el código, y la diferencia entre una biblioteca y un framework.
  • Seguir lo que ocurre cuando alguien escribe una dirección web, nombrando DNS, TCP, TLS y HTTP y lo que aporta cada uno.
  • Comparar los archivos, las bases de datos relacionales y las principales familias NoSQL, y explicar qué garantiza una transacción.
  • Explicar qué es una API, cómo funciona una llamada REST sobre HTTP y cuándo un mensaje asíncrono encaja mejor que una llamada síncrona.
  • Distinguir los servidores físicos, las máquinas virtuales, los contenedores y los principales modelos de servicio en la nube.
  • Seguir una sola acción de un usuario a través de todas las capas de un sistema real, y reconocer las decisiones que forman su arquitectura.

Antes de empezar

Ninguno. Basta con estar familiarizado con el uso de aplicaciones y sitios web.

Tiempo

Unas 3 horas de lectura; 45 minutos para la prueba.

Términos clave

Proceso · Compilador e intérprete · Estructura de datos · Notación O grande (Big-O) · Interfaz · Framework · Dependencia · Dirección IP y puerto · DNS · HTTP y HTTPS · Latencia · Base de datos y transacción · API · Contenedor y nube

Por qué empezar aquí

La arquitectura de software trata de las grandes decisiones de un sistema de software: cuáles son sus partes principales, cómo se comunican entre sí, dónde residen los datos y qué cualidades, como la velocidad, la fiabilidad y la seguridad, debe lograr el diseño. Esas decisiones se toman con un vocabulario propio: procesos e hilos, índices y cachés, interfaces y dependencias, HTTP y DNS, transacciones, API, contenedores y pipelines. Los arquitectos usan estas palabras con precisión, y buena parte del curso depende de saber qué significa realmente cada una y qué cuesta.

Este capítulo aporta ese vocabulario. Está escrito para alguien que nunca ha programado, y cada sección comienza con una breve analogía cotidiana antes de explicar el mecanismo real. También pretende ser lo bastante preciso como para que un ingeniero con experiencia que lo lea esté de acuerdo con cada afirmación. Cuando un tema merece mucha más profundidad, el capítulo lo presenta y remite a la sección posterior que lo trata a fondo.

Un programa en una computadora

Las tres primeras secciones se quedan dentro de una sola máquina. Qué es el software explica la diferencia entre el hardware y el software, cómo el código fuente escrito por personas se convierte en instrucciones que un procesador puede ejecutar (mediante compiladores, intérpretes y máquinas virtuales), qué hace el sistema operativo y por qué los datos en memoria desaparecen al reiniciar mientras que los datos en disco se conservan. Termina siguiendo un programa en Python de nueve líneas a lo largo de cada paso de su vida.

Datos y algoritmos muestra cómo las computadoras representan los números y el texto, y presenta las estructuras de datos de uso diario: listas, diccionarios, conjuntos, colas, pilas, árboles y grafos. Con la notación O grande (Big-O), explica por qué un diseño para encontrar a un cliente sigue siendo rápido con un millón de clientes mientras que otro se hunde, y por qué existen los índices y las cachés. Organizar el código sube después de las funciones a los módulos, los objetos y las interfaces, explica la diferencia entre una biblioteca y un framework, advierte del costo oculto de las dependencias y ofrece un primer vistazo al acoplamiento y la cohesión, las dos ideas que recorren todo el diseño de software.

Muchas computadoras trabajando juntas

Las tres secciones siguientes salen de la máquina única. Cómo se comunican las computadoras explica los paquetes, las direcciones IP y los puertos, TCP y UDP, cómo el DNS convierte nombres en direcciones y cómo funcionan las solicitudes y respuestas HTTP, protegidas con TLS. También señala algo que sorprende a mucha gente: la latencia tiene un límite inferior fijado por la velocidad de la luz, así que un viaje de ida y vuelta entre Londres y Sídney nunca puede ser rápido, por mucho ancho de banda que compres.

Almacenar datos trata de los archivos y las bases de datos: tablas, claves y consultas SQL, índices, transacciones y las garantías ACID (ilustradas con una transferencia bancaria que nunca debe quedarse a medias), y las principales familias NoSQL y cuándo encaja cada una. API e integración explica cómo cooperan sistemas independientes: una API como contrato, REST y JSON sobre HTTP, claves y tokens, webhooks, la diferencia entre esperar una respuesta y enviar un mensaje a través de una cola, y por qué los cambios incompatibles en una API perjudican a todos los que dependen de ella.

Dónde se ejecuta el software y cómo se construye

Servidores y la nube muestra qué es realmente un servidor, cómo las máquinas virtuales y los contenedores permiten que muchas cargas de trabajo compartan una sola máquina física, y qué venden los proveedores de nube: desde alquilar máquinas sin más hasta ejecutar tu código solo cuando llega un evento. Presenta las regiones, las zonas de disponibilidad, las redes de distribución de contenidos y las dos formas de afrontar el crecimiento: una máquina más grande o más máquinas. Cómo se construye el software pasa de la tecnología a la práctica: requisitos, control de versiones con Git, la pirámide de pruebas, entornos, integración y entrega continuas, formas ágiles de trabajar y DevOps. Termina siguiendo un toque en "Hacer pedido" en una aplicación de reparto de comida a través de cada parte del capítulo, desde el teléfono hasta el DNS, HTTPS, un balanceador de carga, servicios, una transacción de base de datos, un proveedor de pagos, una cola y una notificación push.

La idea que debes llevarte

Cada sistema de este capítulo está construido con partes que ocultan sus detalles tras un límite acordado: el sistema operativo tras las llamadas al sistema, un módulo tras su interfaz, un servidor web tras HTTP, una base de datos tras SQL, un proveedor de pagos tras su API, una plataforma en la nube tras sus servicios. Los límites son lo que permite construir sistemas grandes sin entender cada detalle, y es en ellos donde están los compromisos importantes: una llamada a función es rápida y fiable, mientras que una llamada a través de la red es más lenta y puede fallar; una dependencia ahorra esfuerzo pero introduce riesgo; una caché ahorra tiempo pero puede servir datos obsoletos.

Decidir dónde van esos límites, qué los cruza y qué compromisos aceptar es la arquitectura de software. Cada sección termina con una breve nota sobre por qué su tema importa para la arquitectura, y el Capítulo 1 comienza exactamente donde termina este.

Las 8 secciones

0.1 · Principiante · 15 minQué es el softwareQué son el hardware y el software, cómo el código fuente se convierte en instrucciones que un procesador puede ejecutar, qué hace el sistema operativo y qué ocurre realmente, paso a paso, cuando se ejecuta un pequeño programa en Python.Leer →0.2 · Principiante · 16 minDatos y algoritmosCómo representan las computadoras los números y el texto, las estructuras de datos de uso diario (listas, diccionarios, colas, árboles, grafos), qué es un algoritmo y cómo la notación Big-O explica por qué algunos sistemas se vuelven más lentos a medida que crecen los datos.Leer →0.3 · Principiante · 16 minOrganizar el códigoCómo dividen los programadores el código en funciones, módulos, objetos e interfaces; la diferencia entre una biblioteca y un framework; los beneficios y los riesgos de las dependencias; y un primer vistazo al acoplamiento y la cohesión.Leer →0.4 · Principiante · 18 minComunicación en redCómo viajan los datos por internet en paquetes, qué hacen las direcciones IP, los puertos, TCP, UDP y DNS, cómo funcionan las solicitudes HTTP y HTTPS, por qué la física impone un límite mínimo a la latencia y qué ocurre cuando escribes una dirección web.Leer →0.5 · Principiante · 18 minAlmacenar datosPor qué los sistemas necesitan bases de datos y no simples archivos, cómo funcionan las tablas relacionales, las claves, SQL, los índices y las transacciones ACID, las principales familias NoSQL y por qué hay que probar las copias de seguridad.Leer →0.6 · Principiante · 17 minAPI e integraciónQué es una API y por qué es un contrato, cómo usan las API REST las URL, los verbos HTTP, los códigos de estado y JSON, y cómo las claves, los webhooks, las colas, las versiones y los límites de tasa determinan la integración.Leer →0.7 · Principiante · 18 minServidores y la nubeQué son los servidores y los centros de datos, cómo comparten el hardware las máquinas virtuales y los contenedores, qué delegan en el proveedor IaaS, PaaS, SaaS y serverless, y cómo encajan las regiones, las zonas, las CDN y el escalado.Leer →0.8 · Principiante · 20 minCómo se hace el softwareCómo convierten los equipos las necesidades en historias de usuario, colaboran con Git y pull requests, prueban a varios niveles y entregan mediante CI/CD y entornos, y cómo un toque en una app de reparto de comida atraviesa todas las partes de un sistema.Leer →

Prueba del capítulo

Comprueba lo que has entendido del capítulo 0

Opcional: 20 preguntas de opción múltiple y 2 respuestas escritas breves, elegidas de nuevo cada vez de un banco de 72 preguntas. Nota de aprobado: 80%. Superar todas las pruebas de capítulo y después la evaluación final da derecho al Certificado de Finalización Be Wise.

Haz la prueba del capítulo 0 en la app

Lecturas recomendadas