Le gâteau est un mensonge

Avez-vous déjà pensé - Comment expliquer la programmation à celui qui ne l'a jamais fait auparavant? Cela pourrait être un problème, tant qu'un nouveau ne vous comprendra pas.


Alors, imaginons - vous avez un ami, qui n'est pas souillé par l'informatique, n'a jamais essayé d'automatiser quelque chose, n'a jamais joué à factorio, n'a jamais écrit une seule ligne de code.


Imaginons donc un être humain normal.


Et appelons-le Bill . Il n'est pas très bon en mathématiques, juste «pas bon», mais il aime les bonbons !



Votre tâche est d'enseigner à Bill des choses informatiques de base (ou magiques), que vous faites tous les jours. Les plus simples.
Alors, que ferez-vous en premier? Fondamentalement - ALIMENTER LUI!


Nourrissez-le!


Pour faire court, mais un jour, Andrey Alexandrescu a demandé à Bill:


- Andrey: Salut Bill, tu veux un bonbon?
- Bill: Oui, bien sûr!

Puis Bill a pris le bonbon, l'a déballé de l' emballage de Candy et a mangé la charge utile .
C'est simple? Et nous avons utilisé deux mots magiques!




Quelques jours plus tard, Wirth a demandé à Bill:


- Wirth: Salut Bill, tu veux un bonbon?
- Bill: Ouais! Bien sûr!
- Wirth: Hé, j'en ai un autre, tu le veux aussi?
- Bill: Ouais! Bien sûr!

Il s'agit d'une boucle conditionnelle ou d'un cycle .


- Wirth: Hé, j'en ai un autre, tu le veux aussi?
- Bill: Ouais! Bien sûr!

Mais il n'y avait pas de bonbon, et Bill a obtenu une exception de pointeur nul commun.




Attention - si Alexandrescu reviendra soudainement et continuera à nourrir Bill avec des bonbons - un débordement de tampon se produira. Tant que Bill acceptera toujours un nouveau bonbon.


débordement de tampon




Le lendemain, Wirth était préparé. Il a un gros sac de bonbons.


- Wirth: Ok, laissez-moi vérifier mon sac ....
- Wirth: J'ai encore des bonbons. Bill, tu veux un bonbon?
- Bill: Ouais! Bien sûr!

Dans ce cas, Wirth ne fournira un bonbon que s'il en a un.
Ici, nous avons obtenu un cycle avec condition préalable .




Mais un jour, Bill est venu chez Wirth, et chez lui:


- Bill: DONNEZ-MOI UN BONBON!
- Wirth: Rien ne dure éternellement! Vous avez tout mangé!
- Bill: Mais je le prendrai DANS TOUS LES CAS !!!
- Bill: AVEZ-VOUS UN BONBON ???

C'était un cycle avec postcondition . Triste histoire. Dieu merci, la police était à proximité. Soyez prudent la prochaine fois, et ne nourrissez pas les oiseaux sauvages (et Bill).





Des décennies plus tard, Dan Abramov arrive chez Bill et met tous ses bonbons sur la table:


- Dan: sans voix regardant Bill.
- Bill: sans voix regardant un premier bonbon
- Dan: Bill, tu en veux un sur ces bonbons?
- Bill: Oui, bien sûr.
- Dan: Te voici.

C'était une boucle contrôlée par la collection .




Juste après, Dan a pris un autre sac, a mis tous les bonbons sur la table, les a comptés et les a remis dans le sac.


- Dan: Bill, on dirait que j'ai encore des bonbons. Voulez-vous un bonbon?
- Bill: Oui, bien sûr.
- Dan: Te voici.

C'était une boucle contrôlée par le nombre .





Tôt ou tard, mais Bjarne Stroustrup vient nourrir Bill.


- Bjarne: Bill, tu veux un bonbon.
- Bill: Oui, bien sûr.
- Bjarne: Le voici.
- Bjarne: Bill, tu veux un bonbon.
- Projet de loi: - - -

Bill grignotait un bonbon. Il était occupé et rien ne peut le déranger. Il a levé un mutex , le fil s'est bloqué et le temps s'arrête ...


frein filet


Bjarne était très intelligent et il a trouvé une solution:


- Bjarne: Bill, tu veux un bonbon.
- Projet de loi: - - -
- Bjarne: Ok, j'attendrai pour finir de grignoter ...

Ici, nous avons obtenu une synchronisation des threads .




Ok, cette fois nous allons appeler Peter_Norton.


- Peter: Bill, tu veux un bonbon.
- Bill: Ouais! Bien sûr!
- Peter: Je vais fournir un pack complet. Grignotez-le vous-même.
Next Bill récupérera les bonbons un par un dans un sac et les mangera un par un.

Cette opération ou séquence est appelée LIFO - Last it, First out. Tant que les bonbons du bas de l'emballage seront consommés en dernier.
Dans le même temps, la digestion de Bill est un FIFO - premier entré , premier sorti. Il fallait le savoir avant.


FIFO




Donald_Knuth a également rejoint l'équipe d'alimentation. Mais un jour, il s'est lassé d'acheter de nouveaux bonbons pour Bill, et il a demandé à une entreprise de restauration de le faire.


- Donald: Hé, mon ami, pouvez-vous acheter les meilleurs bonbons dans le magasin le plus proche et les présenter à Bill? Voici l'adresse et l'argent de Bill ...
Depuis lors, Bill a toujours de nouveaux bonbons de Donald.
Dans ce cas, une entreprise de restauration est une fonction , et l'adresse et l'argent sont des arguments . Et un bonbon est une valeur de retour .
Si pour la même adresse et le même montant d'argent, Bill recevra toujours les mêmes bonbons - cela s'appellera une fonction pure .
Mais seulement dans le cas où l'entreprise ne transférera que des bonbons du point A au point B, et un magasin sera toujours une fonction non pure, tant qu'il perd des bonbons en les vendant ... et en obtenant de l'argent! Cela change donc l' état interne .


Mais Dennis_Ritchie était même intelligent!


- Dennis: Salut Bill, tu veux un bonbon?
- Bill: Tu le sais!
- Dennis: Voici donc une adresse. Vous y trouverez votre bonbon tant désiré.

C'était un pointeur .


Mais, Bill a atteint cette adresse où il n'a trouvé qu'un objet militaire secret. Personne ne l'a revu depuis.


Quelques mois plus tard, après s'être échappé de prison, il a essayé de répéter, mais encore une fois il ne peut pas atteindre «la cible». Cette fois, quelque chose l'arrêtait à distance - des murs invisibles et indestructibles de contrôle des limites .




Mais un jour ... Même, pour dire la vérité - nuit - Cyberdemon vient chez Bill et crie:


- Cyberdemon: VOUS VOULEZ UN BONBON?
- Bill: OUI! AU JOUR, ET ALORS LES ÉTOILES BRILLENT! TOUJOURS!

Donc, Bill a encore une fois ses bonbons. Mais c'est une histoire un peu triste, tant qu'il oublie de vérifier le type de charge utile ou d'effectuer toute autre validation de données . ️





Après cela, Bill s'est réveillé dans le vide et a entendu:


- Cosmos: Bill! Voulez-vous un bonbon?
- Bill: Oui!
- Cosmos: Bill! Voulez-vous un bonbon?
- Bill: Oui!
- Cosmos: Bill! Voulez-vous un bonbon?
- Bill: Oui!

Voici comment fonctionne ping .




Dans les systèmes perturbés avec une latence non nulle, cela pourrait ressembler à ceci:


- Cosmos: Bill! Voulez-vous un bonbon?
- Cosmos: Bill! Voulez-vous un bonbon?
- Cosmos: Bill! Voulez-vous un bonbon?
- Bill: Oui!
- Bill: Oui!
- Bill: Oui!

Mais ce cas n'est valable que pour TCP / UDP . Dans le cas de TCP / IP , il peut être


- Cosmos: Bill! Voulez-vous un bonbon? Bill! Voulez-vous un bonbon?
- Cosmos: Bill! Voulez-vous un bonbon?
- Bill: Oui! Oui! Oui!

Comme les longs frères et sœurs seront joints par le temps ou le facteur de taille (alias MTU ).



La fin


J'ai beaucoup d'histoires inédites, comme un projet de loi et Gang-of-Four , ou des bonbons sans navigateur .
Mais permettez-moi de parler de la dernière, à propos de The Indivisible Candy:


Bill le mange des centaines de fois, mais il remonte dans sa main, sans croquer et même toujours sucré!
Les bonbons indivisibles peuvent donc être un singleton ou une fuite de mémoire , car le garbage collector ne peut pas le digérer.

Alors, pouvez-vous décrire quelque chose de l'informatique dans un style bonbon? À nourrir enseigner à Bill et le faire entrer dans l'informatique.


Bill


Bill a toujours très faim et il est affamé. Vous devez le nourrir. Ici. Dans les commentaires.


PS: Ceci est une traduction d'un article vieux de 10 ans . L'article original "The Val`s Candies" a été publié il y a 8 ans, et depuis ce temps, il a reçu de nombreux nouveaux exemples sous forme de commentaires d'utilisateurs - récursivité, délégation, interfaces, débordement de pile, procédures vs fonctions, classes, arbres B et ainsi de suite. Mais ... dans une autre dimension.

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


All Articles