Und mein Gedanke ist einfach, ob ich überhaupt den richtigen Weg gegangen bin!
Wenn du mich fragst, hast du den richtigen Weg schon eingeschlagen, als du dich entschieden hast, was zu verändern und deinen Traum zu verwirklichen. Wenn du programmierst, weil es dir Spaß macht, dann bist du auf jeden Fall am richtigen Weg.
Es ist im Prinzip praktisch völlig egal, mit welcher Sprache man anfängt. Die Grundlagen sind unabhängig von irgendeiner konkreten Sprache. Dein Wissen und vor allem deine Erfahrung hast du immer mit, die jeweilige Sprache ist nur ein Ausdrucksmittel.
Soviel vorweg, nun erst mal zu der Frage, was genau das Problem mit C++/CLI ist:
Bitte nicht in den falschen Hals bekommen, mir geht es ja nur darum, das diese Sprache scheinbar nicht anerkannt ist unter den Programmierern, zumindest liest sich das aus einigen Blogs etc., die man im Internet findet.
Das Problem mit C++/CLI ist nicht die Sprache, die ist an sich völlig in Ordnung. Das Problem ist, dass so viele Anfänger von C++/CLI in die Irre geleitet werden. Der durchschnittliche Anfänger will eben gleich mal C++ lernen, weil er gehört hat, dass das die Sprache ist, mit der die großen Spiele geschrieben werden. Und natürlich will er schnelle Ergebnisse. Dann holt er sich die Visual C++ Express Edition und entdeckt dieses "C++/CLI"; ein Traum wird war, man kann schnell und einfach irgendwelche Dinge zusammenklicken und all das während man "C++" "lernt", immerhin ist da ja ein "C++" in "C++/CLI" ... right!?
Leider hat das, was diese Anfänger dann lernen, nichts mit C++ zu tun. Noch dazu könnten sie genau das Gleiche mit einer anderen Sprache wie z.B. C#
sehr viel einfacher erreichen. Und wie wir in weiterer Folge sehen werden, hat es zusätzlich mit C++/CLI eigentlich auch nichts zu tun.
Aber natürlich ist das keinem dieser Anfänger bewusst, ja viele sind sogar überzeugt davon, dass sie C++ programmieren; bis zu dem Punkt wo die ersten Probleme auftauchen und unser, mittlerweile hinreichend verzweifelte, Anfänger den Schritt wagt, in einem Forum um Hilfe zu bitten, wo er im schlechtesten Fall einfach eine Antwort auf seine Frage bekommt. Im Idealfall wird er möglichst sofort darauf hingewiesen, dass das, was er da macht, kein C++ ist, sondern C++/CLI und dass er C++/CLI bitte möglichst schnell vergessen und C# lernen soll.
Für den Anfänger, der die ganze Problematik dahinter natürlich noch nicht wirklich verstehen kann, sieht das dann schnell einfach so aus, als wäre C++/CLI eine verpönte Sprache und fertig.
Aber das Problem mit C++/CLI ist nicht die Sprache, sondern dass sie ständig, meist mangels besseren Wissens, als etwas verwendet wird, was sie nicht ist. C++/CLI existiert nicht ohne Grund; es existiert aus einem ganz ganz ganz ganz speziellen Grund, nämlich Managed/Unmanaged Interop. C++/CLI erlaubt es z.B., normalen C++ Code mit .NET Code zu mischen, native von managed Code aus zu linken usw. C++/CLI verwendet man, wenn man eine große C++ Codebase, die man, aus den verschiedensten Gründen, nicht einfach nach .NET portieren kann, in .NET verfügbar machen muss; wenn man irgendwelche nativen Bibliotheken von .NET aus verwenden muss und die herkömmlichen Mechanismen dabei nicht ausreichend sind; für low-level Optimierungen, die in anderen Sprachen unmöglich sind etc.
C++/CLI ist nicht "vereinfacht" oder gar "keine richtige Sprache". Im Gegenteil, der einzige
Sinn von C++/CLI ist es, dem Programmierer die volle Kontrolle über sämtliche low-level Aspekte von managed und unmanaged Code auf einmal zu überlassen. Wenn man es verwendet, wozu es gedacht ist, ist C++/CLI potentiell eine
extrem komplizierte Angelegenheit...
C++/CLI ist ein Ort, an dem selbst die erfahrensten Entwickler am liebsten niemals sein wollen, eine Sprache, die man im besten Fall nie verwenden muss. Aber wenn es mal keine Alternative gibt, ist es da...
C++/CLI ist Klebstoff. Klebstoff dient zum Verbinden von Komponenten, wo andere Möglichkeiten erschöpft sind und nicht als Werkstoff, aus dem man ganze Produkte fertigt...
C++/CLI war nie, ist nicht und wird niemals dafür gedacht sein, ganze .NET Anwendungen darin zu schreiben. Microsoft selbst rät in der offiziellen Dokumentation mittlerweile sogar explizit davon ab, auch wenn ich den Link grad nicht finde. Der ganze Sinn von .NET ist, die Entwicklung von Anwendungen zu erleichtern. Wenn .NET das Land ist, in dem Anwendungsentwicklung so richtig einfach ist, dann ist der Sinn von C++/CLI, es dem Programmierer zu erlauben, aufzubrechen und dieses Land gen Osten zu verlassen, nur um zurückzukehren und exotische Güter und Abenteuer (in der Praxis vor allem letzteres) mitzubringen. C++/CLI ist der eventuelle Trip nach draußen, es ist nicht, was du verwenden willst, wenn du in .NET drinnen leben willst. Die Tatsache dass man in C++/CLI
überhaupt komplette .NET Anwendungen schreiben
kann, ist lediglich eine unvermeidbare Folge seines beabsichtigten Zwecks...
Wenn man mal drüber nachdenkt: Allein dass es eben "C++/CLI" heißt und nicht z.B. "C++/.NET", sagt ja schon alles...
Von allen Programmiersprachen, die der Mensch sich bisher so ausgedacht hat, kann ich mir kaum eine vorstellen, die für Anfänger weniger sinnvoll ist, als C++/CLI. Und das soll jetzt keine Übertreibung sein, das mein ich wirklich ernst. C++/CLI zu verwenden macht keinen Sinn, wenn man kein solides Verständnis davon hat, wie .NET unter der Haube funktioniert oder ein solches erlangen will. Für einen Anfänger sind all die Dinge, die C++/CLI wirklich ausmachen, nicht nur jenseits dessen, was er überhaupt begreifen könnte, sondern vor allem völlig irrelevant.
Ja, ich hab vorhin gesagt, dass es prinzipiell egal ist, mit welcher Sprache man anfängt. Und das stimmt auch; auch C++/CLI ist am Ende des Tages nur eine weitere Programmiersprache, mit der man alles mögliche machen kann. Aber C++/CLI ist (notwendigerweise) voller Details, die einem die Sicht aufs Wesentliche versperren. Eine gut für einen Anfänger geeignete Sprache, ist eine Sprache, die Dinge tatsächlich einfacher macht, die einem uninteressante Details nicht unbedingt ständig ins Gesicht hält, wo man stets den Blick aufs Wesentliche behält, die einen nicht davon abhält, die Grundlagen zu lernen, weil man zu beschäftigt damit ist, aufzupassen, dass man nicht gleich wieder über den nächsten Stein stolpert...
C++/CLI für Anfänger ist wie ein Kleinkind in ein Auto zu setzen, wo der Schlüssel steckt, der Motor läuft und die Handbremse gelöst ist, ihm zu zeigen, dass man damit hupen kann und dann allein zu lassen: Völlig verantwortungslos. Sobald das Kind auch nur versehentlich was Anderes tut, als auf die Hupe zu drücken, findet es sich in einer Situation, mit der es nicht nur komplett überfordert ist, sondern wo es von vornherein nichtmal ansatzweise jemals auch nur den Hauch einer Chance für das Kind gegeben hätte, überhaupt zu begreifen, was nun passiert...und nur hupen wird schnell langweilig...und Kinder sind von Natur aus neugierig (und das ist gut so!)...
Es ist ja nix dabei, wenn man wieder mal einen Anfänger davor bewahren muss, sich im dunklen Wald zu verlaufen, weil er es einfach nicht besser wissen konnte und der C++/CLI Versuchung erlegen ist. Aber ich hab den Eindruck, dass es in letzter Zeit immer öfter vorkommt, dass Anfänger in Versuchung geführt und in den Wald gelockt werden...
Ironischerweise bin ich, grad während ich diesen Beitrag hier schrieb, selbst zufällig über so ein Werbebanner gestolpert, das mich in den Wald locken wollte. Wenn ich mir das Angebot so anschaue, dann lässt das imo nur zwei Schlüsse zu: Entweder der Kursanbieter hat selbst keine Ahnung von der Materie und sollte wohl besser nicht auch noch versuchen, diese zu lehren oder er weiß genau was er tut. Nicht dass ich irgendetwas unterstellen wollte (vor allem ersteres kommt ja heutzutage leider oft vor), aber wenn ich sehe, wie hier suggeriert wird, dass man da zum "C++ Programmierer" ausgebildet wird, dann schwirren mir unweigerliche Begriffe wie "vorsätzliche Täuschung" im Kopf herum. Auch wenn das Angebot natürlich rein technisch völlig korrekt ist, da ja im Kleingedruckten alles relativiert und auf den C++/CLI Hintergrund hingewiesen wird. Aber wer kennt schon den Unterschied, wenn er nicht schon Ahnung von der Materie hat. Faustregel für die Zukunft: Wann immer C++ (ohne CLI) und .NET gemeinsam genannt werden, ist
zumindest größtmögliche Skepsis geboten...
Aber es ist nicht alles schlecht und verloren, immerhin konntest du einem vorgegebenen Pfad folgen, der dich geschickt um sämtliche Hindernisse herumgeführt hat. Wenn ich mir die Kursinhalte so anschaue, dann hast du sehr viel wertvolles Grundlagenwissen gesammelt, du hast lediglich nicht wirklich C++ gelernt. Vermutlich hast du effektiv eine extrem komplizierte Variante von C# und den Umgang mit .NET gelernt. Und das ist schon was wert.
Aber mittlerweile ist man im Kopf soweit, das man es nicht des Geldes wegen machen soll. Ich möchte auch Spaß bei der Arbeit haben und diesen möchte ich im Programmieren finden. Und vor einem Jahr hab ich mir dann selbst den Ruck verpasst und gesagt, fang einfach an.
So wurde ein wenig das Internet durchstöbert, viele Game Maker gefunden, direkt aus dem Kopf geschlagen und dann, der Motivation wegen, auf ein Fernstudium mit spielerischem Element gestoßen, eben diesem C++-CLI.
Und mit diesem Grundwissen, was ich mir durch dieses Studium angeeignet habe, möchte ich einfach einen ganz neuen Weg gehen mit einer völlig neuen Sprache.
Wunderbar, genau das hätte ich dir vorgeschlagen. Ich weiß natürlich nicht, wie weit du fortgeschritten bist, aber wenn du schon eher am Ende bist, mach den Kurs einfach fertig. Und danach lern C#, am besten mit einem guten Buch. Dank deiner vorherigen Beschäftigung mit C++/CLI, wirst du dich dort sofort wie zu Hause fühlen. Und du glaubst mir nicht, wie viel besser dir die neue Wohnung gefallen wird
. C# ist eine saubere und nützliche Sprache, die sehr weit verbreitet ist, mit der du viel machen kannst und imo auch sehr gut für Anfänger geeignet. In unserer vorherigen Analogie, wär C# die Muttersprache im .NET Land. Und dann verwend einfach jede freie Minute um zu programmieren. Versuch Dinge umzusetzen, die dich begeistern, wachse an den Problemen, die es entlang des Weges zu lösen gilt. Programmieren lernt man nicht aus Büchern oder in Kursen, Programmieren lernt man nur, indem man es tut, ständig und intensiv. Wenn du im Programmieren deine Leidenschaft entdeckt hast: perfekt!