Was ist das „ideale“ Entwicklungsziel für Programmiersprachen?





Informationen zur Veröffentlichung einer neuen Version einer bestimmten Programmiersprache werden in regelmäßigen Abständen angezeigt. Mit jeder neuen Version werden die Funktionen erweitert, neue Syntaxkonstruktionen oder andere Verbesserungen hinzugefügt.



Und dies ähnelt sehr der Entwicklung der Technologie, wie in jedem anderen Bereich der Technologie. Wenn die erstellten Kreationen mit der nächsten Stufe verbessert werden. Schneller, höher, stärker ... und gleichzeitig viel schwieriger.



Der Artikel "Demonstrative Programmierung" des Aprilscherzes hat mich über dieses Problem nachdenken lassen .



Es ist klar, dass das Veröffentlichungsdatum des Artikels für sich selbst spricht. Trotzdem fragen Sie sich aufgrund der neuen C ++ - Standards, der ständig veröffentlichten Java-Spezifikationen oder der neuen Syntax in PHP 8 unwillkürlich, ob die Entwicklung von Programmiersprachen in die richtige Richtung geht. Schließlich erhöhen die meisten Innovationen die Komplexität des Hauptarbeitswerkzeugs und lösen einige Probleme, indem implizit viele andere hinzugefügt werden.



Und was sollte am Ende des Fortschritts bei der Entwicklung einer solchen Disziplin wie der Programmierung stehen? Oder mindestens eine bestimmte Sprache? Um zu erreichen, welches ultimative "ideale" Ziel erreicht wird, werden neue Programmiersprachenstandards entwickelt?



Wenn Sie sich das ideale Endziel der Entwicklung vorstellen, zum Beispiel den Transport, dann ist dies eine sofortige Bewegung in jeder Entfernung mit einer beliebigen Nutzlast und einem Energieverbrauch von Null.



Oder was ist zum Beispiel das ideale Ziel für die Medizin? Die Armen wurden nicht krank und die Reichen erholten sich nicht, wahrscheinlich die Behandlung von Krankheiten und biologischer Unsterblichkeit.



Das „ideale“ Ziel ist natürlich ein sehr vereinfachtes Konzept. In der Tat ist "ideal" gleichbedeutend mit "unerreichbar", da Es wird immer durch die Notwendigkeit herausgefordert, einen Kompromiss zwischen verschiedenen sich gegenseitig ausschließenden Randbedingungen aufrechtzuerhalten.



Sie können die Softwareentwicklung jedoch nicht direkt mit dem Entwicklungsprozess in anderen technischen Disziplinen vergleichen. In der Tat können bei der Erstellung eines Endprodukts in einem beliebigen technischen Bereich alle komplexen Produktionsvorgänge, die eine direkte Beteiligung des Menschen erfordern, fast immer in separate, einfachere Teile oder Stufen unterteilt werden.



Dies geschieht unter anderem, damit die Komplexität einer durchgeführten Operation für den Ausführenden nicht unerschwinglich ist. Aber wie geht das in der Softwareentwicklung?



In diesem Fall meine ich die endgültige Einschränkung der Fähigkeiten einer bestimmten Person im Gegensatz zu den Möglichkeiten, technologische Prozesse in separate Stufen zu unterteilen, die jeweils von völlig unterschiedlichen Personen ausgeführt werden können (dies ist beispielsweise ein regulärer Förderer mit seiner Arbeitsteilung in elementare Operationen oder einer engen Spezialisierung von Ärzten - Spezialisten in einem bestimmten Bereich).



Schließlich ist es sogar schwierig, sich eine fantastische Organisation der Arbeit von Programmierern in Form einer Pipeline vorzustellen: Der erste Entwickler schreibt nur die Schnittstellen von Funktionen und deren Aufrufen, wonach er den Code an den zweiten Mitarbeiter überträgt. Der zweite schreibt in den Text des Programms nur Testbedingungen und bedingungslose Sprünge und leitet den Text an den dritten weiter. Der dritte ist für das Schreiben von Schleifen und die allgemeine Code-Formatierung usw. verantwortlich. - Das Ergebnis wird voraussichtlich völliger Unsinn sein.



Aus diesem Grund ist die Softwareentwicklungsbranche gezwungen, einen umfassenden Entwicklungspfad einzuschlagen (d. H. Durch Erhöhung der in der Produktion verwendeten Ressourcen). Moderne industrielle Programmiersprachen verfügen über sehr umfangreiche Funktionen zur Aufteilung des Anwendungscodes in separate Funktionen / Module / Komponenten, sodass viele Mitarbeiter gleichzeitig ein komplexes Softwareprodukt entwickeln können.



Aber auch diese Entwicklung hat eine natürliche Einschränkung. Und diese Einschränkung ist die Person selbst, da jeder Entwickler sein Arbeitswerkzeug kennen und verwenden muss, d. H. Programmiersprache.



Wenn wir die oben Analogie mit einem Förderband nehmen, dann würde jeder Arbeiter in ihm gründlich wissen , überdie meisten Maschinen und Werkzeuge in der gesamten Anlage verwendet werden, unabhängig davon , welche eine bestimmte Operation durchführt er in seinem Arbeitsplatz.



Das Paradox der Entwicklung von Programmiersprachen ist schließlich, dass wir durch Hinzufügen neuer Funktionen und syntaktischer Konstruktionen ein Arbeitswerkzeug komplizieren, das sowohl für den gemeinsamen als auch für den individuellen Gebrauch entwickelt wurde!



Und es stellt sich heraus, dass gleichzeitig mit dem Prozess der ständigen Verbesserung der Fähigkeiten von Entwicklungstools auch ein umgekehrter Prozess stattfindet - eine Erhöhung der Komplexität der Codeentwicklung durch einen einzelnen Entwickler. In der Tat ist dies der sich gegenseitig ausschließende, unüberwindbare Widerspruch.



Vielleicht ist es deshalb unmöglich, eine "Silberkugel" zu finden, die die Produktivität eines Programmierers erhöht? Schließlich sind die Aufmerksamkeit und die Fähigkeiten einer Person nicht unbegrenzt. Und alle Innovationen und Verbesserungen am Arbeitstool des Programmierers sind gezwungen, die gesamte IT-Branche auf einen umfassenden Entwicklungspfad zu bringen.



Vielleicht sollten wir grundlegend neue Ansätze entwickeln und nicht den syntaktischen Zucker in Programmiersprachen des letzten Jahrhunderts verfolgen? Oder ist es überhaupt nicht in die Höhe geschossen, weiterhin das zu verwenden, was ist, und die Theorie von Darwins Großvater wird alles für sich an seinen Platz bringen?



All Articles