C++ oder C#

BenTheCure

Banned
Registriert
Okt. 2020
Beiträge
25
Kurz zu mir: Fast 40 Jahre alt und bisher nur die grundlegenden Datentypen, Arrays , Methoden und Klassen anhand von Java im Unterricht gehabt.

Java gefällt mir allerdings nicht und daher wollte ich zu C++ oder C# wechseln. C# in Verbindung mit WPF soll ja für GUI Programmierung am ehestens geeignet sein, allerdings spricht bei C++ dafür das es hier plattformunabhängig kompiliert werden kann und mit WxWidgets gibt es ja auch GUI Framework.

Möchte zusätzlich gern ein paar Apps für mein iPhone schreiben, da weiß ich dafür am besten mit Swift komme. Allerdings würde ich dies noch ein bisschen verschieben wollen.
Derzeit nutze ich hauptsächlich Windows, allerdings hab ich Freunde welche meine Programme vlt. auch unter Mac einsetzen würden.

Nun stehe ich aber vor der Entscheidung, lieber weiter mit C++ oder mit C# beschäftigen. Mit gefällt das native kompilieren von der Vorstellung, das es einmal kompiliert auch auf dem Zielsystem läuft, ohne noch zusätzliche Frameworks zu installieren. Was würde mir vtl. In Zukunft, wenn ich mit Swift anfange zugutekommen?
 
Auf deine Frage gibt es leider keine richtige Antwort. Das ist seit Jahrzenten schon Diskussionsthema bei den Softwareentwicklern.

Vieleicht wäre es erstmal gut zu wissen welche Art von Programmen und Apps du entwickeln möchtest. Es mag sich blöd anhören, aber solange keine rechenintensive Verarbeitung nötig ist und nur ein wenig Eingabe und Ausgabe gemacht wird ist eine Webanwendung(als App siehe PWA) evtl. sinnvoller. Falls eswas besonders Systemnahes ist oder auf spezielle Ressourcen zugegriffen werden muss sieht das natürlich anders aus, da denke ich wirst du mit C# unter Windows und Swift unter MacOS und iOS besser bedient sein.

Prinzipell ist es falsch sich auf eine bestimmte Sprache oder Framework zu versteifen. Man sollte statdessen bei jedem Anwendungsfall schauen was die "beste" Möglichkeit ist.
 
  • Gefällt mir
Reaktionen: KitKat::new()
C++ da es dafür nicht nur wxwidgets sondern auch Qt gibt. Desweiteren ist es plattformunabhängig und somit auch auf dem mac einsatzfähig.
 
  • Gefällt mir
Reaktionen: KitKat::new() und T_55
Java und C# kannst du auf eine stufe stellen. Und wie ein anderer User schon bemerkt hat kommt es darauf an ob du z.B. fürs Web, Smartphone apps usw entwickeln möchtest.
 
Ich habe im Studium mit C/C++ anfgefangen, hab dann aber sehr schnell gemerkt, dass die eigentliche Programiersprache eher nebensächlich ist. Es ist viel wichtiger sich mit grundlegenden Entwurfsmustern (design patterns), Softwarearchitekturen, usw. zu beschäftigen. Jetzt im Beruf hab ich mit ner wilden Mischung aus C++, C#, JS, HTML, Python, Lua zu tun.
Ich würde vorschlagen mit C++ anzufangen, ist zwar nicht die einfachste Sprache, bietet aber die meisten Möglichkeiten. Am besten stellts du dir eine konkrete Aufgabenstellung und versuchst das umzusetzten. Dann kannst du auch mal mit verschiedenen Zielsystemem rumspielen, also mal was für nen Microcontroller, nen Rapi, usw. programieren (Stichwort cross-compiling). Später zu C# oder Swift zu wechseln ist dann relativ einfach.
 
  • Gefällt mir
Reaktionen: floTTes
Kann man schwer abschätzen was dir am Ende mehr bringt. Aber bevor du eine Münze wirfst würde doch auch eher zu C++ tendieren. Damit hält man sich viele Optionen offen. Mit C++ kannst du alles von bare-metal Mikrocontroller bis GUI-Anwendungen für fast jede Plattform abdecken.

C++ ist zwar sehr komplex. Aber man muss ja nicht alles auf einmal lernen. Ich denke, die einzlenen Teilaspekte kann man sich heutzutage sehr gut im Selbststudium aneignen (Bücher, youtube, ...). Und C++ schult sicher auch das allgemeine Verständnis, weil es eine sehr mächtige und hardwarenahe Sprache ist.

Ich würde nur darauf achten gleich mit einer halbwegs modernen Version von C++ zu starten, also zumindest C++14 oder eben C++17 (aktueller Standard). C++20 ist, glaube ich, auch schon quasi fertig.
 
Als erstes Projekt hatte ich eine Software/Tool welche mir Informationen aus einem Verzeichnis ausliest und anzeigt ohne die einzelnen Ordnern, jeweils einzeln durchzuklicken.
Dies wird allerdings nur auf Windows benötigt.

@feynman
Wie finde ich heraus ob es sich um eine aktuelle C++ Version handelt. Tutorials gibt es ja zu Hause im Netz.

Buchempfehlungen liest man ja oftmals: "Der C++-Programmierer: C++ lernen – professionell anwenden – Lösungen nutzen" von Ulrich Breymann
 
@BenTheCure Den Standard, den ein Tutorial/Lehrwerk lehrt, herauszufinden, geht eigentlich nur auf folgende 2 Weisen:
1) Es wird vom Autor angegeben.
2) Jemand, der die Unterschiede in den Standards kennt, liest es sich durch und sagt es dir.

Hier gibt es eine recht aktuelle Liste, welche Bücher für welches Level empfehlenswert sind und welchen Standard sie nutzen: https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list
D.h. wenn du ernsthaft modernes C++ lernen willst, etwas Geld übrig hast und gut genug Englisch verstehst, wäre das recht gut: https://www.amazon.de/Programming-Principles-Practice-Using-C/dp/0321992784
 
Zuletzt bearbeitet:
Nur um noch eine Sprache in den Raum zu werfen, ich bin vor einigen Monaten von C++ auf Rust umgestiegen und finde der wechsel ging mit einer ganzen Reihe von Vorteilen einher, die auch für dich relevant sein können.
Webeinsatz ist eines der 4 zentralen Einsatzgebiete und relativ ausgereift, gerade wenn du native compilierung so spannend findest, könnte das etwas für dich sein?
https://www.rust-lang.org/what/wasm

Die Dokumentation finde ich im durchschnitt auf einem deutlich höheren level und Rust verhindert die gröbsten Fehler die du in c++ einbauen kannst.
 
  • Gefällt mir
Reaktionen: KitKat::new()
Wenn Du noch Einsteiger bist, wie Dein erster Satz vermuten lässt, und Du Deine Anwendungen auf möglichst viele verschiedene Plattformen bringen können willst, würde ich etwas empfehlen, was das leicht macht. Damit meine ich, nicht zusätzlich zum Programmieren auch noch plattformspezifische UI-Frameworks und Toolchains erlernen zu müssen. Also nach dem Motto "Write once, compile everywhere."

Eine Möglichkeit wäre C++ in Verbindung mit Qt. Qt ist komplett plattformübergreifend für Windows, Linux, macOS, Android und iOS (und mit Einschränkungen WebAssembly). Es hat eine eigene IDE namens Qt Creator, die ganz okay ist, und die Projekt-/Toolchain-Konfiguration recht zugänglich macht. Sie bringt auch viele Beispiel-Projekte mit. Ähnlich wie .NET WPF hat, hat Qt QML und einen guten grafischen Editor dafür.

Bei C# gibt es Xamarin, was Android, iOS und Windows abdeckt, aber damit habe ich null Erfahrung, vielleicht kann jemand anderes was dazu sagen.

Ebenfalls erwähnenswert ist Quasar. Das basiert zwar auf Web-Technologie, aber JavaScript bzw. TypeScript sind C-ähnliche Sprachen, Vue ist irgendwie WPF-ähnlich, und es verpackt Dir Deine Anwendung entweder als Website, Desktop-App (Electron) oder Mobile-App (Cordova), ohne dass Du Dich mit den zugrundeliegenden Tools und Frameworks großartig auseinandersetzen musst.

Kotlin ist unter dem Aspekt, möglichst viel abzudecken, auch unbedingt erwähnenswert, aber schau Dir das nur an, wenn Programmieren nicht nur ein Hobby sein soll.
 
Zuletzt bearbeitet:
Ich danke Euch nochmals für die vielen Antworten.

Gerade so beim Nachdenken habe ich überlegt, dass ich zuerst vorrangig Windows GUI Anwendungen entwickeln werde und dann später IOS Apps. Da wäre es von der Lernkurve her doch besser C# zu nehmen, damit ist es doch einfach GUI Anwendungen zu erstellen? Zumindest komme ich da irgendwie schneller ans Ziel als ich es bisher mit C++ geschafft habe.

Hab eine GUI mit wxFormBuilder erstellt und wollte nur via C++ die weiteren Funktionen implementieren. Aber irgendwie scheitere ich schon an den ersten einfachen Probleme (Wollte den ComputerNamen auslesen). Ich denke, vlt. ist es besser erst C++ auf der Konsole zu machen bis ich irgendwann mich an eine GUI Anwedung wagen kann. Oder was meint ihr? Warum komme ich mit C# und WPF schneller ans Ziel?
 
BenTheCure schrieb:
Da wäre es von der Lernkurve her doch besser C# zu nehmen, damit ist es doch einfach GUI Anwendungen zu erstellen?
Dem stimme ich zu.

Imho wird es dir dann auch leichter fallen doch noch C++ zu lernen. Eine einfachere Sprache wie C# macht es auch einfacher Programmierkonzepte zu erlernen und zu verstehen (da man mit weniger anderen Dingen beschäftigt ist).
Das Verständnis wiederum könnte beim C++ Lernen etwas zum Festhalten geben.

BenTheCure schrieb:
Warum komme ich mit C# und WPF schneller ans Ziel?
Ist logisch, weil C++ Programmierung sehr viel komplexer und fehleranfälliger ist als C# Programmierung.
 
Zuletzt bearbeitet:
Also würdest du mir empfehlen erst C# mit WPF und dann irgendwann (wenn es notwendig wird) mit C++ weiterzumachen, oder doch lieber erst in C++ einarbeiten, danach in wxWidgets einarbeiten und dann viel später C# zu lernen?
 
Ich würde empfehlen, zuerst einfach mal mit dem naheliegendsten, das Dir am besten gefällt, anzufangen. Damit Du einfach mal Erfahrungswerte hast. Du hast ja z.B. schon gemerkt, dass Du irgendwann plötzlich eine Funktion brauchst, die Dir den Hostnamen liefert. Und es wird noch mehr kommen, wo Du Dich dann fragst, wie man das eigentlich macht.

Mit den Erfahrungswerten kannst Du dann später schauen, wie man das mit anderen Sprachen macht, und vor allem, was deren Standardbibliotheken und allgemein verfügbaren 3rd-Party-Libraries so bieten. Vielleicht willst Du mal HTML parsen. Für fast jede Sprache gibt es dafür eine Library, die typischerweise Irgendwas-Soup heißt (Java: JSoup, Python: Beautiful Soup). Oder vielleicht Excel exportieren - womit? (Java: Apache POI)

Die Sprache ist eine Sache, aber das ganze Drumherum ist genauso wichtig. Gibt es solide 3rd-Party-Libraries für jeden Zweck und gute Tools, diese zu managen (Dependency Management)? Welche UI-Frameworks kann man damit verwenden (eventuell mit Bindings wie wx.NET oder wxPython)?

Zu Unterscheiden ist auch Sprache und Plattform. .NET ist die Plattform. Dafür kann man mit C#, Visual Basic und weiteren Sprachen programmieren. Die Java Virtual Machine ist eine Plattform, für die man mit Java, Kotlin, Scala, Groovy und weiteren programmieren kann. Tools und Libraries sind meistens Plattform-spezifisch.

Unter diesen Aspekten sind Java (die Plattform) und Python top, und das relativ neue Rust sieht auf den ersten Blick ebenfalls super aus. Für C++ gibt es auch alles, ist aber alles irgendwie nicht so easy. Qt ist nicht nur ein UI-Framework, sondern macht C++ gewissermaßen komplett. Web lasse ich mal außen vor. Zu .NET und anderen kann ich mangels Erfahrung nichts sagen.
 
Zuletzt bearbeitet:
C# schließt dich nicht von der Plattformunabhängigkeit aus (-> .NET Core). Wenn es dir darum geht, effizient Anwendungen zu entwickeln, dann empfehle ich es uneingeschränkt. Zudem ein fast schon trivialer Einstieg mittels Visual Studio.
Mach C++, wenn dich das Programmierhandwerk interessiert. Ich bin mir aber sehr sicher, dass du damit länger brauchen wirst, deine Ziele zu erreichen.
 
Korrigiere mich, wenn ich falsch liege, aber .NET Core umfasst auf Anwendungstypen bezogen, soweit ich weiß, nur Kommandozeile und Web. WPF ist (noch) nicht dabei. D.h. eine Desktop-Anwendung mal eben auf Mac oder Linux zu bringen, geht noch nicht. Angesichts der aktuellen Entwicklung bin ich aber sicher, dass es in wenigen Jahren möglich sein wird.
 
BenTheCure schrieb:
Als erstes Projekt hatte ich eine Software/Tool welche mir Informationen aus einem Verzeichnis ausliest und anzeigt ohne die einzelnen Ordnern, jeweils einzeln durchzuklicken.
Bei "normalen" Anforderungen ist die Sprache fast egal. Zum Thema "C++ ist schwer", stimmt schon aber ich bin der Meinung wenn man in C++ einfache Dinge tut dann ist C++ auch nicht schwerer als eine andere Sprache.
In Bezug auf das Projekt zB in C++ rekursiv einen Pfad iterieren:
C++:
for(auto& p: std::filesystem::recursive_directory_iterator(Path) { }
Viel mehr als in anderen Sprachen ist das sicherlich nicht.
Das Augenmerk würde ich eher auf das GUI-Framework legen, eines finden was dir zusagt, wo es genug Beispiele und Support gibt. Denn bei überschaubaren Projekten sind eher die GUI Dinge das Komplizierte/Neue, Daten in die GUI schicken und anzeigen (tables, Lists...), diese von dort bearbeiten, anklicken, Signal/Slots von Klicks, Tasten fangen, Graphen anzeigen etc...
Bei C++ ist wie schon oft genannt Qt ein Rundum-sorglos-Paket plattformunabhängig was absolut zu empfehlen ist. Ansonsten C# oder gar Python es ist bei "normalen" Programmen wahrscheinlich wirklich egal.
 
Zuletzt bearbeitet:
BenTheCure schrieb:
Also würdest du mir empfehlen erst C# mit WPF und dann irgendwann (wenn es notwendig wird) mit C++ weiterzumachen
ja, du wirst dadurch gewiss nichts verlieren, falls das eine Sorge von dir ist.
Vielleicht landest du dann auch ganz wo anders (z.B. etwas gar nichts mit C++ zu tun hat).

Wegdrängen wollen würde ich dich aber auch nicht: Sollte es dir Spaß bereiten dich mit C++ auseinanderzusetzen, ist das gewiss eine interessante Erfahrung.
T_55 schrieb:
wenn man in C++ einfache Dinge tut dann ist C++ auch nicht schwerer als eine andere Sprache.
najaaaaa...... so wirklich zustimmen kann ich da nicht.

T_55 schrieb:
Bei C++ ist wie schon oft genannt Qt ein Rundum-sorglos-Paket plattformunabhängig was absolut zu empfehlen ist.
Bei QT aber auch auf Lizensierung aufpassen: Legal | Licensing - Qt - man macht sich auch abhängig von gewissen Tools, siehe C++ - QT Designer, Code in Visual Studio weiter nutzen? | ComputerBase Forum
 
Zuletzt bearbeitet:
H4110 schrieb:
Korrigiere mich, wenn ich falsch liege, aber .NET Core umfasst auf Anwendungstypen bezogen, soweit ich weiß, nur Kommandozeile und Web. WPF ist (noch) nicht dabei. D.h. eine Desktop-Anwendung mal eben auf Mac oder Linux zu bringen, geht noch nicht.
Du hättest das auch einfach mal kurz in Google tippen können, aber gut dann korrigiere ich dich: WPF und Forms sind in Core enthalten.
https://docs.microsoft.com/en-us/dotnet/desktop/wpf/?view=netdesktop-5.0
 
Zurück
Oben