Stimmt es, dass eine Person mit ziemlich guten Programmierkenntnissen leicht jede Programmiersprache lernen kann?
Nun, wenn ich Programmiersprachen sage, beziehe ich mich auf die agilen und dynamischen Sprachen wie PHP, Perl, Ruby usw., aber nicht auf die früheren Programmiersprachen der fernen Vergangenheit.
Ich habe nur an Java gearbeitet, groovig und bis zu einem gewissen Grad flex. Angesichts der Tatsache, dass ich ein Amateur-Programmierer, aber ein schneller Lerner bin, wie lange würde es dauern, um in einer dieser Sprachen Fuß zu fassen?
programming-languages
learning
Vamsi Emani
quelle
quelle
Antworten:
Ja, unter Vorbehalt.
Vor vier Wochen hatte ich professionelle Kenntnisse in C und C ++ und Amateurkenntnisse in Java. Mein Chef bat mich, eine Software in JavaScript zu schreiben, mit der ich keine Erfahrung hatte, und los ging es.
In den nächsten zwei Wochen las ich viele Codebeispiele, fand alle coolen Bibliotheken und schrieb mein Programm. Es ist geschafft und es funktioniert. Dann habe ich letzte Woche ein JavaScript-Buch gekauft und es gelesen, und Junge, ich wusste nicht, was ich tat. Jetzt verstehe ich, warum meine Objekte so seltsam wirkten.
Jetzt sage ich also, ich kenne ein bisschen JS. Ich kann es lesen und damit arbeiten, aber ich bin sicher, dass das, was ich schreibe, ineffizient, schwer zu lesen ist und nicht den bewährten Methoden folgt.
Im Allgemeinen kann ein schneller Lerner eine Woche brauchen, um minderwertige Produkte in einer neuen Sprache zu produzieren. Wenn Sie Java kennen, können Sie ziemlich schnell C, C ++, PHP, Python und JavaScript lernen, aber nur gut genug, um Code zu ändern oder gut definierte Funktionen zu schreiben. (Perl ist möglicherweise schwieriger, da reguläre Ausdrücke komplex sind.) Um ein System ordnungsgemäß in einer neuen Sprache zu erstellen, sollten Sie sich ein Jahr lang professionell unter erfahrenen Mentoren weiterentwickeln.
quelle
Grundsätzlich lautet die Antwort ja ... und nein ... es hängt davon ab, was Sie mit Grundlagen meinen und ist leicht zu beherrschen .
TATSACHE
Das Wissen über die Grundlagen der Programmierung hilft unabhängig von der Sprache. Unter Grundlagen verstehe ich hier Dinge, die nicht spezifisch für ein bestimmtes Paradigma sind. Dinge wie algorithmische, Abstraktionsstufen, Isolation usw.
Wenn Sie die Grundlagen eines bestimmten Paradigmas (OOP, funktional usw.) gut kennen, können Sie leicht Sprachen lernen, die dasselbe Paradigma unterstützen. Wenn Sie eine Sprache gut kennen, können Sie schnell Sprachen derselben Familie lernen.
Mit jeder Sprache, die in derselben Familie gelernt wurde, wird mir die nächste viel leichter fallen. Es würde mich nicht überraschen, wenn diese Lernkurve exponentiell schneller ist, wenn Sie mehr wissen.
MYTHOS
--- bearbeiteter letzter Abschnitt basierend auf Kommentaren ---
Tatsache...
aber
Mythos
quelle
für eine ähnliche Sprache, ja
für Sprachen mit radikal anderen Paradigmen, nicht so sehr
Beispiel: Sie kennen C ++, möchten Java lernen, ein Kinderspiel; Sie kennen VB.NET, Sie möchten Prolog lernen ... den ganzen Kuchen, möglicherweise drei oder vier Kuchen
quelle
Ich glaube, die kurze Antwort lautet: "Irgendwie wahr, aber schwer zu überprüfen". Es ist sehr schwierig, die eng verknüpften APIs, Verwendungen, Redewendungen und Paradigmen (OO, funktional usw.) als die tatsächliche Syntax einer Sprache zu lernen. Ich denke, die Sprache selbst ist leicht zu erobern, wenn Sie über fundierte Kenntnisse und Erfahrungen im Programmieren und einige Compiler-Kenntnisse verfügen, aber aufgrund von Hilfsmitteln schwierig zu beherrschen sind.
Ein klares Beispiel wäre, von einer Sprache in eine andere zu wechseln. C nach Java. Die Codesyntax ähnelt stark C-Programmen, Sie müssen jedoch auch die Java-APIs (Generics, Garbage Collection usw.) kennen und höchstwahrscheinlich in unserer aktuellen "IT-Landschaft" einige Frameworks von Drittanbietern (Spring, jUnit) , Ruhezustand und so weiter), um etwas Nützliches für Unternehmen zu tun. Wenn Sie also zuvor C ausgeführt haben, ist die Sprachsyntax nicht das Problem, sondern der Rest.
Das kommt von mir, der sich mit Java, C #, Javascript, HTML, CSS, Delphi usw. auskennt. Ich kenne vielleicht nicht jeden Winkel der Frameworks oder Bibliotheken, die ich verwende, aber ich kenne mich aus und kann aufgrund dessen schnell lernen meine erfahrung mit anderen aus früheren zeiten. Für einen "schnellen Lerner" ist das eigentlich alles Querdenken.
quelle
Zu den Grundlagen der Informatik gehören nicht nur die mathematischen Grundlagen (Mengenlehre, Logik, Graphentheorie, Algebra, Informationstheorie, algorithmische Informationstheorie usw.), sondern auch eine Reihe von Programmiersprachen, von denen mindestens eine vorhanden ist group - dh ein Imperativ (möglicherweise mit OOP, aber dieses Bit ist nicht obligatorisch), ein eifriges Functional, ein Lazy Functional, ein Logical, ein Concatenative oder Stack-based.
Mit dieser Basis können Sie in kürzester Zeit eine beliebige neue Sprache erlernen. Wenn einige Teile fehlen, kann dies zu schwerem Widerstand führen.
Und der beste Weg, die Sprache von innen nach außen zu lernen, ist die Implementierung eines Spielzeugcompilers oder -interpreters für eine signifikante Teilmenge davon (natürlich ohne eine Standardbibliothek - das ist der komplizierteste und langweiligste Teil einer Sprache).
quelle
Ich bin mir einig, dass es in gewissem Maße hilfreich sein wird, gute Grundlagen zu haben, und ich bin damit nicht einverstanden. Ein Punkt, der in den anderen Antworten fehlt, ist jedoch die Frage, wie man die Redewendungen der Sprache aufgreift, und ich denke, wenn man eine Sprache beherrscht, muss man sie idiomatisch schreiben.
Zum Beispiel können Sie Unmengen von vollständig korrektem C # schreiben, ohne die
using
Anweisung jemals zu verwenden , um Objekte automatisch zu entsorgen, aber in gut geschriebenem idiomatischem C # werden Sieusing {...}
viel sehen. Ich kenne keine none-.Net-Sprachen, die dieses Konstrukt haben (obwohl ich nur sehr wenige andere kenne und mein Java ziemlich rostig ist, damit ich mich irren könnte), also sogar einen Experten, der aus einer anderen Sprache kommt, die dies nicht hat Feature muss dieses Idiom sozusagen von Grund auf lernen.quelle
Es ist eine wahre Aussage für eine Definition von "ziemlich gut" und "leicht".
Je besser Sie die Grundlagen verstehen, desto einfacher ist der Übergang von einer Sprache in eine andere. Wenn Sie ein erfahrener Java-Programmierer sind, der solide Kenntnisse in objektorientierten Sprachen besitzt, sollten die grundlegenden Syntaxunterschiede zwischen Java und C # in ein oder zwei Wochen relativ einfach zu beherrschen sein. Es wird länger dauern, bis Sie verstanden haben, wie die Funktionalität in allen zugeordneten Bibliotheken von einer zur anderen zugeordnet ist, aber Sie werden wahrscheinlich in ein oder zwei Monaten einen angemessenen Überblick über die grundlegenden Bibliotheken haben. Dann müssen Sie herausfinden, in welchen Fällen der Standardansatz für ein Problem in Sprache A nicht direkt in den Standardansatz in Sprache B übersetzt werden kann (dh, Sie möchten LINQ in C # anstelle von JPA in Java verwenden) und sich damit vertraut machen genug in der neuen Sprache, dass Sie Denken Sie lieber daran, als in der alten Sprache zu denken und zu "übersetzen". Das wird wahrscheinlich drei bis sechs Monate dauern, abhängig davon, wie gut die Funktionen sind, die Sie normalerweise für Karten verwenden. Nach sechs Monaten wäre der erfahrene Java-Programmierer wahrscheinlich ein einigermaßen effizienter und kompetenter C # -Entwickler. Aber wie bei allem kann man Jahre damit verbringen, alle komplizierten Details zu lernen, verschiedene Bibliotheken und Add-Ons zu beherrschen, die nicht Teil der Sprache sind, sondern Teil des umgebenden Ökosystems, und sich im Allgemeinen als Entwickler in dieser Sprache zu verbessern. Der erfahrene Java-Programmierer wäre wahrscheinlich ein einigermaßen effizienter und kompetenter C # -Entwickler. Aber wie bei allem kann man Jahre damit verbringen, alle komplizierten Details zu lernen, verschiedene Bibliotheken und Add-Ons zu beherrschen, die nicht Teil der Sprache sind, sondern Teil des umgebenden Ökosystems, und sich im Allgemeinen als Entwickler in dieser Sprache zu verbessern. Der erfahrene Java-Programmierer wäre wahrscheinlich ein einigermaßen effizienter und kompetenter C # -Entwickler. Aber wie bei allem kann man Jahre damit verbringen, alle komplizierten Details zu lernen, verschiedene Bibliotheken und Add-Ons zu beherrschen, die nicht Teil der Sprache sind, sondern Teil des umgebenden Ökosystems, und sich im Allgemeinen als Entwickler in dieser Sprache zu verbessern.
quelle
Ich würde sagen, dass es völlig von der Begeisterung einer Person abhängt, die neue Sprache zu lernen. Wenn die Grundlagen gut sind und er verstehen kann, wie die neue Sprache etwas interpretiert, ist es ziemlich einfach, eine Sprache zu lernen.
Bestes Beispiel ist mein Selbst. Ich habe mit einigen Sprachen gearbeitet, obwohl ich die meiste Zeit in C # gearbeitet habe, aber ich habe meine Karriere von C aus begonnen und C ++, Java, VB, PHP, Skriptsprachen, Perl und so weiter gelernt. Überall in diesem Semester hatte ich nie das Gefühl, dass ich diese Sprache nicht lernen kann.
quelle
Ich fand es nie schwer, eine neue Programmiersprache zu lernen, im Gegenteil, es hat die meiste Zeit großen Spaß gemacht. Es gibt jedoch Sprachen, die ich angeschaut, aber nie verstanden habe, weil ich die Idee dahinter nicht verstehen konnte, wenn es überhaupt eine gab. Ein Beispiel ist COBOL, ich habe nie verstanden, was in welcher ABTEILUNG und ABSCHNITT und warum gehen musste. Andere Beispiele sind PHP und Groovy. Mit PHP habe ich versucht zu verstehen, warum man es überhaupt braucht, da es Perl gibt. Vielleicht kann jemand erklären. Mit Groovy verstehe ich auch nicht ein bisschen die Konzepte dahinter.
quelle
Es hängt alles ab.
Ich weiß, das ist oft die Antwort ...
Aber was bedeuten Grundlagen ? Viele Leute, die Grundlagen für ein Paradigma haben (wie OO), haben sie nicht für andere Paradigmen (wie funktional).
Viele Leute, die aus OO kommen und alle Entwurfsmuster kennen, haben möglicherweise keine Anhaltspunkte für funktionale Entwurfsmuster oder Dinge wie Listenverständnis, Currying, Schwanzrekursion, Abschlüsse ...
Also JA: Wenn Fundamentaldaten Fundamentaldaten aller Paradigmen bedeuten.
In diesem Fall ist das Problem, dass Javascript viele Paradigmen verwendet, wie prozedurale, OO und funktionale, und einen seltsamen Umfang hat, der von Java, C ++, ... ausgeht.
Die Grundlagen helfen in diesem Fall nicht weiter, aber wenn Sie hier mehr Grundlagen lernen und dennoch in eine andere Sprache konvertieren, wird dies möglicherweise immer einfacher, je mehr Muster Sie in Ihrer Toolbox haben.
quelle
Vergessen Sie nicht, dass die Kunst der Computerprogrammierung die Kunst ist, genau das zu bleiben, was Sie meinen. Jedes Mittel, um dem Computer mitzuteilen, was zu tun ist, von Java über Access zu Excel bis hin zu Visual Fortran, ist eine Programmiersprache.
Und manche Sprachen sind einfach schlecht. IMHO Excel und Basic sind schlechte Sprachen; Java und C ++ sind gute Sprachen. FileMaker Scripting ist eine schreckliche Sprache. HTML kann ausgezeichnet sein, wenn Sie nicht schlampig sind.
Kannst du es lernen? Wenn es gut ist, ja. Ob es schlecht ist, hängt von Ihrer Ekelschwelle ab. Dinge, die dich zum Kotzen bringen, sind schwer zu lernen.
Verpflichten Sie sich nicht jedes Mal, Sprache X in einem Projekt zu verwenden, es sei denn, Sie haben bereits Sprache X gesehen und damit gespielt.
quelle
Die Antwort lautet "Dies ist eine Tatsache, kein Mythos!"
Ich bin genau wie Sie, ich habe auch in verschiedenen Technologien gearbeitet, nämlich. Java, .NET und arbeitete vor kurzem mit iPhone, Android und Blackberry.
Das Netz ist voll von Ressourcen, gehen Sie einfach die Informationen durch, verstehen Sie das, implementieren Sie das und bewegen Sie sich weiter.
Tatsächlich "Technologie ist für Entwickler gemacht, nicht Entwickler sind für Technologien gemacht, Technologien ändern sich, Entwickler jedoch nicht".
:)
quelle