Jede Programmiersprache kann leicht beherrscht werden, wenn die Grundlagen der Programmierung gut sind. Eine Tatsache oder ein Mythos? [geschlossen]

33

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?

Vamsi Emani
quelle
1
Ersetzen Sie "Any" durch "Most".
4
Was macht eine Sprache "agil"? Ich dachte , agile eine Entwicklung war Prozess .
Osterwal
17
Leicht gemeistert? Leicht gelernt? Ja. Beherrschung setzt ein Maß an Fachwissen voraus, das jahrelangen Gebrauch in jeder Sprache erfordert. Zu lernen, wie man eine Sprache verwendet, sobald die Grundlagen vorhanden sind, sollte eine Selbstverständlichkeit sein.
Joel Etherton
1
Nein, das gilt nur für ähnliche Sprachen. Wenn Sie Java kennen, lernen Sie nicht Haskell, sondern C ++ und so weiter. Wenn Sie PHP kennen, können Sie zwar Assembler nicht lernen, aber Ruby.
Iveqy

Antworten:

46

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.

Brad
quelle
18
Ich wage zu sagen, dass es zwei Jahre dauert. Das erste Jahr sollte Sie relativ kompetent verlassen, das zweite Jahr sollte Sie relativ effizient verlassen.
Tim Post
4
Ich hatte diese Erfahrung vor vielen Jahren (nachdem ich ungefähr ein Dutzend Sprachen gelernt hatte) ... Ich musste in Ada arbeiten. Das Schreiben von Code in Ada dauerte einige Tage. Es dauerte ein Jahr, um wirklich in den Kopfraum der Entwickler von Sprach- / Laufzeitsystemen einzusteigen und guten Code zu schreiben.
quick_now
1
Um ehrlich zu sein, habe ich Java auch so gelernt. Ich bin derzeit bei der 1-Jahres-Marke, und ich würde sagen, dass "relativ kompetent" genau ist.
Brad
1
Der Grund ist, dass Ihre Fundamentaldaten, vielleicht sogar stark, einfach nicht breit sind. Wenn Sie von anderen Sprachen gewusst hätten, mit Schließungen, Listenverständnis, anderen Datenstrukturen und anderen Gültigkeitsregeln vor jscript, hätten Sie möglicherweise weniger Probleme gehabt.
Peter
Ich hatte eine ähnliche Erfahrung mit VB.net, bis ich den Code las, den mein Chef (mit mehrjähriger VB-Erfahrung) geschrieben hatte ... oh je. Code riecht wie doppelter Code, der Sprachen transzendiert!
DisgruntledGoat
28

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

  • Wenn Sie zu einem neuen, anderen Paradigma wechseln, ist es weniger hilfreich, eine Sprache des ersten Paradigmas zu kennen, als eine Sprache in derselben Familie zu lernen. In der Tat müssen Sie, abhängig vom Unterschied zwischen den beiden, möglicherweise erst einige Dinge verlernen, bevor Sie vorankommen und das neue Paradigma wirklich in Angriff nehmen können.

--- bearbeiteter letzter Abschnitt basierend auf Kommentaren ---

Tatsache...

  • Wenn Sie ein erstes Paradigma kennen, können Sie das nächste lernen ...

aber

Mythos

  • Sei nicht übermütig, es kann dich genauso verlangsamen oder für das dritte Paradigma überhaupt keine Hilfe sein.
Newtopian
quelle
alles gut bis auf den letzten. anekdotisch war es überhaupt keine Hilfe, eine prozedurale Programmiersprache wie C zu kennen, wenn man versuchte, eine logische Sprache wie Prolog zu lernen, und in meinem Fall stellte sich dies in den Weg, zB "F: Wie codiere ich eine Schleife in Prolog?" ==> "A: das tust du nicht".
Steven A. Lowe
2
Die anekdotischen Beweise, die ich hier und da gehört habe, deuten darauf hin, dass Sie einen Programmier-Neuling in Scheme ziemlich einfach starten können, aber dass es viel schwieriger ist, wenn sie zuerst in BASIC oder C # oder so etwas programmiert haben.
David Thornley
1
@Steven & David: Da war ich mir nicht ganz sicher. Ich bin vom prozeduralen zum funktionalen Objekt übergegangen, habe es aber noch nicht mit der Logikfamilie versucht. Ich fand es mit der Zeit und Erfahrung einfacher, aber ich wagte es nicht, es zu verallgemeinern. Ich werde die Antwort basierend auf Ihrem Kommentar ändern.
Newtopian
14

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

Steven A. Lowe
quelle
1
Genau. Es gibt einige Sprachen, die einer völlig anderen Philosophie folgen. So ist es nicht trivial, zum Beispiel von einer imperativen Sprache wie C zu einer logischen Programmiersprache wie Prolog zu wechseln, ohne sich etwas Mühe zu geben.
Sakisk
4

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.

Spoike
quelle
Dem stimme ich voll und ganz zu. Das Erlernen der Best Practices / apis / popular libraries / etc dauert sehr viel länger als das Erlernen der Syntaktik von Programmiersprachen. Dies war die eigentliche Herausforderung und kann nur durch einige Zeit der Arbeit mit der Sprache und ihren Funktionen erlangt werden Ökosystem.
Jviotti
3

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).

SK-Logik
quelle
2

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 usingAnweisung jemals zu verwenden , um Objekte automatisch zu entsorgen, aber in gut geschriebenem idiomatischem C # werden Sie using {...}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.

Steve
quelle
Es gibt ähnliche, in Lisp und Scheme weit verbreitete Redewendungen, daher ist es für jemanden, der aus diesem Hintergrund stammt, nichts Neues und man wird diese Funktion absichtlich in einer neuen Sprache suchen.
SK-logic
Ja, aber wenn Sie beispielsweise von Pascal oder ADA kommen, ist dies eine völlig neue Sprache, auf die Sie erst achten sollten, wenn Sie sie gesehen haben.
Steve
Das ist genau der Grund, warum ich glaube, dass man mindestens eine Sprache aus jeder Gruppe beherrschen muss, um in der Lage zu sein, jede neue Sprache zu lernen und Werkzeuge mit Bedacht auszuwählen.
SK-logic
@ SK-logic: Als ich Dinge wie "using" und "try ... finally" sah, hatte ich kein Problem damit, sie als das grobe Äquivalent des Common Lisp "unwind-protect" zu verstehen. Solche Sprachmerkmale werden jedoch möglicherweise nicht in einer bestimmten Auswahl von Sprachen mit mehreren Paradigmen angezeigt.
David Thornley
1

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.

Justin Cave
quelle
1

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.

JPReddy
quelle
3
Und die Sprachen, die Sie beschrieben haben, sind einander mehr oder weniger ähnlich. Versuchen Sie für eine Herausforderung, Haskell, Schema, Forth oder Prolog zu lernen.
David Thornley
1

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.

Ingo
quelle
1

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.

Peter
quelle
0

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.

Andy Canfield
quelle
0

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".

:)

neugierig
quelle