Welche Programmiersprache wofür?

Hallo zusammen,
Zur Zeit drängt es mich, neben meiner ganzen Java-Programmierung auch mal was neues zu sehen und zu lernen. Nun gibt es leider Programmiersprachen wie Sand am Meer, und die meisten Google-Ergebnisse erzählen einem immer nur was „Die eine“ Sprache alles tolles kann und wie sie so gut für Einsteiger geeignet ist. Das hilft mir aber alles nicht weiter, ich habe das Gefühl dass immer das Gleiche dort steht (Wird von [Hier Zahl] Menschen verwendet, findet „ganz viel“ Anwendung in allen Bereichen, blablabla).

Da wollte ich mich mal an die von euch wenden, die mehr als eine Programmiersprache können (oder zumindest etwas anderes als Java), wie ihr euch zurechtgefunden / entschieden habt.

Da ich zurzeit noch studiere und erstmal nicht mehr für ein Unternehmen programmiere, bin ich ziemlich ungebunden. Auch habe ich einige Projekte mit Freunden in den Startlöchern, die viel auf Oberflächen- und Spieleentwicklung (Java/Android) abzielen werden.

Vor allem wollte ich aber nicht wissen, welche Sprache ihr mir empfehlt (Weil das ja oft auch persönlicher Geschmack ist), sonder nur wie und warum ihr euch für eine Sprache entschieden habt und wofür diese hauptsächlich eingesetzt wird.

Ich bin froh, wenn ich ein paar Anregungen erhalte :slight_smile:
Grüße,
AceOfSpades

meine nächste Sprache wird vermutlich Ceylon.
Gründe:
[ul]
[li]läuft auf jeder JVM
[/li][li]noch strengeres Typensystem als Java
[/li][li]**NULL **ist ein eigener Typ und Variablen/Parameter/Rückgabewerte müssen explizit so deklariert werden dass sie das NULL-Objekt enthalten können.
[/li][li]Syntax für die Vermeidung einer NULL-Zuweisung. [SPOILER]MyNonNullType var = anyMap.get("invalidKey") or MyNonNullType.DEFAULT_OBJECT;[/SPOILER]
[/li][li]Kontzept der Tupel für Parameterlisten und Rückgabewerte (kann typensicher mehr als ein Objekt zurückgeben)
[/li][/ul]

bye
TT

Sprachen-Flamewar incoming :popcorn:

Entweder das nehmen, was man vorgesetzt bekommt oder eine Sprache wählen in der man produktiv an dem aktuellen Problem arbeiten kann.

Auf alle Fälle offen für Alternativen bleiben, nur weil man Java kann bedeutet das schließlich nicht, dass man damit jeden Mikrocontroller programmieren muss :stuck_out_tongue_winking_eye:

Ich bin derzeit am überlegen ob ich mich mal mit C# beschäftige um mal Apps für mein Handy zu machen (Windows Phone). Kann mich aber nicht richtig hinreißen weil ich die MSDN dokumentation auch irgendwie…verwirrend finde im gegensatz zur Java Doku

dein Titel in Suchmaschinen eingetippt findet auch paar andere ähnliche Themen und einen recht ausführlich aussehenden Link möchte ich direkt hier nennen
http://www.bernd-leitenberger.de/programmiersprachen.shtml

ich zähle mich ansonsten zwar nicht allzu sehr zu den von dir angesprochenen ‘die mehr als eine Programmiersprache können’,
aber erlaube mir auch so, den ebenfalls von dir genannten Punkt ‘findet “ganz viel” Anwendung in allen Bereichen’ herauszustellen (bzw. eher Richtung ‘bestimmte Bereiche’)

verschiedene Bereiche haben a) unterschiedliche Anforderungen und b) unterschiedliche vorhandene Tools, Entwicklerkreis mit gewissen Erfahrungen/ Einstellungen und fortzuführende Altprogramme,

  • eine Webanwendung auf Server, dargestellt im Browser ist etwas anderes als ein Exe-Programm mit eigener graphischer Oberfläche auf PC,
    man kann da mit Java klotzen statt kleckern, aber braucht dann immenses Framework und auch einen Server der das laufen lassen kann,

viel leichter ist es mit simplen Alt-Frameworks (mit eigener Sprache) wie PHP anzufangen, leichter zu kontrollieren, auf mehr käuflichen Web-Servern vorhanden,
in simplen einzelnen Seiten zum laufen gebracht,
bis ein J2EE-Hello World deployt ist vergeht seine Zeit…,

auch ist eine Forensoftware wie die hier laufende in PHP schon da, wie lange würde es dauern dass in Java zu schaffen falls nicht auch schon vorhanden,
da nimmt man dann doch PHP in die Hand

  • andere Umgebung ist die Welt der neuen Apps,
    Java dabei, wenn nicht angeboten und Device-Betriebssysteme nicht flexibel genug, müsste man sich eher mit anderem begnügen,
    aber das kann man sich heutzutage wohl für die großen beiden Programmiersprachen nicht mehr leisten, sind angeboten,

mit Pascal oder sonstiger Staub-Sprache wird es dagegen sicher schwer,
falls nicht spezielle Emulatoren verfügbar (für die Großsprachen letztlich auch immer überall nötig, JVM für Windows, Unix nichts anderes, nur eben verbreiteter Standard)

  • C++ usw. ist (nach Hörensagen) maschinennäher, schneller in bestimmten Bereichen, dafür vielleicht nicht so plattformunabhängig,
    wenn die Leistungsanforderungen an dicke 3D-Anwendungen hoch gehen, dann vielleicht kaum mehr mit Sicherheitssprache Java möglich,

edit: neben dem genannten Micro-Kontroller hat man auch direkteten Zugriff auf Windows, und evtl. in jedem Betriebssystem spezielles angeboten,
Java ist darüber erhaben, interessiert sich nicht für die lokalen Details

  • alte Sprachen wie Cobol bestehen ja angeblich, weil so viele Altprogramme damit noch laufen, das ist sicher schon bekannt

  • Java-Alternativen wie Scala, vielleicht das genannte Ceylon usw., die verschiedenen C-Versionen,
    das sind dann teils unterschiedliche Syntax-Vorlieben und einzelne Features in fast austauschbar mächtigen Sprachen

  • SQL, Prolog, Scheme sind ganz eigene Bereiche mit denen man keine Farbe für Buttons in einer GUI setzen kann sondern hocheffizient Datenbankabfragen oder mathematische Probleme beschreiben kann,
    wenn es die nicht gäbe würde man kaum direkt nur in Java entsprechendes schreiben sondern sich eine Extra-Syntax dafür neu ausdenken,
    statt 100x new Criteria(Person.class).projection("name") usw. zu schreiben ist irgendwann "name from Person" schlicht angenehmer

das ist nicht direkte Konkurrenz als Hochsprache, sondern Spezialgebiete

  • … usw.

Ähm gute Frage, bei mir war/ist es vor allem das was vorgegeben wird
Ansonsten muss man halt schauen was für das Projekt passend ist.

Java. Für alles. Absurde Frage :confused:

:o)

Mal im Ernst: Das kann tatsächlich schnell zu unfundiertem, polemischen bashing führen, und es ist ja nicht so, dass sich die Frage noch nie jemand gestellt hätte, oder dass die Frage noch nie offentlich disktutiert wurde. Aber auf dem Level von „Closed as primarily opinion based“ oder „Closed as duplicate“ sind wir ja gerade nicht :slight_smile:

Wenn man mal von der offensichtlichen Antwort auf die Titelfrage absieht („Die, die dafür am besten geeignet ist“), sondern es eher auf mittel/langfristige Erweiterung des Horizonts sieht, gibt es IMHO ein paar Optionen, mit denen man nicht viel falsch machen kann:

  • Wenn man ein eher „low-level“ Dinge lernen will, kann C nicht verkehrt sein. Ich würde nie-und-nimmer ein neues Projekt mit C anfangen wollen. Und nocht viel, viel weniger (!) ein altes Projekt in C weiterführen :smiley: Aber eine grobe Idee von Pointern und Adressen zu haben, und davon, wie eine for-Schleife in Maschinencode übersetzt wird, kann nicht schaden. (Das bezieht sich auf C. Eigentlich gilt das gleiche auch für C++, aber … C++ ist eine andere Welt. Wer meint, „gut C++ programmieren“ zu können, möge sich bitte bei mir melden ;-))

  • Funktionale Sprachen. Die erleben eine Renaissance. (Oder nur „naissance“). Die Gründe dafür sind nicht zuletzt die Verbreitung von Multi-Core-Systemen. Die „Schockwellen“ dieser Renaissance schlagen in Form von Lambdas nach Java und C++11 durch.

  • Als Verallgemeinerung des letzten Punktes: „Irgendwelche Spachen, die sich stark von den Konzepten einer { Optional curlyBraceLanguage; } unterscheiden“. Das könnte auch was „exotisches“ wie Prolog sein. Es geht ja, wie gesagt, nicht unbedingt darum, ein Projekt mit einer Sprache zu starten und die nächsten 20 Jahre zu entwickeln, sondern oft („nur“?) darum, den Horizont zu erweitern.

(Wenn ich ein Gewissen hätte, wäre das jetzt schlecht, weil mein Horizont einen Radius von 0 hat, und deswegen ein Punkt ist, der „Java“ heißt - aber als Rechtfertigung kann man sagen, dass man sich bis zu einem gewissen Grad aussuchen kann, ob man in die Breite oder in die Tiefe geht…)

Logikprogrammierung: Prolog, DLV, etc.
Als Mathematiker würde dir vielleicht tatsächlich eine Logiksprache wie Prolog, oder noch weiter weg von prozeduralen Sprachen DLV interessieren. Planprobleme durchspielen lassen kann schon ganz spannend sein. Spielt aber nur eine Rolle wenn man denn tatsächlich Probleme angeht die in anderen Sprachen nur sehr umständlich zu lösen wären (oder weil man es für die Uni braucht xD)

Funktionale Programmierung: Haskell, Lisp, Closure, etc.
Mir haben die Ausflüge in die funktionale Welt auch im Bereich Java und Javascript sehr weitergeholfen. Besonders gefallen hat mir dabei Haskell. Interessant ist auch, das Programme die damit geschrieben wurden relativ wenig Bugs haben. (Zugegeben, ich kenne nur die Buchungsstrecke der ÖBB. Aber ich war sehr überrascht, dass dort nur alle paar Monate einmal ein Bug rauskommt obwohl das Regelsystem sehr komplex ist.)

Scriptsprachen: Javascript, Ruby, etc.
Jeder hat so seine Hauptsprache in der er kleine Projekte angeht und schnell Prototypen runter codet. Bei mir war das früher Java, heute ist es Javascript mit node. Das spannende ist auch hier, keine Compile-Zeiten. Schnell etwas weiter bringen und prototyp basierte OOP.

Hardware nah: C/C++, etc
Meine ersten Schritte in der Programmiererwelt habe ich mit C gemacht und mein Abschlussprojekt auf der Schule war die Programmierung eines WiFi-Netzwerk-Protokolls für einen Microcontroller. Mein Blick ist da etwas biased. Aber ich glaube, das sollte man auch mal gemacht haben. Am besten mit einem kleinen Hardware-Projekt.

Jetzt wird’s bei mir dann langsam dünn. Aber interessant sind sicher auch:

  • Swift für iOS
  • Go für verteilte Anwendungen
  • Haxe für mobile Anwendungen

TL;DR: Mikrocontroller könnten mal ne Abwechslung sein :wink:

**Ich bin froh, wenn ich ein paar Anregungen erhalte **

Meine Meinung:

  1. Erst mal saufen, entspannen und überlegen, ob man seine Zeit nicht sinnvoller einsetzen kann

  2. Wirklich gut lernt man eine Sprache eigentlich nur durch längeren, intensiven Einsatz. Und das geht eigentlich nur in der beruflichen Praxis. Und da hat man oft keine, aber auch schon gar keine Wahl.

  3. Als Werkzeug: Java - immer die Sprache, die man gerade am besten beherrscht. Oder die Bash :slight_smile:

  4. Zum Spielen, Lernen und Nachdenken: Haskell, vielleicht auch Scala (ist aber Geschmackssache)

  5. Als Grundlage: C - wenn du das noch nicht kannst, dann lern es jetzt. Gehört zum guten Ton, das zu können - auch wenn man es vielleicht nie mehr braucht.

Wenn du mal über Java nachdenkst, dann wirst du mir sicher recht geben, dass „die Sprache“ eigentlich nur ein kleines Teil des Puzzles ist. Viel wichtiger sind die Bibliotheken, die Muster, die So-macht-man-das-richtig-Fragmente: und die einfach mal so zu „lernen“, das geht meiner Meinung nach überhaupt nicht, das ist einfach zu viel.

Wenn du was exotisches willst, dann probier halt die neue Wolfram Language aus, gibt es auch online irgendwo. Das ist nun mal völlig anders, voll symbolisch und teilweise krass mit „semantisch“ bedeutsamen Inhalten aufgeladen. Leider musst du dazu eine Gazillion Funktionen lernen, und ob das in der beruflichen Praxis jemals interessant wird - sehr unwahrscheinlich.

Heutzutage geht viel in Richtung webbasierte GUIs (natürlich normale Webseiten, aber bspw. auch Smartphone Apps). Deswegen alles, was man da braucht:
[ul]
[li]PHP: Weil’s die Sprache ist, die bei den meisten Webhostingangeboten dabei ist.[/li][li]HTML(5)/CSS(3): Sind zwar keine Programmiersprachen im engen Sinne, gehören aber für die Darstellung dazu. Und man ist erstaunt, wieviel man damit bereits hinbekommt, ohne clientseitiges Scripting zu verwenden.[/li][li]JavaScript: DIE Sprache für clientseitiges Scripting. Außerdem auch Tendenz zum Einsatz auf Servern (ob sich das durchsetzt, halte ich noch für ungewiss).[/li][/ul]

Unter der Voraussetzung, dass man eine Webapplikation selbst entwickelt:
Python: Die ideale Sprache für das Server Backend. Testen läuft ohne Apache oder nginx. Deployment ist easy & cheesy (vorrausgestzt man quält sich nicht mit FCGI). Man benötigt keinen V-Server, sondern nur einen Uberspace.

HTML/JS/CSS: Das ideale Frontend für das Backend, weil es Cross-Plattform ist. PhoneGap erlaubt die Verwendung davon auf Android und iOS. Es wäre auch nicht weiter schwer die App auf das FirefoxOS zu porten (vorrausgesetzt man verwendet keine PhoneGap APIs).

NodeJS: Weiß noch nicht so recht. Läuft jedenfalls auf einen Uberspace.

PHP: Praktisch, wenn man kostenlos Webspace bezieht. Testen läuft leider nicht ohne Apache oder nginx. Läuft auch auf einem Uberspace.

Java: Kann man verzichten, wenn man nicht Minecraft hackt oder man nicht als Java Softwareentwickler(m/w) angestellt ist. Als Webbackend hat Java die Speicheranforderungen von einem V-Server, daher ist Java problematisch auf einen Uberspace.

[QUOTE=nillehammer]
[li]JavaScript: DIE Sprache für clientseitiges Scripting. Außerdem auch Tendenz zum Einsatz auf Servern (ob sich das durchsetzt, halte ich noch für ungewiss).[/li][/LIST][/QUOTE]

Bevor ich mir JS antue, lern ich lieber Dart Lang. :slight_smile: Die Sprache ist gerade im kommen und wird JS konkurrenz machen.

Man mag JavaScript finden, wie man will. Ich als eingefleischter Java-Programmierer finde es z.B. auch nicht gut, dass PHP bei Webhostingangeboten so weit verbreitet ist. Das muss ich mir aber trotzdem “antun”. Sich nicht mit JS zu beschäftigen heißt, in der Webprogrammierung die Augen vor der Realität verschließen.

Wenn ich das richtig lese, hast Du weder JS noch Dart Erfahrung?

Ich kann Dir nur sagen, dass Dart noch weit davon entfernt ist, wirkliche Konkurrenz zu sein. :wink:

Ich finde TypeScript eignet sich für die Webentwicklung besser als Dart.

Also bevor hier jetzt noch ein Flamewar beginnt, erstmal Danke für die vielen Vorschläge und Anregungen :slight_smile:

Wie ich euren Posts entnehmen kann, geht das meiste entweder in Richtung Webanwendungen (JS, PHP,…) oder Mikrocontroller (C/C++). Nach ein bischen Recherche bin ich auch eher zu Javascript oder ähnlichem geneigt, mit Mikrocontrollern hab ich zur Zeit nicht viel am Hut.

Ich bin neulich eher per Zufall darauf gekommen, dass meine Uni dieses Semester einen Workshop über SaaS mit Ruby (bzw. Ruby on Rails) anbietet. Das passt mir insofern ganz gut, da ich im Bereich Serverseitige Anwendungen noch nichts gemacht habe und daher meinen Horizont in diese Richtung prima erweitern kann. Da steht die Tatsache, dass ich gleich Übung in Ruby bekomme (worin ich mich bis Ende Oktober etwas einlesen sollte :stuck_out_tongue: ), auch eher an zweiter Stelle. Wie ihr richtig gesagt habt, kommt es ja nicht in erster Linie auf die Sprache an. Der Workshop scheint sogar im nächsten Semester noch einen zweiten Teil zu haben. Damit wäre ich dann fürs erste wahrscheinlich bedient :D.

@Bleiglanz : Wenns richtig blöd läuft (aber wirklich sau blöd :smiley: ), dann programmiere ich für mein eigenes Unternehmen. Da lässt mir mein Chef wahrscheinlich ziemliche Narrenfreiheit, deswegen versuche ich einen guten Überblick zu erhalten.

Der Thread ist von meiner Seite damit offiziell zum Flamewar freigegeben :smiley:
Grüße,
TheAceOfSpades

Nur nix übertreiben