Nachschlag
Michael K. hat ja im Blogkommentar mir vorgeworfen, dass ich Sprachen mit Implementierungen verwechsle, IDE und Bibliotheken mit rein packe und das ganze noch auf Windows beschränke. Dazu mal die Antwort. Ich habe in meinem Artikel mich auf den New-User bezogen, der wissen will ob Programmieren ein Hobby für ihn ist. ich habe bewusst die ausgenommen, die es beruflich lernen müssen. Oftmals hat man beim beruflichen Einsatz sowieso nicht die Wahl, was man lernen muss. Und es geht mir nicht um die reine Lehre oder die Endlos-Diskussion „Was ist die beste Programmiersprache“.
Also fangen wir an: Warum ich mich auf Windows beschränke? Weil 90% aller Benutzer Windows installiert haben und die die Linux oder Mac haben, nutzen oft noch Wine oder BootCamp. Umgekehrt wird ein Schuh draus: Warum sollte ich etwas empfehlen, dass nur unter Linux läuft, sodass ein Windows Benutzer noch ein extra Betriebssystem installieren muss? (bei Mac-OS darf er dann noch einen teuren Computer kaufen).
Implementierungen und Bibliotheken sind wichtig und zwar nicht nur für Anfänger. Wir sind nicht mehr in den Achtzigern, als wir Programmiersprachen mit einigen Kernbibliotheken hatten und der Anwender dann anfing alle wichtigen Dinge selbst zu programmieren. Heute gehört auch dazu dass man eine grafische Oberfläche einfach erstellen kann. Was nützt es mir, wenn ich mit Zahlen beliebiger Länge rechnen kann, wenn ich nicht mal ein einfaches Formular mit einigen Editfeldern zur komfortablen Zahleneingabe schnell mal erstellen kann? Wie wichtig ist dieses Sprachfeature gegenüber dem Verlust an Komfort? Die grafische Oberfläche ist nun mal nicht so was neues und sie ist seit 20 Jahren Standard. Ich muss immer schmunzeln wenn bei Sprache X immer ein relativ unwichtiges Feature herausgestellt wird, aber vergessen wird, dass eben wichtige Bibliothekfunktionen die bei anderen Implementierungen Standard sind, fehlen oder man bisher nur Konsolenprogramme oder Ergebnisse in einem Interpreter mit Eingabeprompt ausgeben kann. Man mag eine Programmiersprache lernen, aber keiner tut das mit einem nackten Compiler. Genauso will ich nicht das Rad jedes Mal neu erfinden, sondern schon Routinen benutzen die existieren.
Genauso denke ich gehört eine IDE mit zum Sprachumfang, das Konzept der IDE ist ja nun nicht gerade was neues, Turbo Pascal, als erstes Produkt mit einer IDE das ich kenne, erschien 1986 oder 1987. Das kann man nun nicht gerade als „brandneu“ bezeichnen. Es kommt mir nicht so sehr auf spezielle Funktionen an, vieles was die IDE, die ich einsetze, bietet nutze ich nicht, wie „Refaktoring“ oder Unit Tests. Aber eine Kernfunktionalität wie ein integrierter Debugger sollte schon da sein.
Was ich auch wichtig finde ist, dass man ein Programm erzeugen kann, dass man ohne die Umgebung der Sprache starten kann. Bei Java geht das z.B. nicht. Ich brauche für .jar Dateien eine installierte Java Umgebung. Andere interpretierte Sprachen wie Python brauchen sogar die installierte Entwicklungsumgebung und Javascript mag zwar ohne die Installation einer IDE funktionieren, aber dafür bin ich auf den Browser uns seine Sandbox beschränkt. Dateien wird man so nicht anlegen können. Ne GUI in Javascript habe ich auch noch nie gesehen. Der Nutzfaktor ist bei dem Einsatz in Webseiten 100% gegeben, doch die wenigsten Anwender haben eine eigene Homepage. Vom Debuggen und der Entwicklung im Browser mal ganz zu schweigen. Irgendwann kommt jeder an den Punkt wo er seine Programme veröffentlichen und weitergeben will, und dann kommt er an einer Sprache die ausführbare Programme erzeugt nicht vorbei. Das müssen nicht Binärprogramme sein, wer will kann ja auch in der Powershell entwickeln. Allerdings hat die dann ein Manko bei anderen Anforderungen.
Beim Durcharbeiten der zweiten Auflage des US-Trägerraketenlexikons mache ich weiter Fortschritte und bin nun bei der Saturn angekommen, also den letzten achtzig Seiten. Es könnte sich aber noch ziehen, denn ich machte den Fehler im TRSN nochmal nachzusehen und habe prompt wieder einige interessante Reports gefunden.
Dann habe ich mir mal das BlaBlameter angesehen, dass die Qualität eines Textes misst. Dieser Text hat einen Wert von 0,22 und zeigt so einen ersten Hinweis auf „Bullshit“ liegt aber noch auf einem akzeptablen Niveau. Bis 0,3 soll noch akzeptabel sein., Merkel macht es besser. Ihre Neujahrsansprache kommt nur auf 0,17.
Noch was zum Schmunzeln: Was passiert wenn eine Maschine von Alitalia verunglückt? Sie wird über Nacht umlackiert:
Moin Bernd,
das erste Problem das ich mit Delphi für die Lehre hab ist, dass es keine freie Software ist. Object Code Only Software in Forschung und Lehre ist wie eine Chemiestunde in der der Lehrer zwei Flüssigkeiten vorzeigt, diese zusammen schüttet, es pufft und stinkt wie auf der Beschreibung angegeben, aber dem Lehrer als auch den Schülern ist es verboten nachzufragen was in den Flüssigkeiten drin ist, oder gar diese selbe zu verändern oder herzustellen. Dass die Software etwas kostet, und ein Betriebssystem voraussetzt das etwas kostet kommt noch dazu.
Mit Stanford Pascal und später UCSD-Pascal war das noch anders, da war der Source dabei. Damals war Pascal State of the Art, in der Lehre.
Zudem limitiert eine IDE+GUI+Libs doch stark die Auswahl der möglichen GUIs. Für Perl, Python, Ruby, TCL, und Lua gibt es eine breite Auswahl an GUIs wie GTK, Gnome, KDE, Tk, SDL, AWT, … von denen die einige platformunabhängig sind, d.h. das selbe Programm läuft nach einer neuen Übersetzung auf Windows, Mac und Linux.
> Ne GUI in Javascript habe ich auch noch nie gesehen.
Und Ajax ist ein Scheuerpulver?
Nochmal zur Wahl der Sprache. Delphi ist wie die meisten Sprachen aus der ALGOL Familie weak static typing. Static typing ohne Garbage Collector ist aber heutzutage schon fast wie Assembler schreiben. Das mach ich nur wenn ich Betriebssysteme, Datenbanken, Compiler, GUI-Toolkits ähnliches Low-Level machen muss, und dann verwende ich meist C (ohne ++).
Sobald die Aufgabe nicht heisst: Schreibe einen Sampler für eine 16 Kanal 44100hz Karte mit Fast Fourier Transformation, nehm ich eine Hochsprache, d.h. eine Sprache die strong dynamic duck typing ist.
ciao,Michael
Ich dachte ich hätte klargestellt worum es geht. Irgendwie liest Du es anders als ich es schreibe. Es geht nicht um die beste Sprache oder das beste Sprachenkonstrukt. Es geht darum in einer Zeit wo Leute zu Mausschubsern verkommen sind denen Programmieren schmackhaft zu machen, mit leichtem Einstieg, trotzdem vielen Möglichkeiten ohne dass sie nach den ersten Versuchen an Sprachmauern stoßen. Diese Leute programmieren weder Betriebssysteme noch A/D Wandler und die kennen auch deine Fachbegriffe nicht, und werden davon eher abgeschreckt. Die Alternativen, die ich empfehle kosten nichts. Die Diskussion Open/Closed Source hat auch nichts mit einer Programmiersprache zu tun. Der Vergleich ist auch unpassend. Viel eher wäre wenn Du schon die CChemie bemühst der Einsatz eines Meßgeräts wie eines GC zu vergleichen wo man zwar einen Ausdruck bekommt, aber keine Information wie der Gehalt genau bestimmt wurde.
Diese Definition für Hochsprachen überrascht mich ein wenig (Strong Dynamic Duck Typing). Ich würde Cpp durchaus als Hochsprache bezeichnen. Übrigens werden auch Sampler heutzutage meistens in einer Hochsprache programmiert.
Also wenn ich es mir recht überlege, dann stimme ich zu: Aus der Perspektive des absoluten Neulings, der nur mal testen will, ob programmieren was für ihn/sie ist, ist diese Argumentation korrekt. Da braucht es eine vernünftige IDE, mit der sich sinnvoll arbeiten lässt, ohne sich um Konfigurationsdetails und was der Dinge mehr sind, mit denen man sich herum ärgern kann, kümmern zu müssen. Das gleiche gilt für die Sprache selbst, so das man sich mit wenig Aufwand eine einfache Anwendung zusammen basteln kann, die dann auch das „look and feel“ einer gewöhnlichen GUI-Anwendung bietet. Und so gesehen ist man als Otto-Normal-User heute weitest gehend auf Windows festgenagelt, auch wenn im Unix-bereich einiges besser wird.
Interessant find ich allerdings diesen Satz:
Bei dem „Interpreter mit Eingabepromt“ musste ich unweigerlich an so Sachen wie gnuplot bzw. Mathematica oder ähnliches denken. Denn die arbeiten ja mit ’nem Interpreter mit Eingabeprompt als Bedienungsfrontend. Aber wer sich mit diesen Programmen intensiver beschäftigt, wird das meisstens aus schulischen/beruflichen Gründen tun und wird zumindest im beruflichen Fall früher oder später sowieso die eine oder andere Programmiersprache lernen müssen.
Doch zurück zum Komfort: Da war Turbo Pascal wahrscheinlich wegweisend, eben weil es Editor und Compiler unter einer gemeinsamen Oberfläche vereinte. Übrigens: die erste Version von Turbo Pascal erschien schon 1983, wird dieses Jahr also 30 Jahre alt. – Weis eigentlich irgendwer, was Herr Wirth von Turbo Pascal hält? Ich meine, ich hätte mal irgendwo ein Interview gelesen, wo er davon nicht sonderlich begeistert war, weil es an einigen Stellen aus praktischen Gründen gegen die reine Lehre verstösst. – Und das IDEs mittlerweile auch wie Officeprogramme mit Funktionen daher kommen, die nicht jeder braucht, wundert mich nicht. Das Selbe gilt ja auch für die Entwicklung bei CAD-Paketen. Beschränkten die sich früher auf’s reine Zeichnen, so haben sie heute neben diversen Betrachtern/Raytracern gleich noch eine Statiküberprüfung, diverse Plausibilitätstests und einen Abgleich der Konstruktion mit aktuell geltenden Normen und Vorschriften dabei. Wenn die Zeichnung fertig ist, lassen sich aus einer Materialdatenbank Teile-, Preis- und was-weis-ich für Listen erstellen die dann fliessend den Übergang zum nächsten Produktionsschritt erlauben… – Wer nur Zeichnen will braucht das alles nicht.
Einen Kritikpunkt hab ich aber doch: Der Themenwechsel von den Programmiererfordernissen zum Manuskript des Raketenlexikons ist zwar durch einen Absatz getrennt, kommt beim fliessenden lesen aber dennoch etwas plötzlich. Da hätte eine Überleitung mit dem Hinweis „Themenwechsel“ oder „Jetzt was anderes“ nicht geschadet. Mach ich jetzt auch, also: Themenwechsel.
Das BlaBaMeter ist ja mal ’ne witzige Sache, allerdings hab ich da doch so meine Zweifel, ob man es auch ernst nehmen kann. Ich hab mal 3 Texte getestet (jeweils die Druckversion):
Wikipediaartikel zu Refractoring: 0,37
Wikipediaartikel über den Mond: 0,2
Artikel aus den Nachdenkseiten über Die Umverteilung von unten nach oben durch die Steuerpolitik: 0,37
Nun ja, davon kann man halten was man will. Das Programm dahinter dürfte aber eine nette Übungsaufgabe für Computerlinguisten sein.
Und schliesslich: Wenn diese Geschichte von der Alitalia echt ist, dann ist das Realsatire. Und die haben wohl auch noch nie vom Streisand-effekt gehört…
Win32-Anwendungen werden immer uninteressanter. Die Leute benutzen ihren Computer doch nur noch, um den Browser zu starten. Web-basierte Systeme sind enorm wichtig geworden und werden meines Erachtens nach inzwischen wesentlich haeufiger genutzt als native Anwendungen.
Und wie gesagt, JavaScript ist nicht gleich „Browserprogrammierung“. Mit JavaScript werden Smartphone-Apps programmiert (Appcelerator, Cordova), Photoshop-Plugins, hochskalierbare serverseitige Funktionalitaet auf Webservern (NodeJS), und – ja – auch native „EXE-Datei“-Anwendungen fuer Windows (Adobe AIR).
Moin Arne, Bernd &
> Diese Definition für Hochsprachen überrascht mich ein wenig
ich betrachte den Begriff Hochsprache zeitlich fließend.
Früher war alles was nicht ASM war eine Hochsprache. Heute hat die Klasse der Curly-Braces-ALGOL Krüppel-Kinder den ASM abgelöst.
Verkrüppelt ist im Vergleich zu ALGOL und Pascal der Stack. ALGOL hatte klassischerweise 32 Stacks, ich weiß nicht wie viele Delphi hat. Dies ermöglicht, dass Funktionen und Proceduren innerhalb andere Funktionen und Proceduren definiert werden können. C und dessen Nachfolger wie C++, ObjC, Java, C# haben jedoch nur einen Programm und Datenstack und einen Heap. Wenn ich aber nur einen Datenstack habe, dann landen erheblich mehr Daten auf dem Heap. Und wenn die Sprache dann noch nicht mal einen richtigen Garbage Collector hat, fängt das Chaos an.
> Übrigens werden auch Sampler heutzutage meistens in einer Hochsprache programmiert.
Ich bezeichne C als modernen Assembler-Ersatz. In meinem Beispiel spricht der Sampler als Multi-Threaded C Lua Library mit einem Comedi Device Treiber. Und auch die FFT, Integrale, Differentiale, Null, Wende und Extreme sind jeweils Multi-Threaded-C Lua Libraries. C und nicht ++, weil Multi-Threaded ist schon kompliziert genug, da muss nicht noch einen drauf setzen. Obendrüber implementiert Lua dann eine Domain Specific Language für Realtime Signalanalyse, und übergibt diese Feature Vectoren dann Java/Weka zum maschinellen Lernen. Das GUI dafür ist in PHP/Javascript.
Typisch an diesem Beispiel ist, dass es den Monolithen vermeidet. Die einzelnen Teilaufgaben werden jeweils von der dafür besten Sprache implementiert. Als Monolith in Purem Java wäre es nicht möglich gewesen, weil der Device Treiber sehr sperrig ist. Als Monolith in purem C, wären das nicht mehrere kleine Teile unter tausend Zeilen gewesen, sondern ein Brocken von mehreren hundertausend Zeilen.
> Es geht darum in einer Zeit wo Leute zu Mausschubsern verkommen sind denen Programmieren schmackhaft zu machen, mit leichtem Einstieg, trotzdem vielen Möglichkeiten ohne dass sie nach den ersten Versuchen an Sprachmauern stoßen.
Scratch ist perfekt um Kindern die gerade erst Lesen lernen, das Programmieren beizubringen. Die Sprachmauern sind da aber sehr eng. Squeak ist leider vom GUI sehr Kindgerecht, aber ein voll ausgewachsenes Smalltalk, in dem sich sehr schnell eine GUI erstellen lässt, und die eine ausgewachsene IDE mitbringt.
> Win32-Anwendungen werden immer uninteressanter. Die Leute benutzen ihren Computer doch nur noch, um den Browser zu starten. Web-basierte Systeme sind enorm wichtig geworden und werden meines Erachtens nach inzwischen wesentlich haeufiger genutzt als native Anwendungen.
Ich denke auch, wenn es nicht darum geht Kindern das Programmieren beizubringen, dann sollte das GUI das Web sein.
Damit heißt dann Programmieren lernen, nicht mehr den Monolithen einer Sprache richtig zu lernen, sondern den Mix aus HTML, CSS, JavaScript und einer Backendsprache wie Ruby, Python, PHP, und SQL so weit zu lernen, dass mit Google, IRC und Manual Pages ein Problem gelöst werden kann.
Als Curriculum an einer FH für 4 Semester:
Anfangen würde ich in diesem Falle mit HTML, CSS, JS und Gimp im ersten Semester. Im zweiten dann Ruby, Python, oder PHP und SQL. Im dritten dann R, Octave, GNUPlot. Im vierten dann ein fachbezogenes Projekt.
Ziel sollte sein: Es gibt tausende von Computersprachen, es geht nicht darum eine perfekt zu Lernen, sondern das Programmieren an sich zu Lernen, d.h. ein Problem so zu strukturieren, dass einzelne Teile einfach mit bestehenden Werkzeugen zu lösen sind.
ciao,Michael
*args* da hat das Blog das „und Pragmatiker“ in der Begrüssung geschluckt.
@Michael K.: ich glaube, Du redest auf hohem Niveau an Bernd vorbei. Ihm geht es nicht darum, nur Kindern das programmieren beizubringen sondern darum, dass alle die es wissen wollen, feststellen können, ob es sie wirklich interessiert oder nicht. Und das völlig unabhängig vom Alter.
Das ist eine Vorgehensweise, die die Leute wählen, die schon programmieren gelernt haben, und dieses Wissen nun anwenden. Also zwei Schritte weiter als dass, was Bernd meint. Zwei Schritte deshalb, weil man dann nicht nur entschieden haben muss, dass man programmieren lernen will, sondern auch schon mehrere Programmiersprachen gelernt hat, und deshalb diejenige wählt, die man für die etwaige Teilaufgaben am geeignetsten hält.
Diese Aussagen sind für potentielle Programmiereinsteiger völlig nichtssagend, d.h. die verstehen nur Bahnhof aber nicht, worum es geht. Inwiefern die Stacks jetzt mit der Möglichkeit in Pascal zusammen hängen, Prozeduren oder Funktionen innerhalb von anderen Prozeduren oder Funktionen definieren zu können, weis ich übrigens auch nicht; (und Algol kenn ich nur dem Namen nach.) Was ich aber weis ist, das mir dieses Feature eher als Mistake erscheint, weil es für meine Begriffe den Programmcode schwieriger lesbar macht. Deshalb finde ich es z.B. bei C völlig richtig, das es dort nicht geht. Ganz nebenbei meine ich auch, das in einem längeren Programm bzw. Listing das Hauptprogramm ganz am Anfang zu stehen hat und alle von ihm aufgerufenen Unterroutinen dahinter, sofern es sich nicht um Systemfunktionen handelt. Also der völlige Gegensatz zu dem, was in Pascal ohne Foreward-Deklaration zwingend nötig ist. Natürlich kann man jetzt auch wieder mit Compilerseitiger Typenüberprüfung argumentieren, aber dafür gibt es ja Foreward-Deklarationen, Header-dateien (in C/Cpp) oder uses-Statements. Aber das hat alles nichts damit zu tun, ob es jemandem den Einstieg ins Programmieren erleichtert oder nicht, sondern ist im Falle der Anordnung von Hauptprogramm zu Unterprogrammen eher eine persönliche Geschmacksfrage. Die lässt sich aber erst entscheiden, wenn man beide Variationen schon gelernt hat, bzw. eine kennt und die andere lernt. Aber dann hat man sich schon entschieden, intensiver programmieren zu lernen.
Das denke ich allerdings nicht. Ich meine, jeder Rechner sollte nach wie vor so gebaut sein, das er auch als völlig autarke Maschine ohne jeglichen Netzwerkanschluss nutzbar ist. Also so, wie die meissten Heimcomputer in den 80er Jahren oder die (IBM-kompatilen) PCs vor dem grossen Durchbruch des Internet und der anderen Netzwerktechnologien in den 90er Jahren. Freilich wird man in Rechenzentren mehr Aufwand treiben (können), das die Server dauerhaft laufen und alle dort gespeicherten Daten jederzeit verfügbar sind. Aber die 100%ige Ausfallsicherung gibt es bekanntlich nicht und wenn man schon von der EDV abhängig ist, dann sollte man seine wichtigen Daten selbst speichern und nicht in irgendeine ominöse Wolke ablegen. Die kann vielleicht als Zusatzservice dienen aber mehr auch nicht.
Ach ja, HTML und CSS sind keine Programmiersprachen sondern Beschreibungssprachen, da mit ihnen keine Algorithmen umgesetzt sondern „Äusserlichkeiten“ definiert werden. JavaSkript baut dann Brücken, zum einen um die Äusserlichkeiten an eine Umgebung entsprechend anzupassen (bzw. in unterschiedlichen Umgebungen identisch erscheinen zu lassen), zum anderen um sie mit einer Funktionalität zu füllen, die sie sonst nicht haben, weil sie im ursprünglich statischen Konzept nicht vorgesehen waren.
Also speziell „ein Problem so zu strukturieren, dass einzelne Teile einfach mit bestehenden Werkzeugen zu lösen sind“ sollte man völlig unabhängig vom Programmieren grundsätzlich lernen. Das nennt man dann auch kritisches denken verbunden mit praktischem handeln. Das gehört meiner Ansicht nach in einfacher Form schon in der Grundschule vermittelt, sollte aber ab der Sekundarstufe 1 in den unterschiedlichen Fächern immer wieder aus diversen Perspektiven aufgegriffen werden. Nach meinem Eindruck ist das derzeit aber eher weniger der Fall. Das ist allerdings ein gesellschaftliches Problem, dessen Erörterung hier den Rahmen sprengt.
Und ganz nebenbei wird man die eine oder andere Programmiersprache früher oder später besser beherschen als alle anderen, aus welchen Gründen auch immer. Oder auch gar keine weil man entschieden hat, das Programmieren anderen zu überlassen und selber nur fertige Programme zu nutzen weil die für den eigenen Bedarf völlig ausreichend sind.
Hans hat wohl meinen Artikel verstanden. Ich kann mich der Argumentation nur anschließen.
Zum Einstieg: In der Mausschubser Generation ist die Motivation wichtig und daher habe ich bewusst den Fokus auf etwas gelegt wo jemand ausführbare Programme erzeuegn kann für ein Problem das er hat. Natürlich würde es für ihn alleine schon reichen, wenn es in dem Interpreter läuft, aber bald kommt dann der Wunsch auf doch dies mit anderen zu teilen, das sehe ich schon bei meinen Studenten die nicht Informatik lernen wollen, sondern müssen.
Natürlich werden andere Geräte wie Tabs oder Smartphones wichtiger und entsprechend erstellt man „apps“. Allerdings werden die heute noch meist auf einem PC programmiert.
—— @Michael K: ——
Ich stimme Dir vollumfaenglich zu. Letztens noch ist der Sohn meiner Chefin zu mir gekommen und meinte, er will gerade programmieren lernen. Er hat mir dann gezeigt, wie er mit „Codeblocks“ sein erstes C (!)-Programm geschrieben hat und dort schon bei der Abfrage einer Benutzereingabe verzweifelt ist und seine ersten Buffer-Overflows mit „Das Programm funktioniert nicht mehr“ produziert hat.
Ich hab ihm dann gesagt, er soll erstmal HTML/CSS lernen, das bringt ihm mehr fuer seine berufliche Zukunft, und wenn er dann noch programmieren lernen will, soll er seine erste JavaScript-Applikation programmieren.
Eine kleine Beschwerde hab ich an Dich aber: Wenn es zum serverseitigen Aspekt der Web-Anwendung kommt, bitte ich darum, auf dieses diabolische Chaos-Ungeheuer namens „PHP“ zu verzichten und stattdessen NodeJS vorzuschlagen 🙂
——- @Hans: ——-
Sorry, Du hast da dasselbe Problem wie Bernd: Du denkst immer noch, JavaScript haette irgendwas mit WWW, Browsern oder sonstigem zu tun.
NEIN, man braucht, um in JS zu programmieren, KEINEN Browser, KEIN Internet, und KEINE Webseite. Das war in den 90ern! JavaScript ist eine voellig generische, „autarke“ Programmiersprache, in der man PhotoShop-Plugins, iPhone-Apps, native Windows-Anwendungen und serverseitige Datenbank-Engines programmieren kann.
Ich kann zur Diskussion nichts beitragen, wohl aber zur notgelandeten Maschine machen. Die Folie abzuziehen ist gängige Praxis. Bei einer wegen Spritmangel vor knapp 13 Jahren durchgeführten Notlandung einer Hapag Lloyd Maschine wurde afaik sogar nachträglich die Kennung geändert.