talsen team
Wie gut kann KI programmieren?
Die bisherigen Artikel dieser Serie zeigten, wie sich mit dem LLM gpt-4o die Software-Entwicklung unterstützen lässt, ohne dabei konkreten Code zu erzeugen. Aber wie gut sind LLMs heute schon darin, die eigentliche Software zu erzeugen?
Mit dem Erscheinen der großen Sprachmodelle (LLMs) und den ersten darauf aufbauenden weiteren Tools, Frameworks und Strategien zur Codeerzeugung war die Aufregung groß. Das mehr oder minder schnelle Ende vieler Berufe im Allgemeinen und der Softwareentwickler im Speziellen wurde mehrfach angekündigt und durchaus schlüssig verargumentiert. Lohnende Quellen dazu sind „The End of programming“ von Matthew Berman vom Dezember 2023 oder „Large Language Models and the End of Programming“ von Dr. Matt Welsh vom Oktober 2023. Neben der grundlegenden Änderung des Berufes Programmierer wird zudem häufig beschrieben, dass die häufigste Programmiersprache der Zukunft unsere normale Alltagssprache sein wird. Die heute bekannten Programmiersprachen würden dann nur noch für einen verhältnismäßig kleinen Expertenkreis relevant sein. Spricht man dagegen mit heutigen Programmierern, gewinnt man leicht einen anderen Eindruck. Je erfahrener desto kritischer ist häufig die Meinung und desto weiter zeitlich entfernt wird der Punkt beschrieben, an dem die KI den Großteil des Jobs eines Softwareentwicklers übernehmen kann. Wo also stehen wir derzeit wirklich?
Was die Wissenschaft sagt
Eine neue wissenschaftliche Studie zu den Fähigkeiten großer Sprachmodelle bei der automatisierten Codegenerierung: „Examination of Code generated by Large Language Models“ von Robin Beer und Kollegen vom August 2024 kommt zu dem Schluss: Es ist schon sehr gut, wird auch immer besser, aber reicht eigentlich auch noch nicht aus. Als Untersuchungsobjekte werden in der Studie die LLMs von ChatGPT und Github Copilot genannt, die jeweils in Java und Python gängige Algorithmen inklusive Testcode wie den QuickSort-Algorithmus generieren sollten. Insgesamt schnitt von den beiden untersuchten Programmiersprachen für die automatisierte Code Generierung Java etwas besser ab als Python. Interessanterweise waren die Ergebnisse der LLMs bei der Erstellung von Produktivcode besser als bei automatisch erstelltem Testcode. Was als Anmerkung dazu an dem für die Testgenerierung gewählten Testsetup liegen könnte. Bei der Testcode-Generierung zeigte Github Copilot Vorteile. Jedoch konnte nur in etwas mehr als der Hälfte der Testläufe überhaupt korrekter Testcode erzeugt werden. Dies zeigt, wie wichtig heute noch das menschliche Review und die manuelle Korrektur für generierten Testcode ist. Für Produktivcode lag ChatGPT mit einer Genauigkeit von 79 % oder mehr vor Copilot (siehe Bild). Allerdings wird auch sichtbar, dass es ohne ein menschliches Review noch nicht gehen dürfte und die manuelle Korrektur, wenn auch in geringerem Maße noch unverzichtbar ist. Die Studie analysierte zudem die Fortschritte über sechs Monate hinweg und stellte fest, dass sowohl ChatGPT als auch Copilot deutliche Verbesserungen zeigten. Während ChatGPT vor allem die Korrektheit des generierten Codes steigern konnte, verbesserte Copilot spürbar die allgemeine Codequalität.
Noch ist also das Ende des Programmierens wie wir es kennen nicht eingetreten. Aber es bleibt spannend, wann der Punkt erreicht ist, bei dem die Korrektheit des Codes die menschliche Messlatte überspringt.
Weitere LLMs für die Codeerzeugung
ChatGPT (gpt-4o, gpt-o1) oder Github Copilot sind bei Weitem nicht die einzigen LLMs, die für die Codeerzeugung einsetzbar sind. Welches Modell das Beste für die Codeerzeugung ist, ist aufgrund der vielen unterschiedlichen Einflussfaktoren nicht zu sagen. Zudem ist die Entwicklung nach wie vor sehr dynamisch und in regelmäßigen Abständen erfolgt die Vorstellung des „neuesten, bestes LLM“ in den Medien. Einen systematischen Überblick geben sogenannte Leaderboards. Also einen guten Einstieg für eine weiterreichende Recherche sei das ‚EvalPlus Leaderboard‘ empfohlen, das auf den Coding Benchmarking Tests mit HumanEval und MBPP basiert. Dieses Leaderboard verweist zudem auf eine Reihe weiterer Vergleichsportale.
Welche Programmiersprachen sich eignen
Neben der Frage was ist das beste LLM für die Programmierung, stellt sich auch die Frage: welche Programmiersprache wird denn aktuell wie gut durch LLMs unterstützt? Was vielleicht die Technologie-Entscheidung für ein neues Projekt, das vielleicht hochgradig generativ erzeugt werden soll, beeinflussen könnte. Die pauschale Antwort ist: je verbreiteter eine Programmiersprache und je besser der offene Zugang zu möglichst vielen Bibliotheken ist, desto höher ist die Chance, dass nützlicher Code durch ein LLM gut generiert werden kann. Als die Gruppe der Programmiersprachen, die als besonders gut unterstützt gelten, sind: Python, JavaScript, Java, C++, C#. Allerdings werden viele weitere Programmiersprachen auch sehr gut unterstützt, wie etwa Ruby, PHP, Swift, TypeScript, Go, Rust, SQL, Perl oder im Embedded-Bereich C. Letztlich hängt die Wahl der Sprache von vielen spezifischen Anforderungen eines Projektes ab.
Die in Automatisierungsprojekten eingesetzten IEC 61131-Sprachen sind ein besonderer Fall. Für die Generierung mit LLMs müssen Abstriche einkalkuliert werden. Einerseits, weil aus dem Set der IEC 61131-Sprachen nur Strukturierter Text durch LLMs direkt generiert werden kann; grafische Sprachen sind also tabu. Andererseits haben viele Automatisierungsanbieter eigene Dialekte beziehungsweise spezifische proprietäre und damit für LLMs unbekannte Bibliotheken. Die bekannten LLMs von der Stange sind damit eher ungeeignet. Wer dennoch generative KI mit IEC61131 Sprachen einsetzen möchte, sollte sich bei seinem jeweiligen Automatisierungshersteller vorab über den aktuellen Stand der KI-Integration und eventuell speziell für diese Programmierwelt angepassten LLMs informieren.
Best Practices für sich selbst
Wer kennt nicht das Sätzchen: „a fool with a tool is still a fool“. LLMs sind nüchtern betrachtet auch nur Werkzeuge und so liegt die Qualität des generierten Codes und die Effizienz des KI-Einsatzes zu einem Großteil in den Händen der KI-Anwender. Ein bewährter Ansatz in unserem Entwicklerteam ist: was für menschliche Intelligenzen für die Codeerzeugung von Vorteil ist, ist für die Codeerzeugung mit einer künstlichen Intelligenz ebenfalls sehr wahrscheinlich gut. Letztendlich ist es noch nicht so weit, dass eine KI ohne weiteres und ohne menschliche Unterstützung mit einem menschlichen Softwareentwickler für die Codeerzeugung gleichziehen kann. Wer sich auf die heutigen Schwächen und Stärken von LLMs wie gpt-4o einlässt und ein paar Regeln beherzigt bekommt einen nützlichen Assistenten an die Seite. Die Hände in den Schoß zu legen und noch weiter abzuwarten, bedeutet schlicht Zeit zu verlieren. Zudem steht die nächste Generation der KI-Unterstützung schon in den Startlöchern und verspricht die Grenze an automatisch generiertem Code mittel Agenten ein weiteres Stück zu Gunsten der KIs zu verschieben. hap













