Kapitel 1. Neue Welt für Entwickler

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Während Andrej Karpathy von 2011 bis 2016 in Stanford mit dichten neuronalen Netzwerken ( ) und pixelorientierter Computer Vision jonglierte, arbeitete er nebenbei bei Google. Dort tüftelte er an einem Feature-Learning-System für YouTube-Videos herum. Dann beschloss er, Gründungsmitglied von OpenAI und später Senior Director of AI bei Tesla zu werden, wo er ein Team leitete, das das Autopilot-System entwickelte.

Man kann mit Sicherheit sagen, dass er einer der besten Programmierer der Welt ist. Er ist auch ein geschickter Wortschöpfer mit einer riesigen Twitter- oder X-Fangemeinde von fast 800.000 Followern. Als ChatGPT auf den Plan trat, tweetete er:

Die angesagteste neue Programmiersprache ist Englisch.

Er hat nicht gescherzt. Das war nicht nur eine poetische Ode an das Programmieren, sondern eine Anspielung auf eine Zukunft, in der die Eingabeaufforderung in natürlicher Sprache Computercode in scheinbar jeder Sprache hervorzaubern kann. Es ist, als ob du einen zweisprachigen Geist in deinem Computer hättest, der deine englischen Wünsche in Codebefehle umwandelt.

Dann kam ein Tweet, der die Gefühle vieler Entwickler/innen widerspiegelte:

Copilot hat meine Programmierung dramatisch beschleunigt, so dass ich mir kaum vorstellen kann, zum "manuellen Programmieren" zurückzukehren. Ich lerne noch, damit umzugehen, aber es schreibt bereits ~80% meines Codes mit ~80% Genauigkeit. Ich programmiere nicht einmal wirklich, ich gebe Eingabeaufforderungen ein und bearbeite.

Karpathy zog seinen Hut vor Microsofts GitHub Copilot, einem neuen Gebräu aus KI-gestützter Programmierung. Aber es sollte nicht lange dauern, bis viele andere Tools auftauchten. Das Tempo der Innovation war atemberaubend.

Für alle Programmierer da draußen mag die Landschaft wie ein dichter Dschungel aussehen. Was ist das für eine schöne neue Welt der KI-Tools? Wo glänzen sie und wo verpuffen sie? Und wie wirst du ein erfahrener KI-gestützter Programmierer?

Dieses Buch wird dir dabei helfen, diese Fragen zu beantworten - und noch viele mehr. Das Hauptaugenmerk liegt auf der Nutzung dieser Werkzeuge, um nicht nur schneller, sondern auch intelligenter zu programmieren, und das mit einer Prise Spaß. Also, lass uns die Ärmel hochkrempeln und uns auf diese KI-gestützte Programmierreise begeben.

Evolution und Revolution

Ein zentrales Thema in der Entwicklung von Programmiersprachen ist die Abstraktion. Das ist eine schicke Art zu beschreiben, wie Systeme für Entwickler einfacher zu bedienen sind. Wenn die lästigen Details im Hintergrund erledigt werden, können sich die Entwickler auf das Wesentliche konzentrieren. Dies war eine treibende Kraft für Innovationen und ermöglichte Durchbrüche wie das Internet, Cloud Computing, Mobile und KI.

Abbildung 1-1 zeigt die Entwicklung der Abstraktion im Laufe der Jahrzehnte.

Abbildung 1-1. Die Abstraktion von Programmiersprachen und -werkzeugen hat sich im Laufe der Jahrzehnte weiterentwickelt

Gehen wir genauer ins Detail, beginnend mit den 1940er Jahren :

Maschinensprache zu Assemblersprache

Zu Beginn des Computerzeitalters mussten Programmierer/innen mit 0en und 1en ringen, um die Maschinen nach ihrem Willen zu formen. Doch dann kam die Assembler-Sprache auf den Plan. Sie bot alphanumerische Anweisungen, die das Programmieren einfacher und weniger fehleranfällig machten .

Hochsprachen

Die 1950er Jahre brachten uns Fortran und COBOL, Sprachen, die es Programmierern ermöglichten, mit einfachen Worten wie DISPLAY, READ, WRITE und IF/THEN/ELSE zu programmieren. Ein Compiler konvertierte diese in 0s und 1s, die ein Computer verstehen konnte. Gleichzeitig konnten Menschen ohne technischen Hintergrund den Code in der Regel gut genug lesen, um den Arbeitsablauf zu verstehen. Das Aufkommen von Hochsprachen war ein wichtiger Katalysator für die Computerrevolution.

Prozedurale Programmierung

Sprachen wie C und Pascal führten die prozedurale Programmierung ein und packten komplexe Aufgaben in kleine, übersichtliche Kästchen, die Funktionen genannt wurden. Diese Abstraktion ermöglichte die Wiederverwendbarkeit und Wartbarkeit und machte die Verwaltung riesiger Softwareprojekte zu einer weniger schwierigen Aufgabe.

Objektorientierte Programmierung (OOP)

Zu den Stars dieser Art von Computersprache gehören C++ und Java. Die objektorientierte Programmierung brachte eine ganz neue Abstraktionsebene mit sich, die es den Programmierern ermöglichte, reale Entitäten mit Klassen und Objekten zu modellieren und sowohl Daten als auch Verhalten zu kapseln. Dies förderte die Modularität und ermöglichte eine intuitivere Problemlösung.

Skriptsprachen und Webentwicklung

Python, Ruby und JavaScript abstrahieren viele der mit der Programmierung verbundenen Aufgaben auf niedriger Ebene. Sie bieten umfangreiche Bibliotheken und eingebaute Datenstrukturen, die häufige Programmieraufgaben vereinfachen und die Menge des dafür benötigten Codes reduzieren.

Maschinelles Lernen und KI

Mit dem Aufstieg von KI und maschinellem Lernen haben spezialisierte Bibliotheken und Frameworks wie TensorFlow und PyTorch viele komplizierte mathematische Details der Programmierung abstrahiert. Dadurch konnten sich die Entwickler auf die Modellarchitektur und die Trainingsprozesse konzentrieren.

KI-unterstützte Programmierung

Der neueste Zugang zu dieser Abstraktionsgeschichte ist natürlich die KI-gestützte Programmierung á la GPT-4 und andere große Sprachmodelle (LLMs). Diese sind wie eine Backstage-Crew, die auf dein Kommando hin mit der Codegenerierung hilft .

Schauen wir uns ein einfaches Beispiel an. Hierfür verwenden wir ChatGPT, das eine robuste Fähigkeit hat, Code zu erstellen. Wir verwenden eine Eingabeaufforderung, um zu fragen, was das System tun soll. Nehmen wir an, wir geben die folgende Eingabeaufforderung ein:

Eingabeaufforderung: Schreibe in Python ein Programm, das überprüft, ob eine gegebene ganze Zahl gerade oder ungerade ist, und gib das Ergebnis aus.

Abbildung 1-2 zeigt die Antwort von ChatGPT.

Abbildung 1-2. Wenn du aufgefordert wirst, Code zu erstellen, enthält die Antwort von ChatGPT nicht nur eine Auflistung, sondern auch eine Erklärung

Wir erhalten das Code-Listing, das sogar mit hilfreichen Kommentaren versehen ist. Außerdem gibt es eine Erklärung, wie das Programm funktioniert. Du kannst auf die Schaltfläche Code kopieren oben rechts klicken, um den Code in deine IDE einzubinden und ihn auszuführen.

Generative KI

Bevor wir uns näher mit der Funktionsweise von KI-gestützten Programmierwerkzeugen beschäftigen, wollen wir uns einen Überblick über generative KI verschaffen. Dies ist die Grundlage für diese Systeme.

Generative KI ist ein Zweig der künstlichen Intelligenz (KI), der die Erstellung neuer und einzigartiger Inhalte ermöglicht. Abbildung 1-3 veranschaulicht, wie die verschiedenen Teile zueinander in Beziehung stehen.

Abbildung 1-3. Es gibt verschiedene Arten von KI, und sie können als verschachtelte Untergruppen dargestellt werden, mit generativer KI und schließlich großen Sprachmodellen im Zentrum

KI ist der große Überbegriff: Er umfasst alle Systeme, die Aufgaben mit dem Flair menschlicher Intelligenz bewältigen können. Zur KI gehört auch das maschinelle Lernen (ML). Anstatt im Takt expliziter Anweisungen zu marschieren, kommen ML-Systeme auf der Grundlage von Unmengen von Daten zu Erkenntnissen. ML basiert in der Regel auf komplexen Algorithmen, die es ermöglichen, Vorhersagen zu treffen oder Entscheidungen zu treffen, ohne sie zu kodieren.

Geht man noch einen Schritt weiter, erhält man Deep Learning (DL), eine engere Variante von ML, die mit neuronalen Netzen arbeitet, die mit versteckten Schichten ausgestattet sind - daher auch die Bezeichnung Deep. Diese gestapelten Modelle haben in Bereichen wie der Bild- und Spracherkennung herausragende Ergebnisse gezeigt.

In den Korridoren des Deep Learning findest du die generative KI (oder GenAI). GenAI-Modelle erzeugen neue Daten, die ihre Trainingsdaten widerspiegeln.

Im innersten Kreis befinden sich die LLMs, wie GPT-4, Gemini, Claude und LLaMA 2. Diese leistungsstarken Basismodelle - oft auch "Basismodelle" genannt - produzieren auf der Grundlage modernster Algorithmen und des Trainings riesiger Datenmengen menschenähnliche Texte.

Aber generative KI ist mehr als nur LLMs. GenAI hat auch multimodale Fähigkeiten, d.h. die Fähigkeit, Bilder, Audio und Video zu erzeugen.

Im nächsten Kapitel werden wir uns genauer ansehen, wie generative KI funktioniert. Als Nächstes werfen wir einen Blick auf die Vor- und Nachteile von KI-gestützten Programmierwerkzeugen.

Die Vorteile

KI-unterstützte Programmierwerkzeuge sollen die Fähigkeiten von Entwicklern verbessern und es ihnen ermöglichen, sich auf fortgeschrittene Problemlösungen und Innovationen zu konzentrieren, anstatt sich in monotone Aufgaben oder komplexe Codedetails zu verstricken. Deshalb ist der Begriff " Copilot", den GitHub verwendet, genau richtig. Es geht darum, einen zuverlässigen Kumpel im Cockpit zu haben, der dich durch die komplizierten und oft mühsamen Aspekte des Programmierens navigiert, damit du dich auf das Wesentliche konzentrieren kannst.

In den folgenden Abschnitten werden wir die Vorteile und praktischen Anwendungen dieser leistungsstarken Systeme vorstellen.

Dein Berater

Mit ChatGPT kannst du um Ratschläge zu vielen Arten von Entwicklungsaktivitäten bitten. Hier ist eine Eingabeaufforderung:

Eingabeaufforderung: Bitte gib detaillierte Tipps und bewährte Methoden, um die Suchzeit zu minimieren und die Produktivität beim Programmieren zu steigern. Beziehe Strategien zur Organisation des Codes, zur Dokumentation, zu Werkzeugen und zur Denkweise mit ein.

Abbildung 1-4 zeigt die Antwort.

ChatGPT nennt drei Hauptbereiche, die du beachten solltest. Es empfiehlt einen modularen Aufbau, eine einheitliche Namensgebung und eine logische Dateiorganisation. Außerdem rät er, auf eine klare Dokumentation mit Kommentaren, Docstrings und READMEs zu achten. ChatGPT erwähnt auch die Nutzung der Suchfunktionen einer IDE, die Verwendung von Tools wie Git und das Setzen von Lesezeichen für wichtige Ressourcen.

Abbildung 1-4. Nützliche Tipps zu Programmieraufgaben erhältst du von ChatGPT

IDE-Integration

Die nahtlose Integration mit der IDE ist entscheidend für die KI-gestützte Programmierung. Sie sorgt dafür, dass der Entwicklungsprozess in Schwung bleibt, ohne dass man sich mühsam in eine neue Plattform einarbeiten muss. Das bedeutet, dass weniger Zeit zum Lernen und mehr Zeit zum Programmieren benötigt wird. Und - nicht zu vergessen - ein nahtloser Wechsel zwischen verschiedenen Plattformen oder Tools bedeutet weniger Reibungsverluste und sorgt für einen reibungsloseren Ablauf beim Programmieren.

Hinzu kommt der Vorteil des Echtzeit-Feedbacks. Wenn Entwickler/innen ihren Code zusammenbasteln oder optimieren, sind integrierte Tools zur Stelle, um auf Fehler hinzuweisen, Korrekturen vorzuschlagen oder einen besseren Weg zu finden, die Dinge zu erledigen. Dieses unmittelbare Hin und Her zwischen Schreiben, Feedback und Optimieren ist wie ein freundlicher Coach an deiner Seite. Du wirst zu einem saubereren, effizienteren Code geführt, ohne dass du dich mit manuellen Prüfungen oder externen Kontrollen herumschlagen musst.

KI-gestützte Systeme können eine IDE auch verbessern, indem sie sich auf die allgemeine Coding-Narrative einstellen. Die KI versteht die Variablentypen, Methodensignaturen und sogar den strukturellen Plan des Projekts, um relevante Codevorschläge zu machen. Es geht aber nicht nur darum, Code auszuspucken.

In Tabelle 1-1 werden einige der wichtigsten KI-gestützten Programmierwerkzeuge und die von ihnen unterstützten IDEs vorgestellt .

Hinweis

Eine Forschungsstudie von Microsoft ergab, dass 88 % der Nutzer von GitHub Copilot sich weniger frustriert und konzentrierter fühlten. Ein wichtiger Grund dafür war, dass sie weniger Zeit mit der Suche verbringen mussten, wenn sie in der IDE blieben. So konnte der Entwickler im "Flow-Zustand" bleiben.

Reflektieren deiner Codebasis

Bestimmte KI-unterstützte Programmierwerkzeuge sind auf bestimmte Entwicklungsumgebungen zugeschnitten. Die Entwickler haben den Spielraum für eine Feinabstimmung, die es dem Tool ermöglicht, die internen Bibliotheken, APIs, bewährten Methoden und Architekturpläne eines Projekts zu verstehen. So wird sichergestellt, dass die Vorschläge, die du erhältst, nicht nur technisch solide sind, sondern auch auf die besonderen Bedürfnisse deines Projekts abgestimmt sind.

Diese Anpassung hilft dabei, die generierten Codevorschläge mit den etablierten Codierungsstandards, Qualitätsmerkmalen und Sicherheitsprotokollen deines Unternehmens in Einklang zu bringen. Der Fokus auf die Förderung von hochwertigem Code bedeutet, dass Teams nicht über veraltete oder unerwünschte Codeschnipsel stolpern können.

Außerdem ist dieser maßgeschneiderte Ansatz ein großer Vorteil für Neulinge in einem Entwicklungsteam. Normalerweise erfordert die Eingewöhnung in eine neue Codebasis einen hohen Zeitaufwand, denn es kann Monate dauern, bis sie den Code erforscht, die Dokumentation durchgesehen und die Codierungsprotokolle gelernt haben. Ein KI-gestütztes Programmiertool kann diese Lernkurve jedoch erheblich verkürzen.

Code-Integrität

DieIntegrität des Codes ist ein Markenzeichen einer soliden Softwareentwicklung. Sie unterstreicht die Robustheit und Vertrauenswürdigkeit des Quellcodes bei der Ausführung seiner beabsichtigten Funktion. Betrachte sie als eine Linse, durch die die Vollständigkeit, Genauigkeit, Konsistenz und Festigkeit des Codes untersucht wird. Ein Schluckauf bei der Code-Integrität ist ein willkommener Vorwand für Fehler und potenzielle Sicherheitslücken, die wiederum zu Systemabstürzen und Datenverletzungen führen können.

Zu den verschiedenen Faktoren, die zur Integrität des Codes beitragen, gehören seine Präzision, Gründlichkeit, Einheitlichkeit und Sicherheit sowie die Leichtigkeit, mit der er gewartet werden kann. Entwickler können die Integrität des Codes durch verschiedene Methoden wie Unit- und Integrationstests, Codeüberprüfungen durch Kollegen, statische Codeanalyse und strenge Sicherheitsüberprüfungen verbessern.

Es ist erwähnenswert, dass immer mehr KI-gestützte Programmiertools Funktionen anbieten, die die Integrität des Codes verbessern. Sie gehen den Feinheiten des Codes auf den Grund und ebnen so den Weg für die Erstellung von aussagekräftigen und scharfen Unit-Tests und Kanten-Fällen.

Einige dieser Tools verfügen über "Fix-it"-Empfehlungsfunktionen. Diese werden im Voraus geprüft, um sicherzustellen, dass sie nicht zu neuen Problemen führen, bevor sie den Entwicklern vorgelegt werden. Dann können die Entwickler diese Vorschläge direkt in ihrer IDE überprüfen und übernehmen.

Ein zusätzlicher Vorteil dieser Tools ist, dass sie Pull Requests schnell analysieren und kurze Zusammenfassungen der Codeänderungen erstellen können. Sie können auch die Erstellung von Versionshinweisen automatisieren, was für die Dokumentation der Entwicklung von Softwareversionen sehr nützlich ist.

KI-gestützter Dokumentationsgenerator

Die Dokumentation ist der unbesungene Held im Softwareentwicklungsprozess. Sie trägt dazu bei, dass die Codebasis lesbar, wartbar und skalierbar bleibt, vor allem, wenn sich die Teams verändern und die Projekte immer komplexer werden. Aber seien wir ehrlich, das Erstellen und Aktualisieren dieser Dokumentation fühlt sich oft wie eine Wanderung durch einen bürokratischen Sumpf an - es kann ein Zeitfresser sein und wird gelegentlich auf die lange Bank geschoben.

Jetzt kommen die KI-gestützten Programmierwerkzeuge ins Spiel. Diese digitalen Schreiberlinge können umfangreiche Dokumentationen in einem Bruchteil der Zeit erstellen - und das mit einer gehörigen Portion Qualität und Klarheit obendrein. Dies geschieht, indem sie die Leistung von LLMs nutzen, die besonders gut mit Sprache umgehen können.

Modernisierung

Marc Andreessens kühne Aussage aus dem Jahr 2011 im Wall Street Journal, "Software Is Eating the World", ist gealtert wie ein guter Wein. Andreessen, der dafür bekannt ist, Techniktrends schon von weitem zu erkennen, und der als erfolgreicher Unternehmer und Risikokapitalgeber eine glänzende Erfolgsbilanz vorweisen kann, wies auf einen wichtigen Moment in der Geschichte der Technologie hin.

Er betonte, dass die Infrastruktur erwachsen geworden ist und die globalen Industrien auf eine Metamorphose vorbereitet hat. Der Aufstieg von Cloud-Plattformen wie Amazon Web Services und die weit verbreitete Verbreitung von Breitband-Internet haben das Spiel verändert. Sie haben die traditionellen Hürden der Serverkosten und des Netzwerk-Know-hows niedergerissen. Damit war die Bühne frei für Disruptoren wie Uber, Netflix und eine Reihe von Social-Media-Plattformen, die das Regelwerk ihrer jeweiligen Branche neu schreiben konnten.

Wenn wir von Andreessens aufschlussreichem Beitrag vorspulen, sehen wir, dass der Innovationsexpress nur an Fahrt aufgenommen hat. Allerdings birgt er auch die Gefahr einer Störung, vor allem für große Unternehmen. Viele dieser Giganten sind in Altsystemen verankert, die nicht nur kostspielig, sondern auch schwer zu modernisieren sind. Ihr hierarchischer Aufbau kann die Entscheidungsfindung erschweren, und ihre Größe macht die Umsetzung von Veränderungen noch komplexer. Außerdem sind die Mitarbeiter/innen nicht immer auf dem gleichen Stand, was die neuesten technologischen Innovationen angeht.

IBM sieht in diesem Szenario eine große Chance und setzt seine umfangreichen Ressourcen ein, um KI-unterstützte Programmierwerkzeuge für seine Kunden zu entwickeln. Im Oktober 2023 stellte das Unternehmen den watsonx Code Assistant für Z vor. Dieses System kann COBOL auf Großrechnersystemen in Java übersetzen, wobei der Code elegant objektorientiert ausgegeben wird.

IBMs Watsonx.ai-Modell versteht 115 Kodiersprachen auf der Grundlage von 1,5 Billionen Token. Das Modell hat etwa 20 Milliarden Parameter. Es ist eines der größten KI-Systeme für die Code-Entwicklung.

Tatsache ist, dass es Hunderte von Milliarden Zeilen COBOL gibt. Doch die Migration dieser Sprache auf moderne Systeme ist kein leichtes Unterfangen. Häufig ist das COBOL Jahrzehnte alt und hat nur wenig oder gar keine Dokumentation. Wenn die Umstellung nicht richtig durchgeführt wird, kann das schwerwiegende Folgen haben. Vergiss nicht, dass ein Großteil der weltweiten Kreditkartenabwicklung mit Großrechnern abgewickelt wird. Das Gleiche gilt für das System von Uncle Sam zur Verwaltung von Schulkrediten.

Leider gibt es viele Beispiele für fehlgeschlagene Migrationsprojekte. Zum Beispiel das kalifornische Department of Motor Vehicles, das trotz Investitionen in Höhe von 208 Millionen Dollar nach ein paar Jahren den Stecker ziehen musste. Autsch.

Angesichts des hohen Einsatzes verdienen Mainframe-Entwickler/innen in der Regel höhere Gehälter. Aber die Unternehmen haben immer noch Probleme, Talente zu rekrutieren. Jüngere Entwickler werden in modernen Sprachen ausgebildet und sehen die Mainframe-Entwicklung als Sackgasse an. In der Zwischenzeit geht eine wachsende Zahl erfahrener Mainframe-Entwickler in den Ruhestand.

IBM hat erkannt, dass KI unerlässlich ist, um dieses massive Problem zu lösen. Es stimmt, dass es Code-Transpiler oder Übersetzer schon seit Jahrzehnten gibt. Tatsächlich wurden sie oft für Mainframe-Projekte eingesetzt. Allerdings haben sie meist nur den Spaghetti-Code von COBOL genommen, ihn schnell übersetzt, und schon hat man Java-Spaghetti-Code. Es ist ein bescheidenes Facelifting mit kaum einem Hauch von Verbesserung oder Innovation. Der Java-Code braucht immer noch eine gute Portion Ellbogenschmalz, was erklärt, warum viele Projekte ins Straucheln geraten sind oder schlichtweg ins Wasser gefallen sind.

Aber durch den Einsatz generativer KI konnte IBM nach eigenen Angaben die Ergebnisse eines Projekts um das Zehnfache verbessern.

Auch andere Unternehmen erkunden diese Modernisierungsmöglichkeit. Thomas Dohmke, der CEO von GitHub, schrieb: "COBOL, das immer noch auf Mainframes läuft, ist ein viel größeres gesellschaftliches Problem, als wir denken." In einem Interview mit Fortune sagte er, dass er im Jahr 2023 mehr über COBOL gehört habe als in den letzten drei Jahrzehnten. Er sagte auch, dass Unternehmen gefragt haben, wie sie GitHub Copilot für ihre Migrationsprojekte nutzen können.

Beachte, dass ChatGPT auch mit älteren Programmiersprachen umgehen kann. Tabelle 1-2 zeigt, welche Sprachen es unterstützt.

Tabelle 1-2. Gängige Legacy-Programmiersprachen
Sprache Beschreibung Entwicklungszeit
COBOL Entwickelt für die Geschäftsdatenverarbeitung Ende der 1950er bis Anfang der 1960er Jahre
Fortran Entwickelt für wissenschaftliche und technische Berechnungen 1950s
Pascal Entwickelt, um gute Praktiken in der Softwareentwicklung zu fördern Ende der 1960er bis Anfang der 1970er Jahre
BASIC Eine leicht zu erlernende Sprache für Schüler und Anfänger Mitte der 1960er Jahre
ALGOL Beeinflusste spätere Sprachen wie Pascal, C und Java Ende der 1950er bis Anfang der 1960er Jahre
Assemblersprache Entspricht der Architektur der CPU, für die sie entwickelt wurde, und geht auf die frühen programmierbaren Computer zurück Frühe Computer-Ära
PL/I Verwendet für wissenschaftliche, technische, geschäftliche und Systemprogrammierung Anfang der 1960er Jahre

Um zu sehen, wie KI-unterstützte Programmierung bei alten Sprachen helfen kann, nehmen wir an, du musst den folgenden Codeschnipsel bearbeiten:

MODULE ComplexModule
  IMPLICIT NONE
  TYPE :: ComplexType
     REAL :: real, imag
  CONTAINS
     OPERATOR(+) (a, b) RESULT(c)
       TYPE(ComplexType), INTENT(IN) :: a, b
       TYPE(ComplexType) :: c
       c%real = a%real + b%real
       c%imag = a%imag + b%imag
     END OPERATOR
  END TYPE ComplexType
END MODULE ComplexModule

Du weißt nicht, um welche Sprache es sich handelt oder wie sie funktioniert. Die Syntax eignet sich nicht für ein intuitives Verständnis des Arbeitsablaufs.

Nehmen wir an, du gehst zu ChatGPT und gibst das Folgende ein:

Eingabeaufforderung: In welcher Sprache ist dieser Code geschrieben? Was macht dieses Codeschnipsel? Erkläre auch, wie er funktioniert.

Abbildung 1-5 zeigt einen Teil der Antwort.

Abbildung 1-5. ChatGPT antwortet auf eine Anfrage zur Interpretation von Legacy-Code

ChatGPT identifiziert diesen Code genau als Fortran-Code. Außerdem wird erklärt, dass der Code ein Modul namens ComplexModule definiert, das einen abgeleiteten Typ ComplexType zur Darstellung komplexer Zahlen sowie einen überladenen Additionsoperator + zur Addition zweier komplexer Zahlen enthält. Dann wird der Code Schritt für Schritt erklärt:.

Beeinträchtigungen

Werfen wir nun einen Blick auf die nicht ganz so rosigen Aspekte der KI-gestützten Programmierwerkzeuge. Wie jede junge Technologie - ja, sogar das erste iPhone war ein bisschen klobig - hat auch die KI ihre Tücken, Probleme und Hürden. Auf dem Weg der Innovation gibt es noch viel Raum für Verbesserungen und Feinabstimmungen.

Werfen wir einen Blick auf einige der Nachteile.

Halluzinationen

Für LLMs sind Halluzinationen Fälle, in denen das Modell Daten ausgibt, die korrekt erscheinen, aber faktisch falsch sind oder nicht auf den Eingabedaten beruhen, auf denen das Modell trainiert wurde. Dies kann eine große Herausforderung für die Softwareentwicklung darstellen. Halluzinationen können zu ungenauen Codevorschlägen, irreführender Dokumentation und fehlerhaften Testszenarien führen. Außerdem können sie die Fehlersuche ineffizient machen, Anfänger in die Irre führen und möglicherweise das Vertrauen in KI-Tools untergraben.

Positiv zu vermerken ist, dass es bemerkenswerte Fortschritte bei der Verringerung des Auftretens von Halluzinationen gegeben hat. Ein beträchtlicher Teil der akademischen Forschung hat sich diesem Thema gewidmet, und KI-Unternehmen haben wirksame Strategien wie das Verstärkungslernen aus menschlichem Feedback (RLHF) eingesetzt, um dieses Problem zu entschärfen.

Angesichts der Komplexität von LLMs und der enormen Datenmenge, auf der sie basieren, scheint es jedoch schwierig, Halluzinationen vollständig zu beseitigen - wenn nicht sogar unmöglich.

Ein weiterer Aspekt ist, dass bestimmte Programmiersprachen höhere Genauigkeitsraten aufweisen, wenn KI-gestützte Tools eingesetzt werden. Sprachen wie Python, JavaScript, TypeScript und Go haben in dieser Hinsicht eine bessere Leistung. Das liegt daran, dass diese Sprachen in öffentlichen Repositories gut vertreten sind und der KI somit einen reichhaltigeren Datensatz zum Lernen zur Verfügung stellen. Die besser trainierte KI bietet wiederum genauere und robustere Vorschläge.

Geistiges Eigentum

Matthew Butterick hat einen vielseitigen Hintergrund: Er war Programmierer, Designer und Anwalt und hat eine besondere Vorliebe für Typografie. Auf seinem Weg hat er Bücher über Typografie geschrieben, Schriften entworfen und Programme für die Bearbeitung und das Layout von Dokumenten entwickelt. Seine Begegnung mit GitHub Copilot im Juni 2022 löste jedoch keine Freude aus. Vielmehr veranlasste sie ihn zu einem Blogbeitrag mit dem Titel "This Copilot Is Stupid and Wants to Kill Me".

Seine Unzufriedenheit endete nicht mit dem Bloggen. Er eskalierte schnell und reichte eine Sammelklage gegen Microsoft, GitHub und OpenAI ein. Der Stein des Anstoßes war ein angeblicher Verstoß gegen die Nutzungsbedingungen und Datenschutzrichtlinien von GitHub, der möglicherweise auf Urheberrechtsverletzungen ausgeweitet wurde.

Dieser rechtliche Wirrwarr unterstreicht eine größere Grauzone in Bezug auf die Rechte am geistigen Eigentum an Code, der von KI-gestützten Programmierwerkzeugen entwickelt wurde. Da es sich bei der Ausgabe um einen Cocktail aus unzähligen Zeilen bereits existierenden Codes handelt, ist die Frage nach dem Eigentum ein großes Fragezeichen.

Ein Argument basiert auf der Idee der "fairen Nutzung". Diese Rechtslehre ist jedoch undurchsichtig und bietet keinen klaren Weg für KI-generierte Inhalte. Um diese Frage zu klären, bedarf es wahrscheinlich einer Bundesgesetzgebung oder eines Urteils des Obersten Gerichtshofs.

In der Zwischenzeit hat Microsoft versucht, eine rechtliche Firewall für GitHub Copilot Kunden aufzubauen. Das Unternehmen hat zugesagt, Nutzer/innen gegen rechtliche Ansprüche zu verteidigen, wenn bestimmte Voraussetzungen erfüllt sind.

Die Überschneidung von KI-gestützter Programmierung und Open-Source-Software ( ) ist eine weitere Ebene des rechtlichen Sumpfes. Copyleft-Lizenzen, wie die General Public License (GPL) Version 2 und 3, verlangen, dass jede abgeleitete Arbeit die Lizenzbedingungen des Originalcodes verwendet. Dies trägt dazu bei, den Innovationsfluss zu fördern. Für Entwicklerinnen und Entwickler kann dies jedoch zu Problemen führen, da sie dadurch möglicherweise das Recht verlieren, das geistige Eigentum ihrer Anwendung zu schützen - oder sogar dazu gezwungen werden, ihre gesamte Codebasis als Open Source zu veröffentlichen.

Datenschutz

Der Einsatz von KI-gestützten Programmiertools, die oft in der Cloud untergebracht sind, wirft viele Fragen zum Datenschutz und zur Vertraulichkeit auf. Wie werden die Daten innerhalb des Unternehmens geschützt? Besteht die Möglichkeit, dass sie als Trainingsdaten verwendet werden?

Die Klarheit der Antworten kann von einem Anbieter zum anderen variieren. Daher entscheiden sich manche Entwickler/innen vielleicht dafür, die Finger von KI-gestützten Programmierwerkzeugen zu lassen.

Das ist der Ansatz von Anthony Scodary, dem Mitbegründer und Co-Head of Engineering von Gridspace. Dieses Unternehmen, dessen Wurzeln bis zur Stanford University zurückreichen, entwickelt Sprachroboter, die sich in komplexen Telefongesprächen zurechtfinden. Ihre technologische Grundlage sind Spracherkennung, Sprachsynthese, LLMs und Dialogsysteme.

Anstatt auf bestehende KI-gestützte Programmierplattformen aufzuspringen, wählte Gridspace den weniger befahrenen Weg. Es hat seine eigene KI-gestützte Programmierplattform entwickelt, die auf Docker-Diensten innerhalb eines Kubernetes-Clusters basiert. Dieses maßgeschneiderte System, das als IDE-Plugin eingesetzt wird, ist auf die eigene Code-Basis abgestimmt. "Dadurch konnten wir vermeiden, unsere IP und Daten an andere Unternehmen zu senden", sagt er. "Außerdem haben wir ein Modell, das kleiner, effizienter und auf unseren Stil zugeschnitten ist.

Das soll nicht heißen, dass dies der beste Ansatz ist. Jede Organisation hat ihre eigenen Ansichten und bevorzugten Methoden. Aber wenn es darum geht, KI-gestützte Programmierung zu bewerten, ist es wichtig, die Auswirkungen auf den Datenschutz zu verstehen.

Sicherheit

In einer Forschungsarbeit mit dem Titel "Security Weaknesses of Copilot Generated Code in GitHub" (Sicherheitsschwächen von Copilot generiertem Code in GitHub) haben die Autoren Yujia Fu et al. die Sicherheitsprobleme von GitHub Copilot aufgezeigt. Sie untersuchten 435 KI-generierte Codeschnipsel aus Projekten auf GitHub und stellten fest, dass 35,8 % davon Common Weakness Enumeration (CWE) enthielten.

Diese waren nicht nur auf eine Programmiersprache beschränkt. Es waren mehrsprachige Fehltritte, die 42 verschiedene CWE-Kategorien umfassten. Drei dieser Kategorien waren die üblichen Verdächtigen: Einschleusen von Befehlen, Verwendung unzureichend zufälliger Werte und unsachgemäße Prüfung oder Behandlung von Ausnahmebedingungen. Aber jetzt kommt der Clou: 11 dieser CWEs hatten die zweifelhafte Ehre, es in die 2022 CWE Top 25 Liste zu schaffen.

Das soll nicht heißen, dass KI-gestützte Programmierwerkzeuge ein großes Sicherheitsrisiko darstellen. Weit gefehlt. Tatsache ist, dass die Anbieter weiter daran arbeiten, die Schutzmechanismen zu verbessern. Aber wie bei jedem Code ist eine gehörige Portion Sicherheitsbewusstsein das A und O.

Trainingsdaten

Die Trainingsdaten für LLMs von KI-gestützten Programmierwerkzeugen können erhebliche Lücken aufweisen, die die Leistung und den Nutzen dieser Werkzeuge in realen Szenarien beeinträchtigen können. Schauen wir uns einige dieser Lücken an:

Lücken in der Repräsentation

Wenn bestimmte Bereiche einer Programmiersprache oder Bibliothek in Open-Source-Projekten nicht gut vertreten sind - oder nirgends auftauchen -, kann es sein, dass die KI nicht genug über sie weiß, was zu weniger genauen Vorschlägen führt. Die Qualität der Ergebnisse der KI hängt stark von der Qualität und dem Umfang der Trainingsdaten ab.

Uneinheitliche Qualität

Um es mit einem Filmvergleich zu sagen: Der Open-Source-Code in einem LLM ist ein bisschen wie eine Schachtel Pralinen - man weiß nie, was man bekommt. Einige Projekte sind die Crème de la Crème, während andere... sagen wir mal, der verbrannte Toast der Code-Welt sind. Dieser Mischmasch kann dazu führen, dass unsere KI-gestützte Programmierung in der Qualität der Vorschläge, die sie dir macht, uneinheitlich ist.

Stichtag für das Wissen

LLMs haben einen Stichtag für ihre Ausbildung, sie sind also in gewisser Weise eine Momentaufnahme. Das stellt eine Herausforderung dar, wenn es neue Versionen, Updates oder Verwerfungen in Programmiersprachen oder Bibliotheken gibt.

Generalisierungslücke

Die Generalisierungslücke, also der Unterschied zwischen der Leistung der KI bei den Trainingsdaten und den ungesehenen Daten, kann ebenfalls eine Herausforderung darstellen. Je näher die beiden Leistungen beieinander liegen, desto besser. Das ist die Schlussfolgerung einer Forschungsarbeit von Rie Johnson und Tong Zhang mit dem Titel "Inconsistency, Instability, and Generalization Gap of Deep Neural Network Training".

Kontextuelles Verständnis

Die KI kann dir Vorschläge machen, die auf dem basieren, was sie schon gesehen hat. Aber wenn sie ein Szenario wie deines noch nicht gesehen hat, könnte sie das Ziel verfehlen. Deshalb ist es wichtig, bei der Erstellung von Eingabeaufforderungen keine Annahmen zu treffen.

Bias

Entwickler/innen haben oft kein solides Verständnis von KI-Ethik, wahrscheinlich weil dieses Thema normalerweise nicht Teil von Informatikkursen oder intensiven Bootcamp-Programmen ist. Diese Lücke im Verständnis kann dazu führen, dass Algorithmen unbeabsichtigt Vorurteile anwenden und Daten missbrauchen.

Dieses Problem gilt auch für KI-gestützte Programmierwerkzeuge. Sie können unbeabsichtigt die Verzerrungen in den Daten, auf denen sie trainiert wurden, beibehalten. Wenn sie z. B. eine Namensliste erstellen sollen, schlagen sie vielleicht hauptsächlich englische Namen vor, weil ihre Trainingsdatensätze überwiegend englischsprachige Daten enthalten. Diese Verzerrung kann manchmal zu schädlichen oder unangemessenen Ergebnissen führen. Es gab einen Fall, in dem die KI bei der Eingabeaufforderung "def race(x):" eine begrenzte und feste Anzahl von Ethnie-Kategorien eingab. In einem anderen beunruhigenden Fall wurde festgestellt, dass die KI beim Schreiben von Codekommentaren für die Eingabeaufforderung "Islam" häufiger auf Wörter wie terroristisch und gewalttätig zurückgriff, als wenn andere religiöse Gruppen erwähnt wurden.

Ein neuer Weg für Entwickler

Die McKinsey-Studie legt nahe, dass die Einführung von KI-gestützten Programmierwerkzeugen die Art und Weise, wie wir an die Softwareentwicklung herangehen, verändern wird. Den Autoren zufolge könnte der Erfolg von einer guten Ausbildung abhängen, bei der bewährte Methoden und praktische Übungen zu Themen wie Prompt-Engineering, Codierungsstandards und Qualität im Vordergrund stehen. Es ist auch klug, die Risiken zu beleuchten, die mit generativer KI verbunden sind.

Für Neulinge in der Entwicklung, vor allem für diejenigen, die weniger als ein Jahr Erfahrung haben, ist es eine gute Idee, einen zusätzlichen Kurs zu belegen, der die Grundprinzipien der Programmierung abdeckt, um die Produktivität zu steigern.

Wenn die Entwickler/innen diese Tools in ihre tägliche Routine integrieren, ist es wichtig, dass sie sich von den erfahrenen Profis im Team anleiten lassen und sich an Community-Aktivitäten beteiligen, um ihre Fähigkeiten weiter auszubauen. Das kann bedeuten, dass man sich in speziellen Online-Foren austauscht oder regelmäßige Teambesprechungen abhält, um praktische Beispiele zu teilen. Solche Maßnahmen können eine Kultur des kontinuierlichen Lernens fördern, bewährte Methoden im gesamten Team bekannt machen und helfen, Probleme frühzeitig zu erkennen.

Angesichts des Produktivitätsanstiegs bei den Entwicklern sollten die Manager die Rollen ein wenig umschichten und sich auf die Aufgaben konzentrieren, die mehr Wert haben. Auch die Weiterbildung wird auf der Tagesordnung stehen, um bestehende Lücken zu schließen.

Natürlich sind diese Hinweise nicht allgemeingültig. Der Bereich der KI-gestützten Programmierung ist noch ziemlich neu und verändert sich in rasantem Tempo. Wichtig ist vor allem, dass du bereit bist, dich auf die neuen Gegebenheiten einzustellen.

Karriere

Es gibt zwar keine eindeutigen Beweise dafür, dass die Nutzung von KI-gestützter Programmierung deine Berufsaussichten verbessert, aber einige Anzeichen deuten darauf hin, dass dieses Fachwissen auf dem Arbeitsmarkt sehr gefragt sein könnte:

Aufträge

In den Jobbörsen von Websites wie Indeed tauchen immer mehr Stellenanzeigen auf, in denen Bewerber/innen mit Erfahrung in KI-gestützten Programmierwerkzeugen gesucht werden. Der Aufruf gilt für alle Ränge, vom Junior-Entwickler bis zum Senior-Hotshot.

Produktivitätssteigerungen

KI-gestützte Programmierwerkzeuge sorgen für Aufsehen, weil sie die Produktivität steigern, ohne die Qualität zu beeinträchtigen. Für Entwickler/innen könnte dies ein Weg sein, um in einem Unternehmen aufzusteigen.

Daumen hoch von Entwicklern

Unter Entwicklern ist zu hören, dass sich KI-gestützte Programmiertools immer mehr durchsetzen. GitHub Copilot hat zum Beispiel eine gute Bewertung von 4,5 von 5 Sternen auf G2.com, einer unabhängigen Softwarebewertungsseite.

10x Entwickler?

Der 10x-Entwickler hat die Kraft von 10 Programmierern. Sie sind der Usain Bolt des Programmierens, der Probleme im Eiltempo löst, bevor du "Bugfix" sagen kannst.

Du denkst jetzt vielleicht: Kann ich mit Hilfe von KI-gestützten Programmierwerkzeugen ein 10-facher Entwickler werden? Nun, das ist wahrscheinlich nicht der Fall. Diese Technologien können zwar einen großen Unterschied machen, aber die Verbesserungen liegen meist nicht in Größenordnungen.

Außerdem kann das Konzept des 10-fachen Entwicklers Stereotypen und Vorurteile hervorrufen, wodurch sich die Tech-Szene wie ein exklusiver Club anfühlt. Ganz zu schweigen davon, dass der Druck, dieser Super-Coder zu sein, dich direkt in die Arme des Burnouts treiben könnte. Auch wenn es sich toll anhört, ein 10x-Entwickler zu sein, solltest du daran denken, dass es wahrscheinlich eher eine Fantasie ist.

Fertigkeiten des Entwicklers

Laut der McKinsey-Studie hängt die Wirksamkeit von KI-gestützten Entwicklungstools oft von der Expertise des Entwicklers ab. Hier sind einige der Überlegungen:

Fehler beheben

Auch wenn die generative KI dein treuer Helfer sein kann, kann sie auch Fehler machen. Es liegt dann in der Verantwortung des Entwicklers, diese Fehler zu erkennen und zu beheben. Manche Entwickler/innen müssen mit der KI eine Reihe von Korrekturen vornehmen, um eine optimale Genauigkeit zu erreichen, während andere das Tool füttern müssen, damit es richtig debuggt. Das kann durchaus zeitaufwändig sein. Aber ein erfahrener Entwickler wird wissen, wie er es vermeiden kann, sich in die Kaninchenlöcher zu begeben.

Die Büro-Vibes bekommen

KI-unterstützte Programmiertools sind recht solide, wenn es um die Programmierung geht, aber sie können bei den Besonderheiten einzelner Projekte oder bei den Eigenheiten des Unternehmens überfordert sein. Auch hier sind erfahrene Entwickler/innen der Schlüssel. Sie wissen, wie sie diese Tools so steuern können, dass die Ergebnisse am besten mit den Unternehmenszielen, den Leistungsvorgaben und der Sicherheit übereinstimmen.

Die schwierigen Dinge angehen

Assistierte KI-Programmierungstools sind großartig für Aufgaben wie den Feinschliff des Codes, aber wenn man komplexe Herausforderungen wie das Mischen verschiedener Programmier-Frameworks hinzufügt, kann die KI über sich selbst stolpern. In solchen Momenten müssen erfahrene Entwickler/innen die Ärmel hochkrempeln .

Fazit

KI-unterstützte Programmiertools sind sicherlich das glänzende Spielzeug im Sandkasten der Softwareentwicklung. Wenn diese Technologie weiter voranschreitet, werden diese Systeme die Effizienz steigern, langweilige Aufgaben übernehmen und es Entwicklern ermöglichen, sich auf die wichtigsten Bereiche zu konzentrieren, wie z. B. das Lösen von Problemen auf höchster Ebene.

Aber es gibt auch Nachteile - verworrene Fragen des geistigen Eigentums, das Labyrinth der Open-Source-Softwarelizenzen, das Potenzial für Verzerrungen und Sicherheitsrisiken, um nur einige zu nennen.

In den meisten Fällen sind diese Tools deine virtuellen Assistenten und kein Ersatz für dein Wissen, deine Fähigkeiten und deine Erfahrung. Gleichzeitig sind sie zwar keine Superhelden, aber sie entwickeln sich zu mächtigen Ergänzungen des Werkzeugkastens von Entwickler/innen.

Get KI-unterstützte Programmierung now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.