Mathias hat geschrieben: Di 12. Sep 2023, 13:42
Solche Sachen kann man einfach in der Konsole oder auch mit der LCL realisieren.
Das ist tatsächlich eine Frage die ich mir schon länger gestellt habe, wie führt man am besten Anfänger an Programmieren ran. GUI Anwendungen oder Konsolenanwendungen.
Eine GUI Anwendung ist unfassbar kompliziert. wenn ich ein Hello World mit ner LCL Form schreibe:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Hello World');
end;
end.
Dann habe ich hier: 1. eine Unit die von einem Program eingebunden wird, 2. mehrere imports über uses von verschiedenen Units, aus einem Package, 3. Definition einer Klasse inklusive vererbung, 4. Klassen Memberfields die versteckte Pointer sind 5. eine Methode die ein versteckten Self parameter hat und gleichzeitig als Funktionspointer für ein Event verwendet wird, 6. eine Globale Variable, 7. einbindung der LFM als resource und 8. den Tatsächliche Code den man beibringen möchte
Das ist unfassbar viel Komplexität auf einem haufen, und der einzige weg um das für Anfänger zu managen ist einfach das ganze zu ignorieren. Das widerum führt dann oftmals zu einem Trial by Error lernprozess, sodass der Anfänger durch rumprobieren Sachen rausfindet.
Das Problem ist bei Trial und Error lernen ist, das nur weil was funktioniert es nicht korrekt ist, man sich schnell schlechte oder Fehlerhafte Praktiken aneignet was auch sehr schnell zu dummen Fehlern führen kann.
Eine Konsolenanwendung hingegen ist super einfach:
Code: Alles auswählen
program Test;
{$Mode ObjFpc}{$H+}
begin
WriteLn('Hello World');
end.
Hier gibt es praktisch nur 2 Konzepte, 1. die Struktur eines Programs und 2. das code von oben nach unten ausgeführt wird. Damit kann man Schritt für Schritt neue Konzepte einführen, ohne das das ganze drum herum für Verwirrung sorgen kann.
Das Problem dabei ist, Konsolenanwendungen sind langweilig (bis man irgendwann so viel über PCs und Programmieren gelernt hat das man die wieder spannend findet). Das bedeutet, obwohl sie didaktisch wertvoller sind, ist es viel schwerer am Ball zu bleiben, weil man einfach keine wirklich nützlichen Programme schreiben kann.
Ich hab damals als Kind programmieren gelernt (erst ganz kurz Pascal angeschnitten, später dann richtig VB gelernt), zwar hatte ich zunächst die absoluten Grundlagen mit Konsolen gelernt, was ich zwar faszinierend fand, aber relativ schnell bin ich dann zu GUIs übergegangen, weil man damit einfach schnell Nützlichere Programme bauen kann. Und wegen der ganzen Komplexität habe ich relativ selektiv immer nur so viel gelernt und ausprobiert bis ich was hinbekommen habe. Ich habe erstaunlich nützliche Programme für damals geschrieben, z.B. für ein Spiel was ich damals gespielt habe ein paar kleinere Tools um sachen zu berechnen oder Dateien zu bearbeiten.
Das Problem ist, der Code war alles andere als gut, es hat zwar funktioniert, aber da ich alles nur zusammenkopiert und abgetippt habe war der code kompletter kraut und rüben (z.B. ich wusste nicht mal was arrays waren, und habe einfach massiv viele variablen und ewige if-then-else statements benutzt). Außerdem verzeiht einem Visual Basic extrem viele Fehler.
Richtig Programmieren gelernt habe ich dann wirklich erst als ich eine neue Sprache angefangen hab andere Programmiersprachen zu lernen (erst Pascal, später PHP und C), und die dann deutlich Strukturierter zu lernen, und dann auch mit minimalen Konsolenbeispielen und reinen Beispielprojekten, keine "nützlichen" Programme.
Von daher ist die Frage m.E. nach sowohl interessant als auch schwer zu beantworten. Hätte ich nicht diese Schrottigen aber nützlichen GUI Programme geschrieben, sondern nur künstlich limitierende Beispiel Projekte in der Konsole gemacht, hätte das 12 jährige ich vermutlich schnell die lust verloren. Gleichzeitig habe ich 2 Jahre lang nur absoluten schrott produziert und eigentlich keine Ahnung gehabt wie der kram eigentlich funktioniert, bis ich dann mit 14 rum mal "richtig" programmieren gelernt habe.