Drei Paradigmen

Hallo habr

Ich mache Sie auf eine Übersetzung des Artikels „ Drei Paradigmen “ von Robert C. Martin (Onkel Bob) aufmerksam.

Bild

In den letzten 40 Jahren haben Hardware-Technologien die Rechenleistung unserer Geräte um mehr als zwanzig Größenordnungen gesteigert. Jetzt spielen wir Angry Birds auf unseren Handys, die die Rechenleistung eines freongekühlten Supercomputers der 70er Jahre des letzten Jahrhunderts haben.

In den letzten 40 Jahren hat sich an der Software-Technologie jedoch nicht viel geändert. Am Ende verwenden wir immer noch die if, while-Schleifen und Zuweisungsoperatoren, die wir in den 60er Jahren verwendet haben. Wenn ich einen Programmierer aus dem Jahr 1960 nehmen und ihn hierher bringen würde, damit er an meinem Laptop sitzen und Code schreiben könnte, würde er 24 Stunden brauchen, um sich von dem Schock zu erholen, aber er könnte diesen Code schreiben. Die Prinzipien haben sich nicht so sehr geändert.

Beim Schreiben von Programmen haben sich drei Dinge geändert. Ich spreche nicht von Hardware, nicht von Computergeschwindigkeit und nicht von den unglaublichen Werkzeugen, die wir haben. Ich meine den Code selbst. Drei Dinge haben sich im Code geändert. Sie können sie Paradigmen nennen. Und alle wurden vor mehr als 40 Jahren in einem Jahrzehnt „entdeckt“.

* 1968 - Strukturprogrammierung . Edsger Dijkstra schrieb seinen Artikel: „Über die Gefahren des Go-To-Operators“ und eine Reihe anderer Dokumente und Artikel, in denen vorgeschlagen wurde, den ungezügelten Go-To-Ansatz aufzugeben und ihn durch Tools wie if / then / else und while-Schleifen zu ersetzen.

* 1966 - Objektorientierte Programmierung . Ole-Johan Dahl und Kristen Nyugor , die die Sprache Algol studieren, „entdecken“ Objekte und erschaffen die erste objektorientierte Sprache, Simula-67. Trotz der Tatsache, dass dieser Erfolg viele Perspektiven hat, hat es keine neuen Funktionen in unseren Code gebracht. Außerdem hat es einen entfernt. Schließlich verschwand mit dem Aufkommen des Polymorphismus das Bedürfnis nach Zeigern auf Funktionen, aber tatsächlich verschwand es.

* 1957 - Funktionale Programmierung . John McCarthy erschafft Lisp, die erste funktionale Sprache. Lisp basierte auf Lambda-Kalkül, der in den 30er Jahren von der Alonzo-Kirche erstellt wurde. Obwohl es viele Perspektiven für die funktionale Programmierung gibt, gibt es bei allen funktionalen Programmen eine große Einschränkung. Sie verwenden keine Zuordnung.

Drei Paradigmen. Drei Einschränkungen. Die strukturelle Programmierung legt die Regeln für die direkte Steuerungsübertragung fest. Die objektorientierte Programmierung führt Regeln für die indirekte Übertragung von Kontrolle ein. Durch die funktionale Programmierung werden Zuweisungsbeschränkungen eingeführt. Alle diese Paradigmen haben etwas weggenommen. Keiner von ihnen hat neue Funktionen hinzugefügt. Jeder von ihnen hat erhöhte Anforderungen und reduzierte Möglichkeiten.

Können wir ein anderes Paradigma schaffen? Gibt es noch etwas, das entfernt werden kann?

Seit 40 Jahren gibt es kein neues Paradigma. Vielleicht ist dies ein gutes Zeichen dafür, dass es nichts mehr zu suchen gibt.

Sollen wir alle diese Paradigmen verwenden, oder können wir wählen?

Im Laufe der Zeit haben wir beschlossen, sie umzusetzen. Die Einführung der ersten strukturierten Programmierung wurde durch die Abschaffung des Go-To-Prinzips ermöglicht (wie von Dijkstra in seinem Artikel empfohlen). OOP wurde erfolgreich implementiert, indem Zeiger durch Funktionen in unseren modernen Sprachen unter Verwendung von Polymorphismus (z. B. Java, C #, Ruby) ersetzt wurden. Zumindest für diese beiden lautet die Antwort auf diese Frage, dass wir sie verwenden MÜSSEN. Alle anderen Optionen wurden ausgeschlossen oder zumindest stark eingeschränkt.

Aber was ist mit funktionaler Programmierung? Sollten wir Sprachen verwenden, die keinen Zuweisungsoperator haben? Vielleicht ja! Wir schreiben bereits Code, der auf mehreren Kernen gut funktionieren sollte, und diese Kerne vermehren sich wie Kaninchen. Mein Laptop hat 4 Kerne. Mein nächster wird höchstwahrscheinlich 8 haben. Der nach 16. Wie werden Sie zuverlässigen Code schreiben, während 4096 Prozessoren um das Recht kämpfen, auf den Bus zuzugreifen?
Wir können kaum zwei parallele Threads zum Laufen bringen, von 2 ^ n Prozessoren ganz zu schweigen.

Warum ist die funktionale Programmierung ein wichtiger Bestandteil bei der Lösung dieses Problems? Weil solche Programme keine Zuweisung verwenden, was bedeutet, dass sie keine Nebenwirkungen haben und daher keine Probleme mit der Aktualisierbarkeit haben - zumindest ist das die Theorie.

Wir werden in zukünftigen Blogs mehr über funktionale Programmierung sprechen. Was mir in den drei oben genannten Paradigmen auffällt, sind ihre Daten. Sie sind uralt, fast älter als ich. Und seit ich vor 16, 42 Jahren war, gab es keine neuen mehr.

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


All Articles