Ich habe mit Java angefangen, weil ich gehört hatte, dass es auf mehreren Plattformen läuft. Ich hatte aber immer Probleme, weil mir viele Dinge zu kompliziert waren. Dann habe ich proggen.org entdeckt und mit C/C++ angefangen und seit dem mache ich gute Fortschritte. Ich weiß nicht ob das an dem Unterschied zwischen den Sprachen liegt, oder die Tutorials hier einfach besser sind als das Buch, aus dem ich Java "gelernt" habe.
Vielleicht sollte ich mir Java noch mal mit meinem jetzigen Wissen ansehen, aber hauptsächlich bleibe ich wohl bei C/C++.
Ich kenne dein Java-Buch nicht, aber Java war für mich immer komplizierter, alles ging über mehrere Ecken. Erst irgendwas in das eine Format compilieren, dann in irgendwas zusammenpacken und dann trotzdem mit Java starten, viel zu umständlich.
Ich programmiere unter Linux, habe aber noch nie etwas verwendet, dass man nicht auch für Windows compilieren könnte. Liegt das daran, dass ich zu wenig Erfahrung habe? Ich meine, was außer Zugriffen auf die Ordnerstruktur ist Betriebssystemabhängig?
Alle Interaktionen mit dem System. Alles was sich auf reines C/C++ und die C/C++-Standard Bibliothek beschränkt, kann man recht Problemlos portieren. Das ändert sich, sobald du tiefer einsteigst. Du brauchst 3D? Entweder in System einsteigen oder mit einer Bibliothek wie SDL arbeiten, wo sich dann andere darum kümmern müssen, dass es auch unter Windows funktioniert.
Du brauchst eine Serielle Schnittstelle, integration in Gnome, Kontextmenü, GUI, erweiterte Tastatur/Maus. Das alles macht Probleme beim Portieren und noch viel mehr. Oder versuche mal eine Datei über 4GB zu lesen(Hier hatten wir das mal:
http://www.proggen.org/forum/viewtopic. ... 3&start=50)
Daher stimmt es schon, dass deine Programme noch zu "einfach" sind, aber im sinne der Systemintegration und Nutzerinteraktion, was aber nichts schlechtes sein muss. Algorithmen und Datenstrukturen sind wichtiger als fancy-fancy Oberflächen^^
Ich denke aber nicht, dass C/C++ einfach ist. Speicherverwaltung, Templates, Type-Casting, die berüchtigten Zeiger...all das bietet viele Stolperfallen, gerade für Anfänger. Zu ersten Erfolgserlebnissen kommt man mit anderen Sprachen schneller. C/C++ kann da sehr demotivierend sein.
Wenn du schnell zu einem Erfolg kommen willst, nutzt du den Automatikmodus deiner DSLR. Aber jeder der etwas mehr Fotografiert weiß, dass der Automatikmodus einem nicht hilft.
C/C++ ist eine sehr "harte" Sprache, so würde ich es zumindest ausdrücken. Alles ist direkt. Du legst einen int an, dass ist dann halt 4 Byte(+-

) Speicher irgendwo. Keine klasse, nichts virtuelles. Zudem ist ein int erstmal ein int, eine Ganzzahl mit definierten Wertebereich, nicht sowas wie ein
was von Text über Fließkomma bis Ganzzahl alles sein könnte. Das bedeutet aber für dich als Programmierer, dass du immer genau weist, was das ist. Du arbeitest mit einer Ganzzahl und du kannst es auch wie eine Ganzzahl behandeln. Du Arbeitest mit Bytes und kannst diese auch so behandeln.
Das ist nicht überall so.
Natürlich erlaubt C++11 Variablen ohne expliziten Typ anzugeben, dafür muss der implizit bei der Initialisierung bekannt sein.
Aber auch Pointer sind eine sehr viel direktere Art. Du hast einen Pointer, was an sich ein genau definierter Datentyp ist, der halt auf etwas von dem Typ des Pointers zeigt, was auch wieder genau definiert ist. Du musst halt nur selber für dich sicherstellen, dass deine Pointer auf die richtigen Stellen im Ram zeigen und du die korrekte anzahl Elemente ausliest. Das zu verstehen mag vlt nicht leicht sein, aber es ist nicht unmöglich.
Aber hast du dir mal überlegt, was für ein Objekt du bei C# übergeben bekommst:
ist o eine kopie, ist o direkt das Element, was ist es denn?
Solange du nur lesend darauf zugreifst, dann ist es dir egal. Aber was passiert, wenn du darauf schreibst? Was wird wo verändert?
Das ist etwas, was in C++ sehr direkt ist:
Code: Alles auswählen
void someFunc(object o) {...}
void someFunc(object * o) {...}
void someFunc(object & o) {...}
Kopie, Pointer, Referenz. Sehr eindeutig.
Also ich fand Pascal nicht grauenhaft und schlecht. Es war aufs nötigste reduzierte, strukturierte Programmierung. Gut geeignet um den Ablauf von Algorithmen zu verstehen.
Das ist C/C++ auch.
Ich stimme allerdings zu, dass es besser ist erst Grundlagen zu lernen, zum Beispiel in C. Wer eine List-Klasse in Java benutzt hat und sich fragt, was da intern eigentlich passiert, tut gut daran mal eine Liste mit C oder C++ zu implementieren. Das schärft den Blick für höhere Abstraktionsebenen ungemein.
Ich habe für mich festgestellt, dass es beim Programmieren immer darum geht, zu verstehen was passiert. Du kannst einfach blind gegebenes nutzen, du wirst dabei aber irgendwann vor eine Wand laufen.
Ich habe zum Beispiel im Moment sehr viel mit Algorithmen und Mathematik zu tun, Signalanalyse, Filtersysteme, Neuronale Netze und Support Vector Machines. Du hast viele viele Echtzeitdaten, die verwaltet und gespeichert werden wollen, man hat Ereignisse auf die man reagieren will, Signal extrahieren, verarbeiten, Klassifizieren, ausgeben. Das ist 90% Code der erfordert, dass man zu jedem Zeitpunkt weiß, was man tuen will und was man macht. Du merkst einen Fehler nicht in deinem FIR-Filter, der funktioniert trotzdem solange ein Ergebnis herauskommt. Aber wenn dein ganzes System nicht mehr Funktioniert, dann musst du Fehler suchen. Und das ist nicht immer offensichtlich.
Dem stimme ich zu, auch wenn ich als Anfänger die Konsole langweilig fand. Man lernt einfach die Abläufe besser, konzentriert sich aufs Wesentliche. Leider neigt man anfangs aber auch dazu gleich etwas sehen zu wollen
GUIs sind unwichtig, lästig und halten auf. Und auch da sind es immer deine Algorithmen und Datenstrukturen, die das Programm bestimmen, nicht die Oberfläche.
Mit freundlichen Grüßen,
cloidnerux