Artikel von 2006.Björn Straustrup, Erfinder der Programmiersprache C ++, schützt sein Erbe und erklärt, was mit dem größten Teil des Programmcodes nicht stimmt.
In den 1980er und 90er Jahren entwickelte und implementierte Björn Straustrup die Programmiersprache C ++, die die objektorientierte Programmierung populär machte und viele andere Programmiersprachen, einschließlich Java, beeinflusste.
C ++ bleibt eine archetypische "High-Level" -Computersprache (dh eine Sprache, die die Merkmale einer natürlichen menschlichen Sprache bewahrt) und wird immer noch von Millionen von Programmierern verwendet. Viele der Systeme und Anwendungen des PC- und Internet-Zeitalters wurden in C ++ geschrieben. Trotzdem bleibt die Sprache umstritten, vor allem, weil bekannt ist, dass sie schwer zu erlernen und zu verwenden ist, und weil Entwickler aufgrund des Straustrup-Designs schwerwiegende Programmierfehler machen können, um ihre Freiheit zu wahren.
Straustrup, der seit vielen Jahren bei AT & T Bell Labs arbeitet, ist jetzt Professor für Informatik am Department of Engineering der Texas A & M University in der Nähe von Houston.
Technologie-Review: Warum ist so viel Software so schlecht?Björn Straustrup: Einige Programme sind in jeder
Hinsicht ziemlich gut. Denken Sie an Mars Rovers, Google und das Humangenomprojekt. Das ist Qualitätssoftware! Vor fünfzehn Jahren würden die meisten Menschen und insbesondere die meisten Experten sagen, dass jedes dieser Beispiele unmöglich ist. Unsere technologische Zivilisation hängt von Software ab. Wenn die Software also wirklich so schlecht wäre wie ihr schlechtester Ruf, wären die meisten von uns bereits tot.
Andererseits kann mich das Betrachten von „typischen“ Codefragmenten zum Weinen bringen. Die Struktur ist erschreckend und Programmierer haben offensichtlich nicht an Korrektheit, Algorithmen, Datenstrukturen oder Wartbarkeit gedacht. Die meisten Leute lesen den Code nicht wirklich; Sie sehen nur, wie der Internet Explorer langsamer wird.
Ich denke, das eigentliche Problem ist, dass „wir“ (dh Softwareentwickler) sich in einem ständigen Ausnahmezustand befinden und uns an einen Strohhalm klammern, um unsere Arbeit zu erledigen. Wir vollbringen viele kleine Wunder durch Versuch und Irrtum, übermäßigen Einsatz von roher Gewalt und viele Versuche, aber oft reicht dies nicht aus.
Softwareentwickler sind Meister in der komplexen Kunst geworden, aus unzuverlässigen Teilen ausreichend zuverlässige Systeme zu erstellen. Das Problem ist, dass wir oft nicht genau wissen, wie wir es gemacht haben: Das System hat sich einfach in etwas verwandelt, das nur minimal akzeptabel ist. Persönlich möchte ich lieber wissen, wann das System funktioniert und warum es funktioniert.
Technologieüberprüfung: Wie können wir das Chaos beheben, in dem wir uns befinden?Björn Straustrup: Theoretisch ist die Antwort einfach: Trainieren Sie unsere Softwareentwickler besser, verwenden Sie geeignetere Entwurfsmethoden und verwenden Sie flexibles Design, um langfristig zu denken. Belohnen Sie korrekte, zuverlässige und sichere Systeme. Für Schlamperei bestrafen.
Das ist eigentlich unmöglich. Leute belohnen Entwickler, deren Software billig ist, Fehler aufweist und zuerst veröffentlicht wird. Das liegt daran, dass die Leute neue Geräte brauchen. Sie brauchen keine Unannehmlichkeiten, sie möchten keine neuen Möglichkeiten der Interaktion mit ihren Computern erlernen, sie möchten keine Verzögerungen bei der Lieferung und sie möchten nicht für Qualität bezahlen (es sei denn, dies ist offensichtlich, aber meistens auch dann nicht). Und ohne echte Änderungen im Benutzerverhalten ist es unwahrscheinlich, dass sich Softwareanbieter ändern.
Wir können die Welt nicht einfach für ein Jahrzehnt aufhalten, während wir alles von unseren Kaffeemaschinen bis zu unseren Finanzsystemen neu programmieren. Auf der anderen Seite ist es teuer, gefährlich und deprimierend, weiterhin willkürlich zu arbeiten. Es sind erhebliche Verbesserungen erforderlich, die nur schrittweise auftreten können. Sie müssen zu einer breiten Front kommen; Nur eine Änderung reicht nicht aus.
Eines der Probleme ist, dass „akademische Schornsteine“ stören: Zu viele Menschen fördern ein Gebiet wie ein Allheilmittel. Effizientere Entwurfsmethoden können helfen, bessere Spezifikationsmethoden können helfen, bessere Programmiersprachen können helfen, bessere Testtechnologien können helfen, eine bessere Infrastruktur auf mittlerer Ebene, ein besseres Verständnis der Anwendungsbereiche können helfen, ein besseres Verständnis der Datenstrukturen und Algorithmen kann helfen Hilfe - und so weiter. Beispielsweise können Typentheorie, Modellentwicklung und formale Methoden in einigen Bereichen zweifellos erhebliche Unterstützung bieten, sie werden jedoch nur als Lösung zum Ausschluss anderer Ansätze gefördert, von denen jeder die Ablehnung von Großprojekten garantiert. Menschen fördern, was sie wissen und was sie gesehen haben; wie sonst? Aber nur wenige Menschen haben die technische Reife, um Anforderungen und Ressourcen in Einklang zu bringen.
Technologieüberblick: Die Idee hinter C ++ war, dass Programmierer im Austausch für effizienteren Code aktiver arbeiten würden. Bell Labs wollte eine Sprache verwenden, mit der einige wirklich kluge Leute Code schreiben würden, der auf Computern wie Electronic Switching Systems (ESS) funktioniert, die nicht sehr schnell sind. Heute gibt es viele schnelle Computer und viele Softwareentwickler. Bedeutet dies, dass das gesamte Wesen von C ++ negiert wird?Björn Straustrup: C ++ wurde nicht speziell für große Schaltgeräte entwickelt, sondern für eine Vielzahl von Anwendungen. Bell Labs war die Heimat einer unglaublichen Reihe interessanter Projekte, die alle Größenordnungen abdeckten und fast alle Arten von Computern und Betriebssystemen verwendeten. Aber ja, der durchschnittliche Programmierer von Bell Labs war wesentlich leistungsfähiger als die meisten Leute von einem „durchschnittlichen Programmierer“ denken, und Zuverlässigkeit und Leistung (in dieser Reihenfolge) wurden als wesentlich wichtiger angesehen als an den meisten anderen Orten.
Die Leistung ist in vielen Anwendungen, die mich interessieren, immer noch ein Problem: Reaktionsfähigkeit der Schnittstellen, Start- und Herunterfahrzeiten von Anwendungen. Softwareentwickler neutralisieren die erstaunliche Leistung moderner Computerhardware, indem sie redundante (Software-) Schicht-für-Schicht-Abstraktionen hinzufügen. Es scheint, dass wir mit den Einschränkungen der Linearbeschleunigung für Hardware konfrontiert sind, aber in vielen Fällen könnten wir in der Software einige Größenordnungen gewinnen.
C ++ wurde jedoch wirklich zu „fachkundig“, während das Niveau der effektiven formalen Ausbildung eines durchschnittlichen Softwareentwicklers zurückging. Die Lösung besteht jedoch nicht darin, die Programmiersprachen bis zur Absurdität zu vereinfachen, sondern verschiedene Programmiersprachen zu verwenden und mehr Experten auszubilden. Diese Experten müssen einige Sprachen verwenden, und C ++ ist eine dieser Sprachen.
Technologische Überprüfung: War Ihre Entscheidung, im Nachhinein beim Entwerfen von C ++ die Effizienz der Software, ihre Sicherheit und Zuverlässigkeit gegen die Leistung des Laufzeitcodes auszutauschen, ein grundlegender Fehler?
Björn Straustrup: Nun, ich glaube nicht, dass ich einen solchen Austausch gemacht habe. Ich möchte eleganten und effizienten Code. Manchmal verstehe ich es. Diese Dichotomien (zwischen Effizienz und Korrektheit, Effizienz und Zeit eines Programmierers, Effizienz im Vergleich zu einem hohen Niveau usw.) sind fiktiv.
Was ich wirklich getan habe, war die Entwicklung von C ++ als primärer Systemprogrammiersprache: Ich wollte Gerätetreiber, eingebettete Systeme und anderen Code schreiben können, den ich direkt verwenden musste. Dann wollte ich, dass C ++ eine gute Sprache für die Entwicklung von Tools ist. Dies erforderte Flexibilität und Leistung sowie die Fähigkeit, elegante Schnittstellen auszudrücken. Meiner Meinung nach musste man, um eine höhere Ebene zu erstellen und vollständige Anwendungen zu erstellen, zuerst Bibliotheken kaufen, erstellen oder ausleihen, die die entsprechenden Abstraktionen bereitstellen. Wenn Benutzer Probleme mit C ++ haben, besteht das eigentliche Problem häufig darin, dass sie nicht über die entsprechenden Bibliotheken verfügen oder die verfügbaren Bibliotheken nicht finden können.
Andere Sprachen haben versucht, Anwendungen auf hoher Ebene direkter zu unterstützen.
Dies funktioniert, aber häufig geht diese Unterstützung zu Lasten der Spezialisierung. Persönlich würde ich kein Werkzeug entwickeln, das nur das tun kann, was ich wollte - ich strebe nach Gemeinschaft.
Technologie-Review: Wie erklären Sie die Tatsache, dass C ++ von vielen Programmierern häufig kritisiert, aber gleichzeitig sehr häufig verwendet wird? Warum ist diese Sprache so erfolgreich?Björn Straustrup: Die Antwort ist einfach: Es gibt nur zwei Arten von Sprachen: die, über die sich jeder beschwert, und die, die niemand benutzt.
Es gibt nützlichere Systeme, die in Sprachen entwickelt wurden, die als schrecklich gelten, als Sprachen, die als schön gelobt werden - und vieles mehr. Das Ziel einer Programmiersprache ist es, gute Systeme zu schaffen, in denen „gut“ auf viele Arten definiert werden kann. Meine kurze Definition lautet: Etwas stimmt, wird unterstützt und ist schnell genug. Ästhetik ist wichtig, aber vor allem sollte Sprache nützlich sein. es sollte den Programmierern dieser Welt ermöglichen, realistische Ideen präzise und kostengünstig auszudrücken.
Der Hauptgrund für den Erfolg von C ++ ist, dass es die begrenzten Designziele erfüllt: Es kann eine Vielzahl von Ideen direkt effizient ausdrücken.
C ++ sollte nicht nur eine Sache wirklich gut machen oder Menschen daran hindern, Dinge zu tun, die als "schlecht" gelten. Stattdessen konzentrierte ich mich auf Allgemeinheit und Leistung.
Ich bin sicher, dass es für jeden Programmierer, der C ++ nicht mag, jemanden gibt, der diese Sprache mag. Mein Freund ging jedoch zur Konferenz, wo der Hauptredner das Publikum aufforderte, zu demonstrieren, indem er die Hände hob: die erste, wie viele Leute C ++ nicht mochten, und die zweite, wie viele Leute das Programm in C ++ schrieben. Die erste Gruppe hatte doppelt so viele Leute wie die zweite. Ein Ausdruck der Feindseligkeit gegenüber etwas, das Sie nicht kennen, wird normalerweise als Vorurteil bezeichnet. Darüber hinaus sind diejenigen, die sich beschweren, immer lauter und selbstbewusster als Unterstützer - vernünftige Leute erkennen die Mängel. Ich glaube, ich weiß mehr über Probleme mit C ++ als über irgendjemanden, aber ich weiß auch, wie man sie vermeidet und wie man die Stärken dieser Sprache nutzt.
Und natürlich erwarten Sie nicht, dass Befürworter von Sprachen, die die Konkurrenz mit C ++ verloren haben, dieser Tatsache gegenüber höflich sind. Die Softwareentwicklung ist nicht so professionell, obwohl ich hoffe, dass dies irgendwann passieren wird. In dieser Hinsicht ist die Wissenschaft anders: Wenn ein neues Werkzeug, eine neue Technik oder eine neue Theorie gewinnt, sehen die Menschen dies als Fortschritt. In der Software haben die Beiträge von Wettbewerbern und Vorgängern keine breite Anerkennung, Wertschätzung oder gar Verständnis erhalten.
Technologieüberblick: In „Design und Evolution von C ++“ argumentieren Sie, dass Kierkegaard Ihr Sprachkonzept beeinflusst hat. Das ist ein Witz?Björn Straustrup: Vielleicht eine etwas anmaßende Aussage, aber kein Scherz. Viele Gedanken zur Softwareentwicklung konzentrieren sich auf eine Gruppe, ein Team oder ein Unternehmen. Dies geschieht oft in einem solchen Ausmaß, dass eine Person vollständig in die Unternehmenskultur eingetaucht ist, ohne sich auf einzigartige Talente und Fähigkeiten einzulassen. Unternehmenspraxis kann Menschen mit außergewöhnlichen Fähigkeiten und technischer Initiative feindlich gegenüberstehen. Ich finde dieses Techie-Management grausam und verschwenderisch. Kierkegaard war ein starker Befürworter des Einzelnen gegen die „Menge“ und sprach ernsthaft die Frage nach der Bedeutung von Ästhetik und ethischem Verhalten an. Ich konnte nicht auf ein bestimmtes Merkmal der Sprache hinweisen und sagen: „Sie sehen, es gibt den Einfluss eines Philosophen des 19. Jahrhunderts“, aber es ist eine der Wurzeln meiner Zurückhaltung, das „Expertenlevel“ zu beseitigen, den „Missbrauch“ abzuschaffen und die Fähigkeit einzuschränken, nur die Anwendungen zu unterstützen, die dies tun wie ich weiß, werden sie nützlich sein. Ich mag jedoch Kierkegaards religiöse Philosophie nicht besonders.
Technologiebericht: Was bereuen Sie am meisten?Björn Straustrup: Ich bereue nichts! Natürlich träume ich davon, was ich anders und besser machen könnte, aber im Ernst, wer bin ich, um beispielsweise den Björn-Jahrgang 1984 wiederzuentdecken? Er war vielleicht weniger erfahren als ich, aber er war nicht weniger intelligent, wahrscheinlich schlauer, und er verstand die Worte von 1984 besser als ich. C ++ wird verwendet, um viele Systeme zu erstellen, die unser Leben verbessern. Dies hat sich erheblich positiv auf spätere Sprachen und Systeme ausgewirkt. Darauf kann man stolz sein.