Wie beginnen? C oder C++
-
Ich würde mal behaupten, der Unterschied zwischen richtigem C++ und C ist ungefähr genauso groß wie der zwischen Java und C++.
-
Ich finde den historischen Zugang immer am besten, daher rate ich zum Einstieg in C.
http://www2.its.strath.ac.uk/courses/c/
-
;fricky schrieb:
Kontrasubjekt schrieb:
Das mit den Features kann ich jetzt nicht nachvollziehen, du musst halt nur wissen was C++ bietet das C nicht hat, dann schreibst du nur C Code.
naja, es gibt schon einige unterschiede:
http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
http://david.tribble.com/text/cdiffs.htm
Ich habe meinen Code bisher immer so geschrieben, dass ich derartige Konflikte nie hatte. Ich denke nicht dass diese Probleme passieren, wenn man C++ lernt aber C schreibt, sondern man im gegenteil einige gute Gewohnheiten für C mitbringt.
Gewöhnt man sich C an, geht aber umgekehrt C++ etwas schwieriger. Wie gesagt, im zweifelsfall klärt google ein paar Details imo schnell.
-
Liebe Leute, lest!
icarus2 schrieb:
Ich habe bereits viel mit Java programmiert. Da ich nächstes Jahr an der ETH studiere,...
Also nix mir "blutiger Anfänger" und "Grundlagen von ganz unten am besten mit Lötkolben anfangen".
-
Kontrasubjekt schrieb:
Ich denke nicht dass diese Probleme passieren, wenn man C++ lernt aber C schreibt, sondern man im gegenteil einige gute Gewohnheiten für C mitbringt.
welche 'guten gewohnheiten'? ich glaube eher, dass vieles, was unter C++ als richtig gilt, unter C keine bedeutung hat oder sogar falsch ist. deswegen sollte man besser C++ lernen wenn man C++ machen will und C, wenn man C machen will. beides gleichzeitig zu lernen, stelle ich mir schwierig vor, weil vieles sehr ähnlich ist, aber sich in details doch unterscheidet (siehe die links).
volkard schrieb:
Liebe Leute, lest!
icarus2 schrieb:
Ich habe bereits viel mit Java programmiert. Da ich nächstes Jahr an der ETH studiere,...
hat er gesagt was er studieren will? wenn's irgendwas richtung e-technik sein soll, dann würde ich C empfehlen.
ach ja, da steht dass er auch objective-C programmieren will. dann dann ganz klar: nehme er sich C vor. C ist in obj-C vollständig enthalten.
-
Nach meiner Einschätzung dürfte der Weg von C++ zu C einfacher sein. Wenn man C beherrscht besteht die Gefahr, dass man in C++ einfach wie in C weiter programmiert, da C++ fast ganz C als Untermenge enthält. Dadurch nutzt man dann aber nicht die zahlreichen Vorteile, die C++ einem bringt und man programmiert nicht wirklich C++.
Als Einstiegslektüre für C++ solltest du dir das neue Buch von Bjarne Stroustrup (dem Erfinder der Sprache) anschauen
Programming: Principles and Practice Using C++ | ISBN: 0321543726
-
^^
Es ist irgendwie alles zuviel des Guten, es ist kein Anfänger Buch, es ist kein Style-Guide für Fortgeschrittene, es ist auch keine Reference. Gut gemeint, aber nicht gut gemacht.
P.S.: Man könnte "Zuviel des Guten" auch über C++ selbst sagen. In diesem Sinn passt das Buch zur Sprache und dessen Schöpfer.http://www.amazon.de/product-reviews/0321543726/ref=cm_cr_dp_all_summary/275-9852612-0662225
*frech grins*
-
Also ich werde an der ETH Informatik studieren.
Hmm, ich glaube ich werde mir mal ein C++ Buch besorgen. Vielen Dank für alle eure Antworten
-
Fortsetzung von hier, da jener Thread geschlossen wurde. In diesem Forenbereich ist so ein Thread nicht viel Wert, weil gleich Trolle darüber herfallen werden und es nur eine Frage der Zeit ist, bis wieder ein Flamewar ausbricht. Die Schliessung ist meiner Ansicht nach eine Fehlentscheidung; die Thematiken sind ja bei Weitem nicht das Gleiche, auch wenn es indirekt um die ETH geht.
Zum Thema: Ich kann deinen Standpunkt völlig nachvollziehen, drakon. Es gibt leider einige Programmierer, die nur oberflächlich oder gar nicht mit einer Programmiersprache gearbeitet haben und sich trotzdem anmassen, ein Urteil zu fällen. Dass C++ einige Mängel hat, ist unbestritten - das haben aber andere Sprachen genauso. Ich halte C++ trotzdem für einen guten Einstieg, wenn einen verschiedene Techniken interessieren und man nicht nur möglichst schnell seine GUI zusammenklicken will.
Wie es der Zufall so will, habe ich gerade heute jemanden getroffen, der mich gefragt hat, wie man sich sowas wie C++ überhaupt antun könne. Ich habe mich dann nicht auf eine Diskussion eingelassen. Wer so etwas ernsthaft fragt, hat sich mit den Konzepten nie näher auseinandergesetzt und wird wahrscheinlich auch die Gründe nicht nachvollziehen können. Besonders wenn man vorher von Sprachen wie C# und Java kommt, scheint einem C++ schon allein deshalb schlecht, weil vieles nicht mehr so einfach geht und man plötzlich mehr überlegen muss, um keine Fehler zu machen (hauptsächlich während des Lernens, weil viele Dinge eben anders - manche meinen "komplizierter" - ablaufen). Was viele Leute vergessen oder absichtlich nicht sehen wollen: Durch Sprachmittel wie Zeiger und manuelle Speicherverwaltung gewinnt man enorme Flexibilität. Die Fehleranfälligkeit ist mit der Zeit kaum noch ein Problem, da man sich durch Klassen und andere Abstraktionen vom Low-Level wegbewegt, gleichzeitig aber weiterhin dessen Vorteile nutzen kann.
Ich mag an C++, dass man viele Möglichkeiten hat - man kann sehr maschinnenah programmieren, aber auch auf hohem Abstraktionslevel entwickeln, das andere Sprachen in der Form nicht einmal kennen (Stichwort Templates). Dafür gibt es in anderen Sprachen Dinge, welche in C++ mühsamer oder gar nicht möglich sind. Aber solange man nicht über den Tellerrand schaut und seine eigene Programmiersprache als heile Welt ansieht, macht eine Diskussion nicht allzu viel Sinn. Es ist auch schade, dass man aufgrund solch oberflächlicher Ansichten mit einer voreingenommenen Einstellung an eine neue Sprache herangeht und sich dann stets einredet, dass diese gar nicht gut sein kann, selbst wenn man gewisse Vorteile erkennt.
-
Ich mag an C++, dass man viele Möglichkeiten hat - man kann sehr maschinnenah programmieren, aber auch auf hohem Abstraktionslevel entwickeln, das andere Sprachen in der Form nicht einmal kennen (Stichwort Templates).
Genau das ist der Punkt, der es meiner Meinung nach ausmacht in C++ zu programmieren. Man hat keinerlei Einschränkungen. Ich meine auf eine Art ist das der Grund, warum ich angefangen habe zu programmieren. Wegen den unbeschränkten Möglichkeiten. Man kann alles tun. Auf eine saubere und auf eine unsaubere Art, ohne Frage, aber man hat keine Barieren.
Aber so die Grundaussage von dem Thread im anderen Forum war ja, dass C++ nicht für grosse Software Projekte geeignet seie. Worauf wir beide leider nicht aus Erfahrung reden können, dass es geht, darum hoffe ich auf Leute, die sich tatsächlich auch im Millionen Zeilen Bereich befinden. Nichts desto trotz bin ich der Meinung, dass es möglich und auch durchaus wünschenswert ist solche Projekt in C++ zu machen. Ich meine auf eine Art verliert es sich wieder, wie viel Code das Projekt hat, bei dem man mitarbeitet, da man üblicherweise ja nicht alle kennt, geschweige denn im Kopf hat. Man ist dann ja lediglich User von anderen Komponenten, welche "zufälligerweise" im gleichen Projekt sind. Das ist dann das gleiche, ob ich eine externe Bibliothek benutzt.. Man kann eh nicht mehr als ein paar (10)-Tausend Zeilen im Kopf haben, was auch in Hobbyprojekten relativ leicht erreicht wird. Irgendwann benutzt man lediglich noch die Schnittstellen, die man mal am Anfang geschrieben hat. Ich bin sogar der Meinung, dass teilweise Hobbyprojekte bessere Design haben, als solche Millionen Zeilen Projekte, weil man sich wirklich Zeit nehmen kann für das Design und weder Druck, noch Zeitmangel hat und auch gut mal das gesamte Design umkremplen kann, wenn man möchte.
-
Worauf wir beide leider nicht aus Erfahrung reden können, dass es geht, darum hoffe ich auf Leute, die sich tatsächlich auch im Millionen Zeilen Bereich befinden.
Ich bin sogar der Meinung, dass teilweise Hobbyprojekte bessere Design haben, als solche Millionen Zeilen Projekte,
Merkst du etwas??
-
Ich arbeite an einem C++ Projekt mit mehr als 1 Millionen Zeilen und C++ ist bei uns nicht das große Problem. Die Komplexität und teilweise schlechtes und altes Desgin sind die Probleme. Aber die Probleme gibts glaub ich bei jeder SW die über Jahre wächst.
-
drakon schrieb:
Aber so die Grundaussage von dem Thread im anderen Forum war ja, dass C++ nicht für grosse Software Projekte geeignet seie. Worauf wir beide leider nicht aus Erfahrung reden können, dass es geht, darum hoffe ich auf Leute, die sich tatsächlich auch im Millionen Zeilen Bereich befinden.
wenn du in dem forum 'nen account hast, dann poste mal diesen link: http://www.mistybeach.com/articles/WhyIDontLikeCPlusPlusForLargeProjects.html
-
ppppppppppppppp schrieb:
Worauf wir beide leider nicht aus Erfahrung reden können, dass es geht, darum hoffe ich auf Leute, die sich tatsächlich auch im Millionen Zeilen Bereich befinden.
Ich bin sogar der Meinung, dass teilweise Hobbyprojekte bessere Design haben, als solche Millionen Zeilen Projekte,
Merkst du etwas??
Das ist eine Meinung, kein Faktum, wenn du das ansprechen willst. Es kann sein, dass ich mich irre und dann kann mir das jeder mit Fakten aufzeigen, dass ich das tue. Wenn mir jemand aufzeigen kann, WARUM ein "kleines" Projekt kein besseres Design haben KANN, als ein grosses, dann soll er das tun und dann ändere ich meine Meinung vielleicht, aber solange das niemand tut, oder ich die Erfahrung selbst mache, glaube ich daran.
Oder auf was willst du hinaus?
-
Ich arbeite beruflich mit an einer Software, die mehrere Millionen Zeilen umfasst. Ich denke man kann das Design einer solchen Software einfach nicht mit einem kleinen 10k-Zeilen-2Mann-Projekt vergleichen:
In einem Mammut-Projekt gibt es mehrere Designer und Architekten, lediglich das ganz grobe Design ist abgestimmt, auf Skalen, die jenseits dessen sind, was das 10k-Zeilenprojekt je umfassen wird. Auf so großen Skalen ist es einfach irgendwann nicht mehr wirtschaftlich bei größeren Anforderungen ein entsprechendes Redesign vorzunehmen, statt dessen muss angeflickt werden und die Teildesigns gehen an einigen Stellen Kompromisse ein, die es in einem Kleinprojekt icht braucht. Viele Entwickler und Designer arbeiten an vielen Teilprojekten, so dass sich die Designs der einzelnen Teile grundlegend unterscheiden können, was einen unregelmäßigen Eindruck vermittelt. Gerade bei nach außen hin sich schnell entwickelnder Software liegen die innersten Kernkomponenten mmernoch in der Größenordnung des Kleinprojektes, aber es fasst sie niemand an, weil sie ihren Zweck erfüllen, auch wenn sie durch 10 Jahre altes Design altbacken scheinen. Es ist nunmal so, dass bei der Skalierung um den Faktor 1000 nicht die Zeilen 1000mal so lang werden, auch nicht die Funktionen oder Klassen, sondern die Anzahl der Funktionen, Klassen und Module sich vergrößert, was genau die Ebene ist, auf der Design stattfindet. Man kann ein Bilderbuchdesign, dass im State-of-the-Art Buch mit 100 Zeilen skizziert wird, vielleicht auf ein 10k Zeilen Projekt übertragen. Man kann es aber nicht auf ein 10M Zeilen Projekt skalieren.
-
;fricky schrieb:
^^
Es ist irgendwie alles zuviel des Guten, es ist kein Anfänger Buch, es ist kein Style-Guide für Fortgeschrittene, es ist auch keine Reference. Gut gemeint, aber nicht gut gemacht.
P.S.: Man könnte "Zuviel des Guten" auch über C++ selbst sagen. In diesem Sinn passt das Buch zur Sprache und dessen Schöpfer.http://www.amazon.de/product-reviews/0321543726/ref=cm_cr_dp_all_summary/275-9852612-0662225
*frech grins*
Die Rezension ist wohl kaum zitierwürdig. Sehr schlechtes Deutsch, er kritisiert, dass in dem Buch Vor- und Nachteile der Herangehensweisen diskutiert werden (will er ein Buch lesen oder ein ewig langes Quellcodelisting?), usw. usf.
-
;fricky schrieb:
drakon schrieb:
Aber so die Grundaussage von dem Thread im anderen Forum war ja, dass C++ nicht für grosse Software Projekte geeignet seie. Worauf wir beide leider nicht aus Erfahrung reden können, dass es geht, darum hoffe ich auf Leute, die sich tatsächlich auch im Millionen Zeilen Bereich befinden.
wenn du in dem forum 'nen account hast, dann poste mal diesen link: http://www.mistybeach.com/articles/WhyIDontLikeCPlusPlusForLargeProjects.html
Der typ der den Artikel geschrieben hat, hat keine ahnung. Labert wieso er "C++" nicht mag, aber benutzt C.
-
jesus was black schrieb:
;fricky schrieb:
drakon schrieb:
Aber so die Grundaussage von dem Thread im anderen Forum war ja, dass C++ nicht für grosse Software Projekte geeignet seie. Worauf wir beide leider nicht aus Erfahrung reden können, dass es geht, darum hoffe ich auf Leute, die sich tatsächlich auch im Millionen Zeilen Bereich befinden.
wenn du in dem forum 'nen account hast, dann poste mal diesen link: http://www.mistybeach.com/articles/WhyIDontLikeCPlusPlusForLargeProjects.html
Der typ der den Artikel geschrieben hat, hat keine ahnung. Labert wieso er "C++" nicht mag, aber benutzt C.
wo benutzt er C?
-
pumuckl schrieb:
Ich arbeite beruflich mit an einer Software, die mehrere Millionen Zeilen umfasst.
was macht diese software, wenn ich mal ganz frech fragen darf?
-
jesus was black schrieb:
Der typ der den Artikel geschrieben hat, hat keine ahnung.
Naja, er schliesst aufgrund von "erfahrenen" C++-Programmierern, die keine Punkt-Klasse schreiben können, darauf, dass C++ zwangsläufig kompliziert und zu gefährlich für grössere Projekte ist.
This really isn't a C++ issue. Failing to initialize pointers in C structs is equally bad. The new problems are: [...]
Testing for NULL before calling delete is unnecessary (since 'delete 0' is defined to be harmless), but causes no damage other than slowing down the program slightly.Eindeutig ein schlimmes Problem, das ja in C mit
free()
ganz anders war.NamedPoint now trashes the heap if any NamedPoint objects are passed by value (like, for example, returning a NamedPoint object from a function). This is because the copy constructor that C++ gives us for free copies the 'name' pointer, but does not copy the contents. Now, calling the destructor on the first shared 'name' returns the memory to the heap (although the second copy will continue to use it, EVEN IF THE MEMORY GETS ALLOCATED TO SOME OTHER USE). Calling the destructor on the second shared 'name' probably corrupts the heap by deleting memory that was not, at that time, allocated (the second delete isn't required to corrupt the heap, but this is how most C++ heap managers work).
It has similar problems with the default assignment operator.Auch das kommt natürlich erst mit C++, da man in C viel ausgereiftere Kopiersemantiken hat und beliebig Objekte mit Zeigern per Value herumschieben kann, ohne jemals Probleme zu haben. Natürlich ist es auch realitätsnah, für jede kleine Klasse besitzende Zeiger hinzuzufügen und möglichst zu vergessen, sinnvolle Semantiken zu implementieren.
One solution is to do a lot more stuff with things like STL string objects and generally try to hide the heap allocation. The auto_ptr<> and similar classes help here, too. But they only help. The fundamental problem still remains -- it is too easy to write subtly wrong code and the language is littered with booby-traps.
Äh ja. Es ist einfach, Fehler zu machen, wenn man sichs einfach macht. Wenn man wirklich erfahren und nicht nur "erfahren" ist, hat man kaum noch Probleme, weil man seine Punkt-Klasse entweder mit
std::string
oder mit sinnvollen Memberfunktionen versieht. Aber es stimmt natürlich - solche Dinge muss man in C++ wirklich lernen, wobei man in anderen Programmiersprachen bereits vieles durch Herumprobieren und ohne grosses Hintergrundwissen anwenden kann. Aber ob das immer ein Vorteil ist...