Der Kuchen ist eine Lüge

Haben Sie jemals darüber nachgedacht, wie Sie die Programmierung dem erklären können, der noch nie zuvor damit konfrontiert war? Es könnte ein Problem sein, solange ein neuer Sie nicht versteht.


Stellen wir uns also vor - Sie haben einen Freund, der nicht von der Informatik beschmutzt ist, nie versucht hat, etwas zu automatisieren, nie Factorio gespielt hat, nie eine einzige Codezeile geschrieben hat.


Stellen wir uns also einen normalen Menschen vor.


Und nennen wir ihn Bill . Er ist nicht sehr gut in Mathe, nur "nicht gut", aber er liebt Süßigkeiten !



Ihre Aufgabe ist es, Bill einige grundlegende (oder magische) IT-Dinge beizubringen, die Sie jeden Tag tun. Die einfachsten.
Also, was sollst du zuerst tun? Grundsätzlich - FÜTTER IHN!


Füttere ihn!


Lange Rede, kurzer Sinn, aber eines Tages fragte Andrey Alexandrescu Bill:


- Andrey: Hallo Bill, willst du eine Süßigkeit?
- Bill: Ja sicher!

Dann holte Bill die Süßigkeiten, wickelte sie aus der Bonbonverpackung und aß die Nutzlast .
Einfach? Und wir haben zwei magische Wörter verwendet!




Nur wenige Tage später fragte Wirth Bill:


- Wirth: Hallo Bill, willst du eine Süßigkeit?
- Bill: Ja! Sicher!
- Wirth: Hey, ich habe noch einen, willst du das auch?
- Bill: Ja! Sicher!

Dies ist eine zustandsgesteuerte Schleife oder ein Zyklus .


- Wirth: Hey, ich habe noch einen, willst du das auch?
- Bill: Ja! Sicher!

Aber es gab keine Süßigkeiten und Bill bekam eine häufige Nullzeiger-Ausnahme .




Achtung - wenn Alexandrescu plötzlich zurückkehrt und Bill weiterhin mit Süßigkeiten füttert - tritt ein Pufferüberlauf auf. Solange Bill immer eine neue Süßigkeit akzeptiert.


Pufferüberlauf




Am nächsten Tag war Wirth vorbereitet. Er hat eine große Tüte Süßigkeiten.


- Wirth: Ok, lass mich meine Tasche überprüfen ...
- Wirth: Ich habe noch Süßigkeiten. Bill, willst du eine Süßigkeit?
- Bill: Ja! Sicher!

In diesem Fall stellt Wirth nur dann Süßigkeiten zur Verfügung, wenn er eine hat.
Hier haben wir einen Zyklus mit Vorbedingung .




Aber eines Tages kommt Bill zu Wirths Haus und Haus:


- Bill: Gib mir eine Süßigkeit!
- Wirth: Nichts hält ewig! Du hast alles gegessen!
- Bill: Aber ich werde es in jedem Fall nehmen !!!
- Bill: HAST DU EINE SÜSSIGKEIT ???

Es war ein Zyklus mit Nachbedingung . Traurige Geschichte. Gott sei Dank war die Polizei in der Nähe. Seien Sie beim nächsten Mal vorsichtig und füttern Sie keine Wildvögel (und Bill).





Jahrzehnte später kommt Dan Abramov zu Bill und legt alle seine Süßigkeiten auf den Tisch:


- Dan: sprachlos Bill an.
- Bill: sprachlos auf eine erste Süßigkeit blicken
- Dan: Bill, willst du eine auf diesen Süßigkeiten?
- Bill: Ja sicher.
- Dan: Hier bist du.

Es war eine sammlungsgesteuerte Schleife .




Kurz danach holte Dan eine weitere Tasche, stellte alle Süßigkeiten auf den Tisch, zählte sie und stellte sie wieder in die Tasche.


- Dan: Bill, sieh aus, als hätte ich noch Süßigkeiten. Willst du eine Süßigkeit?
- Bill: Ja sicher.
- Dan: Hier bist du.

Es war eine zählgesteuerte Schleife .





Früher oder später, aber Bjarne Stroustrup kommt, um Bill zu füttern.


- Bjarne: Bill, willst du eine Süßigkeit?
- Bill: Ja sicher.
- Bjarne: Hier ist es.
- Bjarne: Bill, willst du eine Süßigkeit?
- Rechnung: - - -

Bill kaute eine Süßigkeit. Er war beschäftigt und nichts kann ihn stören. Er hat einen Mutex ausgelöst , der Thread wurde gesperrt und die Zeit bleibt stehen ...


Gewindesperre


Bjarne war sehr klug und fand eine Lösung:


- Bjarne: Bill, willst du eine Süßigkeit?
- Rechnung: - - -
- Bjarne: Ok, ich werde warten, bis ich fertig bin ...

Hier haben wir eine Thread-Synchronisation .




Ok, diesmal rufen wir nach Peter_Norton.


- Peter: Bill, willst du eine Süßigkeit?
- Bill: Ja! Sicher!
- Peter: Ich werde eine ganze Packung zur Verfügung stellen. Mach es selbst.
Als nächstes holt Bill nacheinander Süßigkeiten aus einer Tüte und isst sie nacheinander.

Diese Operation oder Sequenz heißt LIFO - Last it, First out. Solange die Süßigkeiten vom Boden der Packung zuletzt gegessen werden.
Gleichzeitig ist Bills Verdauung ein FIFO - first in, first out. Du musstest es vorher wissen.


FIFO




Donald_Knuth trat ebenfalls dem Fütterungsteam bei. Aber eines Tages hatte er es satt, neue Süßigkeiten für Bill zu kaufen, und er bat eine Catering-Firma, dies zu tun.


- Donald: Hey, mein Freund, kannst du die besten Süßigkeiten im nächsten Laden kaufen und sie Bill präsentieren? Hier sind Bills Adresse und Geld ...
Seit dieser Zeit hat Bill immer neue Süßigkeiten von Donald.
In diesem Fall ist ein Catering-Unternehmen eine Funktion , und Adresse und Geld sind Argumente . Und eine Süßigkeit ist ein Rückgabewert .
Wenn Bill für dieselbe Adresse und denselben Geldbetrag immer dieselben Süßigkeiten erhält, wird dies als reine Funktion bezeichnet .
Aber nur für den Fall, dass das Unternehmen nur Süßigkeiten von Punkt A nach Punkt B transferiert und ein Geschäft immer eine nicht reine Funktion ist, solange es Süßigkeiten verliert, indem es sie verkauft ... und Geld bekommt! Es ändert also den internen Zustand .


Aber Dennis_Ritchie war sogar schlau!


- Dennis: Hallo Bill, willst du eine Süßigkeit?
- Bill: Du weißt es!
- Dennis: Also hier ist eine Adresse. Dort finden Sie Ihre gewünschten Süßigkeiten.

Es war ein Zeiger .


Aber dann erreichte Bill diese Adresse und fand nur ein geheimes militärisches Objekt. Niemand hat ihn seitdem gesehen.


Einige Monate später, nachdem er aus dem Gefängnis entkommen war, versuchte er es zu wiederholen, konnte aber erneut „das Ziel“ nicht erreichen. Diesmal hielt ihn etwas in einiger Entfernung auf - unsichtbare und unzerstörbare Grenzen .




Aber eines Tages ... Um die Wahrheit zu sagen - Nacht - kommt Cyberdemon zu Bills Haus und schreit:


- Cyberdemon: WOLLEN SIE EINE SÜSSIGKEIT?
- Bill: JA! Am Tag und dann leuchten die Sterne! IMMER!

Also hat Bill wieder seine Süßigkeiten. Dies ist jedoch eine etwas traurige Geschichte, solange er vergisst, die Art der Nutzlast zu überprüfen oder eine andere Datenüberprüfung durchzuführen. ️





Danach wachte Bill in einer Leere auf und hörte:


- Kosmos: Bill! Willst du eine Süßigkeit?
- Bill: Ja!
- Kosmos: Bill! Willst du eine Süßigkeit?
- Bill: Ja!
- Kosmos: Bill! Willst du eine Süßigkeit?
- Bill: Ja!

So funktioniert Ping .




In gestörten Systemen mit einer Latenz ungleich Null könnte dies so aussehen:


- Kosmos: Bill! Willst du eine Süßigkeit?
- Kosmos: Bill! Willst du eine Süßigkeit?
- Kosmos: Bill! Willst du eine Süßigkeit?
- Bill: Ja!
- Bill: Ja!
- Bill: Ja!

Dieser Fall gilt jedoch nur für TCP / UDP . Im Fall von TCP / IP kann dies der Fall sein


- Kosmos: Bill! Willst du eine Süßigkeit? Bill! Willst du eine Süßigkeit?
- Kosmos: Bill! Willst du eine Süßigkeit?
- Bill: Ja! Ja! Ja!

Solange lange Geschwisterpakete nach Zeit oder Größenfaktor (auch bekannt als MTU ) verbunden werden.



Das Ende


Ich habe viele unerzählte Geschichten, wie eine Bill and Gang-of-Four oder Süßigkeiten ohne Cross-Browser .
Aber lassen Sie mich dem letzten von The Indivisible Candy erzählen:


Bill isst es hunderte Male, aber es zappelt zurück zu seiner Hand, ungehackt und sogar noch süß!
Unteilbare Süßigkeiten können also ein Singleton oder ein Speicherverlust sein , da der lange Müllsammler sie nicht verdauen kann.

Können Sie also etwas aus der IT in einem Süßigkeitenstil beschreiben? Zu füttern Bringen Sie Bill bei und bringen Sie ihn in die IT.


Bill


Bill ist immer noch sehr hungrig und hungert. Du musst ihn füttern. Hier. In Kommentaren.


PS: Dies ist eine Übersetzung eines 10 Jahre alten Artikels . Der Originalartikel „The Val`s Candies“ wurde vor 8 Jahren veröffentlicht und hat seitdem viele neue Beispiele als Benutzerkommentare erhalten - Rekursion, Delegierung, Schnittstellen, Stapelüberlauf, Prozeduren gegen Funktionen, Klassen, B-Bäume und so weiter. Aber ... in einer anderen Dimension.

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


All Articles