Nabend Leute,
bald ist ja wieder Weihnachten und da habe ich mir gedacht kannst dir ja
auch mal ein Buch schenken lassen. Wobei sich mir die Frage stellt was
kann man später im Beruf als E-Bachelor besser gebrauchen, C oder C++
oder doch gar C#?
Dann stellt sich noch die Frage welches Buch ist überhaupt brauchbar.
Ich kann sagen Programmierkenntnise sind vorhanden. Also Grundlagen-C,
Java, PHP, Matlab usw. ...
Wie gesagt am liebsten ist mir ein Buch über eine Programmiersprache die
ich auch in Zukunft gut gebrauchen kann und wo das Buch sogar evtl. als
Nachschlagewerk dienen kann.
Vielen Dank schonmal im vorraus. :)
lager schrieb:> Ich finde die "galileo computing" Bücher gut.> Kannst teilweise komplett als OpenBook runterladen und Dir dann doch die> Papierversion gönnen.
Ja darüber habe ich auch nachgedacht das "C von A bis Z" zu nehmen, dann
kann man das auch mal in Ruhe gemütlich lesen ohne aufm Bildschirm
starren zu müssen.
Gibts sonst noch gute Bücher?
Offtopic:
Ich habe mal bei Amazon die allgemein C-Bücher angesehen auch die
Benutzerwertung. Ist da schonmal jemandem aufgefallen, dass dort immer
der gleiche Benutzer alle Bücher schlecht bewertet? Aber jedes mal auch
mit sehr ausführlicher Kritik?
Studi schrieb:> Gibts sonst noch gute Bücher?
Schau auch mal hier
http://www.cppbuch.de/
Der C++ Programmierer das Lehr- und Lernbuch von Ulrich Breymann,
985 Seiten, mit DVD, Hanser Verlag, 2. Auflage 2011,
ISBN 978-3-446-42691-7
Studi schrieb:> Ist da schonmal jemandem aufgefallen, dass dort immer> der gleiche Benutzer alle Bücher schlecht bewertet?
Ausgenommen seine, nehme ich an. ;-)
Studi schrieb:> Ist da schonmal jemandem aufgefallen, dass dort immer> der gleiche Benutzer alle Bücher schlecht bewertet? Aber jedes mal auch> mit sehr ausführlicher Kritik?
Du kannst ja mal bei http://www.c-plusplus.de/forum/f65 reinschauen.
In dem Forum kannst du auch mal nach galileo bzw. dem Autor der Bücher
suchen.
Straustrup ist meiner Meinung nach das beste für C++, war aber hier eher
das dritte oder vierte Buch zu dem Thema. Wenn man Staunen will, dann
den Alexandrescu.
Finger weg von den Galileo Büchern!!!!! Enthalten viele kleine, nicht
sofort für Anfänger erkennbare Fehler.
( http://www.c-plusplus.de/forum/272350-full )
Entscheide dich, ob du C oder C++ lernen willst. Klar setzt C++ auf C
auf, aber wenn du C und C++ als eigenständige Sprachen siehst, kannst du
viel mehr aus beiden Sprachen rausholen. Die Art und Weise, wie man C++
programmiert, unterscheidet sich komplett von C. Wenn du C++ Code
siehst, der voll mit new/delete ist, kannst du davon ausgehen, dass
derjenige C++ nicht kapiert hat.
Für C++ würde ich "Der C++ Programmierer" empfehlen.
Wenn du dann mal etwas Erfahrung durch kleinere private
Programmierprojekte gesammelt hast, kann ich auch noch folgendes
empfehlen: "Effektiv C++ programmieren".
Das Buch von Bjarne Stroustrup (Erfinder von C++) hab ich auch daheim
liegen, es liest sich vergleichsweise schwer. Es ist meiner Meinung nach
nicht als Lehrbuch für Anfänger gedacht. Wenn man dann mal genug
Erfahrung gesammelt hat, ist es aber durchaus interessant!
Und nochwas: Da hier der Tipp gefallen ist, C# zu verwenden: Ich würde
davon abraten. Wenn du C++ kannst, kannst du locker auf C# umsteigen.
Umgekehrt: keine Chance!
C# ist im Gegensatz zu Java nur für Microsoft Betriebssysteme vorhanden
(Mono kann man für kommerzielle Zwecke vergessen), dir muss also bewusst
sein, dass du dich mit C# an Microsoft bindest, und jeder möge selber
entscheiden, ob er seine berufliche Karriere von so einer Firma abhängig
machen möchte.
Deine Entscheidung, C und/oder C++ zu erlernen ist schon ok, das sind
nämlich 2 sehr solide Sprachen. Ich hab auch ET studiert, und
programmiere jetzt in C++ für embedded systems die darauf laufende
Software, und kann dir sagen: Diese Sprache wird noch lange der Standard
für embedded systems bleiben.
gdfgdfg schrieb:> Wenn du C++ kannst, kannst du locker auf C# umsteigen.> Umgekehrt: keine Chance!
Käse. Mit C# lernt man zuerst eine einfachere Sprache und kann damit
später leichter C++ erlernen. Das ist einfacher als direkt in C++
einzusteigen.
avr schrieb:> Käse. Mit C# lernt man zuerst eine einfachere Sprache und kann damit> später leichter C++ erlernen. Das ist einfacher als direkt in C++> einzusteigen.
Das sind dann die Leute die sich in Firmen als C++ Programmierer
bewerben und nach kurzer Zeit wieder rausgeschmissen werden weil sie
einfach nicht in der Lage sind, vernünftig C++ zu programmieren.
In der Arbeit darf ich mich mit folgenden Konstrukten rumplagen:
class xy
{
public:
T& getT()
{
if(m_T==0)
throw new NullPtrException();
return *m_T;
}
...
private:
T* m_T;
};
Ich denke, jeder der C++ kann sieht die Probleme sofort.
Und das auf embedded systems, wo der Kunde dann sagt, die Kiste läuft
langsam. Naja, warum wohl...
Sowas fabriziert nur ein Java oder C# Progger der meint, dank seiner
immensen Erfahrung in C# und Java nun auch in C++ so weiterprogrammieren
zu können.
Daher kann ich jedem, der sich intensiv mit der Programmierung von
schwachen Rechnern rumplagen will, nur zu C/C++ raten, und nicht zu C#.
Hallo,
gdfgdfg schrieb:> class xy> {> public:> T& getT()> {> if(m_T==0)> throw new NullPtrException();>> return *m_T;> }> ...>> private:> T* m_T;> };
hmm, Gott sei Dank verdiene ich nicht mein Geld als C++ Programmierer,
was gibt es denn daran, abgesehen von einigen Designentscheidungen, die
ohne
nähere Informationen nicht zu beurteilen sind, jetzt auszusetzen? Würde
mich sehr interessieren, denn leider sehe ich die Probleme nicht
sofort, bitte kläre mich auf!
Vlg
Timm
gdfgdfg schrieb:> Daher kann ich jedem, der sich intensiv mit der Programmierung von> schwachen Rechnern rumplagen will, nur zu C/C++ raten, und nicht zu C#.
Jeder, der schwache Rechner programmiert sollte von OOP die Finger
lassen.
Ja man kann mit C++ auch nicht objektorientiert programmieren, aber ist
das der Sinn? Dann lieber gleich C.
Woher weisst du daß es dem TO um embedded oder gar um 8 Bit µCs geht?
gdfgdfg schrieb:> Sowas fabriziert nur ein Java oder C# Progger der meint, dank seiner> immensen Erfahrung in C# und Java nun auch in C++ so weiterprogrammieren> zu können.
Stimmt, ein C++ Programmierer bekommt vom Compiler umgekehrt sofort auf
die Finger gehauen, wenn er in Java oder C# versucht schmutzige Tricks
anzuwenden :-)
Für jedes Problem / Rechnerplattform die passende Sprache wäre meine
Präferenz.
gdfgdfg schrieb:> Wenn du C++ Code siehst, der voll mit new/delete ist, kannst du davon> ausgehen, dass derjenige C++ nicht kapiert hat.
Das hätte ich gerne mal näher erläutert? Bist du sicher daß du C++ und
nicht C mit ein paar Synatxerweiterungen von C++ meinst?
Udo Schmitt schrieb:> Woher weisst du daß es dem TO um embedded oder gar um 8 Bit µCs geht?
Es geht mir bei der Entscheidung darum möglichst gut für den Beruf
vorbereitet zu sein. Daher auch meine Frage was am meisten gebraucht
wird. Ich denke auch das C++ wohl eher für den PC und C für die Hardware
geeignet ist.
In C/C++ habe ich schon ein paar Grundlagen gesammelt, aber ich würde
nicht behaupten wirklich gut C/C++ programmieren zu können. Daher würde
ich mich mal richtig hinter eine von beiden Programmiersprache hängen um
auch brauchbare Ergebnise erzielen zu können.
Daher auch die Frage nach einem guten Buch um auch ein solides
Basiswissen haben und danach auch brauchbare Ergebnise erzielen zu
können.
gdfgdfg schrieb:> Das sind dann die Leute die sich in Firmen als C++ Programmierer> bewerben und nach kurzer Zeit wieder rausgeschmissen werden weil sie> einfach nicht in der Lage sind, vernünftig C++ zu programmieren.
Also jeder der mit c# anfängt kann nicht programmieren oder wie?
> Ich denke, jeder der C++ kann sieht die Probleme sofort.> Und das auf embedded systems, wo der Kunde dann sagt, die Kiste läuft> langsam. Naja, warum wohl...
Besser als wenn der Kunde sagt das Programm stürzt dauernd ab. Auf einem
µC ist es vielleicht verständlich aber auf einem PC birgt das fast keine
Leistungseinbußen.
> Sowas fabriziert nur ein Java oder C# Progger der meint, dank seiner> immensen Erfahrung in C# und Java nun auch in C++ so weiterprogrammieren> zu können.> Daher kann ich jedem, der sich intensiv mit der Programmierung von> schwachen Rechnern rumplagen will, nur zu C/C++ raten, und nicht zu C#.
Für µC bin ich ganz klar für C/C++. Beim PC, besonders bei GUIs will ich
nicht mehr auf den c# Designer verzichten.
Studi schrieb:> Es geht mir bei der Entscheidung darum möglichst gut für den Beruf> vorbereitet zu sein. Daher auch meine Frage was am meisten gebraucht> wird. Ich denke auch das C++ wohl eher für den PC und C für die Hardware> geeignet ist.
In den Firmen wird C für Mikrocontroller verwendet, C++ für embedded
systems, aber auch PC Programme wo es auf die Performance ankommt, und
PC Programme die portabel sein sollen.
C# ist eher für Desktop Anwendungen geeignet.
Letztlich musst du selbst wissen, in welche Richtung du gehen willst.
Mit C wirst du keine Geschäftssoftware modellieren, genauso wenig wie du
einen Mikrocontroller mit C# programmieren wirst.
> class xy> {> public:> T& getT()> {> if(m_T==0)> throw new NullPtrException();>> return *m_T;> }> ...>> private:> T* m_T;> };>>hmm, Gott sei Dank verdiene ich nicht mein Geld als C++ Programmierer,>was gibt es denn daran, abgesehen von einigen Designentscheidungen, die>ohne>nähere Informationen nicht zu beurteilen sind, jetzt auszusetzen? Würde>mich sehr interessieren, denn leider sehe ich die Probleme nicht>sofort, bitte kläre mich auf!
Problematisch an dem Code ist folgendes:
1.) Die Membervar. m_T ist als Pointer angelegt. Das heißt, sie kann
gesetzt sein oder eben auch nicht (ist dann also 0). Es ist
offensichtlich ein normaler Zustand, wenn die Variable 0 ist. Warum gibt
man an dieser Stelle nicht einfach m_T zurück? Der Anwender der Klasse
soll dann selber auf 0 prüfen. Wenn aber eine Exception geworfen wird
habe ich genau die gleiche Information, nämlich m_T==0, nur mit viel
mehr Performanceeinbusen, denn ich muss ein try catch machen zum Fangen
der Exception. Andernfalls mach ich einfach if(ptr!=0).
Da man eine Referenz zurückgibt, hat man von außen vollen Zugriff auf
die Klasseninternas. So gesehen ist auch das kein Vorteil gegenüber
einem einfach T* getT(){return m_T;}
2.) Wenn man schon Exceptions verwendet, dann bitte nicht mit new
werfen. Wehe es wird dann im catch Block nicht ein delete aufgerufen.
Schon gibt es ein Speicherleck. Außerdem führt das zu ziemlich blöden
Code:
try
{...}
catch(MyException* e)
{delete e;}
catch(...)
{}
Es ist also nicht möglich, mit einem catch(...) Block alle Esxeptions zu
fangen, sondern es ist immer eine Sonderbehandlung für die am Heap
angelegte Exception nötig.
>Jeder, der schwache Rechner programmiert sollte von OOP die Finger>lassen.>Ja man kann mit C++ auch nicht objektorientiert programmieren, aber ist>das der Sinn? Dann lieber gleich C.
C++ bietet weitaus mehr als OOP.
Wirklich langsam wird OOP erst, wenn mans mit den Klassenhierachien
übertreibt und alles polymorph macht.
Wenn man hingegen OOP verwendet, um z.B. Speicherlecks zu vermeiden, so
ist mit minimalen Performanceeinbusen sehr viel an Sicherheit gewonnen.
An der Stelle sind RAII und Smart Pointers zu erwähnen, die meiner
Meinung nach viele Vorteile bringen.
Ach und nochwas @Studi: Schau dir auf einer Jobplattform einfach mal an,
welche Programmiersprachen für welche Aufgaben verwendet werden.
Dann überlegst du dir: Will ich in diese Branche? Wenn ja, dann weißt du
ja auch schon, welche Programmiersprache du lernen musst, um das zu
erreichen.