Funktionale Programmierung: Ein verrücktes Spielzeug, das die Arbeitsproduktivität beeinträchtigt. Teil 2

Heute machen wir Sie auf die fortgesetzte Übersetzung von Material über die Gefahren der sogenannten "funktionalen" Programmierung aufmerksam.



Erfolg ist der Weg, nicht das Ziel.



Lassen Sie uns zugeben, dass wir Programmierer für unsere Zeit bezahlt werden. Genau wie die Bauherren, die seit zwei Jahren Löcher in der Nähe meines Hauses graben (übrigens bauen sie eine Mauer, das heißt eine Straße).

Lassen Sie uns nach der Produktivitätsformel des Programmierers suchen. Jeder, der in einem seriösen Großunternehmen gearbeitet hat, kennt eine einfache Erfolgsformel:

 = __ x __ 

▍Anzahl der behobenen Fehler


Das menschliche Gehirn ist sehr schlecht angepasst, um mit dem sogenannten „Anwendungsstatus“ in der Programmierung zu arbeiten. Irgendwann können wir nur noch etwa fünf Elemente in unserem Kurzzeitgedächtnis speichern. Ein "Zustand" bei der Programmierung sind normalerweise Daten, die im Speicher gespeichert sind. In OOP sind dies beispielsweise Objektfelder oder Variablen. Das Arbeiten mit einem veränderlichen Zustand ist dem Jonglieren sehr ähnlich. Nur wenige meiner Freunde können mit drei Bällen jonglieren, ganz zu schweigen von fünf.

OOP nutzt diese Schwächen gut aus. In OOP kann fast alles mutieren. Ich danke den höheren Kräften für die Tatsache, dass die Entwickler von OOP ernsthaft berücksichtigt haben, wovon die Produktivität der Entwickler abhängt! In OOP steht jeder veränderbare Status auch zur Verwendung an verschiedenen Stellen von Programmen als Referenz zur Verfügung. Dies bedeutet, dass der Programmierer nicht nur über den veränderlichen Zustand des Objekts nachdenken muss, mit dem er gerade arbeitet. Er muss sich an die veränderlichen Zustände weiterer 10-50 Objekte erinnern, mit denen dieses Objekt interagiert! Es ist, als würde man 50 Bälle gleichzeitig jonglieren. Dieser Zustand hat auch einen Mehrwert. Dies ist eine großartige Übung für das Gehirn.

Fehler? Ja - während des Jonglierprozesses fallen einige Bälle. Der Programmierer kann einige kleine Dinge bezüglich der Interaktion von 50 Objekten übersehen. Aber wen interessiert das ehrlich gesagt? Produktionsfehler sollten von Benutzern gemeldet werden. So arbeiten große, seriöse Organisationen. Anschließend werden die Fehlermeldungen an das JIRA-Journal gesendet (dies ist, wie Sie verstehen, ein ernstes Softwareprodukt auf Unternehmensebene). Es werden nicht einmal ein paar Jahre vergehen und die Fehler werden korrigiert. Das Problem ist gelöst!

Herr, wie ich meine Mobile-Banking-Anwendung liebe. Es ist sehr funktional, die Bank schätzt mein Geschäft und kümmert sich um meine persönlichen Daten. Fehler sind nur Möglichkeiten (wurde mir gesagt)!

Die sogenannten "funktionalen" Programmierer verstehen nicht, warum sie den Zustand isolieren und unveränderlich machen. Dies hat die traurigen Folgen einer Verringerung der Komplexität von Programmen und folglich einer Verringerung der Anzahl von Fehlern zur Folge. Wenn die Codebasis weniger Fehler enthält, müssen Programmierer weniger Probleme lösen. Entwicklungsunternehmen können Kunden keine Gebühren für die Behebung von Fehlern in Rechnung stellen. Mit funktionalen Methoden sehen Programmierer, die in einem großen, seriösen Unternehmen arbeiten, in den Augen ihrer Manager schlecht aus und beeinträchtigen gleichzeitig ihre Karrierechancen erheblich.

▍Anzahl der Codezeilen


Der Programmierer muss die Möglichkeit haben, den Managern die Ergebnisse seiner Arbeit und die Ergebnisse der Erreichung des Ziels zu demonstrieren. Was ist der effektivste Weg, um die Ergebnisse eines Programmierers auszudrücken? Dies ist natürlich die Anzahl der Codezeilen, die er geschrieben hat! Wenn wir alle auf funktionale Programmierung umsteigen würden, würden wir die Manager sehr verärgern und bei ihnen ernsthaften Verdacht auf die Effektivität unserer Arbeit aufkommen lassen. Ein „deklarativer“ Ansatz führt dazu, dass präziserer Code geschrieben wird. Durch seine Verwendung wird die Anzahl der Codezeilen in Programmen erheblich reduziert. Ich glaube, dass es völlig inakzeptabel ist, dass mit einem deklarativen Ansatz, um dasselbe Ziel zu erreichen, bis zu 3-5 Mal weniger Code benötigt wird als bei Verwendung von OOP.

Mit anderen Worten, beim Übergang zur funktionalen Programmierung wird unsere Produktivität in den Augen seriöser Unternehmensmanager buchstäblich zusammenbrechen. Dies wiederum gefährdet unsere Arbeitsplätze. Daher ist es in unserem besten Interesse, sich von der „funktionalen“ Programmierung fernzuhalten.

Der gleiche Rat gilt für Auftragnehmer, die Kunden nach Arbeitsstunden belasten. Hier ist eine einfache Erfolgsformel für sie:

 __ = ____ = $$$$$$ 

Diese Erfolgsformel gilt natürlich auch direkt für seriöse Auftragnehmer, die für die Anzahl der Codezeilen bezahlt werden:

 if (1 == '1') {  doStuff(); } else {  //  } 

▍Spaghetti-Code ist unser Brot und Butter


Im Gegensatz zur funktionalen Programmierung bietet OOP einen konsistenten Ansatz zum Schreiben von Spaghetti-Code. Dies ist äußerst vorteilhaft für die Entwicklerproduktivität. Wenn Sie einen Spaghetti-Code schreiben, müssen Sie mehr Stunden mit dem Schreiben des Codes verbringen. Dies ist ein direkter Vorteil für jeden ernsthaften objektorientierten Programmierer. Spaghetti ist nicht nur sehr lecker. Es ist auch ein äußerst wichtiges Konzept für diejenigen, die im Stil von OOP schreiben.

OOP ist ein echtes Geschenk für Auftragnehmer und Mitarbeiter seriöser Unternehmen.

Abteilung für Fehlervermeidung



Sie sollten keine Angst haben, OOP zu verwenden. Ich wiederhole - nervige Fehler sind eine Kleinigkeit, über die Sie sich keine Sorgen machen sollten. In jeder seriösen Organisation gibt es eine Abteilung zur Fehlervermeidung (auch als Abteilung für Benutzerunterstützung bezeichnet), deren Hauptaufgabe darin besteht, die Entwickler des Unternehmens vor verärgerten Kunden zu schützen. Am Ende - wenn der Client die Anwendung nicht richtig verwenden kann - ist dies nur seine Schuld.

Entwickler sollten sich nicht um Dinge kümmern, die für ihr Unternehmen nicht relevant sind, wie z. B. Fehlerberichte. Dies trägt dazu bei, einen Zustand sicherzustellen, in dem keine Unternehmensressourcen verschwendet werden. Dadurch erhalten Entwickler die Möglichkeit, neue Anwendungsfunktionen ruhig zu implementieren und ihre ganze Aufmerksamkeit darauf zu richten, objektorientierte Abstraktionen der Unternehmensklasse zu erstellen und komplexe Entwurfsmuster anzuwenden.

▍ Fehlerberichterstattungsprozess


Dieser sorgfältig konzipierte und gut geplante Prozess dient normalerweise dem Schutz der Humanressourcen von Organisationen. Sobald der Benutzer auf einen Fehler stößt, sucht er normalerweise nach der Telefonnummer der Kundendienstabteilung. Anschließend wird dem Benutzer ein großes interaktives Telefonmenü angezeigt, das verschiedene Optionen enthält. Normalerweise dauert es ca. 2-5 Minuten, um Informationen über das Menü anzuhören und die gewünschte Option auszuwählen. Mit diesem Schritt können Sie die am wenigsten persistenten Kunden herausfiltern.

Dann wird dem Kunden normalerweise mitgeteilt, dass das Unternehmen mit einem „ungewöhnlich großen Anrufvolumen“ konfrontiert ist und dass „die durchschnittliche Wartezeit 56 Minuten beträgt“. Gleichzeitig entschuldigen sie sich normalerweise beim Kunden für die Unannehmlichkeiten und sprechen darüber, wie sie ihn und sein Geschäft schätzen. In diesem Schritt entscheiden sich die meisten Kunden, keinen Fehler zu melden. Um diejenigen zu unterhalten, die es noch wagen zu warten, spielen sie normalerweise inspirierende Musik. Außerdem wird ihnen angeboten, eine neue wunderbare Anwendung auszuprobieren. Dies ist die Anwendung, mit der der Client ein Problem hatte.

Nach Ablauf der 56-minütigen Wartezeit wird der Anruf an ein Callcenter in Nordamerika weitergeleitet. Mitarbeiter solcher Call Center werden in der Regel speziell geschult, damit sie mit einem starken indischen oder bulgarischen Akzent sprechen können. Der Callcenter-Mitarbeiter antwortet, dass die betreffende Anwendung außerhalb seines Verantwortungsbereichs liegt, er wird den Kunden jedoch gerne in eine andere Abteilung wechseln.

Nach einer weiteren Wartezeit von nunmehr 42 Minuten teilt ein anderer Callcenter-Mitarbeiter mit glücklichen Gesichtsausdrücken dem Kunden mit, dass der aufgetretene Fehler tatsächlich ein Merkmal der Anwendung ist. Danach wird dem Client empfohlen, auf den Hilfeabschnitt der Anwendung zu verweisen. Wenn der Kunde weiterhin darauf besteht, dass er sich mit einem Fehler befasst, kann er sogar eine Supportanfrage erstellen. Der Client erhält möglicherweise sogar eine Antwort - etwas im Sinne von "Wiedergabe fehlgeschlagen".

Ich hoffe, Sie sind jetzt davon überzeugt, dass Fehler nicht das sind, worum sich der Programmierer kümmern sollte. Unternehmen ergreifen normalerweise ernsthafte Maßnahmen, um Entwickler vor unnötiger Zeitverschwendung zu schützen.

Vermeiden Sie „Anfängerfehler“ bei Interviews



Wenn Sie aktiv nach Arbeit suchen, bemühen Sie sich, jeglichen „funktionalen“ Unsinn aus Ihrem Lebenslauf zu entfernen. Sonst wird dich niemand ernst nehmen. Niemand in der realen Unternehmenswelt verbringt viel Zeit damit, Kinderspielzeug wie „Zusammensetzung von Funktionen“, „Reinheit“, „Monaden“ oder „Immunität“ zu studieren. Sie wollen kaum wie ein Außenseiter sein. Wenn Sie anfangen, über solche Dinge zu sprechen, wird sich die Person, die Sie interviewt, unwohl fühlen. Und wenn ein Vertreter eines potenziellen Arbeitgeberunternehmens der Meinung ist, dass Sie schlauer sind als er, sind Ihre Chancen, einen Job in diesem Unternehmen zu bekommen, gleich Null.

HR-Spezialisten, die in großen Unternehmen technisches Personal einstellen, werden zusätzlich einer intensiven Schulung unterzogen. Dadurch können sie sicher zwischen seriösen Technologien wie Java und JavaScript unterscheiden.

Stellen Sie sicher, dass Ihr Lebenslauf Verweise auf Ihre umfassenden technologischen Kenntnisse enthält, die von großen Unternehmen geschätzt werden. Fügen Sie Wörter und Ausdrücke wie "Klasse", "Vererbung", "Entwurfsmuster", "Abhängigkeitsinjektion", "FEST", "Abstrakte Fabrik" und "Singleton" hinzu.

Wenn Sie aufgefordert werden, das FizzBuzz-Problem, das häufig bei Interviews angeboten wird, auf einem Blatt Papier zu lösen, erinnern Sie sich bitte an die folgende Empfehlung: Sie müssen im Voraus auf die Lösung dieses Problems vorbereitet sein. Dies ist Ihre Chance, Ihr tiefes Wissen in den Bereichen der Programmierung zu demonstrieren, die in der Unternehmenswelt geschätzt werden. Sie sollten mit einem umfassenden Lösungsentwurf beginnen, der die Verwendung von Entwurfsmustern und anderen OOP-Techniken umfasst. Ein guter Ausgangspunkt zur Lösung dieses Problems kann FizzBuzzEnterpriseEdition sein . Viele Bewerber machen den gleichen Fehler, der für Anfänger typisch ist. Dieser Fehler liegt in der Tatsache, dass sie auf begrenzten Technologien wie Funktionen beruhen. Danach ist es nicht verwunderlich, dass nach dem Interview niemand anruft und ihnen schreibt.

Funktionale Programmierung kann wahrscheinlich nicht zur Entwicklung seriöser Softwarelösungen verwendet werden.



Wenn man die obigen Argumente ernst und genau betrachtet, kann jeder klar erkennen, dass von der Verwendung der sogenannten "funktionalen" Programmierung nichts Gutes erwartet werden kann. Es ist sehr klar, dass dieser Programmieransatz um jeden Preis vermieden werden muss.

In den letzten Jahren wurde viel Lärm um die „funktionale“ Programmierung gemacht. Aber das Gute ist, dass dieses kurzfristige Hobby der Programmierergemeinschaft bereits vergeht! Große Marktteilnehmer wie Facebook und Microsoft haben seit langem die Grenzen der funktionalen Programmierung und die absolute Überlegenheit objektorientierter Ansätze zur Organisation von Code erkannt. Sie richten ihre Bemühungen insbesondere auf eine neue Generation objektorientierter Sprachen - auf ReasonML und BosqueOOP . Solche Sprachen bringen die Veränderlichkeit des Status der Anwendung auf ein völlig neues Niveau und unterstützen glücklicherweise keinen nutzlosen funktionalen Unsinn wie unveränderliche Datenstrukturen.

Zusammenfassung: Geschenk der Götter



Hier haben Sie vielleicht eine Frage, welche Alternativen die sogenannte "funktionale" Programmierung hat. Dies ist natürlich eine objektorientierte Programmierung. OOP wird uns vom wahren Gott der Programmierung geschickt. OOP ist eine Kraft, mit der man rechnen muss. Dies ist ein großgeschriebenes Tool, das Programmierer produktiv macht. Dank OOP sind Sie und Ihr Team immer mit dem Geschäft beschäftigt (und Sie werden Ihren Job nicht verlieren). Hier ist mein Artikel, in dem ich ausführlich über OOP spreche.
Möge eine (objektorientierte) Kraft mit Ihnen sein. Und dein Code. Ich bin eins mit Kraft. Frieden für alle.

Wie viele von Ihnen wahrscheinlich vermutet haben, handelt es sich um satirisches Material. Wenn Sie ein Anfängerprogrammierer sind, nehmen Sie sich das alles nicht zu Herzen.

Funktionale Programmierung ist großartig. Wenn Sie einige Zeit damit verbringen, dieses Programmierparadigma zu erkunden, sind Sie vielen Ihrer Teamkollegen voraus.

Ich hoffe, Sie waren genauso daran interessiert, dies zu lesen wie ich.

Liebe Leser! Was magst du am meisten an OOP nicht?

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


All Articles