Kaeru Gaman hat geschrieben:und hier drin hab ich auch eine zeile gefunden, die mir ermöglicht,
meine erste aussage zu illustrieren.
dies ist eine für C typische konstruktion. hier wird etwas gemacht,
was man in vielen anderen hochsprachen nicht machen kann.*
und es ist nur ein beispiel, C kann noch mehr.
und es ist definitiv C, nicht C++, denn hier ist nichts objektorientiert.
Du hast noch nicht verstanden was C++ ist, das sieht man
speziell am letzten Satz.
Du meinst scheinbar C++ ist nur Objektorientiertheit, und
dabei verzichtet es auf Grunddinge einer jeden Sprache, oder?
Das ist falsch, denn Schleifen, Bedingungen usw. gibt es
auch in C++, C# und Java.
Die obige Zeile ist genausoviel C++ wie es C ist. Die While-
Schleife ist genauso ein Bestandteil von C++ wie Pointer.
Du denkst nur es ist C, weil es dort genauso aussieht.
Versuche C++ als eigene Sprache zu sehen und stelle Dir
vor das es C nie gegeben hätte, sondern C++ allein
entwickelt worden wäre. Dann würde es in C++ trotzdem
die While-Schleife und Pointer geben.
Es hat hier niemand gesagt das man LowLevel-Dinge auf
keinen Fall lernen sollte. Der große Unterschied ist die
Reihenfolge!
Die Schüler lernen viel schneller wenn sie erst komplett die
modernen Sprachen lernen. Danach geht man dann ins
Detail und zeigt ihnen Tipps&Tricks wie sie optimieren.
Die Reihenfolge ist entscheidend dabei, wie lange der Prozess
als ganzes dauert. Auch wird man so unnötiges Zeug weglassen
können, denn nicht alles Alte wird mehr gebraucht.
Mit diesem Weg lernt man das aktuelle, das was Du in Deinem
Job als Programmierer brauchst, und dann dazu spezielle Feinheiten
und Optimierungen die es schon in der alten Welt gab, also
die LowLevel-Feinheiten.
Andersrum wird das ganze viel länger dauern. Du kannst dann
nicht etwas weglassen was Du nicht mehr brauchst.
Du mußt mit ASM anfangen und jedes Datail lernen um es
benutzen zu können. Danach steigst Du auf C um und
fängst wieder von vorne an alles zu lernen. Bytes, Words,
Longs, ... alles ist plötzlich anders und Dein ASM-Wissen
hilft Dir nicht dabei die Sprache C zu lernen.
Um C nutzen zu können mußt Du damit eine Weile arbeiten
und auch die ganzen C-Funktionen lernen. Auch die, die Du
später nicht mehr brauchen wirst.
Dann hast Du das alles im Kopf, ASM und C - und steigst
weiter auf zu C++/C#/Java.
Große Teile, die Du bisher gelernt hast, nützen Dir dann
nichts mehr.
Du hast die ganzen ASM-Mnemonics im Kopf. Was nützen
Dir die bei Java? Was nützen Dir die bei C#? Was nützen
Dir die bei C++?
Bei C++ kannst Du das nur über InlineASM nutzen wenn Du
auf der gleichen Maschine arbeitest, für die Du ASM kannst.
Was nützen Dir die C-Funktionen in Java? In C#? Nichts.
Verwenden kannst Du sie nur in C++, da es kompatibel
zu C ist. Und Du wirst sie verwenden! Und genau dadurch
wirst Du kein sauberes C++ schreiben. Statt nachzudenken
"wie mache ich es in C++?" greifst Du schneller auf Dein
vorhandenes wissen zu, also schreibst Du wieder C.
Das ganze ist also eine Optimierung des Lernprozesses!
Zuerst das aktuelle, und dann noch die Feinheiten und
Optimierungen aus der alten Welt, die Du brauchen kannst.
Viele Grundlegende Sachen wirst Du auch lernen wenn Du
das Moderne lernst. Die While-Schleife lernst Du in C++
genauso wie in C#, Java und PureBasic - keine Angst!
Der unnötige Ballast, der Dich dann auch oftmals noch
schlechten Code für OOP-Sprachen schreiben lässt, fällt
bei dieser Lernmethode einfach weg.
Andersrum wirst Du bei jeder neuen Sprache das alte
wieder benutzen. Wenn Du ASM gelernt hast, hast Du
eine bestimmte Art zu denken gelernt. Nun fängst Du
mit C an und wirst dann diese Art des denkens nutzen
um Probleme zu lösen. Dann lernst Du C++/C#/Java und
willst mit diesem Sprachen Probleme in der C-Denkweise lösen.
Ich habe auch unten angefangen und mich hochgearbeitet.
Damals auf dem C64 war es auch normal in ASM zu coden
und nicht in C++, C# oder Java. Danach kam die Umstellung
auf Amiga. Hier wollte ich das erste mal C++ lernen und
habe nur Bahnhof verstanden. Streams? Was um Himmels
willen sind Streams? Das gab es in meiner ASM-Denkweise
einfach nicht. Dort gab es nur Bits und Bytes...
Andersrum lernst Du aber bei modernen Hochsprachen auch
einfache Datentypen gleich mit! Du weißt dann trotzdem was
Bits und Bytes sind.
Wir, "die alten Hasen", haben die Entwicklung teilweise
zwangsläufig so mitgemacht, da wir aus einer alten Zeit
stammen!
Deshalb muß aber der heutige Einsteiger nicht auch ganz
unten anfangen (bei C64 ASM oder noch früher), und alles
durchmachen, was wir jemals durchgemacht haben. Ein
heutiger Student macht auch nicht die letzten Millionen Jahre
selbst durch, sondern lernt nur das gute aus dieser Zeit.
Das was er gebrauchen kann, ohne unnötigen Ballast. Genau
das ist die Optimierung, wodurch er in sehr kurzer Zeit das
Wissen von Millionen Jahren bekommt - ohne selbst millionen
Jahre zu leben. Es ist nicht nötig unten anzufangen und alle
millionen Jahre selbst durchzumachen. Ja, das ist garnicht
möglich! Solange geht das Studium nicht.
Beim programmieren deshalb ganz logisch: Zuerst mit einer
modernen Sprache anfangen. Wird im Studium -Gott sei Dank-
auch oft gemacht. Gleich C++/C#/Java lernen ist möglich ohne
irgend etwas vorauszusetzen.
Dabei lernt man schon die ganzen Grundlagen mit, denn auf
die können auch moderne Programmiersprachen nicht verzichten.
Danach lernt man dann noch die speziellen Feinheiten, die
man auch bei diesen Sprachen kennen muß, und durch die
man besseren Code schreiben kann. Unnötiger Ballast (C64 ASM

),
den man nicht gebrauchen kann oder der sogar stört, lässt
man einfach weg.
Wer meint C++/C#/Java bestehen nur aus Objekten (weil
er mal gehört hat das es OOP-Sprachen sind), und verzichten
dabei auf grundlegende Dinge wie Schleifen, Bedingungen,
Datenstrukturen, Algorithmen usw., der sollte das noch
einmal schleunigst überdenken.
Vielen Dank!
