Umsteiger sucht Tutorials und Info's

J

julian-w

Jungspund
Hallo,
bin bei der Suche nach Tutorials und Bücher auf euer Seite gestoßen und musste mich gleich regestrieren!
Aber nun zum Thema:
Ich habe schon viel Erfahrung im Programmieren mit C# (leider :(), habe schon ganze Programme für Netzerke geschrieben (Client und Server Version) und kenne mich somit auch gut im Programmieren aus.
Nun würde ich gerne auch für Linux (und nich nur für Windoof) Programme schreiben und dazu wollte ich C++ lernen. Dazu hab ich jetzt ein paar Fragen:

1)
Kennt jemand ein gutes Buch/Tutorial zu dem Thema? Kann ruhig etwas kosten, solange es wirklich gut ist. Besitzte keinerlei Grundlagen im Umgang mit C++, kenne aber etwas den Syntax (C# ist ähnlich). Wenn möglich, sollte der Code auf Linux und Windows laufähig sein.

2)
Wie oben schon erwähnt, möchte ich, dass meine Programme unter Linux UND Windows laufen. Daher wollte ich Fragen, was es zu beachten gibt. Eines ist mir schon eingefallen: Die grafische Oberfläche (Ich werde GUI und TUI nutzen). Welche Bibliotheken benutzt ihr bzw. sind Einsteigerfreundlich?

Ich würde mich über viel Feedback freuen. :))

MfG
Julian
 
Die übliche Antwort wäre auf Stroustrup zu verweisen, der hat ziemlich das c++ Buch geschrieben. Ich hab aber auch nur empfehlungen gelesen und es nie selbst in der hand gehabt.

Aber wenn du C# kannst und halbwegs zufrieden damit bist solltest du dir mono anschauen.
 
Also ich bin sehr zufrieden gewesen mit den Büchern von Jürgen Wolf.
Der hat zum Thema AnsiC und C++ zweierlei für Anfänger (und begriffsstutzige Gestalten wie mich) geeignete Bücher verfasst.

Sein C++ Buch wäre: "C++ v. A-Z" v. J. Wolf http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-1278

Galileotypisch sind dann auf der dem Buch beiligenden Bsp.-sourcenCD auch noch andere OpenBooks komplett druff (Bei "C v. A-Z" war es z.Bsp. "Programmieren unter Linux" und "Der Unixguru").

Die größte Lern-Hürde wird aus meiner Sicht für Dich wohl die C/C++-typische Zeigerarithmetik sein, was den Rest betrifft, solltest Du ja zumindest was das OOP-Verständnis angeht, das nötige Rüstzeug ja wohl mitbringen...

MfG
 
Zuletzt bearbeitet:
Nun würde ich gerne auch für Linux (und nich nur für Windoof) Programme schreiben und dazu wollte ich C++ lernen.
Zwar eine eine löbliche Einstellung, aber was versprichst Du Dir davon? Einzig Performanz und/oder Maschinennähe wäre hier ein Thema; schon wegen dem kostenlosen intel-C++-Compiler.

Aber wenn Du Netzwerkprogrammierung betreibst, sind die Flaschenhälse eh ganz woanders. Ich programmier(t)e lange genug C/C++ genug um zu merken, dass Java und/oder C# und dergleichen zu besser handhabbaren Produkten und schnelleren Ergebnissen führen. Ich käme nie mehr auf den Gedanken, C/S-Anwendungen ind C/C++ zu schreiben, wenn es nicht unbedingt sein muss.

Besitzte keinerlei Grundlagen im Umgang mit C++, kenne aber etwas den Syntax (C# ist ähnlich).
Dann lass es lieber bleiben: C++ ist grundverschieden von C#/Java: Keine Garbage-Collection, eine sehr kleine Standardbibliothek und deutlich komplexer und für Neulinge sehr fehlerträchtig. Dass die Syntaxen ähnlich sind, heisst nicht, dass die Sprachen auch gleich funktionieren... Ganz im Gegenteil.

Mittlerweile haben die interpretierten Sprachen C# und Java featuremäßig die Nase vorn: In C++ gibt es keinerlei Introspektionsfeatures/Reflection wie in C# oder Java. Da fällt ein Riesenspektrum an Möglichkeiten echter modularer Entwicklung weg. Oder die neuen Sachen wir LINQ und Lambda-Ausdrücke.

Versuch mal, in C++ Code für einen typensicheren Hash mit synchronisierten Zugriffen aus verschiedenen Threads zu finden...

Wenn möglich, sollte der Code auf Linux und Windows laufähig sein.
Genau das ist der Knackpunkt: Du brauchst eine Cross-Plattfom-Bibliothek wie Qt, wxWidgets oder GTk+. Tonnenschwer, noch mehr Lernaufwand und teilweise zusätziche, umständliche Tools ("Meta-Objekt-Compiler"; ganz was Tolles...bind das mal in Deine Entwicklungsumgebung ein...)

Wie oben schon erwähnt, möchte ich, dass meine Programme unter Linux UND Windows laufen.
Dann bleibt doch bei C#/Mono oder nimm doch Java. Was stört denn daran?


Grüße,

Kay
 
Zuletzt bearbeitet:
Hi,

Die übliche Antwort wäre auf Stroustrup zu verweisen, der hat ziemlich das c++ Buch geschrieben. Ich hab aber auch nur empfehlungen gelesen und es nie selbst in der hand gehabt.

also der Stroustrup ist sicherlich ein sehr brauchbares Buch wenn man wirklich viel mit C++ arbeitet, aber als Einstieg in die Sprache ist es eher ungeeignet.
Ich habe mit 16 mal versucht mir mit dem Stroustrup C++ beizubringen und bin klaeglich gescheitert. Es ist einfach nicht die Zielsetzung des Buches Anfaengern das Programmieren beizubringen.
Ich habe das Buch mittlerweile als Referenz auf der Arbeit liegen. Aber als Referenz geht es mir manchmal nicht tief genug, ich hatte schon einige (zugegebenermassen teils obskure) Fragen die ich mir mit dem Stroustrup nicht beantworten konnte. Aber mein Freund Google hat mich auch bei komplizierteren C++ Fragen noch nie im Stich gelassen. Auch wenn er sich manchmal Zeit mit der Antwort gelassen hat. ;)
Ich habe allerdings auch nur die deutsche Uebersetzung vom Stroustrup und bin damit sprachlich nicht so zufrieden, teilweise ist der Schreibstil unnoetig kompliziert. An manchen Stellen weiss ich wirklich nicht was eigentlich gemeint ist. Ob das in der Original Version besser ist, weiss ich nicht.

Gute Anfaenger Buecher fuer C++ kenne ich leider keine. Aber falls du einen Schnelleinstieg in die Syntax suchst, und dich mit OO Programmierung schon gut auskennst, kann ich "C++: Objektorientiertes Programmieren von Anfang an" von H. Erlenkötter empfehlen, vor allem weil es kaum ein C++ Buch gibt das so guenstig ist. Allerdings hat das Buch IMHO einige eklatante Maengel, denn viele von den Code Beispielen sind stilistisch grauenhaft und die OO Prinzipien (nicht die Syntax) werden fast komplett aussen vor gelassen. Deswegen kann ich das Buch nur Leuten mit entsprechender Vorerfahrung mit gutem Gewissen empfehlen, Programmieranfaenger sollten tunlichst die Finger von dem Buch lassen, sonst laeuft man Gefahr sich schlechten Stil anzueignen.
Eventuell gibt es auch gute Tutorials im Netz die das selbe vermitteln koennen, aber ich war nie ein grosser Freund von Tutorials.

Wenn möglich, sollte der Code auf Linux und Windows laufähig sein.
In dem Fall wuerde ich zu Java raten. ;)

Aber mal im Ernst, ich habe ein sehr ambivalentes Verhaeltnis zu C++. Einerseits ist es eine sehr schoene Sprache, weil sie ungeheuer maechtig ist und du so low-level programmieren kannst wie du willst, und sich trotzdem, dank OO Unterstuetzung, noch unheimlich komplexe Dinge damit realisieren lassen. Andererseits wuerde ich frecherweise behaupten, dass der ganze memory management Kram um den du bei C++ kaum herum kommst, in rund 90% aller Anwendungsprogramme unnoetiger Overhead ist. Ausserdem ist C++ vom OO Standpunkt her alles andere als sauber designt. Du machst dir damit nur selbst das Leben zur Hoelle.

Wenn es um ganz normale Anwendungsprogramme geht und es nicht maschinennah sein muss, wuerde ich wirklich eher zu Java oder Python raten. <edit> Und in Sachen Platformunabhaengigkeit ist Java meiner Meinung nach ungeschlagen. </edit>

Ansonsten, falls es wirklich C++ sein soll, gibt es einige GUI Bibliotheken mit C++ Anbindung die es sowohl fuer Linux als auch fuer Windows gibt, z.B. GTK+ oder QT.
<edit> Im uebrigen kann ich dem_Kay ueber mir nur zustimmen. </edit>

mfg,
bytepool
 
Zuletzt bearbeitet:
huhu und willkommen:>

also ich muss Kay auch recht geben, an deiner stelle würde ich mir java anschaun, da biste plattform unabhängig und es führt schneller zu ergebnissen.
Das Hardwarenahe programmieren, für anwendungen ist in den meisten feällen sinnfrei. Die Java jvm wird auch immer schneller von der warte her, kann man sagen, dass wenn nicht wie bei 3d anwendungen die geschwindigkeit komplett ausgereizt werden muss, die bestele alternative ist :)
 
[völligesOffTopic]
foexle: Doppeltpunkt ist größer als was?!
Du könntest gemäß deinem neuen Lieblingssmilies ja eigentlich auch deine Signatur updaten
1100110 1101111 1100101 1111000 1101100 1100101 111010 111110
[/völligesOffTopic]

[pseudoOnTopic]
Irgendwie schon lustig, dass ein "Gebt mir c++ Tutorials"-Thread zu einem "Nimm lieber java"-Thread ausartet. :0 (Keine Wertung intendiert.)
Ganz großes Tennis.
[/pseudoOnTopic]

Um mal so zu tun, als ob mein Post nicht völlig Offtopic wäre, wollte ich ja noch auf wxWidgets als weitere plattformunabhängige GUI-Bibliothek hinweisen, musste dann aber zu meinem Entsetzen feststellen, dass der_Kay dies bereits getan hat... hm :/

Jetzt krieg ich bestimmt ne Verwarnung wegen Offtopic-Vandalismus...
 
Irgendwie schon lustig, dass ein "Gebt mir c++ Tutorials"-Thread zu einem "Nimm lieber java"-Thread ausartet. :0 (Keine Wertung intendiert.)
Ganz großes Tennis.

Im Prinzip hast du Recht. Allerdings ist das doch schon bezeichnend fuer die Sprache (oder die Forenmitglieder), oder?
Zugegebenermassen schlage ich jedoch in die gleiche Bresche. Mit C angefangen (richtig angefangen... davor kam Pascal, aber das zaehlt nicht :P) und dann Java. Keine zehn Pferde bringen mich wieder zu C oder C++ runter.

Doppeltpunkt ist größer als was?!
Du könntest gemäß deinem neuen Lieblingssmilies ja eigentlich auch deine Signatur updaten

Voellig ueberfluessiger Kommentar. Die Qualitaet deiner Bemerkungen ist sonst hoeher.
 
Natürlich passt das nicht zur Topic, aber wenn jemand eine sprache neu beginnen will und man ihm ratet besser etwas anderes zu lernen ist das denke ich besser als einfach google zu bedienen und links von tutorials hier rein zu setzten oder ? :P
 
Ich habe den Sinn eurer "Nimm lieber Java"-Kampagne doch gar nicht bezweifelt. Ich finde die Argumentation(en) eigentlich ziemlich schlüssig. (Vor allem wenn c# auch ne Interpretierte Sprache ist und es dem TE hauptsächlich um Plattformunabhängigkeit geht...) Deswegen schrieb ich ja auch "Keine Wertung intendiert".

Und wieso ist der Kommentar zu foexle überflüssig? Mir ist halt nur in letzter Zeit die inflationäre Benutzung des ":>" Smilies bei ihm aufgefallen. Je nach Standpunkt (oder auch nicht *hust*) ist eh meine gesamte Existenz und alle daraus resultierenden Konsequenzen für das Raumzeitkontinuum (unter anderem mein letzter Post) völlig überflüssig. Aber ok, dann werd ich mich mal an den Ratschlag der Niveaupozilei (Niveau? Machen die nicht Hautcreme?) halten und eine Gott_in_schwarz'sche Qualitätsoffensive starten.

I'll start by shutting the fuck up.
 
Erst mal Danke für die zahlreichen Antworten innerhalb dieser kurzer Zeit!!! :tongue:

Also gut, da C++ doch etwas kompliziert für meine Zwecke ist, bleib ich nun doch bei C#. Jetzt extra JAVA zu lernen, ist mir dann doch zu viel Aufwand.

Zum Einsatzzweck:
Ich progge ein Browsergame,wozu es ein kleines Programm gibt, dass immer die Ereignisse (z.B. Bewegungen) auswertet und die Ergebnisse in eine MySQL-Datenbank schreibt. Da es auch eine Offline-Version geben soll, ist es klug, die auch Windows-kompatibel zu machen, da leider ein Großteil doch Windows benutzt.

Noch eine Frage:
Wie binde ich Bibliotheken wie z.B. ncurses oder QT in die Anwenung ein und mache die auch unter Windows verfügbar?
 
#include <ncurses.h>
Qt is n bisschen komplizirter, SuSE hat da aber n gutes Tutorial schon mitgeliefert. (Das müsste es eigentlich auch irgendwo im Internet geben, falls du ne andere distro hast)

Ähm und ich bezweifele dass man Qt unter Windows ohne große Änderungen einbinden kann.
 
Eigentlich meinte ich, wie ich die in C# einbinde. Dort gibt es ja nich den Befehl #include <xxx>
 
c# bindest du nichts ein wie in c++ in c# benutzt du namespaces. Das ist was anderes als die incluedes bzw die namespaces bei c++. Zumindest compiler technisch

greetz

p.s.: namespaces in c# bindest du mit using ein ;)
 
Könntest du mir evtl.konkret ein Bsp nennen, wie ich z.B. ncurse einbinde.
Ich benutze Mono (Editor und Kompiler).
Oder ist das nichtmöglich?
Wenn nicht bin ich nämlich dann doch gezwungen,c++ zu nutzen, da ich diese Bibliotheken unbedingt bräuchte.
 
Zuletzt bearbeitet:
ich kenne ncurse nicht, kann dir da nun leider nicht weiterhelfen
 
Das Stichwort dafuer nennt sich binding. Wenn du bei Google nach Qt c# binding suchst, dann findest du auch was. Allerdings fuehren die Seiten irgendwie zu einem guten Teil auf verwaiste Projekte und defekte Seiten. Offensichtlich wird dieses Thema nicht so sehr verfolgt.
 
So, ich fasse nun mal alles zusammen, so wie ich es verstanden habe (wenn etwas falsch ist, könnt ihr mich korrigieren):
  • C# ist unter Linux lauffähig, aber nicht so schnell wie C++, aber schneller wie JAVA
  • Bibliotheken, wie z.B. QT oder nurse lassen sich zwar in C# integrieren, ist aber kompliziert undschwierig
  • Die mittels C# entwickelten Programme laufen Problemlos auf jeder Linux-Distribution (evtl. muss man nur ein paar Bibliotheken nachinstallieren)

Und hier sind meine Anforderungen:
Ich entwickle 2 verschiedene Programme, die folgendes können müssen und dabei möglichst plattformunabhängig sein sollen:
Programm 1:
  • TUI (grafische Darstellung in der Konsole) mittels ncurse
  • Zugriff auf MySQL-Server
  • XML-Datei einlesen (Settings)
  • gute Performance

Programm 2:
  • GUI (grafischeOberfläch), z.B. mit QT
  • Einlesen/Bearbeiten von XML-Datei
  • Performance relativ egal

Das sind meine aktuellen Anforderungen. Was würdet ihr mir jetzt empfehlen? Doch C# benutzen? Oder doch besser sich mit C++ anfreunden?

Und noch ein paar Fragen zu C++:
  1. Stimmt es, dass die in C++ geschriebenen Programme die beste Performance haben?
  2. Ist es nicht sinnvoll, gleich C++ zu lernen, da es Zukunftsicher ist?
  3. Es gibt ja noch C. Was ist der Unterschied zwischen C und C++? Kann man auch unter Windows mit C programmieren?

Würde mich über euren Rat freuen.
 
Zuletzt bearbeitet:

Ähnliche Themen

Biete Festanstellung als SystemadministratorIn im Linux-Umfeld in Düsseldorf

Buch: Thema umzug zu Linux!

Kernel -> asm_amd64 fehlt!

Das große SCJP Trainingsbuch

Druckkostenabrechnung unter Linux

Zurück
Oben