Wann kann ich sagen, dass ich eine Sprache „gelernt“ habe?

67

In meinen wenigen Jahren als Programmierer habe ich mit allem gespielt, von Ruby bis C ++. Ich habe alles getan, angefangen beim Erlernen der grundlegenden Syntax (Ruby) bis hin zum Abschluss mehrerer wichtiger (für mich) Projekte, die meine Fähigkeiten in Bezug auf die Sprache erweitert haben. Wann kann ich angesichts dieser Vielfalt (und der Tatsache, dass das Lernen einer Sprache wirklich nie aufhört) sagen, dass ich eine Sprache kenne (oder gelernt habe)?

SomeKittens
quelle
12
Ich denke, das gesuchte Wort ist "Beherrschen" einer Sprache, "Lernen" ist in diesem Zusammenhang etwas seltsam.
Pieter B
7
"Wörter sind für die Bedeutung: Wenn Sie die Bedeutung haben, können Sie die Wörter vergessen." - Zhuangzi
jfrankcarr
9
Wenn Sie diese Frage nicht stellen müssen, haben Sie gelernt, was Sie wissen müssen ...
1
@ JarrodRoberson Ist das Zhuangzi, der das auch gesagt hat?
Jadkik94
2
Laut LinkedIn gibt es nur einen sehr geringen Balken, um eine Programmiersprache in Ihren Fähigkeiten-Lebenslauf aufzunehmen ... Laut meinen LinkedIn-Nutzern, die Java-Code schon einmal gesehen haben, ist es anscheinend angenehm, ihn in ihren Fähigkeiten-Abschnitten aufzulisten.
Chris Dale

Antworten:

70

Wann können Sie sagen, dass Sie eine Sprache wie Englisch oder Französisch "gelernt" haben? Ich denke, die meisten Leute würden akzeptieren, dass Sie eine Sprache gelernt haben, wenn Sie sie zur Kommunikation verwenden können. Sie müssen nicht jedes Wort kennen oder jedes Idiom verstehen, aber Sie sollten den größten Teil der (eher kleinen) Teilmenge der Sprache kennen, die die Leute im täglichen Gespräch verwenden. Wenn Sie eine Sprache in diesem Ausmaß "gelernt" haben, können Sie weiterhin mehr lernen, wenn Sie die Sprache täglich verwenden und sich immer mehr davon aussetzen. Wenn Sie sterben, werden Sie immer noch nicht alles wissen, was Sie über die Sprache wissen müssen, aber niemand wird sagen, dass Sie die Sprache nie "gelernt" haben.

So ist es, denke ich, mit Computersprachen. Sie können sagen, dass Sie eine Sprache wie C ++ oder Ruby "kennen", wenn Sie darin nützliche Programme schreiben können. Wenn Sie den Grad Ihrer Sprachkenntnisse quantifizieren müssen, verwenden Sie dieselben Begriffe wie für eine menschliche Sprache. Sagen Sie „Ich weiß ein wenig C ++“ oder „Ich weiß , Konversations C ++“ oder „Ich bin fließend in C ++“ bedeuten , dass Sie gerade genug kennen zu kratzen durch, genug, um nützliche Dinge zu erledigen, oder dass Sie ein Experte, beziehungsweise.

Caleb
quelle
15
Die Begriffe " Konversation" und " Fließend" sind eher subjektiv, und obwohl sie der natürlichen Sprache angemessen sind, ist es schwierig zu verstehen, was sie bedeuten, wenn sie auf eine Computersprache angewendet werden. Obwohl immer noch subjektiv, funktionieren funktionale und idomatische besser. Funktional bedeutet, dass Sie die Syntax gut genug kennen, um nützliche Konstrukte zu schreiben, und dass Sie mit idiomatischen Kenntnissen nicht nur in der Sprache schreiben können, sondern sie auch gut genug kennen, um die Idiome der Sprache zu verwenden, z. B. usingin C #. oder b, a = a, bund Generatoren in Python. Andernfalls +1.
Mark Booth
13
@MarkBooth Jede Beschreibung, die kurz vor dem Ergebnis einer Prüfung steht, ist etwas subjektiv. Es geht darum, die Vertrautheit der meisten Menschen mit den Kenntnissen der menschlichen Sprachen als groben Leitfaden für die Kenntnis einer Computersprache zu verwenden und dies auf eine freundliche Art und Weise zu tun, die zu weiteren Untersuchungen einlädt. Conversational C ++ ist eine Abkürzung für "Ich bin mit den Grundlagen vertraut, aber Sie müssen mir möglicherweise bei fortgeschrittenem, obskurem oder kniffligem Code helfen."
Caleb
3
Obwohl ich denke, dass Sie größtenteils Recht haben, gehen viele Menschen zu Unrecht davon aus, dass sie eine natürliche Sprache gelernt haben, obwohl sie immer noch ein miserables Niveau haben. Dies gilt auch für Menschen, die behaupten, Programmiersprachen gelernt zu haben.
Haylem
Ich denke, Ihre Antwort ist perfekt. Sie zeigt sogar, inwieweit es unmöglich ist, Sprachkenntnisse zu quantifizieren. Obwohl fließend bedeutet, dass Sie über fast alles sprechen können, mit so vielen Erklärungen, wie ein Muttersprachler benötigen würde, wird damit nicht die Tatsache angesprochen, dass die meisten Muttersprachler nicht über ein Zehntel der Sprachkenntnisse verfügen, die gute alte Schriftsteller haben (nein , nicht Harry Potter oder Dan Brown, echt altmodisch (schwer zu lesendes Zeug). Wie würden Sie das angehen, obwohl sich eigentlich niemand darum gekümmert hat, es für Sprachen anzusprechen? und wann wirkt es sich tatsächlich stark auf die Produktivität bei der Programmierung aus?
Morg.
1
@Morg. Was für ein Müll. Beim Programmieren geht es ebenso um die Kommunikation mit zukünftigen Programmierern (einschließlich Ihnen selbst) wie darum, dem Computer zu sagen, was zu tun ist. Sicher, einfaches Schreiben eines Codes muss nicht unbedingt gut kommuniziert werden, aber in der realen Welt ist es weitaus wichtiger , Ihre Absichten zukünftigen Betreuern des Codes klar zu machen, als den Computer dazu zu bringen, das Richtige zu tun. Auf jeden Fall dienen diese Kommentare nicht mehr dazu, diese Antwort zu verbessern. Daher würde ich vorschlagen, dass wir sie in den Software Engineering Chat übernehmen, wenn Sie darüber weiter diskutieren möchten.
Mark Booth
25

Es kommt darauf an, wer fragt

Die Person, die mutmaßlich fragt, hat eine gewisse Vorstellung davon, welche Fähigkeiten von jemandem erwartet werden, der sagt, er habe "eine Sprache gelernt".

Grundsätzlich bin ich auf zwei archetypische Skalen gestoßen, nach denen die Leute die Antwort auf die Frage "Hast du X gelernt?"

Für die meisten Nerds ist es eine Trickfrage, Poser auszusortieren. Dies wird bereits durch die anderen Antworten auf Ihre Frage demonstriert;). Wenn Sie sagen, dass Sie es gelernt haben, können Sie den Umfang der Aufgabe, die implizit "Perfektion" ist, nicht erkennen. Schlimmer noch: Sie scheitern an Demut.

Für die meisten Bosse "haben Sie es gelernt", wenn Sie ihre Probleme lösen können , ein Kriterium, das häufig bereits erfüllt ist, wenn Ihr Code kompiliert wird. Die bescheidene Beantwortung seiner Frage führt dazu, dass er die Aufgabe einem Poser zuweist, der möglicherweise auch ein Verwandter ist.

Also, was ist dein Publikum?

keppla
quelle
4
In Interviews weißt du es, wenn du es weißt. Am Arbeitsplatz wissen Sie es, wenn Google es weiß.
Asfallows
3
In Interviews ist es "Ich weiß es", wenn der Interviewer eine Krawatte trägt, und es ist "Bitte definieren", um es zu wissen ", wenn er es nicht tut;). Um fair zu sein, fragen die meisten Interviewer, ob man "Erfahrung mit" hat, auf die ich eher geneigt bin, mit "Ja" zu antworten
keppla
18

Ich denke, die Leute konzentrieren sich auf die Endgültigkeit des Wortes "gelernt". Perfekt zu sein bedeutet, dass Sie mit dem Lernen fertig sind. Und wie jeder bemerkt hat, sind Programmiersprachen Lebewesen wie gesprochene Sprachen. Zum Beispiel würde sich jemand, der C # 2 vollständig beherrscht, C # 3 mit LINQ, Lambdas, varSchlüsselwörtern, Objekt- / Auflistungsinitialisierern und Erweiterungsmethoden ansehen und feststellen, dass sich viel von dem geändert hat, was er für die vorherige Version gelernt hat. Das gleiche geschieht mit C # 4 mit await, asyncSchlüsselwort und anderen neuen Sprachkonstrukten.

Und wir reden hier nur über Syntax. Wir vergessen, dass die meisten Sprachen mit einem Framework gepaart sind . C # hat das .NET Framework, Java hat sein eigenes Framework, ebenso wie Ruby, C ++, PHP und PERL. Stellen Sie sich den Rahmen für eine Sprache als das Vokabular vor und die Sprache selbst ist nur Syntax. Wenn Sie die Sprache kennen, wissen Sie, wie man einen Satz in der Sprache schreibt. Wenn Sie den Rahmen kennen, können Sie sich gut in der Sprache ausdrücken. Sobald Sie die Syntax und den Wortschatz kennen, müssen Sie die Redewendungen lernen, damit Sie als "Muttersprachler" Code schreiben können.

Ich würde sagen, es gibt verschiedene Lernstufen.

  1. Hallo Welt (Sie können die meisten rudimentären Programme schreiben.)
  2. Kompetent (Sie können grundlegende Programme schreiben, müssen jedoch regelmäßig die Online-Hilfe konsultieren)
  3. Fließend (Sie können fortgeschrittene Programme schreiben, wobei einige Referenzen erforderlich sind).
  4. Muttersprachler (Sie können fortgeschrittene Programme mit minimaler Online-Hilfe schreiben, Ihr Code ist nicht von dem Code eines anderen Muttersprachlers zu unterscheiden).
Michael Brown
quelle
3
Nitpick: awaitstammt aus C # 5, das wichtigste neue Ding in C # 4 war dynamic.
Svick
Sie haben Recht ... Ich verliere immer wieder den Überblick, welche Version von C # mit welcher .NET-Version kompatibel ist
Michael Brown
7

Man kann selten sagen, dass man eine Sprache gelernt hat. Das bedeutet, dass Sie damit fertig sind, was ... dumm ist.

Zu sagen, Sie wissen, dass eine Sprache in Ordnung ist, wenn Sie Code schreiben können, der nicht eklatant Redewendungen in der Sprache bricht (möglicherweise nach einer Woche des Entrostens des Wissens), ohne sich auf eine Syntaxreferenz zu beziehen.

Telastyn
quelle
2
Die Redewendungen ändern sich, die Stile variieren von Ort zu Ort und die Sprachen ändern sich im Laufe der Zeit. Wenn Sie nicht sagen können, dass Sie eine Sprache wie C ++ "kennen" oder "gelernt" haben, bis Sie damit fertig sind, dann gibt es in der Tat nur sehr wenige Menschen, die behaupten können, C ++ gelernt zu haben.
Caleb
1
@Caleb genau.
Michael Brown
3
Wenn du so lernst, dann kennst du nicht einmal deine Muttersprache, was (zumindest für die meisten Leute) auch
dumm ist
@Caleb, schlimmer als das, viele Teile von c ++ sind besser, wenn sie ignoriert werden, wie Carmack und Torvalds beide betonten - also .., alle von cpp gelernt zu haben, ist nicht gerade vorteilhaft.
Morg.
3

Dies ist eher ein meinungsbasierter Faktor. In allen technischen Begriffen bedeutet "Gelernt", dass Sie über vollständige Kenntnisse der Sprache verfügen, wie Sie es von ALLEN anderen erwarten.

In der Welt des Programmierens geht es meiner Meinung nach mehr darum, ob Sie fließend in der Sprache programmieren können, um ein Ziel / eine Aufgabe zu erfüllen. Es bedeutet wahrscheinlich auch, dass Sie mit der Sprache vertraut sind. Sicher, Sie könnten nach Jahren des Studiums rausgehen und einen Abschluss machen, aber das ist nur zu bemerken? Sie definieren, wann Sie sagen können, dass Sie eine Sprache gelernt haben.

Alec
quelle
2

Wenn Sie anfangen, seine Mängel zu bemerken. Sobald Sie anfangen, eine Sprache zu lernen, sind Sie in der Regel noch damit beschäftigt, Dinge zu lernen oder sind viel damit beschäftigt, um zu bemerken, wo sie fehlschlägt (dies gilt natürlich nicht, wenn Sie es aus negativer Sicht lernen, nur um zu sehen, wie schlimmer es ist) ist im Vergleich zu Ihrer bisherigen Lieblingssprache). Ich würde sagen, dass Sie eine Sprache erst wirklich beherrschen, wenn Sie genau wissen, in welchen Bereichen sie versagt.

Ivan Voras
quelle
Dem kann ich nicht zustimmen. Es kann sein, dass Sie für die erste oder zweite Sprache, die Sie lernen, einfach nicht wissen, wonach Sie suchen sollen, und dass selbst die schlimmsten Designfehler nicht von der richtigen Vorgehensweise zu unterscheiden sind. Sobald Sie ein paar Sprachen gelernt haben, sollten Sie in der Lage sein, Sprachfehler zu erkennen, sobald Sie anfangen, eine neue Sprache zu lernen. Aber für eine Weile in Ihrer Entwicklung werden Sie fälschlicherweise "anders" mit "falsch" gleichsetzen. Solange Sie nicht einige Sprachen jedes Haupttyps (prozedural, funktional, deklarativ ...) gelernt haben , sind Ihre sofortigen Urteile verdächtig.
Warren Young
2

Meine persönliche Antwort darauf lautet:

  1. Ich kenne die Grundlagen, um ein einfaches Produktionsprogramm zu schreiben.
  2. Ich habe mindestens 3 Stunden in Folge damit verbracht, ein Problem zu lösen, das einfach schien, aber nicht einfach war.

Von da an würde ich es nicht als Lernen bezeichnen, sondern als Beherrschung.

dukeofgaming
quelle
1

Zu dem Zeitpunkt, an dem Ihre Anwendung oder Komponente E-Mails lesen kann, z. B. das Zawinski-Gesetz , in dem Folgendes festgelegt ist:

„Jedes Programm versucht zu erweitern, bis es E-Mails lesen kann. Diese Programme, die sich nicht so gut erweitern lassen, werden durch solche ersetzt, die es können. “Von Jamie Zawinski (der das Gesetz der Softwareentwicklung nannte) geprägt, um seine Überzeugung zum Ausdruck zu bringen, dass alle wirklich nützlichen Programme unter dem Druck stehen, sich zu Toolkits und Anwendungsplattformen zu entwickeln (die Mailer-Sache, sagt er, ist nur ein Nebeneffekt davon).

Dies wurde aktualisiert, als RSS zu "... kann RSS-Feeds lesen" wurde und in diesen Tagen möglicherweise zu "... kann Twitter-Feeds lesen" aktualisiert wurde. ;-)

dodgy_coder
quelle
0

Ich denke, Sie haben eine Sprache gelernt, wenn Sie sie nicht sehen. Sie sehen nicht die für Zyklen und Datenzugriffe, sondern den Workflow des Algorithmus.

Sie spielen keine Streiche mit Parameterübergabe und Array-Verarbeitung, magischen Makros. Sie verstehen Ihren Code nicht als Selbstmarketing-Material, das Sie Ihren Freunden und Lehrern zeigen, sondern als Ausdruck Ihres Verständnisses für ein Problem und Ihres Willens für den am besten lesbaren Weg zum Computer.

Sie haben Gewohnheiten, die Ihnen helfen, viele Fehler zu vermeiden, indem Sie sie einfach befolgen, wie: Verwenden Sie {} Codeblöcke und () in Ausdrücken, auch wenn Sie absolut sicher sind, dass "es nur eine Zeile sein wird" oder "Ich bin kein Narr und weiß Operator Rangfolge ".

Sie hören auf zu zählen, wie viele Klassen, Muster und Framework-APIs Sie kennen. Dafür gibt es Intellisense, die Referenzen und Tutorials sowie Google. Wenn Sie sich ein Problem ansehen, wissen Sie sofort, welche Teile es aufteilen kann und mit welchen Tools und Algorithmen Sie sie lösen.

Was Sie tun, funktioniert , ist elegant und klein . Sie genießen das Programmieren und finden Ihre Fehler leicht. Ja, Meister machen auch Fehler, weil sie Menschen sind - aber sie finden sie schnell, weil ihre Codestruktur sie an die richtige Stelle führt.

Und schließlich erkennen Sie: Sie haben gelernt, Probleme zu denken, zu analysieren und zu lösen; Im Vergleich dazu ist die eigentliche Sprache zweitrangig, lediglich die aktuelle Box mit Regeln und Tools.

Lorand Kedves
quelle