Was ist wichtig, wenn ich eine Programmiersprache lernen will

Der Link von Hans hat mich auf etwas gebracht was immer gerne bei den Diskussionen, welche Programmiersprache die beste ist vergessen wird, aber für den Neueinsteiger wichtig ist: Der Komfortfaktor und die Einstiegsschwelle. Um es vorweg zu sagen, ich rede jetzt nicht davon eine Programmiersprache sich anzueignen um Programmieren zu lernen, also systematisch die Konzepte einer Programmiersprache, Algorithmen, Datenstrukturen, die objektorientierte und ereignisorientierte Programmierung mit allem was dazu gehört (Vererbung, Polymorphismus, thread-safe Routinen etc…) wie es Bestandteil eines Informatikunterrichtes sein sollte, sondern von dem Ansatz her: ich bin Laie, möchte sehen ob ich am Programmieren Spaß habe und vielleicht was nützliches machen kann. Ich will aber nicht Informatiker oder beruflicher Software-Entwickler werden und ich brauche das auch nicht beruflich.

Bei den Diskussionen für und gegen eine Sprache kommt man sehr schnell immer auf konkrete Umsetzungen. Denn natürlich sind die Probleme mit Pufferüberläufen bei C bekannt und Compiler sind oft standardmäßig so eingestellt dass sie auf den Stack Daten schreiben die sie vor dem Rücksprung prüfen um die Ausführung von Fremdcode zu verhindern und beim beliebten „=“ in der If Anweisung gibt’s zumindest eine Warnung.

Was mich als ich Informatik studierte gestört hat (das war so 2000-2004) wie meilenweit Java und C++ damals von dem Komfortstandard von Delphi entfernt waren. In Delphi konnte ich schon damals relativ einfach visuelle Oberflächen gestalten und dann die Ereignisverarbeitungsroutinen schreiben. Trotzdem habe ich natürlich eine leistungsfähige Sprache im Hintergrund, mit der ich dann auch komplexe Programme schreiben kann. Visual C arbeitete damals mit zig verschiedenen Makros die man einfügen musste und visuell konnte man Formulare schon gar nicht designen. Bei Java gab es einen Formulardesigner, aber der war hakelig und schwergängig. Selbst dann sahen die Anwendungen altbacken aus. Zum Ende des Studiums hin hat sich mit C# mit denselben Möglichkeiten wie Delphi einiges verbessert.

Inzwischen sind ja Ruby und Phyton en Vogue, aber sie haben alle für mich das Henne und Ei Problem. Solange ich damit weniger machen kann als bisher (oder zumindest das, was ich bisher mache nicht möglich ist oder ich einen Rückschritt zur reinen Programmierung auch von visuellen Oberflächen im Quelltexteditor machen muss) solange sind sie für mich keine Alternativen.

Für den Anfänger haben solche komponentenbasierte Systeme den Vorteil, dass er schnell Erfolgserlebnisse hat. Ein Button, einige Eingabefelder und ein Onclick Ereignis und jemand kann schnell eine Berechnung ausführen und das Ergebnis ausgeben. Die große Gefahr ist, dass man auf diesem Einstiegsniveau kleben bleibt. Ich habe deswegen, als wir vor einigen Monaten diskutiert haben wie es mit dem Informatikunterricht weiter geht, eine ziemliche Diskussion. Da war ein Dozent der genau anderen Meinung als ich: während ich im ersten Teil nur Konsolenprogramme mache weil ich möchte das die Studenten die Grundlagen erlernen, hat dieser immer mit der grafischen Oberfläche wegen der „Erfolgserlebnisse“ angefangen. Für mich ist sie der zweite Schritt, wobei ich dann die Elemente nicht so vertiefe, sondern dann eben in Algorithmen und komplexere Programme einsteige. Das dort objektorientiert programmiert wird und das System ereignisorientiert ist, kann man bei den wenigen Stunden aber auch nur streifen. Für mich ist ein fundiertes Grundgerüst in der prozeduralen Programmierung wichtiger als alles kurz anzusprechen. Doch wer möchte der kann sich dies dann aneignen.

Das ist meiner Meinung nach das wichtigste bei einer Programmiersprache für Anfänger: ein leichter Einstieg, die Möglichkeit rasch Erfolgserlebnisse zu bekommen, aber auch dass man eine leistungsfähige Sprache hat, mit den Möglichkeiten sich weiter zu entwickeln. Ob das ganze dann ein  historisch gewachsene Sprache wie Delphi oder Visual BASIC ist, etwas komplett neues von der Wiese wie Ruby, oder so was wie Java die für eine reine Einsteigersprache schon etwas zu komplex ist, man muss sich erst mal in die objektorientierte Programmierung einarbeiten (nichts dagegen und für größere Programme fast unverzichtlich, aber die Einstiegsschwelle ist bei prozeduralem Ansatz doch deutlich niedriger).

Der wohl wichtigste Punkt ist für Anfänger, dass man die Sprache umsonst bekommt. Schließlich will man erst mal ausprobieren, Leider hat sich bei Borland aka Embaccadero da einiges verschlechtert. Früher gab es noch Delphi Personal Versionen und auch mal Turbo Delphi umsonst – mit Einschränkungen, aber mit denen konnte man leben. Inzwischen ist das nicht mehr so, was auch der Grund bei der Hochschule war, sich von dem Produkt zu verabschieden, weil die Studenten natürlich für Übungen zu Hause auch Lizenzen brauchen. Wir haben ja keine Informatiker. Ich glaube daher das keine dieser Lizenzen jemals eine Umsatzverlust bedeutet hätte, zumal alle mit Online Aktivierung liefen (hat die Uni keine Lizenz mehr läuft auch die lokal installierte nicht mehr). Wir nutzen nun Lazarus, was in der Oberfläche und Bedienung einige Generationen hinterher ist, aber weitgehend kompatibel, was die Funktionalität angeht. Problematisch ist bei mir dass der Debugger reproduzierbar abstürzt wenn er mehr als zweimal in derselben Codezeile über eine Exception stolpert. Aber es ist umsonst und so eine Möglichkeit für Einsteiger. zudem ist es recht schmal und startet enorm schnell.

Microsoft denkt da weiter und verschenkt seine Express Versionen von Visual Studio nach wie vor. Die Express Version ist eben nur eine Sprache und das reicht ja für Privatpersonen. Da kann man aussuchen ob es Visual Basic oder C# sein soll. Ich würde C# wählen, weil man dann relativ leicht zu anderen C-ähnlichen Sprachen wechseln kann. Wie es mit Java, Ruby oder Python aussieht kann ich ehrlich gesagt derzeit nicht sagen, weil ich da seit einigen Jahren nicht mehr mit einer aktuellen IDE gearbeitet habe.

7 thoughts on “Was ist wichtig, wenn ich eine Programmiersprache lernen will

  1. Moin Bernd,

    zum einen verwechselst Du leider Sprachen und Implementierungen, packst da deren IDE mit rein, und deren Libraries, und beschränkst das ganze dann auch noch auf Windows.

    Es gibt, imho, drei Lösungen zur Frage welche Sprachen sind die richtigen zum lernen:

    1: Der Informatiker in mir sagt, es geht um Konzepte, d.h. Scheme um eine symbolische Sprache zu lernen, Smalltalk um eine Object orientierte, Forth oder Postscript für eine Stack orientierte, Lua oder Javascript für prototyping, und Haskel oder Erlang um das ganze abzurunden.

    2: Der Didaktiker sagt, es geht um den Spaß an der Sache, d.h. Scratch ab 6 Jahren, Lua ab 8-10 Jahren, PHP und JavaScript ab 8-12. Damit lassen sich schnell Spiele entwickeln, und die ersten beiden Sprachen sind sogar für die Lehre geeignet.

    3: Und dann gibts noch Jobs, also nicht den toten Apfel, sondern das leidige Geld, d.h. Java, PHP, ABAB sind die Sprachen viel Geld bringen.

    ciao,Michael

  2. Ein weiteres einfaches System wäre XCode von Apple. Mittels Objective-C kann man ganz leicht OSX Programme mit GUI herstellen, sowie Apps für iOS.

    Läuft allerdings nur auf dem Mac.

  3. Deshalb sag ich z.B. auch, dass Javascript, und in diesem Falle dann in einer Browser-Umgebung (DOM) mit HTML/CSS ein super Einstieg in die Programmierung ist.

    Man hat sofort Erfolgserlebnisse, kann toll aussehende graphische Oberflaechen in HTML/CSS designen, kann Code sofort und problemlos ausfuehren ohne Kompilation etc., lernt eine saubere Programmiersprache, und alles ist kostenlos und auf jedem Schrammel-PC grundsaetzlich verfuegbar.

    Was will man mehr?

  4. Ja das ist ja mal ein interessanter Artikel!
    Dem stimme ich auch zu. Die Einstiegshürden sollten niedrig sein und man sollte relativ schnell zu Erfolgserlebnissen kommen. Trotzdem halte ich es auch für richtig, erst mal mit einfachen Konsolenprogrammen anzufangen. Beim Übergang von der Konsole zum GUI besteht dann aus meiner Sicht aber auch das Problem, den systemunabhängigen Code von jenem zu trennen, der für ein GUI spezifisch ist. (Jedenfalls sobald die Programme eine bestimmte Grösse überschreiten.) Bei einem Simulationsprogramm also beispielsweise die Rechenroutinen, die man auch in einem Konsolenprogramm unterbringen könnte, sinnvoll mit dem GUI zu verbinden. Sie sollen zwar daraus aufgerufen werden, haben aber im Code für die Ereignisshandler selbst nichts verloren.

    Was Lazarus angeht, das klingt interessant. Dazu würde mich interessieren, welchem Stand der Delphi IDE es denn so ungefähr entspricht? – Ich hab hier zum Vergleich nur Delphi 6, das vor Jahren mal auf einer CD vom PC-Magazin drauf war.

    Und wo wir gerade bei Entwicklungsumgebungen sind, noch ’ne Frage zu einem „Hardcore“ Thema: Gibt es eigentlich einen Konverter, der Delphi-Resource-dateien, also *.dcr in Resourcen-Skripte mit der Endung .rc übersetzt? – Dann könnte ich die nämlich auch mit C-Programmen benutzen, ohne die Menüs, Dialogboxen, etc. nochmal komplett neu zu machen, bzw. die Daten von Hand übertragen zu müssen. Bei der C-IDE, die ich zur Zeit meisstens verwende, (Open Watcom 1.9) ist zwar auch ein Resourcen Editor dabei, der diese auch aus der Executable heraus holen kann. Aber der hat den Haken, dass er alle Resourcen separat behandelt, so dass ich am Ende für jede Art von Resourcen ein separates rc-Skript habe. – Das wäre ja nicht weiter tragisch, wenn er schon fertige Resourcenskripte beim bearbeiten nicht auch auseinander reissen würde. Angenommen ich hab darin ein Icon, ein Menü und eine Dialogbox definiert und bearbeite hinterher das Menü mit dem Editor, dann steht in der .rc-Datei hinterher nur noch die bearbeitete Menüdefinition drin, aber der Rest fehlt. *gr* >:-(

    Zum Schluss noch ’ne „spitze Bemerkung„:

    Zum Ende des Studiums hin hat sich mit C# mit denselben Möglichkeiten wie Delphi einiges verbessert.

    Das muss dann wohl die Zeit gewesen sein, als Herr Hejlsberg nach seinem Wechsel von Borland zu Microsoft dort richtig Fuss gefasst hatte und entsprechende Entwicklungen von Borland innerhalb von Microsofts Produktstrategie nachholen konnte…

  5. Moin Pragmatiker,

    > Deshalb sag ich z.B. auch, dass Javascript, und in diesem Falle dann in einer Browser-Umgebung (DOM) mit HTML/CSS ein super Einstieg in die Programmierung ist.

    Du gehörst also zur Fraktion bei dem der Spaß/Erfolg an erster stelle ist. Das schicke an JS ist, dass es quasi wie Basic auf dem Homecomputer immer da ist. Egal ob Linux, Windows, Mac, oder Phone. Einen Browser mit JS hab ich immer. Der Nachteil von JS ist, dass es eine gewucherte Sprache ist, mit einem riesen Umfang, verschiedenen imkompatiblen Implementierungen. Dann ist das Coerce verhalten kaum vorhersehbar, und erzeugt die bekannten JS WAT Effekte.

    http://www.youtube.com/watch?v=kXEgk1Hdze0 <- ab 1:10

    Ich stell mal einige Forderungen an eine Sprache zum Programmieren lernen auf:

    – Die Sprache muss als quelloffene Software unter einer freien Lizenz verfügbar sein. Weil alles andere ist, als würde ich einem Chemiker zwei Flüssigkeiten geben mit denen er experimentieren darf, aber ihm nicht sagen was in den Flüssigkeiten drin ist, und ihm verbieten, die Flüssigkeiten zu analysieren und selber herzustellen.

    – Die Sprache sollte Ausdrucksstark sein, d.h. sie sollte symbolisch, funktional, Object orientiert, Prototypen, Coroutinen, Continuations, Closures, uvm., bieten.

    – Die Sprache und ihre Standardbibliothek sollte klein sein, d.h. keine gewucherten Sprachen wie C++, PHP, oder Java. Gut ist, wenn das Referenzmanual auf eine Seite passt.

    – Die Sprache sollte auch vom Fußabdruck klein sein. Ein Atari oder Amiga mit 512kb RAM sollten für ein Spiel in dieser Sprache inklusive GUI reichen, weil das eine Leistungsklasse ist, die sich vor allem in der 2ten und 3ten Welt immernoch in Kinderzimmern findet.

    – Die Sprache sollte lesbar und frei formatierbar sein. D.h. keine Sonderzeichenbleiwüsten wie in Perl, und keine signifikanten Leerzeichen wie in COBOL oder Python.

    – Es sollte dutzende von Game Engines geben, die diese Sprache verwenden, für die verschiedensten Plattformen. Mit Programmen die in Love2d, Corona oder WoW geschrieben sind, lässt sich auf dem Pausenhof punkten.

    – Die Sprache sollte für die Lehre geeignet, und vom Vatikan abgesegnet sein.

    Imho ist Scratch ab 6 Jahren, und Lua danach der richtige Weg, um das Programmieren zu lehren. Bis ich mit nem Web-Canvas das hab, was mir Love2d bietet, hab ich etliche Seiten Programmiert.

    Wer das nicht kennt, und Kinder hat: http://scratch.mit.edu/

    ciao,Michael

  6. Mal ein Nachtrag zum Ausdrucksstark:

    Lua Programmierung beginnt BASIC/FORTRAN look like

    require“bc“
    bc.digits(65)

    function mysqrt(x)
    local y,z=x,x
    repeat z,y=y,(y+x/y)/2 until z==y
    return y
    end

    Und schon kann ich Wurzeln mit 65 Stellen hinterm Komma ziehen.

    Function, end, repeat, until sind Pascal like ausgeschrieben Worte und keine Curly Braces. Klammern und Semikolons dürfen wegegelassen werden, um die Lesbarkeit zu erhöhen. Ungewöhnlich zu anderen Sprachen ist, dass rechts und links von einer = Zuweisung mehr als eine Variable und Ausdruck stehen darf.

    a,b = b,a

    Vertauscht also den Wert zweier variablen.

    Lua bietet folgende Datentypen:

    – Nil, True, False als Tristate

    – Numbers (im Normalfall Doublefloat, aber Integer ist beim Übersetzen des Lua Interpreters auch möglich)

    – Strings (diese haben je nach dem wie der Lua Interpreter Übersetz wurde eine Maximallänge von 256b,64kb,4gb oder 2^64. Im Gegensatz zu C-Strings dürfen Lua-Strings auch Null-Zeichen enthalten.

    – Functions (Closures sind 1th Class Citizen, d.h. eine Variable kann eine Funktion beinhalten)

    – Tables (Ein Lua Tabelle ist hat sowohl einen Array Part, wenn der Index eine Zahl ist, als auch einen Hash Part, wenn der Index ein String ist, als auch ein Prototypen-Object mit Vererbung über die Metatable.

    – Threads (Ein Lua Programm kann mehrere Tasks haben)

    – User Data (Lua ist als embedded Sprache gedacht. Die Funktionalität von User Data ist in C geschrieben, nach oben sieht User Data aber wie jede andere Object Referenz aus. Insbesondere gibt es eine Metatable, in der die Methoden drin stehen, um mit dem User Data etwas zu machen.

  7. @Hans
    Lazarus ausprobieren, dann weist Du mehr. Die IDE hat das Feeling von Delphi 7 (noch ohne angedockte Fenster) geht aber in einigen Features (Sprachvervollständigung, Ergänzungen bei teilweisen Deklarationen, Code Formatter) darüber hinaus. Lazarus kann man auch auf einem USB Stick installieren und der download ist nur 122 mb groß.

    Der Debugger scheint der Schwachpunkt zu sein. Auch habe ich in der Vorlesung gemerkt dass einige Fehler die Delphi bemerkt nicht bemerkt werden (Schreiben von Element 101 bei einem 10 Elemente Array) und er bläht die executabeles enorm aus (selbst minimale grafische Programme sind mit Debuggerinfos 14 mb groß).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.