A.I. and Coding

Ich weiß, dass ich im Moment viel über A.I. und ChatGPT schreibe, aber es ist auch ein interessantes und wichtiges Thema, vor allem weil viele „normale“ Medien Müll über dieses Thema schreiben. Leider quatschen viele Leute diese „News“ nur nach, ohne sich einfach mal ChatGPT persönlich anzuschauen, es ist ja schließlich kostenlos. Um selbst mal live zu sehen was A.I. wirklich kann und vor allem was nicht. Auch um zu sehen ob der eigene Job wirklich durch A.I. bedroht ist, oder ob es eine Chance sein kann, besser in seinem Job zu werden und ihn damit sicherer zu machen. – TRY IT!

In meinem ersten Bericht habe ich geschrieben, dass ich A.I. noch nicht selbst benutzt habe, um Programmcode zu schreiben. In der Zwischenzeit habe ich ChatGPT auch für die Entwicklung von Programmen und als Lehr- und Nachschlagewerk verwendet.

Info: Diese Experimente wurden mit ChatGPT-3 durchgeführt. Es kann sein, dass sich jetzt ChatGPT-4 ganz anders verhält.

Einleitung
Seit 40 Jahren schreibe ich Programme, zuerst in Commodore V2-BASIC. Später dann in BASH und diversen Makrosprachen von CAD- und ITSM-Programmen. Seit ca. 2000 ist PERL meine Main-Coding-Sprache. Man könnte also sagen, dass ich von Programmlogik und -technik „etwas“ verstehe.
Seit einiger Zeit versuche ich meinen Horizont in Richtung anderer (Compiler-) Sprachen zu erweitern. Ich habe schon Java ausprobiert, aber da ich so tief in der Spagetti-Code-Programmierung stecke, sind objektorientierte Sprachen nichts für mich.

Die Aufgabe
Vor kurzem bekam ich eine Anforderung, die nur sehr schwer bzw. sehr aufwendig in PERL umzusetzen war – die Hauptprobleme waren Runtime und den PERL-Interpreter auf 300 Win-Rechnern (Grusel) zu installieren.
So wurde die Idee mit der Compilersprache schnell wieder aktuell. Meine Wahl fiel auf C, nicht ++ oder #pur naked old basic legacy C.
Früher hätte ich Kurse gebucht und/oder wochenlang Bücher gewälzt. Meine normale Art zu lernen ist: Gib mir Beispiele und eine Aufgabe und lass mich erst mal in Ruhe. Also Tonnen von Code-Beispielen durchgehen, um die Struktur / Syntax einer Sprache zu verstehen. Dann das auf die Anforderung / das Problem zu übertragen. Nur bis ich brauchbare Ergebnisse gehabt hätte , hätte es Wochen oder gar Monate gedauert.
Also wollte ich diesmal etwas anderes ausprobieren …

From PERL to C – A.I. as a Translatier
Als Proof-of-Concept hatte ich die Anforderung bereits in ein funktionierendes PERL-Script umgesetzt. Da ich nun aber genau diesen Code nur in C brauchte, kam mir die Idee, dieses Script „einfach“ von ChatGPT übersetzen zu lassen. Ich hatte Videos gesehen, wo andere das mit Python und Java gemacht haben.
Natürlich musste ich zuerst das Script datenschutztechnisch aufbereiten, d.h. Hostname, IPs, PATHs, User, PW, etc. anonymisieren.
Die A.I. hat mir das Script zwar übersetzt, hat aber immer nach ca. 85-90 Zeilen C-Code mittendrin abgebrochen. Vielleicht ist das eine Einschränkung der Free-Version von ChatGPT. Ich habe es mehrmals versucht, auch mit gekürztem PERL-Script. Leider hat mir die A.I. nie ein vollständiges Programm zurückgegeben. Außerdem ist mir aufgefallen, dass der Code jedes Mal anders aufgebaut war, teilweise mit ganz anderen Funktionen, Variablen, Libs und Strukturen.
Also PERL-Skript rein und fertiger C-Code raus – so einfach ist das leider nicht. Wie gesagt, vielleicht liegt es an der Free-Version.

Anhand dieser Codefragmente habe ich versucht zu verstehen, wie die A.I. die Anforderung umsetzen würde. Durch den Vergleich des C-Codes und meiner PERL-Script begann ich die Struktur / Syntax von C zu verstehen. Fast so wie ich es sonst mit den Beispielen gemacht hätte, aber jetzt hatte ich das gleiche Programm (teilweise) in beiden Sprachen, sogar mit den gleichen Variablennamen. Also praktisch eine Art Rosetta Stone. Und das hat das Verstehen von C für mich enorm vereinfacht und beschleunigt.

Parallel dazu habe ich weitere (kürzere) PERL-Scripts bzw. Funktionen übersetzen lassen. Diesmal kam zwar ein vollständiger C-Code heraus. Dieser war aber bei weitem nicht fehlerfrei, von optimiert wollen wir erst mal gar nicht reden.
Der Code ließ sich zwar kompilieren, hatte aber einige Logikfehler: In zwei aufeinanderfolgenden Schleifen wurden die gleichen Namen von Hilfsvariablen verwendet. Die A.I. hatte aber vergessen, vor dem Start der zweiten Schleife ALLE zurückzusetzen, was zu komischen Nebeneffekten führte. So etwas kann man als Flüchtigkeitsfehler abtun, das kann auch richtigen Programmierern leicht passieren. Aber nach dem ersten Probelauf wäre es ihm sofort aufgefallen und er hätte es korrigiert.
Bei einer anderen Anforderung hat er meine Anfragen falsch interpretiert. Ich wollte einen komplexen String nach bestimmten Patterns zerlegen. Die A.I. hat eine Funktion geschrieben, die den String an festen „numerischen“ Stellen(!) aufteilt – vergleichbar mit substr, Sie interpretiert dies wahrscheinlich anhand meines Beispiel Input-String.
Da ChatGPT versucht, den PERL-Code (fast) 1:1 zu übersetzen, baut es auch Hilfsvariablen und Zwischenschritte ein, die in PERL notwendig sind, in C aber leicht abgekürzt werden könnten. Dies kann zu etwas umständlichen Techniken und komplizierterem Code führen.

Im Großen und Ganzen decken sich diese Erfahrungen mit dem, was ich schon von anderen gelesen habe. Es bestätigt mich auch in meiner generellen Meinung, dass ChatGPT als Unterstützungswerkzeug (no more no less) auch für Programmierer sehr gut geeignet ist,
Meine Beispiele/Anforderungen, die ich hier verwendet habe, hätte ein erfahrener C-Programmierer sicherlich schneller und besser umgesetzt.
Wenn man aber noch nicht so erfahren in C ist und diese Sprache lernen will, dann können die Vorschläge von ChatGPT sicher sehr hilfreich sein – Rosetta Stone Effekt. Insbesondere um besser / schneller zu verstehen, wie man bestimmte Anforderungen / Funktionen / Algorithmen, die man aus anderen Sprachen kennt, in C umsetzen könnte. Voraussetzung ist natürlich, dass man sich mit Programmlogik schon auskennt und in anderen Sprachen schon fit ist.

Lehren mit Hilfe von A.I.
Wie ich schon in meinem ersten Artikel beschrieben habe, verhält sich die A.I. ähnlich wie eine Suchmaschine, mit Korrelations-/Zusammenfassungsfunktion.
Normalerweise, wenn ich beim Schreiben von Programmen Fragen zu bestimmten Funktionen oder Befehlen habe, suche ich bei Google oder Stack Overflow nach Antworten. Oft bekomme ich dann Dutzende von Einträgen mit Dutzenden von möglichen „Lösungen“, die man erst mal alle lesen muss. Bis man zwischen all dem Geschwafel, Hater-Zeug und Grundsatzdiskussionen vielleicht, wenn man Glück hat, endlich die richtige Lösung findet. Das kann oft sehr langwierig, frustrierend und demotivierend sein.
Gerade wenn man eine neue Programmiersprache lehren will, muss man sehr oft genau solche Dinge nachschlagen. Und dann ist man schnell wieder bei langwierig frustrierend und demotivierend, was alles beim Lernen nicht gerade hilfreich ist.
Genau hier kommt jetzt ChatGPT ins Spiel. Denn die A.I. liefert mir ein kurzes, präzises Ergebnis zu meiner Frage. So erspare ich mir die ganze Wühlerei und damit den Frust. Natürlich bekomme ich auch falsche Antworten, aber die bekomme ich sonst auch bei Stack Overflow.
Außerdem kann ich die Fragen auch spezifischer stellen und bekomme sofort Antworten. Etwas, wofür ich sonst ein eigenes Posting hätte aufmachen müssen und dann tagelang auf die Antwort warten.
Zwei konkrete Beispiele:
Was Pointer in C machen, hatte ich schon beim ersten Lesen verstanden. Was ich aber wissen wollte: Wann ist es sinnvoll, sie zu benutzen, was sind die genauen Vorteile bzw. die Nachteile, wenn man sie in den falschen Situationen benutzt. In den Dutzenden von Tutorials, die ich durchgelesen habe, stand immer nur, was Pointer sind – Ja, das weiß ich! Aber meine eigentliche Frage wurde nirgends auch nur angesprochen.
Einmal ChatGPT gefragt, sofort drei Usecases inkl. der Begründung warum es hier vorteilhaft ist Pointer zu verwenden. – Wieder was gelernt und ich war zufrieden
Zweites Beispiel: Umgang mit String Arrays in C. Alle Beispiele waren nur über String Handling oder arbeiten mit numerischen Arrays.
Einmal ChatGPT gefragt, sofort dokumentierter Beispielcode zum Initialisieren, Füllen, Auslesen, Verwendung in Schleifen. – Wieder etwas gelernt und ich war zufrieden
Das waren jetzt nur zwei Fälle, wo mir die A.I. geholfen hat, meine Fragen schneller und gezielter zu beantworten als über Google, YouTube oder Stack Overflow.
Man kann auch gezielt fragen, wie Funktionen / Algorithmen, die man aus anderen Sprachen kennt, in C behandelt werden. Oder man lässt sich, wie oben beschrieben, kurze Skripte übersetzen, um dann durch Vergleich zu verstehen, was bestimmte Befehle / Funktionen / Algorithmen machen.

Das alles hat mir sehr geholfen, mich schnell in C einzuarbeiten. Und zwar schneller, tiefer und effektiver als mit den anderen Methoden. Natürlich bin ich nach jetzt zwei Wochen noch kein C-Experte, aber ich bin besser als ich erwartet hatte. Auch weil das Lernen mit der Unterstützung von A.I. motivierender ist als die normale Art zu lernen, zumindest für mich.

Erstes Fazit
Diese Hands-on-Tests haben mir gezeigt, dass meine bisherige Meinung über ChatGPT auch für die Programmentwicklung gilt: Als unterstützendes Tool zur Erleichterung allgemeiner Teilaufgaben ist es eine sehr große Hilfe. Es wird Programmierer oder Coder auf lange Sicht sicher nicht arbeitslos machen, Nein. Es könnte aber sein, dass, wenn es sich herumspricht, dass man mit Hilfe von A.I. Aufgaben jetzt schneller lösen kann, die Deadlines kürzer werden oder der geplante Aufwand pro Projekt reduziert wird. Aber das wird hoffentlich noch eine Weile dauern.

Zweites Fazit
Auch als Lernhilfe ist ChatGPT wirklich sehr gut geeignet. Vor allem, wenn man seine eigene Methode hat, Dinge zu lernen, so wie ich – gib mir Beispiele und eine Aufgabe und lass mich erst mal in Ruhe. Deswegen komme ich mit so etwas wie Frontalunterricht nicht klar.
Aber wie schon oft gesagt, es ist „nur“ ein unterstützendes Werkzeug, also ein gewisses Grundverständnis für das Gesamtthema und die Motivation zum Lernen sollte vorhanden sein. Eventuell braucht man als Einstieg erst einmal ein paar Basic Tutorial Videos.
Dann kann man sich von der A.I. weitere Beispiele zeigen lassen und so anfangen das Ganze zu vertiefen. Man kann auch gezielt Fragen stellen und bekommt auch schnell brauchbare Antworten. Die A.I. gibt zwar manchmal falsche Antworten, aber diese Gefahr besteht auch bei Stack Overflow, YouTube und sogar bei (Live-)Dozenten. Man muss sich auch keine Sorgen machen, dass man beleidigende Reaktionen bekommt, wenn man Anfänger- oder Grundlagenfragen stellt. Somit erspart man sich durch die Unterstützung von ChatGPT viel Frust, was sich wiederum positiv auf die Motivation auswirkt und somit dem Lernen sehr förderlich ist.
Wie gesagt, das sind jetzt meine ganz persönlichen Erfahrungen beim Erlernen einer neuen Programmiersprache. Inwieweit man das jetzt verallgemeinern kann, muss die Zukunft zeigen.



Werbung
Kategorien: computer, Journalismus, Life | Schlagwörter: , , , , , , , , , , , , , , , , , , , | Hinterlasse einen Kommentar

Beitragsnavigation

Kommentar verfassen : (Info: In diesem Falle wird Ihre eMail-Adresse und IP gespeichert)

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit deinem WordPress.com-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden..

Eine WordPress.com-Website.

%d Bloggern gefällt das: