Welche Programmiersprache fortführen?

M

Makalar

Guest
Welche Programmiersprache fortführen?

Nachdem ich in der Forensuche nichts gefunden habe, was ungefähr meiner Fragestellung entspricht, stelle ich meine Frage so :D

Seit knapp 1,5 Jahren beschäftige ich mich recht intensiv mit dem Thema Programmierung, ich habe auch schon Grundlagen in den sprachen C++ und Python (In Python bin ich eigentlich sogar recht weit), jetzt will ich mich aber für eine Sprache entscheiden, da ich der Meinung bin, dass es recht schwierig ist, mehrere Sprachen gleichzeitig zu lernen, vor allem wenn man noch eher "Beginner" ist. :)
Was mir nur auffällt ist, dass ich irgendwie mit C++ nicht so ganz zufrieden bin, die Portabilität von Java gefällt mir halt sehr gut.

Jetzt ist meine Frage, ob es sich lohnt auf Java umzusteigen, oder ob es besser ist, C++ fortzuführen. Ich möchte halt ein gutes Fundament für mögliche weitere Sprachen schaffen, aber auch eine Sprache intensiv lernen, mit der man auf praktischer Ebene viele Möglichkeiten hat.

Ich hoffe ihr als erfahrenene Programmierer könnt mir bei meiner Entscheidung ein bisschen helfen :)
 
AW: Welche Programmiersprache fortführen?

Das wichtigste bei der Programmierung sind die Algorithmen und Datenstrukturen.Das ist eine unerlässliche Grundlage, wenn man die Programmierung wirklich erlernen will. Die Programmiersprache ist nur ein Werkzeug, um ein spezifisches Problem zu lösen. Frei nach dem Motto: "Wenn Du einen Nagel in die Wand hämmern willst, dann nimmst Du ein Werkzeug, dass sich wenigsten so anhört, als könnte es etwas mit dem zu tun haben, was Du machen willst. Man nimmt dann keine Knippex." Egänzend wäre etwas Literatur über das Paradigma der Objektorientierten Softwareentwicklung/Design nicht verkehrt.

Java an sich ist wirklich OK, da es frei ist, die Entwicklungsumgebungen frei sind und es unmengen an Informationen frei Verfügbar im Internet gibt. Wenn Du grundlegend Programmieren kannst, ist die gewählte Programmiersprache zweitrangig. Du musst erstmal wissen was Du sagen willst, dann erst nützt Dir die Sprache etwas, in der Du es dann ausdrückst.

Btw. sollte der Umstieg von C++ nach Java nicht wirklich problematisch werden. Die beiden Sprachen haben mehr Gemeinsamkeiten als Unterschiede.
 
AW: Welche Programmiersprache fortführen?

Mh... das ist nicht so einfach zu beantworten. Es ist tatsächlich stark davon abhängig, was du vorhast.

Aber vorher erstmal: Du hast recht, dass du am Anfang dich erstmal auf eine Sprache konzentrieren solltest. Was die Portabilität von Java angeht, ein kleiner Einschub: C++ Programme sind nicht sofort inkompatibel mit einem anderen Betriebssystem. Wenn du eh eher zum OpenSource Sektor gehören möchtest, stellt die Portabilität eventuell kein großes Problem dar. Man kann auch mit C++ wunderbar plattform unabhängig programmieren. Aber ja: In Java ist es wohl deutlich einfacher.

Trotzdem würde ich dir nicht empfehlen auf Java umzusteigen. Da kannst du auch lieber andere Sprachen nutzen, die plattform unabhängig sind.

Es hängt, wie gesagt, davon ab, was du machen möchtest:
- Wenn du dich auch für den hardwarenahen Teil der Programmierung interessierst oder Anwendungen erstellen möchtest, die performancekritisch sind (wie z.B. Spiele), lohnt es sich auf jeden Fall bei C++ zu bleiben oder zu einer anderen System-Sprache, wie Rust oder D, wechseln.
- Wenn du simple Anwendungen programmieren willst mit Buttons und son Kram, solltest du vllt. tatsächlich Java in Erwägung ziehen, obwohl es eine unschöne Sprache ist.
- Auch wenn plattform-unabhängige Anwendungen toll klingen, wird es in Zukunft in den meisten Fällen auf folgende Art von Plattformunabhängigkeit rauslaufen: Browser. Anwendungen, die nur im Browser laufen, kommen immer mehr und werden auch die Zukunft bestimmen, weil es für den Anwender so einfach ist, sie zu nutzen. Hier solltest du dir dann Sprachen wie Javascript (eher hässlich) oder besser Coffeescript anschauen. Außerdem sind natürlich Grundlagen in HTML sowie CSS Grundlagen zum Designen wichtig.
- Möchtest du eher auf hohem Level programmieren und dir ist die Performance egal? Mach weiter mit Python oder schau dir eine andere Scriptsprache mit tollem Sprachdesign, wie Ruby, an.
- Oder doch in eine ganz andere Richtung? Hauptsache möglichst viel unterschiedliche Sprachen lernen und alle Bereiche ausprobieren? Probier mal einen LISP Dialekt, wie das moderne Clojure (was übrigens in der JVM läuft, also auch Java-kompatibel ist). Oder ältere Sprachen wie Haskell: Die bieten nach wie vor interessante Sprach-Features.
- Möglicherweise ist App Entwicklung etwas für dich? Dann bist du ziemlich auf Java bei Android eingeschränkt oder kannst bei Apple mit der neuen Sprache Swift spielen.


Kurz noch mal die angesprochenen Sprachen zusammengefasst:
C++: Trotz des Alters meist genutzte Sprache, wenn es um Performance geht. Also auch Spiele so wie alle wichtigen großen Projekte, wie Foto-/Videobearbeitung, Betriebssysteme, Spiele, Datenbanksysteme, Browser, etc... Es ist aber eine alte Sprache und das merkt man an vielen Stellen. Dort ist die Sprache dann unschön und hat echte Mängel. Trotzdem ist die Sprache sehr komplex und erlaubt das Programmieren mit unterschiedlichen Programmierparadigmen, sodass man schon einiges von der Welt der Programmierparadigmen mitbekommt, wenn man C++ komplett beherrscht.
Rust: Eine neue Sprache von Mozilla, die leider noch nicht fertig entwickelt ist. Trotzdem gibt es schon jetzt viele Fans, meiner Meinung nach berechtigt. Die Sprache versucht C++ abzulösen (was bitter nötig ist) und schafft dies bis jetzt recht gut. Die Sprache bietet viele interessante Sprachkonstrukte und sieht sehr vielversprechend aus. Eventuell aber nichts für Anfänger, da sich die Sprache noch immer ein wenig ändert (Noch in Entwicklung).
D: Ebenfalls ein C++-Ersatz. Bietet ein interessantes Macrosystem und soll quasi "C++ ohne die schlechten Teile" sein. Ich habe schon von vielen sehr schlauen Leuten Gutes über D gehört, habe aber leider keine persönliche Erfahrung. Wäre aber möglicherweise etwas für dich, wenn dir C++ zu alt ist.
Java: Oft als Einsteigersprache angepriesen und sogar oft in der Industrie benutzt. Aber meist für... "langweiligere" Sachen. Man kann natürlich haufenweise interessante Sachen machen, aber wie viele Anwendungen nutzt man täglich, die in Java geschrieben wurden? JDownloader und Minecraft fällt mir ein. Wobei das letzte ein Haufen Hobbyentwickler sind, die eher in ihren Erfolg gestolpert sind, als ihn sich durch super Programmierung zu verdienen ;-)
Wenn du auf Android Apps entwickeln möchtest, musst du wohl auch Java nutzen.
Javascript: Hat nichts mit Java zu tun. Ist eine Scriptsprache, mit der man auf Websiten Sachen machen kann. Nicht wirklich schön die Sprache, aber leider für das Web erforderlich. Es gibt allerdings auch ein paar Sprachen, die einen "Ersatz" sein wollen, wie z.B. ...
Coffeescript: Ein Javascript in "schön", so sagen die Entwickler. Man hat tatsächlich viele schlechten Seiten von Javascript versteckt und kann mit Coffeescript schneller und schöner arbeiten. Allerdings eine wirklich komplett tolle Sprache ist es auch nicht.
Ruby: Eine recht moderne Scriptsprache mit tollen neuen Sprachkonstrukten und Ideen. Selber leider nicht viel Erfahrung...
Haskell und Clojure: Haskell ist schon alt und funktioniert anders, als die meisten Sprachen, die man so kennt. Insbesondere ist es kein C-Nachfahre. Clojure ist ein LISP Dialekt, was nochmal etwas komplett andereres ist... Beide Sprachen sind mindestens eine Erfahrung wert.


Aber vllt solltest du noch genauer sagen, was du vorhast.
Grüße
 
AW: Welche Programmiersprache fortführen?

Danke für deine Hilfe! :)
das ist mir auch schon aufgefallen, viel der Literatur über Programmierung baut auf dem von dir angesprochene Wissen auf, denn als ich noch ganz neu dabei war, vor allem bei C++ habe ich mich oft gefragt (und mache das auch immer noch) "was kann ich mit dieser Sache überhaupt machen, bzw. wofür brauche ich sie, wenn es doch Alternativen gibt? (z.B bei Zeigern in C++)"
Ich werde auf jeden Fall mal so ein Buch anschaffen :daumen:

Edit:

@Crisis nerd:

Vielen Dank für deinen ausführlichen Beitrag!

Auf die Frage was ich eigentlich vor habe, muss ich ganz ehrlich Antworten: Da bin ich mir irgendwie noch gar nicht so sicher. Anfangs, als ich mit Python angefangen habe, wollte ich mich auf Scripts konzentrieren, um mir die Arbeit zu erleichtern, doch je mehr ich mich mit der Materie befasst habe, desto mehr ist mir aufgefallen, dass ich eher "komplexere" Sachen machen will. Doch da fing schon das nächste Problem an: "normale" PC/Smartphone Anwendungen oder doch eher etwas im Browser? So kam ich auch zu C++, weil ich gehört habe, dass man dort schneller und kompakteren Code als z.B. in Python schreiben kann.
Wohin mich mein Weg führen wird, muss sich noch zeigen, ich werde mir D, Javascript und Coffeescript auf jeden Fall mal genauer anschauen.
Was mir bei C++ noch sehr gut gefallen hat, ist, dass man lernt "wie der Computer funktioniert".

Nochmal vielen Dank für deinen wirklich hilfreichen Beitrag! :)
 
Zuletzt bearbeitet:
AW: Welche Programmiersprache fortführen?

Wenn Dich Programmierung an sich wirklich interessiert, dann wirst Du um die Kenntnisse in mehr als einer Programmiersprache nicht herum kommen. Langfristig spricht nichts dagegen z.B. sowohl Java/C/C++ und Python zu beherrschen, im Gegenteil. Für den Anfang aber sind die Grundlagen und eine Programmiersprache doch zu empfehlen, und da würde ich schon zu einer etablierten Sprache wie C++ oder Java tendieren. Die Sprachen sind einfach weiter verbreitet, es gibt mehr Job-Möglichkeiten, mehr Unterstützung, mehr Bibliotheken (denn i.d.R. hat Dein (Teil-)Problem schonmal jemand gelöst und vielleicht auch eine Funktionsbibliothek dafür bereitgestellt), mehr Tools, etc..

Eine weitere Alternative wäre auch C# und das ganze Dot-Net-Packet von Microsoft, dass es zumindest in eingeschränktem (aber brauchbaren) Umfang auch kostenlos für den privaten Gebrauch gibt.

Bei der Tendenz Richtung Smartphone/Apps und Browser würde ich Java nehmen und mich dann erst umschauen, wenn Java zu schwerfällig wird. Mit Java Server Pages (JSP) kann man recht gut Webanwendungen programmieren ohne sich allzusehr mit Javascript/DHTML/AJAX auseinander setzen zu müssen.
 
AW: Welche Programmiersprache fortführen?

Da hast du Recht, eine verbreitete Sprache ist anfänglich wahrscheinlich am besten.

C Sharp hab ich mir auch mal angeschaut, mir als Linux Fan hat die Bindung an Microsoft, und dass der dot net framework (noch) nicht open Source war, nicht so ganz behagt.

Ich werde mir auf jeden Fall nochmal die Syntax von C++ und Java anschauen, bzw. welche von beiden mir mehr behagt :daumen:
 
AW: Welche Programmiersprache fortführen?

Ich werfe einfach nochmal Python in den Raum. Grundsätzlich plattformunabhängig (okay, wenn man ehrlich ist, Unix only, aber zumindest in der Theorie existiert der Interpreter auch für Windows) und eignet sich durch ein paar Sprachfeatures und die Standardbibliothek ganz gut für alles, was irgendwie mit String-Verarbeitung zu tun hat - und auch ein Qt-GUI hat man sich relativ schnell zurechtgebastelt.
Damit erarbeitet man sich sicherlich keinen guten Stil, aber es ist wirklich einfach.

Von Java bin ich persönlich gar kein Freund. Ist weniger die Syntax (C-like, die sehen eh alle gleich aus) als viel mehr die Tatsache, dass manche Konzepte entweder komplett fehlen oder extrem mies umgesetzt sind.
- Imports haben durch die Package-Hierarchie grundsätzlich Namen, die sich niemand merken kann, und Import-Listen werden auch gerne mal 100 Zeilen lang. Man braucht in der Praxis also eine IDE, die das für einen erledigt.
- Die Package-Hierarchie ist aber auch keine wirkliche Hierarchie wie die Namespaces in C++, sondern eigentlich flach mit Punkten im Namen.
- Es gibt keine Records/Stack-Objekte. Wenn man mal mehr braucht als einen primitiven Datentypen (zum Beispiel zwei Variablen eines primitiven Datentyps - für einen 2D-Vektor), muss man sich wohl eine Klasse basteln, mit allen damit verbundenen Nachteilen.
- Typenparameter für Generics erlauben nur Klassen, keine primitiven Datentypen. Deswegen existieren Wrapper-Klassen. In der Standardbibliothek und - noch schlimmer - bei Swing stößt man auch ständig auf generische Klassen, die einige Methoden haben, die einfach nur ein Object zurückgeben, das man dann selbst zurückcasten darf, oder einfach nur ein Object nehmen, was dann nicht mehr typensicher ist und zur Laufzeit für Probleme sorgen kann. Liegt aber auch an der Umsetzung des Generic-Konzepts, C++-Templates funktionieren einfach komplett anders.

Und wenn ich jetzt einem Anfänger (oder einem C++-Migranten mit 20 Jahren Programmiererfahrung) erklären muss, warum er ein triviales Objekt wie ein 2D-Rechteck nicht kopieren kann, ohne zwischen fünf und 100 Zeilen Code zu schreiben, bei einem int aber eine einfache Zuweisung ausreicht, werde ich ungläubig angeguckt. Zurecht. :ugly:

Gegen C++ spricht meiner Meinung nach besonders die Standardbibliothek, die mag zwar durchdacht sein, ist aber stellenweise extrem fummelig zu benutzen und arbeitet genau an den Stellen mit Operator Overloading, wo man es nicht tun sollte. (cout << "a";...)

D: Ebenfalls ein C++-Ersatz. Bietet ein interessantes Macrosystem und soll quasi "C++ ohne die schlechten Teile" sein. Ich habe schon von vielen sehr schlauen Leuten Gutes über D gehört, habe aber leider keine persönliche Erfahrung. Wäre aber möglicherweise etwas für dich, wenn dir C++ zu alt ist.
Ich habe mit D auch keine Erfahrung, aber es bereits Garbage Collection und solche Späße, wäre also schon eine Ebene höher als C++ und kein wirklicher Ersatz. Vielleicht aber gerade deswegen eine anfängertaugliche Sprache. Interessant aber allemal, mehr Infos entsprechend auf der offiziellen Seite.
 
Zuletzt bearbeitet:
AW: Welche Programmiersprache fortführen?

[...]Gegen C++ spricht meiner Meinung nach besonders die Standardbibliothek, die mag zwar durchdacht sein, ist aber stellenweise extrem fummelig zu benutzen und arbeitet genau an den Stellen mit Operator Overloading, wo man es nicht tun sollte. (cout << "a";...)
Was Java angeht, stimme ich dir komplett zu. Aber ich darf in diesem Forum nicht mehr schlecht von Java sprechen... Sonst sagen wieder alle, ich mach Java runter :(
Was C++ angeht: Jap Standardbibliothek ist auch nicht so der Burner, hat aber einige sehr schöne Sachen. Ist aber vor allem auch sehr klein. Dass sie klein ist, stellt grundsätzlich kein Problem dar, wenn C++ leicht erweiterbar wäre. Ist es aber nicht, sondern immer pain in the ass, was für sich schon ein großer Nachteil ist. Hängt alles damit zusammen, dass es schon so unglaublich alt ist und immer abwärtskompatibel bleiben möchte (was für sich gut ist). Es schleppt zu viele Altlasten mit sich rum, ums kurz zu sagen.

Ich habe mit D auch keine Erfahrung, aber es bereits Garbage Collection und solche Späße, wäre also schon eine Ebene höher als C++ und kein wirklicher Ersatz. Vielleicht aber gerade deswegen eine anfängertaugliche Sprache. Interessant aber allemal, mehr Infos entsprechend auf der offiziellen Seite.
Ja der GC gefällt mir auch nicht und ist auch ein Grund, warum ich nicht so begeistert bin, D ernsthaft anzufangen. Allerdings schwärmt aa@fb.com (Andrei Alexandrescu) sehr davon und das ist nun echt ein low-level-Programmierer.
 
AW: Welche Programmiersprache fortführen?

Hut ab, Crysis Nerd. Sehr guter und objektiver Beitrag!

Allerdings wird meine Empfehlung etwas in eine andere Richtung gehen, denn nur eine Sprache zu beherrschen ist nur selten nützlich. Man muss bei seinen Projekten immer abwiegen, welche Sprache / Framework / etc den Job am besten erledigt, und wenn man sich nur auf eine Versteift, dann hat man diese Freiheit nicht.
Daher hier meine Empfehlungen von den Sprachen die man beherrschen sollte:

C++: Das ist ein no-brainer, denn sie ist der defakto Standard in sehr vielen Bereichen in denen es auf Geschwindigkeit ankommt und man nicht die Portabilität von C benötigt (z.B Games, Datenbanken etc). C++11 hat sehr viele neue und absolut geniale Features hinzugefügt. Sie steht anderen Sprachen von den Features in nichts nach.
C: Nun, auch C ist eine der Standard Sprachen, allerdings ist ein tiefes Verständnis für C nicht nötig, allerdings sollte man die Grundlagen von procedural programming durchaus sich mal anschauen.
Java: Ich komme nicht drum her rum, Java zu erwähnen, auch wenn ich wahrlich kein Großer Fan der Sprache bin. Hier solltest du definitiv auch einen Blick auf Kotlin werfen, eine JVM Language von JetBrains welche viele Features von neueren Sprachen in Java verfügbar mach (Closures, auto keyword, etc).
Python / Bash: Eine der Scripting languages. Definitiv nützlich für kleine Scripte nebenbei. Python ist Bash in mancherlei Hinsicht überlegen, für einfache tasks die man automatisieren möchte, ist Bash jedoch perfekt.
Ruby / JavaScript: Pick one. Beide haben auf ihre eigene Art und Weise einen gewissen Charme.
Eine der functional languages (Haskell, Lisp, D, Erlang): Auch hier habe ich wieder keinen Favoriten. Such dir eine aus. Alle sind eine Erfahrung wert.


Die Liste mag für dich jetzt extrem lang und groß vorkommen, und du magst zu erst etwas verschreckt sein, doch kennst du eine, kennst du alle. Beherrschst du z.B C++ bereits sehr gut, wirst du dich schnell in Java / Python / Ruby / JavaScript zurechtfinden und das nötige Wissen sich über die einzelnen syntaxes anzueignen ist nun wahrlich kein Hexenwerk.


PS: Ich beherrsche jede der aufgezählten und habe in jeder minimum eine Anwendung Kommerziell shipped.
SPS: Java ist nicht "portabel". C ist portabel.
 
AW: Welche Programmiersprache fortführen?

Danke euch für eure Tipps :daumen:

Ich werde es wahrscheinlich so machen, dass ich bei den beiden Sprachen bleiben werde, mit denen ich schon etwas vertraut bin, vor allem freut es mich, dass Python auch bei euch professionellen Programmieren etwas höher angesehen ist :)
Bisher dachte ich immer, dass wird von den "guten" als eine Art Anfängersprache angesehen, das kann aber auch daher kommen, dass ich bei "Jugend Forscht" früher immer Python benutzt habe.

Und so ein Buch über Algorithmen und Datenstrukturen werde ich mir auf jeden Fall zulegen, denn bisher war es immer so ein "einfach drauf los Programmieren", meistens hat es funktioniert, bei komplexeren Sachen, auch in Python, war es aber etwas hinderlich.

Edit:

Noch eine kleine Frage, könnt ihr ein Buch über Algorithmen und Datenstrukturen empfehlen, oder sind die alle recht gut?
Was haltet ihr z.B. von diesem: http://www.amazon.de/Das-umfassende...=1-4&keywords=algorithmen+und+datenstrukturen
oder sollte es eher so eines sein: http://www.amazon.de/Algorithmen-Da...=1-3&keywords=algorithmen+und+datenstrukturen
 
Zuletzt bearbeitet:
Zurück