Sollte man lieber keine andere Programmiersprache als im Studium verlangt lernen?

... komplette Frage anzeigen

5 Antworten

Jeder vernünftige Software-Entwickler, der etwas auf sich hält, wird mit Sicherheit nicht "nur" in drei Sprachen klar kommen.

Natürlich solltest du zusätzliche Sprachen lernen. Es ist durchaus nicht ungewöhnlich, dass jemand an die 50 Programmiersprachen kann, bzw. mindestens eine gewisse Zeit damit gearbeitet hat.

Vor langer Zeit wurde ich hier mal gefragt, wie viele Sprachen ich kann, und dabei bin ich auch so an die 50 ran gekommen. (und da waren solche Nicht-Programmiersprachen wie HTML, TeX oder SQL noch gar nicht bei)

Regulär - also fast täglich - benutze ich aber nur an die 20 Sprachen. Über mehrere Monate gesehen mit Sicherheit um die 35 Sprachen (hängt immer sehr stark von aktuellen Projekten ab). Die restlichen Sprachen sind solche Dinge wie Cobol, AutoIt-Skript oder OCaml, für die ich ehrlich gesagt selten Anwendung habe.

Im Schnitt kann man wohl sagen, dass ich relativ regelmäßig mit ca. 30 Sprachen zu tun habe.

Gestern z. B. habe ich einen Honeypot für schlechte TOR-Exit-Nodes geschrieben, und dafür C, C++, Python, PHP, awk und die Bash verwendet. Mit C habe ich den TOR-Quelltext manipuliert, mit C++ ein Hilfsprogrämmchen gebaut, mit Python einen SOCKS5-Proxy, mit PHP den Serverteil des Honeypots bei einem Billighoster, mit awk die Auswertung und mit der Bash die ganzen Teile koordiniert und verbunden.

Das hätte man auch durchaus alles mit einer einzigen Sprache machen können, aber warum sollte man unpassende Werkzeuge nehmen, wenn es für jede Teilaufgabe das perfekte Tool gibt? (Und das ist der springende Punkt, den du dir unbedingt merken solltest!)

Auf der anderen Seite solltest du natürlich auf eine saubere Trennung der unabhängigen Module achten, und nicht wild JS-Code in der Scripting-Engine von Java ausführen, die über JNI C++ Code aufruft, welcher einen Wrapper für eine Pascal-Bibliothek darstellt. So etwas wäre dann wohl eher als "Müllhaufen" zu bezeichnen.

Deine Werkzeuge weise wählen, du musst! :)

Dass du C++ gelernt hast, ist löblich, aber ich vermute, dass du noch davon entfernt bist, die Mächtigkeit und vor allem die richtigen Anwendungsfälle dieser Sprache richtig einschätzen zu können. Das ist aber normal, wenn man noch nicht mindestens 5 Jahre aktiv in mehreren Sprachen entwickelt hat. Irgendwann kommt mal der Aha-Effekt, und man fragt sich selber, wie man bisher nur so blind sein konnte. (geht zumindest mir persönlich alle paar Wochen so, obwohl ich schon fast 30 Jahre lang programmiere ... aber irgendwie lernt man ständig dazu ...  hahaha)

Syntax und Bibliothek sind eine Sache, Konzepte und Paradigmen zu verinnerlichen, ist eine ganz andere! (Diesen Satz bitte auch nochmal langsam lesen, und auf der Zunge zergehen lassen!)

Ich glaube, ich habe gerade gestern oder vorgestern etwas ähnliches zu einer anderen Frage geschrieben, aber hier passt es gerade nochmal: Der Umgang mit Ressourcen, wie die Verbindung zu einer Datenbank, Aktionen im Dateisystem oder Speicherverwaltung, funktioniert in nahezu allen Programmiersprachen völlig anders, obwohl viele über ein Exception-Handling mit einer Art try-catch verfügen:

  • In Java benutzt man ein Paradigma namens "Try-With-Ressources".
  • In C++ das gute alte RAII, evtl. ordentlich in Lambdas verpackt.
  • In Python gibt es Scope-Management.
  • In C# gibt es IDisposable und using.

Wer also folgenden (falschen!) Ansatz versucht:

// Java
try {
do_something_with_ressource();
} catch (XYZ) {
handle_error();
} finally {
cleanup();
}

// C++
try {
do_something_with_ressource();
cleanup();
} catch (XYZ) {
cleanup();
handle_error();
} catch (...) {
cleanup();
throw;
}

// Python
try:
do_something_with_ressource();
except XYZ:
handle_error();
finally:
cleanup();

... der hat weder Java, noch C++, noch Python verstanden. So etwas sieht man leider allzu oft. (Disclaimer: Der obige Code ist absichtlich schlecht gehalten um als Beispiel zu dienen!)

Von daher ist es nicht nur wichtig, die Regeln einer Sprache zu lernen, sondern sich auch ihrer Denkweisen anzunehmen!

Fazit: Du solltest dich also nicht fragen, ob du neben C++ und Java auch noch C# lernen kannst, sondern welche 10 Sprachen du als nächstes lernen wirst, wenn du mit C++, Java und C# fertig bist, da diese sowieso zur Grundausstattung gehören. :)

Es sei noch angemerkt, dass dieses Lernen viel Zeit erfordert. Und bis wirkliches Verständnis heranreift, vergeht nochmal deutlich mehr Zeit. Aber es lohnt sich!!! :)

Also viel Erfolg! ;)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von TeeTier
29.07.2016, 23:54

Zusatz: Ich sehe gerade, dass ich im bei den (schlechten) Code-Beispielen C# vergessen habe (um das es dir ja auch hauptsächlich in deiner Frage ging), aber im Grunde genommen sähe das so ähnlich wie der Java Teil aus und ist hier nochmal beschrieben:

https://msdn.microsoft.com/de-de/library/ms173162.aspx

Interessanterweise ist es genau DAS, was man nicht tun sollte, und wenn die Projekte größer werden, dann wird man auch schnell merken, warum. (Gleicher Grund wie bei Java, C++ und Python; eine genaue Erklärung würde allerdings den Rahmen sprengen, denn dieses Thema füllt ganze Bände!)

Nur weil man Ressourcen irgendwie (mehr oder weniger) Sprachübergreifend mit try-catch-finally aquirieren und freigeben kann, heißt das noch lange nicht, dass es dafür keine Sprachspezifische bessere Lösung gibt. :)

Interessant wird es bei Lisp, Erlang oder Haskell, wobei wieder eine völlig andere Herangehensweise von Nöten ist.

Noch ein Tipp für den Fragensteller: Du solltest alles an Büchern aufsaugen, was sich mit den Themen Pattern und Antipattern, Code-Smells, defensive Programmierung, elegante / schicke / clevere Programmierung und Style beschäftigt. Dazu zählen zum Beispiel beim Thema C++ so ziemlich alle Bücher von Scott Meyers, Andrei Alexandrescu, Matin Fowler, und denen, die diese in den Literaturverweisen erwähnen.

Das, was man als Einsteiger z. B. bei Bjarne Stroustrupps Buch "Die C++ Programmiersprache" oder im "C++ Primer" auf knapp 1500 Seiten lernt, macht vielleicht 5% dessen aus, was man benötigt, um wirklich guten C++-Code schreiben zu können. Mit anderen Worten: Mehr als grobe Grundlagen lernt man dabei leider nicht, auch wenn man mit diesen schon eine Menge anstellen kann. Aber wer wirklich gut sein will, muss deutlich mehr lernen! :)

1

Als Informatiker solltest du allgemein kein Problem damit haben, dir eine neue Programmiersprache anzueignen, von daher ist es nie schlecht, noch C# zu lernen. Wer weiß, womit du später auf Arbeit programmieren musst.

Zumindest bei mir im Studium war es vor allem in späteren Semestern auch noch so, dass wir ziemlich viele Projektaufgaben bekommen haben, bei denen es uns frei überlassen war, in welcher Sprache wir sie lösen - entscheidend war das Ergebnis. Wenn dann dein Herz für C# schlägt - um so besser.

Antwort bewerten Vielen Dank für Deine Bewertung

Es kann eigentlich nie Schaden, mehrere Prg.Sprachen zu lernen, zumal die von dir genannten ja alle recht nah beieinander liegen vom Syntax.

Allerdings solltest du so lernen, dass du die anderen beiden trotzdem beherscht, da das ja eben die sind, welche du brauchst

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Nadrioshe
29.07.2016, 13:16

C++ beherrsche ich soweit, da wir keine GUI programmieren müssen und nur die Basics machen.

Java ist leider (für mich) für die GUI Programmierung in meinem Studium vorgesehen. Werde aber den Professor persönlich fragen ob C# möglich ist für die Praktika.

0

wenn du dein studium ernst nimmst und wirklich fleißig bist, wirst du zeitlich nicht wirklich dazu kommen, in deiner freizeit mehr programmiersprachen als nötig zu lernen.
syntaktisch und semantisch sind java und c# sich so ähnlich, dass es bei diesen beiden sprachen aber okay ist. bei java und c# sind, wenn man beide sprachen lernt, die wesentlichen unterschiede die keywords,  und wir ein c#-keyword in java heißt, kann man in <15sekunden googeln.von daher, ganz vereinfacht: wenn du c# kannst/beherrschst gilt das grob auch für java.

Antwort bewerten Vielen Dank für Deine Bewertung

Es ist nie kontraproduktiv eine andere Sprache zu lernen. Vorallem sind sich Java und c# so ähnlich, dass du mit den einen auch fast schon das andere lernst.... :)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Nadrioshe
29.07.2016, 13:17

Stimmt :D Habe ich komplett ignoriert. Sehr vieles ähnlich O.ö.

0
Kommentar von TeeTier
29.07.2016, 23:59

Das stimmt leider NICHT! Wissen über Syntax und Bibliothek haben rein GAR nichts mit "Können" zu tun. Siehe dazu meine (etwas zu lang geratene) Antwort. :)

0
Kommentar von RipKali
02.08.2016, 00:01

Es braucht natürlich auch Erfahrung.... Die Syntax ist aber ähnlich.

0

Was möchtest Du wissen?