Verunsicherung bei der Sprachenwahl

Keylen

Lt. Junior Grade
Registriert
Juni 2015
Beiträge
366
Hallo!
Ich bin etwas verunsichert. Ich habe nun vor 3 Wochen mit C# angefangen. Bin Prinzipiell also bei den Basics.
Da ich nun aber damit ein bisschen am Arbeiten bin - stelle ich mir die Frage: Ist es wirklich die richtige Sprache?

Denn letztlich ist C# ja rein Windows basiert und mir kommen mittlerweile auch andere Ideen welche ich gerne machen können würde (aber nicht als Ziel gesetzt habe)

Vor allem bei den Problemen mit Hardwareprogrammierung.
Beispiel:
Nehmen wir an ich möchte mal ein eigenes ferngesteuertes Auto bauen. Dafür muss ich ja:
1. Die Hardware für das Auto haben
2. Die Hardware für den Controller haben
3. Die Software für den Controller und für das Auto schreiben. (also simple Befehle wie: Drücke W -> Hardware im Auto schaltet Motor an -> Hardwäre gibt den Befehl Reifen zu bewegen, vorwärts usw)

Und ich frage mich nun: Ist das mit C# möglich?

Auch sollen kleinere Projekte erstmal angesetzt sein, kleine simple Spiele (wie Snake o.ä.). Große Projekte habe ich zwar auch schon im Kopf. Aber diese sind noch nicht realisierbar und dafür muss ich noch Umsetzungskonzepte schreiben. Das dauert allerdings noch, da bin ich realistisch.

Da ich mit C# auf Windows fixiert bin, frage ich mich auch wie das weiter funktionieren soll. Vor allem wenn ich es mal mit Linux probieren möchte (Finde ich prinzipiell sehr Interessant). Mittlerweile überlege ich, ob Python evtl Interessant ist und ob man von Python leicht auf C, C++ oder C# umsteigen könnte.

Neben der klassischen Spieleprogrammierung ist mir halt tatsächlich auch mal wichtig etwas selbst von 0 aufbauen zu können. (wenn ich gedanklich dran bin)

Die Hauptfrage ist nun eigentlich...
Ist C# die richtige Wahl?
 
AW: Verunsicherung bie der Sprachenwahl

Prinzipiell könntest du dein Auto auch mit C# entwickeln: http://www.netduino.com/

Ansonsten unterscheidet sich die Programmierung von solch Projekten sowieso relativ stark zu Programmen für den Desktop, du müsstest also so oder so neues dazu lernen. Und da sowas meistens in C/++ geschrieben wird, ist jetzt C# zu lernen kein großes Hindernis.

Meiner Meinung nach wäre die beste Alternative für Multiplattform das Qt-Framework.
Doch bist du mit C# auch nicht allzu schlecht bedient - gibt es doch so Dinge wie Mono.

Auf Windows jedenfalls ist C# meiner Meinung nach die beste Wahl.


Und der Umstieg von C# auf C/++ wird wesentlich leichter sein als von Python in die C-Familie.
 
Ich stimme Bagdag 100% zu und würde für so ein Projekt auch total zu C++ mit Qt (auch ohne GUI - siehe diese Diskussion hier und Beispiel zu RS232: Klick) raten.
Trotzdem muss einem klar sein, dass C++ sicher eine deutlich weniger Einsteigerfreundliche Sprache als Python ist. Da du aber schon C# ein bisschen kannst wird dir das bisherige gewonnene Wissen komplett weiterhelfen und es war nichts umsonst.
C++ ist auch deswegen eine gute Wahl weil die Ansteuerung der Hardware mit einem Arduino/µC wahrscheinlich auch in C++ realisiert werden wird/muss.

Wenn du möglichst schnell mit C++ loslegen willst und kein Qt verwenden willst dann ist das hier der schnellste Start unter Windows:
http://www.codeblocks.org/downloads/26 (codeblocks-16.01mingw-setup.exe)
Wenn du aber auch Qt in C++ verwenden können möchtest (was ich immer empfehle, da es C++ stark erweitert und sehr einfach zu erlernen ist und auch viel bringt, wenn man keine Gui braucht), würde ich als IDE eher direkt den QtCreator empfehlen.
Da bei der Installation aber keine GCC Toolchain bei ist könntest du trotzdem die oben verlinkte nehmen. Oder den Hinweis obiger Seite zur verwendeten MINGW Version hierhin folgen: http://tdm-gcc.tdragon.net/
Wichtig evtl noch der Hinweis: Qt lässt sich komplett umsonst auch für kommerzielle Produkte einsetzen dh dieser Download hier ist genau was du suchst - nur wie gesagt ohne Compiler:
http://download.qt.io/official_releases/online_installers/qt-unified-windows-x86-online.exe
bzw allgemeiner:
https://www.qt.io/download-open-source/

EDIT:
Ich sehe gerade, dass es auf der zuletzt verlinkten Website auch einen Link gibt der so heißt:
Offline Installers: ' Qt 5.7.0 for Windows 32-bit (MinGW 5.3.0, 1.1 GB) (info) '
Evtl ist dann doch MinGW dabei.
Falls kein MinGW dabei ist kann es unter Windows etwas nervig werden. Ich glaube man sollte MinGW in der selben Version für die eigene Software verwenden, wie auch Qt zum kompilieren verwendung hatte. Dh du müsstest dann eben auch MinGW in 5.3.0 installieren.

Unter Linux ist vieles einfacher: Du machst einmal sudo apt-get install build-essential und dann noch den Installer von der obigen Qt website und kannst sofort loslegen.
Der installer muss evtl nach dem Download ausführbar gemacht werden. Also auf der Konsole chmod $filename u+x
Oder als Linux einsteiger deutlich netter 'grafisch' mit dem midnight-commander (sudo apt-get install mc) und dann per 'mc' starten und oben im Menü dann chmod mit der Maus benutzen.
 
Zuletzt bearbeitet:
Also... im Prinzip mit C# durchstarten und dann nach genügend Erfahrung (ca. 1 - 1,5 Jahre) auf C++ umsteigen?

Hab ich das soweit richtig verstanden?

Ich hab halt noch meinen Laptop den ich als Programmier-Basis nehme. Raspberry oder andere Mini-Computer sind daher nocgh nicht sooo Notwendig. WÜrde ich mir nur irgendwann mal zulegen zum ausprobieren
 
Für jegliche Konsolenanwendungen oder Webservices/sites kannst du .NET Core verwenden: http://dot.net
Brandneu, crossplattform, open source und Linux wird offiziell Unterstützt. Das einzige "kritische" wird Crossplattform UI Entwicklung und richtig hardwarenaher Kram, für den du dann wahrscheinlich eher C/C++ brauchst (was auch nicht bei allem der Fall sein muss, wenns bspw. einfach Serialport Kommunikation ist, ist das kein Problem in C#).
Wegen Arduino: Weiß nicht genau wie viele Möglichkeiten es gibt, aber der Standard Arduino hat eine eigene Programmiersprache die von der Syntax her ähnlich der C-Sprachen ist. Um ein paar Sensoren auszulesen/anzusteuern sollten da deine C# Kenntnisse gut ausreichen. Ansonsten gibt's auch noch relativ viel Windows IoT kram. Damit hab ich mich jetzt aber noch nicht wirklich beschäftigt.
 
Zuletzt bearbeitet:
Nein, jetzt C# lernen und sobald du mal was anderes benötigst, das ebenfalls lernen - was, solange es innerhalb der C-Familie ist, nur ein kleineres Übel ist.

Da µC Programmierung sowieso mehr oder weniger nur auf die Basics zurückgreift (sind eben im Grunde nur sehr simple dinge: Pin an/aus, Pin auslesen etc. und darauf folgend ein paar Berechnungen) ist praktisch kein unterschied zu C# vorhanden.

Außerdem kann ich dir als µC ein ST Nucleo empfehlen. Diese nutzen mbed. Im Prinzip wie Arduino, nur ein ganzes Stück professioneller (und mächtiger), wobei so ein 3€ Arduino ganz für den Anfang auch nicht verkehrt ist :).

BlooDFreeZe schrieb:
Wegen Arduino: Weiß nicht genau wie viele Möglichkeiten es gibt, aber der Standard Arduino hat eine eigene Programmiersprache die von der Syntax her ähnlich der C-Sprachen ist.

Das ist keine eigene Sprache, das ist lediglich C/++, das mit einer "Arduino Library", die die ganzen Funktionen beinhaltet, ausgeliefert wird.
 
Hallo!
Ja danke. Ich werde es da mit C# wohl weiter machen. Allerdings habe ich dafür noch meinen Laptop (HP ProBook 6450b) - ist zwar schon was älter, dürfte aber hoffentlich mit Unity und Visual Studios zurecht kommen.
 
Hmm ich wollte durch meinen Post eigtl zu C++ motivieren aber wenns dir einfach erstmal nur darum geht OOP zu lernen ist C# genau so ok.
Evtl ist es als Einstieg auch netter.. alles was du dort generell übers programmieren lernst kannst du danach auch in anderen Sprachen gebrauchen.
 
Nun, ich bin ein kompletter Laie. Ich bin dahingehend recht unbeholfen was nun richtig ist.
Ich hab halt noch mein C# Buch. Und ich weiß nicht wie die C++ Oberfläche aussieht.

Bei den vielen Abkürzungen und Co weiß ich nicht mal was meistens gemeint ist und muss alles googeln. Ich werde aber definitiv auf C++ umsteigen müssen wenn es an ernstere Projekte geht.

Ich bin auch bei dem Code am schauen. Stell dir vor ich fange bei 1 an. Viele der dinge die du sagst hab ich noch nie gehört. Das letzte mal als ich mit so was etwas gemacht habe, ist 14 Jahre her, da war ich 12 ^^

Also doch eher C++...

Ich glaube die Entscheidung welche Sprache es nun sein soll, ist komplizierter als das Programmieren selbst -.- (Bei mir zumindest).

Ich werde das C# Buch einmal durchlesen (hab ich ja schon hier) und werde mich dann mal an C++ setzen.. klingt zumindest nach nem Plan... Hoffe ich x.x


Gibts für das von dir gelinkte Programm auch deutsche tutorials?
*google anwerf*
 
Zuletzt bearbeitet:
Wenn du die Software von ferngesteuerten Autos oder was weiß ich selbst schreiben willst, solltest du dich von Windows verabschieden. In aller Regel werden für solche Dinge Embedded Linux verwendet (zum Glück).

Ich würde da jetzt ehrlich gesagt auch nicht noch Zeit mit C# verschwenden - hau dir Ubuntu auf deinen Laptop und los gehts (mit C++). Tutorials gibt es haufenweise. Gerade wenn es an die Hardware geht solltest du dich von deutscher Literatur verabschieden. Ich habe auch schon ein paar Treiber geschrieben und bin so verdammt froh, dass ich Englisch kann.

Wenn du das dann kannst dürfte es auch keine große Sache sein Spiele wie Snake zu schreiben, egal ob Linux oder Windows.
 
Also hardware ist für mich noch sekundär.
Primär gehts noch um die Software.

Ich bin halt Windows verwöhnt.

Englisch kann ich größten teils.
Einige Fach Begriffe werden eher das Problem sein.

Also definitiv c++ und nicht c# für den Einstieg?
 
Zuletzt bearbeitet:
Joa...kommt halt echt drauf an was du machen willst. Also solange es nicht um sehr hardwarenahe Sachen oder anspruchsvolle 3D Spiele geht(Desktopanwendungen, mobile Apps, Consolen Tools, Webservices, kleine Games mit Unity...), wirst du, gerade wenn es deine erste Programmiersprache ist, meiner Meinung nach mit sowas wie C# schneller zu schöneren Ergebnissen kommen und auch schneller guten Code schreiben können. Die Hardwarenähe kostet einfach etwas Komfort und es gilt eine höhere Komplexitätshürde zu bewältigen. Ob das immer ein Problem ist...darüber kann man sich wohl je nach Situation auch streiten. Wenn du aber einmal eine Programmiersprache gut beherrschst und in dem Denken drin bist, ist das Lernen bzw. Verstehen der Syntax neuer Sprachen so ziemlich das geringste Problem und eine Programmiersprache die für alles das beste ist gibt es sowieso nicht.
 
Zuletzt bearbeitet:
Keylen schrieb:
Also definitiv c++ und nicht c# für den Einstieg?
Also wenn du das mit der HW erst einmal zurückstellen willst und zunächst kleine Spiele usw. schreiben möchtest, ist C# vermutlich die bessere Wahl. Zumal du ja schon 3 Wochen dabei bist. :)

Nur wenn es dein primäres Ziel ist Hardware zu programmieren (wie das Auto da z.B.), solltest du gleich mit C++ einsteigen.
 
Also mein primäres Ziel ist es kleine Spiele zu entwickeln und wenn ich dann drin bin auch mal ein Spiel an dem ich ein bis 3- jahre arbeite, damit es auch Anspruchs voll ist.

Hardware hat dahingehend vor allen einen nebenher Effekt den ich gern mitnehmen würde.
 
Kannst du denn Modellieren, Animieren etc.?

Ansonsten eignet sich dafür Unity mit C# sehr :)
 
Tja, wie immer bei der Frage nach der richtigen Programmiersprache bekommst du hier so viele verschiedenen Meinungen wie Antworten ;)

Um noch eine zur Sammlung hinzuzufügen:
Auch wenn c# von Microsoft entwickelt wurde und es sicherlich am meisten auf Windows zum Einsatz kommst ist es nicht auf Windows beschränkt, sondern du kannst damit auch Anwendungen (inklusive Spiele) für Linux, Android und IOS schreiben.

Was die Ansteuerung von HW angeht: Solange dein Programm auf einem Desktop OS läuft ist es ziemlich egal, ob du in c, c++, Python oder c# programmierst. Die Ansteuerung erfolgt immer über die OS-API und die lässt sich von praktisch jeder Sprache aus ansteuern (mal mehr oder weniger komfortabel). Und mit Desktop OS meine ich fast jede Version von Linux (inklusive Embedded) oder Windows. Das einzige wofür du c++ wirklich brauchst ist für Systeme ohne OS (auf denen es keine Unterstützung für C# gibt), wenn du selbst Teile eines Betriebssystems schreiben willst (z.B. Treiber) oder wenn du generell die HW maximal ausreizen musst (z.B. für sehr anspruchsvolle Spiele oder wenn du auf sehr schwacher HW arbeitest).

Da du jetzt mit C# angefangen hast würde ich empfehlen, erst mal damit weiterzumachen. Wenn du dann irgendwann feststellst, dass du Problem XY damit nicht vernünftig lösen kannst, kannst du dich nach Alternativen umsehen.
Ergänzung ()

Update: Ich sehe gerade, dass man C# sogar auf Bare-Metal-Systemen (also ohne OS) nutzen kann: https://en.wikipedia.org/wiki/.NET_Micro_Framework. Wie sehr das dann noch der klassischen c# Programmierung ähnelt, darüber will ich nicht spekulieren.
 
Zuletzt bearbeitet:
Alleine das .NET Micro Framework braucht mindestens 390 KB Speicher, das ist verdammt viel für Embedded. Die 128 KB RAM sind auch nicht zu verachten und werden wohl oft den Rahmen sprengen.

Im hier geplanten Einsatzzweck kann man schon froh sein, wenn man 256 KB Speicher und 64 KB RAM hat. Die Realität liegt wohl eher bei der Hälfte.
 
Hallo Leute,

ich habe jetzt hier schon so einige Threads gelesen, wo es darum geht, dass ein Newbie fragt, mit welcher Sprache er anfangen soll und er möchte später mal dieses oder jenes gerne Programmieren...
Also ich persönlich denke, es ist sch...egal ist, mit welcher Sprache man das Programmieren lernt?
Für mich bedeutet programmieren zu können, die Prinzipien verstanden zu haben. Wie funktioniert eine Schleife, was ist eine Bedingung, was hat das mit den unterschiedlichen Datentypen auf sichwie funktioniert und was sind die Vorteile von objektorientierter Programmierung uswusf.
Wenn ich das verinnerlicht habe, egal in welcher Sprache, dann kann ich programmieren und dann suche ich mir das passende Werkzeug/Sprache zur aktuellen Aufgabe, oder manches mal ist die Sprache auch vorgegeben und ich habe gar keine andere Wahl.
Wenn ich programmieren kann, beschränkt sich der Wechsel auf eine andere Sprache (größtenteils) auf eine geänderte Syntax und Semantik. Und dann weiss ich, es gibt eine Funktion, die etwas bestimmtes macht, wie die genau heist und wie die genaue Syntax ist, das verrät mir im Zweifelsfall Google.

Also nochmal zurück zum ursprünglichen Thema: Du hast jetzt angefangen mit C#, hast ein Buch dazu, mit dem Du klar kommst - also bleibe erst mal einfach dabei und mach weiter wie Du begonnen hast und programmiere das eine oder andere Projekt(chen).
Wenn Du dann geübter bist und Dich an größere Sachen wagst oder in andere Bereiche vorstossen möchtest wie z.B. die Autosteuerung oder ein Spiel, dann schau Dich um, was am besten dafür geeignet ist und adaptiere Dein Wissen auf den neuen Bereich.
 
@S.Kara: Ich glaube du unterschätzt etwas mit was aktuelle BastlerHW so alles aufwarten kann. Klar, für klassische Mikrocontroller und insbesondere die beliebten Arduino Boards ist das zu viel, aber die Realität sieht meiner Erfahrung nach so aus, dass sich sehr viele Leute für ihre Bastelprojekte inzwischen eher Boards vom Schlage eines Raspberry Pi holen. Und selbst wenn wir mehr Richtung Mikrocontroller gehen gibt es da am oberen Ende erstaunlich viele Chips (z.B. aus der STM32 Reihe), auf denen das Framework scheinbar problemlos läuft (Auch wenn C# sicher nicht die effizienteste Methode ist diese HW auszunutzen).

Was ich damit sagen will:
Inzwischen kommt man scheinbar auch im Embedded Bereich mit C# schon sehr weit und gerade wenn das Hauptaugenmerk eher auf Desktop oder Handyplattformen liegt (ob man die jetzt zu Embedded zählen will oder nicht sei jedem selbst überlassen) ist C# als Einstieg meiner Meinung nach sinnvoller als C++. @Keylen hat ja geschrieben, dass er erst mal eher kleine Spiele schreiben will und die Sache mit dem ferngesteuerten Auto (was vielleicht sogar mit c# realisierbar wäre) eher sekundär ist.

Ich selbst hab übrigens keine Erfahrung mit C# auf eingebetteten Systemen, weil ich da bisher ausschließlich C oder C++ genutzt habe. ;)
 
Zurück
Oben