El pastel es una mentira

¿Alguna vez has pensado: cómo explicar la programación a alguien que nunca antes lo había enfrentado? Podría ser un problema, siempre y cuando uno nuevo no lo entienda.


Entonces, imaginemos: tienes un amigo, que no está sucio por la informática, nunca intentó automatizar algo, nunca jugó factorio, nunca escribió una sola línea de código.


Entonces, imaginemos un ser humano normal.


Y llamémosle Bill . Él no es muy bueno en matemáticas, simplemente "no es bueno", ¡pero le encantan los dulces !



Su tarea es enseñarle a Bill algunas cosas básicas (o mágicas) de TI, que está haciendo todos los días. Los mas simples.
Entonces, ¿qué harás primero? Básicamente - ALIMÉNTELO


¡Aliméntalo!


Larga historia corta, pero un día Andrey Alexandrescu le preguntó a Bill:


- Andrey: Hola Bill, ¿quieres un dulce?
- Bill: ¡Sí, claro!

Entonces Bill tomó el dulce, lo desenvolvió del envoltorio de caramelo y se comió la carga .
Simple? ¡Y hemos usado dos palabras mágicas!




Pocos días después, Wirth le preguntó a Bill:


- Wirth: Hola Bill, ¿quieres un dulce?
- Bill: ¡Sí! ¡SEGURO!
- Wirth: Hola, tengo otro, ¿tú también lo quieres?
- Bill: ¡Sí! ¡SEGURO!

Este es un ciclo controlado por condición o un ciclo .


- Wirth: Hola, tengo otro, ¿tú también lo quieres?
- Bill: ¡Sí! ¡SEGURO!

Pero no había dulces, y Bill recibió una excepción común de puntero nulo .




Tenga cuidado: si Alexandrescu regresa repentinamente y continúa alimentando a Bill con dulces, se producirá un desbordamiento del búfer . Mientras Bill siempre acepte un dulce nuevo.


desbordamiento de búfer




Al día siguiente, Wirth estaba preparado. Él tiene una gran bolsa de dulces.


- Wirth: Ok, déjame revisar la bolsa mía ...
- Wirth: todavía tengo dulces. Bill, ¿quieres un dulce?
- Bill: ¡Sí! ¡SEGURO!

En este caso, Wirth proporcionará un dulce solo si tiene uno.
Aquí tenemos un ciclo con precondición .




Pero un día Bill vino a la casa de Wirth y a la casa:


- Bill: ¡DAME UN CARAMELO!
- Wirth: ¡Nada dura para siempre! ¡Te has comido todo!
- Bill: ¡Pero lo tomaré EN CUALQUIER CASO!
- Bill: ¿TIENES UN CARAMELO?

Fue un ciclo con postcondición . Triste historia Gracias a Dios, la policía estaba cerca. Tenga cuidado la próxima vez, y no alimente a las aves silvestres (y Bill).





Décadas después, Dan Abramov se acerca a Bill y pone todos sus dulces sobre la mesa:


- Dan: sin palabras mirando a Bill.
- Bill: mirando sin palabras al primer dulce
- Dan: Bill, ¿quieres uno en estos dulces?
Bill: Sí, claro.
- Dan: Aquí tienes.

Era un bucle controlado por la colección .




Justo después, Dan tomó otra bolsa, puso todos los dulces en la mesa, los contó y los volvió a poner en la bolsa.


- Dan: Bill, parece que todavía tengo dulces. ¿Quieres un dulce?
Bill: Sí, claro.
- Dan: Aquí tienes.

Fue un ciclo controlado por conteo .





Tarde o temprano, pero Bjarne Stroustrup viene a alimentar a Bill.


- Bjarne: Bill, ¿quieres un dulce?
- Bill: Sí, claro.
- Bjarne: Aquí está.
- Bjarne: Bill, ¿quieres un dulce?
- Bill: - - -

Bill estaba comiendo un caramelo. Estaba ocupado y nada puede molestarlo. Ha levantado un mutex , el hilo se ha bloqueado y el tiempo se detiene ...


bloqueo de hilo


Bjarne era muy inteligente y encontró una solución:


- Bjarne: Bill, ¿quieres un dulce?
- Bill: - - -
- Bjarne: Ok, esperaré hasta que termine de masticar ...

Aquí tenemos una sincronización de hilos .




Ok, esta vez llamaremos a Peter_Norton.


- Peter: Bill, ¿quieres un dulce?
- Bill: ¡Sí! Claro!
- Peter: Proporcionaré un paquete completo. Coma usted mismo.
El próximo Bill obtendrá dulces, uno por uno, de una bolsa, y se los comerá, uno por uno.

Esta operación o secuencia se llama LIFO - Last it, First out. Mientras el dulce del fondo del paquete se coma al final.
Al mismo tiempo, la digestión de Bill es un FIFO : primero en entrar, primero en salir. Tenías que saberlo antes.


FIFO




Donald_Knuth también se unió al equipo de alimentación. Pero un día se cansó de comprar nuevos dulces para Bill y le pidió a una empresa de catering que lo hiciera.


- Donald: Hola, amigo, ¿puedes comprar los mejores dulces en la tienda más cercana y presentarlos a Bill? Aquí están la dirección y el dinero de Bill ...
Desde entonces, Bill siempre tiene nuevos dulces de Donald.
En este caso, una empresa de catering es una función , y la dirección y el dinero son argumentos . Y un caramelo es un valor de retorno .
Si por la misma dirección y la misma cantidad de dinero, Bill siempre obtendrá los mismos dulces, se llamará una función pura .
Pero solo en el caso de que la compañía solo transfiera dulces del punto A al punto B, y una tienda siempre será una función no pura, siempre que pierda dulces al venderlos ... ¡y obtener dinero! Entonces cambia el estado interno .


¡Pero Dennis_Ritchie fue incluso inteligente!


- Dennis: Hola Bill, ¿quieres un dulce?
- Bill: lo sabes!
- Dennis: Entonces aquí hay una dirección. Encontrará su dulce tan deseado allí.

Fue un puntero .


Pero, luego, Bill llegó a esa dirección y encontró solo un objeto militar secreto. Nadie lo vio desde entonces.


Unos meses después, después de escapar de la cárcel, intentó repetir, pero una vez más no pudo alcanzar "el objetivo". Esta vez, algo lo estaba deteniendo a distancia: invisibles e indestructibles muros de límites .




Pero un día ... Incluso, para decir la verdad, noche, Cyberdemon llega a la casa de Bill y grita:


- Cyberdemon: ¿QUIERES UN CARAMELO?
- Bill: SI! ¡EN EL DÍA, Y LUEGO LAS ESTRELLAS BRILLAN! SIEMPRE!

Entonces, Bill tiene sus dulces una vez más. Pero esta es una historia un poco triste, siempre y cuando se olvide de verificar el tipo de carga útil o realizar cualquier otra validación de datos . ️





Después de eso, Bill se despertó en el vacío y escuchó:


- Cosmos: Bill! ¿Quieres un dulce?
- Bill: si!
- Cosmos: Bill! ¿Quieres un dulce?
- Bill: si!
- Cosmos: Bill! ¿Quieres un dulce?
- Bill: si!

Así es como funciona el ping .




En los sistemas alterados con latencia distinta de cero, esto podría verse así:


- Cosmos: Bill! ¿Quieres un dulce?
- Cosmos: Bill! ¿Quieres un dulce?
- Cosmos: Bill! ¿Quieres un dulce?
- Bill: si!
- Bill: si!
- Bill: si!

Pero este caso es válido solo para TCP / UDP . En el caso de TCP / IP , podría ser


- Cosmos: Bill! ¿Quieres un dulce? Bill! ¿Quieres un dulce?
- Cosmos: Bill! ¿Quieres un dulce?
- Bill: si! Si! Si!

Como paquetes hermanos largos se unirán por tiempo o factor de tamaño (también conocido como MTU ).



El final


Tengo muchas historias no contadas, como un Bill and Gang-of-Four , o dulces que no son de navegador cruzado .
Pero déjame contarte el último, sobre The Indivisible Candy:


Bill se lo come cientos de veces, pero vuelve a su mano, ¡sin vacilar y aún dulce!
Por lo tanto, el dulce indivisible puede ser un singleton o una pérdida de memoria , ya que el recolector de basura no puede digerirlo.

Entonces, ¿puedes describir algo de TI en un estilo dulce? A alimentar enseñar a Bill y meterlo en TI.


Bill


Bill todavía tiene mucha hambre y se está muriendo de hambre. Tienes que alimentarlo. Aquí En comentarios


PD: Esta es una traducción del artículo de 10 años . El artículo original "The Val`s Candies" se lanzó hace 8 años, y desde entonces recibió muchos ejemplos nuevos como comentarios de los usuarios: recursividad, delegación, interfaces, desbordamiento de pila, procedimientos vs funciones, clases, árboles B y etc. Pero ... en otra dimensión.

Source: https://habr.com/ru/post/es436752/


All Articles