Daniel Thoma: Welche Sprache sollte man zuerst lernen?

Beitrag lesen

Hallo Martin,

das mag wohl sein - aber dann auch mit einem Verlust an Möglichkeiten.

Sicher, nur ist es aber so, dass praktisch alle Programme, die in Sprachen mit unsicheren Pointern geschrieben sind, irgend welche Bufferoverflows haben.
Vor dem Hintergrund, dass die allermeisten Anwendungen bestimmt nicht direkt auf Speicheradressen arbeiten müssen, ist das eben nur nervig.
Selbst in Betriebssystemen und ähnlichem kämen wahrscheinlich große Teile des Codes ohne solche Möglichkeiten aus. Man sollte also vielleicht eine Programmiersprache verwenden, die das bei expliziter Aktivierung für einige Codeteile zulässt.

Es ging hier aber auch nicht darum, Programmiersprachen im Allgemeinen zu Diskutieren, sondern eine für den Einstieg vorzuschlagen. Beim Programmieren ist meines Erachtens vor allem Abstraktion, Algorithmik und die Organisation  der Software insgesamt wichtig und nicht das Wissen, wie man mit einem Pointer über ein Array iteriert.

Das ist IMHO nur eine Verschleierung der tatsächlichen Vorgänge, die das Verständnis der tatsächlichen Abläufe nicht gerade einfacher macht, sondern eher schwieriger.

Wenn man die verstehen will, muss man natürlich von der Hardware anfangen.
Meines Erachtens gewinnt man aber keinen Eindruck davon, wie Programme oder Algorithmen strukturiert sind, wenn man mit Assembler Zahlen zwischen Registern hin und her schuppst.
Da sieht man einfach nicht mehr, welche Idee dahinter steckt und kann seine Ideen auch nicht so einfach Formulieren. Das Wissen ist sicher Hilfreich, aber kein direkter Einstieg ins Programmieren sondern eher in Rechnerarchitektur.

Vor allem, wenn man komplexe Datenstrukturen (Arrays) mit einem Zeiger abgrasen möchte.

Und wieso möchte man das? Warum möchte man nicht "for element in array" schreiben oder so ähnlich?

... was ja im Endeffekt wieder dasselbe ist, nur mit einem anderen Namen.

Nein, zumindest so wie das typischerweise umgesetzt ist, nicht.
Call-by-reference referenziert die aufgerufenen Variablen und verändert diese. Übergibt man Referenzen by-value verändert man keine anderen Variablen sondern nur referenzierte Datenstrukturen (so fern es keine Referenzen auf Variablen gibt, was dann aber oft nicht der Fall ist).
Das führt zu etwas gutartigeren Seiteneffekten.

Grüße

Daniel