C, C++, C#. C#.Net und .Net was ist was? Und womit anfangen?

Original geschrieben von Sliver
Wie ist das eigentlich mit Assembler? Kann man sich an so was heranwagen als Anfänger oder sollte man das grundsätzlich lassen? Soweit ich weis besteht die größte Schwierigkeit darin diese ganzen Schlüsselwörter zu kennen.

Also Assembler is eigendlich für HighLevel Programmierung nicht mehr wirklich sinnvoll. Obwohl es auch da ab und zu ganz praktisch ist.

Prinziell ist es relativ leicht zu lernen, die Hauptschwierigkeit ist meiner meinung nach, das man sehr viel verständniss für den Programmablauf benötigt und man ziemlich leicht semantische Fehler produziert. Außerdem ist Assemblercode sehr unübersichtlich, und daher sollte man zuerst mal erfahrung mit höheren Sprachen haben, denn dann weiß man worauf es prinziell ankommt.

Die Anweisungen zu lernen is nicht wirklich ein problem, man braucht wenn man nicht grad einen PMode kernel schreiben will etwa 30 - 50 Schlüsselwörter. sonst sinds nochtmal etwa 20 dazu..

Also zusammengefast, kann ich sagen, Lern zuerst mal ne höhere Sprache, und wenn du dich dann für Low Level programmierung interessierst, dann kannst du Assembler lernen.

Als höhere Sprache für den Einsteiger würd ich Java empfehlen. Einerseits weil es dich zu gutem Programmierstiel zwingt, andererseits weil es Platformunabhängig ist, was man von den .NET Sprachen nicht unbedingt behaupten kann.
 
hmm ...

also ich möchte doch stark dem widersprechen, dass Java einen dazu zwingt einen guten Programmierstil zu verwenden. Vielleicht versucht Java dies, aber ich glaube nicht das es eine Frage der Programmiersprache ist (auch wenn das mit reinspielen mag) wie sauber man programmiert, da hab ich bei Java auch schon sehr unschöne Sachen gesehen.
Ich bin daher eher der Meinung das eine Programmiersprache einen möglichst wenig einschränken sollte - und der Programmierer sollte auch ohne das ihn jemand zwingt immer schönen code schreiben ;) (ich möchte hier nicht behauptne das ich das machen würde)

Desweiteren find ich ehrlichgesagt auch für einen Anfänger relativ wichtig Speicherverwaltung zu lernen ... mag sein das es später vom (Zeitaufwand beim Programmieren) /( Geschwindigkeitverlust durch GarbageCollection) günstiger ist eine GC zu benutzen ... aber naja ich hab anfangs versäumt Speicherverwaltung vernünftig zu lernen und hab nun meine Probleme damit ;-/.
Garbage Collections gibt es ja auch für C/C++ (und wahrscheinlich für noch mehr Programmiersprachen) ich weiß nicht warum das unbedingt Teil einer Programmiersprache sein sollte ...

Die Plattformunabhängigkeit von Java und die Fülle von nützlichen Sachen die in der Standart Java API drinne sind, sind praktisch und schön, aber es lassen sich ja auch viele Plattformunabhängige Bibliotheken für C++ finden (z.B. die STL für viele Standartsachen und wxWindows für GUI Sachen)
Ich geb auch hier zu das es um einigeres schwieriger und frustierender sein wird als bei Java, aber da es auch irgendwie eine Standartsache ist, sich mit verschiedene APIs etc. rumschlagen zu müssen...


Programmieren rein grundsätzlich ist ja schon von Javascript, PHP und VB bekannt da würd ich doch jetzt eher zum (schwierigerem) C++ gegenüber Java raten ...

cu
ernii
 
Original geschrieben von ernii
hmm ...

also ich möchte doch stark dem widersprechen, dass Java einen dazu zwingt einen guten Programmierstil zu verwenden. Vielleicht versucht Java dies, aber ich glaube nicht das es eine Frage der Programmiersprache ist (auch wenn das mit reinspielen mag) wie sauber man programmiert, da hab ich bei Java auch schon sehr unschöne Sachen gesehen.

Beispiele?

Original geschrieben von ernii

Ich bin daher eher der Meinung das eine Programmiersprache einen möglichst wenig einschränken sollte - und der Programmierer sollte auch ohne das ihn jemand zwingt immer schönen code schreiben ;) (ich möchte hier nicht behauptne das ich das machen würde)

Ich finde auch das mann ohne Stützräder Fahradfahren soll. Zum lernen hatte ich aber
auch Stützräder. :)

Original geschrieben von ernii

Desweiteren find ich ehrlichgesagt auch für einen Anfänger relativ wichtig Speicherverwaltung zu lernen ... mag sein das es später vom (Zeitaufwand beim Programmieren) /( Geschwindigkeitverlust durch GarbageCollection) günstiger ist eine GC zu benutzen ... aber naja ich hab anfangs versäumt Speicherverwaltung vernünftig zu lernen und hab nun meine Probleme damit ;-/.

Klar sollte mann das lernen. Jedoch nicht zusammen mit OOP und den herausforderrungen
einer stark typisierenden Sprache.
Ich bin auch der Meinung, das nachdem mann Java gelernt hat, sich C++ aneignen soll.


Original geschrieben von ernii

Garbage Collections gibt es ja auch für C/C++ (und wahrscheinlich für noch mehr Programmiersprachen) ich weiß nicht warum das unbedingt Teil einer Programmiersprache sein sollte ...
GC hilft dabei sichere Programme zu schreiben. Immer mehr Serversoftware wird mit J2EE verwirklicht, da BufferOverflows (Hauptproblem bei Sicherheitslücken) sich so vermeiden lassen.
Die Meldungen über Sicherheitslöcher in IBM Websphere, BEA Weblogic, JBoss sind ziemlich rar.

Original geschrieben von ernii

Ich geb auch hier zu das es um einigeres schwieriger und frustierender sein wird als bei Java, aber da es auch irgendwie eine Standartsache ist, sich mit verschiedene APIs etc. rumschlagen zu müssen...

Nein ist es nicht. Die Java API ist so umfangreich das mann weniger auf 3. Produkte zurückgreifen muss als mann denkt ;)

Original geschrieben von ernii

Programmieren rein grundsätzlich ist ja schon von Javascript, PHP und VB bekannt da würd ich doch jetzt eher zum (schwierigerem) C++ gegenüber Java raten ...
Ja und nein. Was bei JavaScript und PHP gelernt wird ist leider sehr beschränkt.
Es gibt kein EventHandling, keine GUI Programmierung und auch der Umgang mit Biblotheken bzw typen ist nicht wirklich vorhanden.
 
ich bin auch mit c++ angefangen.
Und, naja, wenn man einmal den kniff raus hat, geht es leicht.
Daher, warum NICHT mit c anfangen?

Viel Spaß aufjedenfall
 
Programmieren lernen ist nicht die Beherrschung von Syntax etc. sondern die Benutzung von OOP bzw Strukturierter Programmierung, Anwendung von Algorithmen und natürlich das debuggen.
Mit C/C++ ärgerst Du dich als Debugging-Anfänger das erste Jahr grün und blau, weil Du einfach gar nicht durchsiehst was wie wo wann mit dem Speicher passiert.
Unter Java hast Du dieses Problem zu Beginn einfach nicht. Dort geht es um die Erstellung einer möglichst sauberen Klassen-Deklaration und dann der Implemenation von den Anwendungs-Fällen.

Wenn Du dann die OOP und Syntax von Java drauf hast, kannst Du Dich immernoch auf malloc/free oder new/delete stürzen :)
 
Also prinziell halt ich Java für das geeignetere Einsteigerwerkzeug.

Das liegt schon mal daran, das Java einem relativ viel, was einem am Anfang eher verwirrt abnimmt. eben z.B. die Speicherverwaltung.

Man sollte erstmal die Grundlagen der Programmierung beherschen bevor man sich um Sachen wie richtiger umgang mit Systemresourcen und so weiter kümmert. Ich glaube jeder Forgeschrittene C programmierer ist schonmal Stunden vor seinem Programm gesessen, mit Debugern, und hatt versucht entflohene :) Pointer wieder einzufangen. Oder hatt sich darüber den kopf zerbrochen den zu allozierenden Speicherplatz möglichst genau zu berechnen.

Natürlich sollte man darüber bescheid wissen, keine Frage, aber man sollte einem Einsteiger, die ernüchternde Erfahrung, Stunden vor einem Debugger zu sitzen und keinen Fehler zu sehen erspaaren. Vor allem schon deshalb, weil ein totaler Neuling auf dem Gebiet, die zusammenhänge die dahinter stecken nicht sofort durchblickt, und damit ziemliche Probleme hatt einen Debuger der auf niedriger eben leuft, überhaupt richtig zu verwenden.

Und vor allem, Java ist zukunftsweisend. Java leuft mittlerweise auf so vielen Plattformen und erfreut sich immer größerer beliebtheit.

Außerdem kommst du mit Java relativ schnell zu einem akzeptablen Ergebniss, und das ist genau die Erfahrung die einen Einsteiger im endeffekt bei der Stange hält.

also ich möchte doch stark dem widersprechen, dass Java einen dazu zwingt einen guten Programmierstil zu verwenden. Vielleicht versucht Java dies, aber ich glaube nicht das es eine Frage der Programmiersprache ist (auch wenn das mit reinspielen mag) wie sauber man programmiert, da hab ich bei Java auch schon sehr unschöne Sachen gesehen.
Ich bin daher eher der Meinung das eine Programmiersprache einen möglichst wenig einschränken sollte - und der Programmierer sollte auch ohne das ihn jemand zwingt immer schönen code schreiben (ich möchte hier nicht behauptne das ich das machen würde)

da musste dich aber schon extrem dumm anstellen das du das schaffst...
z.B.: In Java kommste um EH einfach nicht rum. Entweder du nutzt, es oder du stirbst an einem Herzinfarkt vor lauter Aufregung darüber das dein Compiler dich das Progy nicht kompilieren läst.

Daher, warum NICHT mit c anfangen?

Weil du damit ziemliche schwierigkeiten bekommen kannst.
C++ läst eben doch einiges zu was du in ANSI-C nicht schafft... und die restriktionen können ganz schön lästig sein.
Schonmal n COM objekt in ANSI-C benutzt? ich sag dir, das is alles andere als lustig, und wenn ich an die vielen arrays denke, dann wird mit schlecht.
Ein kleines Beispiel:
Code:
das hier:
void test(int parm) {
    char* myName = malloc(parm);
    memset(myName, 0, parm);
    return myName;
}
An diesem einfachen Stück code, beist sich ein ANSI-C Compiler die Zähne aus.
wiso? zuweisung von initialisierungs parametern bei der Variablendeklaration, is in C nicht erlaubt. das ist C++.

also heißt es in ANSI-C plötzlich:
void test(int parm) {
    char* myName;
    myName = malloc(parm);
    memset(myName, 0, parm);
    return myName;
}

ANSI-C ist überhohlt, alle welt setzt auf OOP Sprachen. Und alle Programmiersprachen die halbwegs was auf sich halten unterstützen OOP.
 
Also ich möchte mich weiterhin dafür aussprechen das der Programmierstil im wesentlichen nicht mit der Sprache zusammen hängt.

Aber diskussionen um Programmiersprachen werden schnell eher "religiös" ;)


Und vor allem, Java ist zukunftsweisend.

Halt ich für eine eher philosophische Aussage, da mag wohl jeder seine eigene Meinung haben und man wird wohl keine wahre Antwort finden ;)

Da denk ich zum Beispiel daran das man halt nur die Hauptklasse die man halt für die main brauch benutzt, sowieso prinzipiel alles als public deklariert und Exceptionhandling ist schnell ein
Code:
try{ .....}
catch(Exception e){};

geworden, weil dann meckert der compiler halt nicht.

Ich finde auch das mann ohne Stützräder Fahradfahren soll. Zum lernen hatte ich aber auch Stützräder.

Naja da ich Programmirstil doch eher als das Fahrverhalten ansehen würde, kann ich nur sagen, dass auch Verkehrsrowdys mit Stützrädern angefangen haben ...

Natürlich ist Speicherverwaltung eine nervige Sache und sie kann am Anfang auch sehr deprimierent sein und deßhalb würde ich jemanden der mit dem programmieren ganz von vone anfängt auch nicht dazu raten.

Aber nun hat er ja schon seine Erfahrungen gesammelt und nun für im wesentlichen OOP und (wahrscheinlich) komplexere Datenstrukturen erst Java zu lernen und danach nach C++ zusatteln halt ich für überflüssig...

cu
ernii
 
Zuletzt bearbeitet:
Im übrigen, wen es interressiert wie die Java VM interna funktioniert und mit stark und schwach referenzierten Objecten umgeht sollte sich das Buch Performant Java Programmieren aus dem Addisson-Wesley Verlag lesen.

Das Buch finde ich äusserst interressant :)

nur so am Rande.
 
Zurück