Programmieren lernen und AI

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
geraldfo
User
Beiträge: 73
Registriert: Samstag 28. Januar 2023, 20:19
Wohnort: Nähe Wien
Kontaktdaten:

Meine Meinung:
Wer Programmieren lernen will sollte das zunächst ohne AI-Tools tun.

Was meint ihr?

LG Gerald
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nö. Wer programmieren lernen will, kann das ggf mit AI effektiver tun. Das ist nicht das Problem. Sondern das die Leute sich Code erzeugen lassen, der weit jenseits ihres Horizonts ist. Und den von uns dann bitte repariert haben wollen. Denn da ist ja nicht der Weg das Ziel, sondern es geht “nur” um dieses ein Skript. Da will ja keiner* wirklich Programmieren lernen.

*Ausnahmen ausgenommen.
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Gibt es denn eine AI mit der man das machen kann? ChatGPT ist keine AI und keine Suchmaschine, und auch nicht wirklich geeignet irgendjemandem irgend etwas zu erklären. Das ist ein Sprachmodell das überzeugend *wirkende* Texte erzeugen kann. Das weiss nicht wirklich etwas, sondern erzeugt einfach nur statistisch wahrscheinliche Texte. Wenn die Daten an denen es gelernt hat, nicht ”weiter wissen”, dann wird statistisch unwahrscheinlicheres erzeugt. Das heisst ChatGPT fängt dann an zu fantasieren und sich Sachen ”auszudenken”. Und da es nichts *weiss*, kann es auch nicht selbst einschätzen ab wann es einfach nur noch Müll erzählt. Diese Bewertung muss der Leser vornehmen. Dazu muss er den Unsinn aber erkennen können, also genug Ahnung vom Thema, in diesem Fall Programmieren haben, dass er in der Regel den korrekten Teil auch hätte selbst schreiben können.

Dieser Twitter-Thread ist da vielleicht erhellend: https://twitter.com/lamahueterin/status ... 2184830978

Das gilt für jedes Thema, also auch für's Programmieren.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
Dennis89
User
Beiträge: 1555
Registriert: Freitag 11. Dezember 2020, 15:13

Hm ich gehe davon aus, das wir über Sachen wie ChatGPT reden? Da fehlt mir die Gewissheit, dass die Infos, die ich bekomme richtig sind. (Neulich las ich einen Post, dass das eher ein Sprachmodell sei, anstatt KI)
Eigentlich kann man das ziemlich gut mir mir vergleichen. Ich habe meine Infos über Python und Programmieren auch aus Texten die im Internet sind. Der Unterschied ist nur, dass ich ab und an meine Antwort nicht absende, weil ich mir nicht zu 100% sicher bin, ob ich den Zusammenhang richtig verstanden habe. Dass ist der Teil, der mir fehlt und wieso ich das Tool noch nie zur Problemlösung genutzt habe oder lieber im Forum frage. (natürlich nach dem ich die Doku studiert habe)

Ob das schlau oder voreingenommen von mir ist, lass ich mal dahingestellt. Eventuell klappt das auch gut, wenn man keinen Code erwartet, sondern Erklärungen zu Programmteilen.
Frage:
Wie funktioniert die Python-Funktion framebuf.FrameBuffer.blit
ChatGPT:
Die Funktion framebuf.FrameBuffer.blit ist eine Methode des framebuf.FrameBuffer-Objekts in MicroPython, mit der Pixel von einem FrameBuffer auf einen anderen FrameBuffer kopiert werden können.

Der FrameBuffer ist ein Speicherbereich, der Pixelinformationen enthält. In der Regel wird ein FrameBuffer verwendet, um Pixel auf einem Bildschirm oder einer anderen Anzeigefläche darzustellen. Der FrameBuffer kann als 1-Bit-Monochrom-Bild oder als 8-Bit-Grayscale-Bild dargestellt werden.

Die blit-Methode akzeptiert drei Argumente:

1. source - das Quell-FrameBuffer-Objekt, aus dem die Pixel kopiert werden sollen.
2. x und y - die Koordinaten des linken oberen Eckpunkts des Bereichs, in den der Inhalt von source kopiert werden soll.
3. w und h - die Breite und Höhe des zu kopierenden Bereichs von source.

Durch Aufrufen von blit werden die Pixel des Quell-FrameBuffer in den Ziel-FrameBuffer kopiert. Die Methode kopiert jeden Pixel von source in den Ziel-FrameBuffer, beginnend bei der Position (x, y). Die Anzahl der kopierten Pixel wird durch w und h definiert.

Die Methode ist sehr nützlich für das schnelle Zeichnen von Grafiken auf einem Bildschirm oder einer anderen Anzeigefläche.

Beispiel:

Code: Alles auswählen

import framebuf

# Erstellen eines Framebuffers für einen 64x64-Monochrombildschirm
buf1 = bytearray(64 * 64 // 8)
fb1 = framebuf.FrameBuffer(buf1, 64, 64, framebuf.MONO_HLSB)

# Erstellen eines Framebuffers für einen 128x64-Grayscale-Bildschirm
buf2 = bytearray(128 * 64)
fb2 = framebuf.FrameBuffer(buf2, 128, 64, framebuf.GS4_HMSB)

# Zeichnen eines Quadrats in den ersten Framebuffer
fb1.rect(16, 16, 32, 32, 1)

# Kopieren des Inhalts des ersten Framebuffers in den zweiten Framebuffer
fb2.blit(fb1, 32, 0, 32, 32)
In diesem Beispiel werden zwei FrameBuffer-Objekte erstellt - fb1 und fb2. Der erste FrameBuffer hat eine Größe von 64x64 und wird als Monochrombildschirm dargestellt. Der zweite FrameBuffer hat eine Größe von 128x64 und wird als 8-Bit-Grayscale-Bildschirm dargestellt.

Dann wird ein Quadrat in fb1 gezeichnet und schließlich der Inhalt von fb1 in fb2 kopiert. Die Methode blit wird auf fb2 aufgerufen, um den Inhalt von fb1 ab der Position (32, 0) (d.h. 32 Pixel von der linken Kante und 0 Pixel von der oberen Kante) zu kopieren, wobei eine Breite und Höhe von 32 Pixeln verwendet wird. Das Ergebnis ist ein kopiertes Quadrat in fb2.
Da ich damit immer Probleme habe (aktuell auch) kommentiere ich die Antwort nicht und überlasse das euch.

Grüße
Dennis

Edit: Ach, da ist wieder der Post mit dem Sprachmodell :mrgreen:
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

@__blackjack__:Ich bin da noch unentschlossen. Allgemein sehe ich das genauso. Ich kenne aber mehrere Leute, die sich zb Bash Skripte haben erzeugen lassen, oder Hilfestellung bei GO haben geben lassen. Weil sie das selten machen, und das Ding durch genug gesehenen Code eben sinnvolle Schnipsel ausspuckt. Und auf dem Niveau kann ich mir das ggf vorstellen: erklären lassen, was diese Funktion tut. Oder generieren von Code für einfache Fragen. Ich habe zb gerade mal viewtopic.php?t=56744 da durch gejagt, und der resultierende Code tut, was er soll.

Ein solches explorieren, ausprobieren, lernen kann ich mir durchaus vorstellen. Klar muss das mindset sein, dass der Lehrer auch mal Mist erzählt. Aber es ist nicht wertlos.
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@__deets__: Wie ist denn die Qualität da? Gerade Shell-Skripte haben ja eine Menge Fallstricke und das Netz ist voll von nicht wirklich robusten Wegwerfskripten. Bei Python sehe ich immer wieder ``global`` in den Lösungen und `os.path` statt `pathlib`. Ordentliche Tk- oder Socket-Beispiele sind auch selten, da würde ich auch viel Müll erwarten.

Das mit dem Code und Erklärungen raten hatte ich selbst mal beobachtet als ich gefragt habe wie man in GW-BASIC eine gegebene Zeit lang warten kann. Da kam ein ``SLEEP 3`` mit einer überzeugenden Erklärung was das macht. GW-BASIC kennt kein SLEEP. Darauf hingewiesen kam der Vorschlag WAIT zu verwenden mit einer auch überzeugend klingenden, aber eben falschen Erklärung was WAIT macht:

Code: Alles auswählen

10 FOR I = 1 TO 3000: WAIT &HDC00, I: NEXT I
Da ich mich dumm stellen wollte — ChatGPT sollte ja *mir* etwas erklären, habe ich wahrheitsgemäss geantwortet, dass das zu einem „Illegal function call“-Fehler führt. Was wenn man sich die Dokumentation von WAIT anschaut, auch einleuchtet, denn das zweite Argument muss ein Bytewert sein, die Schleife geht aber bis 3000. Solches Wissen hat ChatGPT aber nicht, und hat sich entschuldigt WAIT vorgeschlagen zu haben — dieses Schlüsselwort gibt's nicht. Äh, doch das gibt es.

Dafür kam jetzt der erste sinnvolle (geratene) Ansatz:

Code: Alles auswählen

10 start_time = TIMER
20 WHILE TIMER < start_time + 3
30 WEND
Da habe ich dann darauf hingewiesen, dass an der Stelle des Unterstrichs ein Syntaxfehler angezeigt wird. (Namen dürfen in GW-BASIC keine Unterstriche enthalten). Das wäre sozusagen (fast) der einzige Fehler, den man hier korrigieren müsste. Der nächste Vorschlag von ChatGPT war dann aber:

Code: Alles auswählen

10 starttimer = TIMER
20 WAIT &HDC00, starttimer + 3
Wieder mit einer ”überzeugend klingenden” Erklärung, was aber komplett falsch und unsinnig ist.

Das vorletzte Beispiel war fast richtig. Da TIMER aber die Sekunden seit Mitternacht zählt, also um Mitternacht wieder auf 0 springt, muss man diesen Fall berücksichtigen, oder *sehr* sicher sein, dass man nie um Mitternacht herum nur 3 Sekunden warten möchte.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es wird sicher einen Zusammenhang zwischen Popularität der Sprache und Qualität der Ergebnisse geben. Was die Nutzung von “falschen” Bibliotheken und Mustern angeht: keine Frage, ist so. Ist aber gelernt aus genau den Beispielen, aus denen auch der Anfänger lernt. Hier schlagen die Leute ja auch schon vorher so auf, mit + uns sockets und while Schleifen in GUIs. Da kann man lang und breit spekulieren, ob das denn didaktisch schlecht ist oder nicht, aber der status quo wird nicht verschlechtert. Im Gegensatz dazu besteht aber die Chance, eine Lösung oder Ansatz zum eignen Problem zu bekommen. Statt dem, was sich da wer anderes ausgedacht hat hat. Das könnte motivierender sein.
geraldfo
User
Beiträge: 73
Registriert: Samstag 28. Januar 2023, 20:19
Wohnort: Nähe Wien
Kontaktdaten:

Vielen Dank für eure Beiträge!
Das Thema wird wahrscheinlich immer wieder einmal aufpoppen.
Aber eigentlich müsste man sich zuerst einmal klar darüber werden, was Künstliche Intelligenz ist, und ob es das überhaupt gibt.

Ich wünsche euch einen entspannten Tag
Gerald
Antworten