Welche Programmiersprachen könnt ihr/wollt ihr noch lernen?
-
minhen schrieb:
Oder ist für dich "eine Sprache lernen" synonym mit "'perfekten' Code darin schreiben"?
Wenn ich adsca's Posting richtig interpretiere (nicht-trollig, wie die anderen die gerade so geschrieben wurden, also), dann reden wir hier von einem Niveau, ab dem man die Sprache guten Gewissens in den Lebenslauf aufnehmen würde, also auch professionell einsetzen kann.
Da reicht es leider nicht, mal gerade so kapiert zu haben, was ein Interface von einer abstrakten Basisklasse unterscheidet...
-
Tim schrieb:
Wenn eine Sprache zu beherrschen für dich nur darin besteht Syntaxregeln zu lernen, empfehle ich dir z.B. mal den C-Standard durchzulesen. Denn _etwas_ mehr gehört dazu leider schon.
Ich kenne die Standards von C und C++. Wenn auch nur selektiv gelesen und nicht zusammenhängend als "Gute Nacht"-Lektüre. Höhere geistige Ebenen benötigt man dazu wirklich nicht. Wo genau siehst du denn einen nennenswerten qualitativen Unterschied zu reinen Syntaxregeln? Oder geht es dir nur um die Quantität der Standards? Dann bliebe nur anzumerken, dass man noch nicht einmal die Standards jemals zu Gesicht bekommen haben muss, um erfolgreich eine Sprache einzusetzen. So fundamental für das Erlernen einer Programmiersprache können die Standards also kaum sein. Sicher, um jeden Winkel einer Sprache zu kennen sind die Standards ein essentieller Baustein von mehreren. Aber, wie gesagt, perfekte Beherrschung ist wohl kaum sinnvollerweise synonym mit gelernt haben.
Nein, aber ich glaube auch nicht, dass ein Pascal-Programmierer innerhalb von 2 Wochen C kann, oder dass ein Java-Coder innerhalb von 2 Wochen (shared, auto, rohe) Zeiger, Templates und Operatorüberladung gelernt hat.
Gerade Zeiger, Templates und Operatorüberladung sind sehr schnell zu erklären. Natürlich gibt es Feinheiten und es werden gemeine Fallstricke bereit gehalten. Aber das ändert nichts daran, dass die Konzepte keine großen geistigen Herausforderungen sind. In der Universität hätte ich mal das Vergnügen einen furchtbar schlecht konzipierten C++-Kurs als Tutor zu begleiten. Die Leute in dem Kurs konnten praktisch nur Perl. C++ war also mehr als nur eine einfache Herausforderung. Doch gerade mit Templates und Überladungen konnten sie am Ende sehr gut umgehen. Ich denke du unterschätzt die Lernfähigkeit und überschätzt den Lernaufwand zur Erreichung eines produktiven Niveaus.
Da du das "perfekt" ja schon so schön in Hochkomma gesetzt hast, erwartest du jetzt was für eine Antwort (die du dir ja sogar bereits selbst gegeben hast) von mir?
Welche Antwort soll ich mir selbst gegeben haben? Das "perfekt" habe ich ausschließlich wegen der sprachlichen Beispiele in Hochkommata gesetzt. Denn ich bin nicht der Meinung, dass Shakespeares oder Goethes Werke eine perfektere Beherrschung des Englischen resp. Deutschen darstellen als ein durchschnittlicher Artikel in der Bild-Zeitung. Aber darum geht es mir auch gar nicht. Mir scheint du setzt bei "eine Sprache gelernt" das höchste Qualitäts-Niveau an und alles davor und darunter sei nur Schall und Rauch, nichtig und nicht vorhanden. Dem stimme ich nicht zu und darauf zielten auch die Beispiele. Man muss Shakespeare weder lesen noch schreiben oder im englischsprachigen Ausland gewesen sein, um Englisch erfolgreich einzusetzen. Dass du etwas anderes behauptest, ist zur Kenntnis genommen, halte ich jedoch für haltlos. Was das mit Linguisten und Technikern zu tun haben soll, ist mir etwas schleierhaft. Ist das der Versuch dir mehr Fachkenntnis zuzusprechen und mir "als Linguisten" die Beurteilungsfähigkeit abzusprechen? Hilft es dir, wenn ich dir sage, dass ich mehr Informatik als Linguistik studiert habe?
Allerdings sollte es eh nicht darum gehen, wer etwas sagt, sondern nur darum, was gesagt wird. Aber auch das ist egal. Schließlich willst du ja noch nicht einmal sagen, worüber du redest. Und lässt "etwas lernen" lieber undefiniert, damit man auch willkürlich alles darunter verstehen und davon behaupten kann. Das ist sinnfrei und erübrigt jeglichen weiteren Beitrag.
-
Wow, schon wieder soviel Dampf...
Ich sehe das ähnlich wie Bashar. Um eine Sprache *professionell* einsetzen zu können, bedarf es mehr als nur zu Verstehen wie die Sprache aufgebaut ist. Die
Basiseigenschaften (objektorientiert, funktional,...), die Syntax und die wichtigsten Sprachmittel lassen sich, sofern man eine ähnliche Sprache bereits beherrscht, ganz schnell lernen. Als Nächstes kommt bei Sprachen wie Java oder C# aber noch eine beträchtliche Infrastruktur hinzu - nicht unbedingt eine intellektuelle Herausforderung, aber der Umfang ist enorm. Und dann kommt das Wichtigste: Benutzung, Idiome usw. Für jedes Problem gibt es in nahezu jeder Sprache mehre Lösungsansätze. In jeder Sprachcommunity bildet sich über die Zeit aber ein Satz von "best-practices" und das ist meist eben keine simple Liste von X Einträgen die man schnell mal eben am Wochenende überfliegen kann. Vielmehr erlent man diese Dinge nur mit der Zeit über den konkreten Einsatz der Sprache.Fazit: Nach zwei Wochen kann man sicher problemlos kleine Programme für den Hausgebrauch schreiben. In ein professionelles Umfeld würde ich persönlich mit zwei Wochen Spracherfahrung aber sicher nicht gehen wollen. Da leistet man dann wahrscheinlich höchstens negative Arbeit.
-
Ja, dem kann ich ohne Wenn und Aber zustimmen. Bliebe nur die von Bashar aufgeworfene Frage, ab wann man eine Sprache in den Lebenslauf aufnehmen kann. Wobei ich fürchte, dass die von dir angebotene Lösung - "wenn man sich bereit fühlt, mit ihr professionell zu arbeiten" - wohl die einzige ist.
-
Ich stimmt minhen in sofern zu, dass man eine um eine Sprache zu lernen, mit dessen Konzepten man bereits aus einer anderen vertraut ist, nicht laenger als 2 Wochen braucht. Wenn man Java gut kennt, wird man mit C++/C/C#/D usw. keine Probleme haben. Selbst Php, JavaScript und Ruby unterscheiden sich nicht so extrem das man jetzt Monate brauchen wuerde.
Was allerdings weitaus mehr Zeit in Anspruch nimmt, ist es, die Bibliotheken und Tools die in der Sprache/fuer die Sprache verfuegbar sind zu finden und zu benutzen lernen.
VisualBasic wuerde ich innerhalb von 2 Wochen gelernt haben, aber fuer die Standard-Lib, die IDE, die Build-Tools, usw. brauche ich sicher einen Monat.
Was anderes ist es, wenn man sich in Lisp/Erlang/Prolog/usw. versucht. Ein neues Sprachkonzept ist eine betraechtliche Huerde. Man kann nicht mehr so denken wie bisher, sondern muss eine neue Denkweise erlernen. Prozedurial/OO nach funktional oder gar logische Programmiersprache ist weitaus schwieriger.
Also nun mal wieder zum Topic:
TurboPascal: Damit angefangen, erste Versuche in OOP.
C++: Damit weitergemacht und ziemlich viel gehackt. Zeiger, Operatorueberladung, Templates
Java: Von C++ auf Java
C: Weil ich auf C++ keine Lust mehr hatte aber low-level Sachen programmieren musste.
Ruby: Buch durchgelesen, paar Tutorials programmiert.
Php: Fuer Webseiten, erste Versuche mit Datenbanken.
Lisp: Unser Professor seine Lieblingssprache
Prolog: Ein anderer Professor seine Lieblingssprache
HDVL???: Irgend so eine Beschreibungssprache fuer Prozessoren/SchaltplaeneWill ich mal anschauen:
Python
Erlang
-
DEvent schrieb:
HDVL???: Irgend so eine Beschreibungssprache fuer Prozessoren/Schaltplaene
Gefragt war nicht, welche Programmiersprache könnt ihr buchstabieren *g* *scnr* *aufVHDL,welchekeineProgrammierspracheist,hinweis*
-
Ich würde mal sagen, wie schnell man eine neue Sprache lernen kann, kommt auf den Programmierer an und was er schon kennt. Ein durchschnittlicher Java Programmierer wird es vielleicht schaffen in 2 Wochen ein schlechtes C++ Programm im Java-Style zu schreiben. Ein wirklich guter Java Programmierer wird es schaffen in 2 Wochen ein ordentliches C++ Programm mit Initialisierungsliste, const correctness, RAII usw. zu schreiben, wenn einer ihm genau diese Unterschiede beibringt. Ein guter C++ Programmierer wird in weniger als 2 Wochen ein ordentliches Java Programm schreiben können, wenn man ihm sagt worauf er achten muss. Einer der schon eine Menge Programmier- und Scriptsprachen kann wird mit einer neuen Sprache einfach los programmieren können und muss sich nur die neue Syntax anschauen.
-
naja schrieb:
Einer der schon eine Menge Programmier- und Scriptsprachen kann wird mit einer neuen Sprache einfach los programmieren können und muss sich nur die neue Syntax anschauen.
Nein.
Jede Sprache hat Paradigmen die man lernen muss. Man kann sie natuerlich recht schnell verstehen wenn man clever ist, aber man muss sie dennoch erst einmal lernen.
-
Meinst du wirklich, dass du es schaffst für jede sprache irgendetwas aufzuzählen, dass es in keiner anderen Sprache gibt?
-
naja schrieb:
Meinst du wirklich, dass du es schaffst für jede sprache irgendetwas aufzuzählen, dass es in keiner anderen Sprache gibt?
Themenverfehlung.
Selbst wenn es nur 3 Idiome gaebe die man koennen muesste, muesste man immernoch die Zeit aufwaenden sich damit auseinanderzusetzen welches der 3 Idiome in der Sprache verwendet wird.
Nur sind es keine 3 Idiome und Paradigmen sondern eine ganze Menge. Die meisten sind trivial zu verstehen, zB RAII. Simpel und primitiv. Zu lernen es richtig anzuwenden muss man aber dennoch. Und dann muss man auch noch bedenken wie das das Code Design beeinflusst. Selbst wenn man also alle Paradigmen und Idiome kennt, muss man immernoch ueberlegen wie diese in genau dieser Konstellation zusammenarbeiten koennen.
RAII ist zum Beispiel nett um Ressourcen aufzuraeumen. Das fuehrt aber weiter zu Exception Handling dass dadurch ploetzlich komplett anders gemacht wird als zB in Java. Und weiters haben wir jetzt auch noch Transaktionen uber RAII vor uns. Dazu auch die Abstraktion alles in RAII-Klassen zu stecken und dann noch solche netten Sachen wie ScopeGuard/ON_BLOCK_EXIT was zu deferred Code Execution fuehrt (was wir zB bei Transaktionen einsetzen koennen).
Alles ist vernetzt. Und auch wenn vieles davon trivial ist wenn man es einmal verstanden hat - es dauert eine gewisse Zeit bis man diese ganzen Paradigmen und Idiome der Sprache kennt und die Zusammenhaenge versteht.
Ein Programm kann ich jederzeit in jeder Sprache schreiben - guten Code dagegen nicht. Irgendwas hin nudeln ist kein problem, aber will man sowas dann wirklich warten wollen...?
-
Themenverfehlung
Ich hab ja auch nicht geschrieben, dass man die neue Sprache sofort perfekt kann und alle Mittel sofort perfekt ausnutzt, dass werden auch viele die Monate oder Jahre lang mit der Sprache programmiert nicht können. Und das muss man auch nicht können um ein vernünftiges und wartbares zu schreiben, es gibt noch was zwischen hinnudeln und alle Möglichkeiten perfekt ausnutzen, letzters wird sowieso fast keiner schaffen. Bei entsprechend komplexen Sprachen wie z.B. C++ tauchen auch immer wieder neue Ideen auf die vor ein paar Jahren noch keiner verwendet hat, aber jetzt fast jeder verwendet, weil sie vernünftig sind. Deshalb sind aber ältere Programme die noch anders geschrieben wurden nicht unwartbares gehacke. Wenn mans mit den Kombinationen der Idiomen zu weit treibt, endet das ganze nur in Overengineering und kann nur noch von Experten gewartet werden, was auch nicht der Sinn sein kann.Wenn man sich einmal ein gutes Basiswissen geschaffen hat, kann man mit so gut wie jeder Sprache vernünftige und wartbare Programme schreiben, auch wenn nicht alles perfekt ist.
-
Wenn du die Paradigmen und Idiome der Sprache nicht einsetzt, ist der Code nicht wartbar.
Wie gut du sie einsetzt ist dann halt ein Zeichen von Qualitaet - aber wenn du sie nur irgendwie oder garnicht einsetzt, ist der Code nicht wartbar.
Ich habe schon zuviele Projekte gesehen und tw. auch warten muessen wo das der Fall war. Weil die Leute eben glauben dass wenn man ein Problem in der Sprache loesen kann, man in ihr programmieren kann. Aber das ist leider nicht der Fall.
-
Shade Of Mine schrieb:
Wenn du die Paradigmen und Idiome der Sprache nicht einsetzt, ist der Code nicht wartbar.
Wie gut du sie einsetzt ist dann halt ein Zeichen von Qualitaet - aber wenn du sie nur irgendwie oder garnicht einsetzt, ist der Code nicht wartbar.
Ich habe schon zuviele Projekte gesehen und tw. auch warten muessen wo das der Fall war. Weil die Leute eben glauben dass wenn man ein Problem in der Sprache loesen kann, man in ihr programmieren kann. Aber das ist leider nicht der Fall.
Dann hast du wohl noch nie ein Programm gesehen das wirklich schlecht bis garnicht wartbar ist. Das kommt zum größten Teil von einer schlechten Architektur. Ich durfte schon mal miterleben, wie der Chef persönlich was designt hat, bei dem ein kleiner Fehler in einem Teil große Teile der Entwicklung an anderen Sachen lahmgelegt hat und bei jedem zusätzlichen Datum das hinzugefügt werden sollte, mussten ne ganze Menge anderer stellen angepasst werden, weil sonst garnichts mehr ging. Viel schlecht wartbarer Code entsteht auch, wenn die Programmierer zu lange und komplizierte Funktionen mit ner ganzen Menge Copy&Paste Code schreiben oder keine sauberen Schnittstellen definieren. Ob da einer jetzt RAII verwendet oder immer per Hand aufräumt, ändert relativ wenig an der Wartbarkeit, deswegen ist der Code noch lange nicht unwarbar sondern vielleicht ein bisschen aufwendiger zu warten. Gut, wenn einer nen kompletten Paradigmenwechsel durchführt und es schafft in einer OOP Sprache rein prozedural oder funktional zu programmieren, dann ist der Code sicher auch sehr schleht wartbar, aber das war nicht das Thema.
-
naja schrieb:
Dann hast du wohl noch nie ein Programm gesehen das wirklich schlecht bis garnicht wartbar ist. Das kommt zum größten Teil von einer schlechten Architektur.
Und woher kommt die schlechte Architektur? Weil jemand etwas mit der Sprache/Library macht, dass man so nicht macht. Ganz einfach.
Aber natuerlich, man kann auch mist bauen weil man vom programmieren keine Ahnung hat, keine Frage. Aber darueber braucht man eigentlich nicht reden, denn wenn jemand zu dumm zum atmen ist, tja aeh, dann ists kein wunder wenn mist rauskommt, oder?
Was aber ein Problem ist, ist wenn Leute die eigentlich programmieren koennen mit den Idiomen und Paradigmen der Sprache falsch umgehen. Schau dir da zB ein x-beliebiges Spieleprogrammierungsbuch fuer C++ an. Sowas meine ich. Die Autoren koennen programmieren, das steht ausser Frage - aber von C++ sollten sie die Finger lassen.
-
Shade Of Mine schrieb:
naja schrieb:
Dann hast du wohl noch nie ein Programm gesehen das wirklich schlecht bis garnicht wartbar ist. Das kommt zum größten Teil von einer schlechten Architektur.
Und woher kommt die schlechte Architektur? Weil jemand etwas mit der Sprache/Library macht, dass man so nicht macht. Ganz einfach.
Na, so ganz einfach kann man sich das auch nicht machen. Wieviele haben denn Ahnung von vernünftiger Softwarearchitektur, wieviele haben denn tiefergreifende Erfahrungen mit Softwartechnik? Man kann ja schon froh sein wenn halbwegs vernünftige Projektplanungen vorhanden sind und als Stütze ein grobes Vorgehensmodell darunter liegt. Und auch bei "modernen" Paradigmen wie OOP, wie schnell ist es denn passiert das man aus dem momentanen gedanklichen Modell "ausbricht" und etwas "unsinniges" unterstellt (speziell meine ich damit is-a und has-a Beziehungen). Das und noch die vielen anderen Kleinigkeiten samt mangelnder Sprachkenntis kulminieren dann in einer bescheidenen Leistung bei der Durchführung einer SW-Entwicklung. So einfach ist es nämlich nicht mit den vielen Rädchen die da ineinandergreifen müssen damit das große Ganze auch funktioniert.
-
Shade Of Mine schrieb:
naja schrieb:
Dann hast du wohl noch nie ein Programm gesehen das wirklich schlecht bis garnicht wartbar ist. Das kommt zum größten Teil von einer schlechten Architektur.
Und woher kommt die schlechte Architektur? Weil jemand etwas mit der Sprache/Library macht, dass man so nicht macht. Ganz einfach.
Nö, das was da gemacht wurde hätte mit keiner Sprache besser funktioniert. Es wurden sogar 2 Sprachen verwendet. Die verwendeten Strukturen und Schnittstellen waren einfach so schlecht, dass diese Probleme auftreten mussten, egal mit welcher Sprache man es implementiert hätte. Und sowas ist wirklich schrecklich wartbar, dagegen ist ein C++ Code im Javastyle noch was schönes. Eine gute Programmarchitektur zu entwerfen ist um einiges schwieriger, als bekannte Paradigmen und Idiome zu verwenden.
OK, sowas schlechtes wie es da gemacht wurde hinzubekommen ist auch schon wieder eine Kunst.
Was aber ein Problem ist, ist wenn Leute die eigentlich programmieren koennen mit den Idiomen und Paradigmen der Sprache falsch umgehen. Schau dir da zB ein x-beliebiges Spieleprogrammierungsbuch fuer C++ an. Sowas meine ich. Die Autoren koennen programmieren, das steht ausser Frage - aber von C++ sollten sie die Finger lassen.
Kann sein, so ein Spieleprogrammierungsbuch hab ich noch nie angeschaut.