Ich weiß, dass Sie beim Erlernen einer Sprache einfach ein Buch kaufen, den Beispielen folgen und, wann immer möglich, die Übungen ausprobieren können. Aber was ich wirklich suche, ist, wie man die Sprache beherrscht, wenn man sie erst einmal gelernt hat.
Jetzt weiß ich, dass Erfahrung ein wichtiger Faktor ist, aber was ist mit dem Erlernen der Interna der Sprache, der zugrunde liegenden Struktur usw.
Es gibt Artikel, die sagen: Lies dieses Buch, lese dieses Buch, mache dieses Spiel und das Spiel. Für mich heißt das aber nicht, eine Sprache zu beherrschen. Ich möchte in der Lage sein, den Code anderer Leute zu lesen und zu verstehen, egal wie schwer das ist. Um zu verstehen, wann eine Funktion verwendet werden soll und wann eine andere usw. usw.
Die Liste könnte weiter und weiter gehen, aber ich glaube, ich habe den Punkt gemacht. :)
Nehmen Sie zum Schluss eine beliebige Sprache als Beispiel, obwohl dies am besten wäre, wenn C als Beispiel genommen würde.
quelle
Antworten:
Ich muss antworten: "Alle oben genannten." Die Leute streiten sich darüber, ob das Codieren eine Kunst, ein Handwerk, eine technische Disziplin oder ein Zweig der Mathematik ist, und ich denke, es ist am fairsten, zu sagen, dass es einige von jedem sind. Je mehr Techniken Sie einsetzen, um die Sprache zu beherrschen, desto besser. Hier ist eine unvollständige Liste:
Verwenden Sie die Sprache den ganzen Tag, jeden Tag. In der Regel bedeutet dies, dass Sie Vollzeit in der Sprache beschäftigt sind.
Lesen Sie alles über die Sprache. Insbesondere "Best Practices" und Redewendungen.
Treten Sie einer Benutzergruppe bei, um mit anderen über die Sprache und deren Verwendung zu sprechen.
Arbeite mit dem Code anderer Leute! Es gibt keinen schnelleren Weg, um zu lernen, was man nicht in einer Sprache tun soll, als nach jemandem aufzuräumen, der etwas Schreckliches getan hat.
Unterstützen Sie den Code, den Sie schreiben - jeder Fehler wird zu einer Tour Ihrer schlimmsten Entscheidungen!
Studiere Informatik und Sprachen im Allgemeinen
Lerne eine ganz andere Sprache. Ein großes Kompliment an C wäre eine funktionale Sprache wie Lisp. Dies wird die Art und Weise, wie Sie über Ihre prozedurale Sprache denken, auf den Kopf stellen.
Erfahren Sie, wie Sie die für diese Sprache verfügbaren Frameworks und APIs verwenden.
Nehmen Sie sich Zeit, um selbst mit der Sprache zu experimentieren. SICP ist nicht auf C anwendbar, aber die Einstellung, eine Sprache durch Testen ihrer Grenzen zu lernen, ist sehr produktiv.
Lesen Sie die Geschichte der Sprache, um zu erfahren, warum sie so gemacht wurde, wie sie ist.
Nehmen Sie an Konferenzen teil, um die Sprache der Autoren zu hören oder um zu erfahren, was Branchenführer mit der Sprache tun.
Nehmen Sie an einem Kurs in der Sprache teil.
Lehren Sie die Sprache anderen (Dank an Bryan Oakley )
Fazit: Tun Sie alles, was Sie sich vorstellen können. Es gibt keine Möglichkeit, alles über die meisten Sprachen zu wissen. Jede Lerntechnik, die Sie anwenden, bringt eine zusätzliche Perspektive in Ihr Verständnis ein.
quelle
Every technique you use to learn brings and additional perspective to your understanding.
10.000 Übungsstunden sind das, was es braucht.
Lesen Sie "Programmieren lernen in zehn Jahren"
Wichtige Punkte von oben:
quelle
Betrachten Sie sich NIEMALS als den Meister der ganzen Sprache, bis Sie eine bessere Sprache implementiert haben. Das heißt, um zu lernen, wie eine bestimmte Sprache von unten funktioniert, erhalten Sie ein Buch, das Ihnen die Compiler- / Interpreter-Konzepte der Sprache beibringt. Zum Beispiel:
C: Das LCC-Compiler-Buch
C ++: Das Design und die Entwicklung von C ++ (und dann bauen Sie Ihren eigenen C ++ - Compiler auf oder verstehen Sie zumindest die Implementierung eines solchen Compilers unter Verwendung des GNU C ++ - Compiler-Codes)
Java: Holen Sie sich "Inside JVM" und holen Sie sich den Java-Quellcode. Der .C-Code von "java" ist ebenfalls hilfreich
Python: CPython-Implementierung.
ObjectiveC: Fast jedes Material von Apple über die Interna von ObjC Runtime Env und Compiler-Quellcodes wird Ihnen helfen.
Lisp: SICP Book (lehrt Sie Schema und einen grundlegenden Interpreter-Compiler für Lisp-ähnliche Sprache): Lisp in Small Pieces (ein weiteres gutes Buch).
quelle
Versuchen Sie, die Sprache für etwas zu verwenden, für das sie nicht vorgesehen ist. Schreiben Sie einen Gerätetreiber in Python oder eine Matrix-Manipulationsbibliothek in COBOL. Ich denke, eine der besten Möglichkeiten, eine Sprache zu beherrschen, besteht darin, sie wirklich voranzutreiben und zu versuchen, ihre Stärken und Schwächen zu überwinden.
quelle
Ich werde es dir leicht machen. Du wirst niemals eine Sprache beherrschen. Zeitraum. Wenn Sie denken, dass Sie haben, dann haben Sie ganz offensichtlich nicht. Es gibt keinen Berggipfel, den Sie plötzlich erreichen und sagen: "Nun, jetzt habe ich diese Sprache vollständig beherrscht. Was jetzt?" Selbst erfahrene Programmierer, die jahrzehntelang mit derselben Sprache gearbeitet haben, werden Ihnen sagen, dass sie manchmal immer noch auf neue Ideen, Prozesse, Praktiken usw. stoßen. Das wahre Ziel ist es, Ihr konzeptuelles Verständnis einer oder mehrerer Sprachen zu meistern. Die Fähigkeit, neue Konzepte zu erlernen und die Geschwindigkeit, mit der Sie neue oder geänderte Funktionen in die Sprache übernehmen können, ist weitaus wichtiger als die genaue Kenntnis jedes Schlüsselworts und jeder Syntax. Hören Sie auf, sich Gedanken über die Beherrschung einer Sprache zu machen, und sorgen Sie sich lediglich um die kontinuierliche Verbesserung und Verbesserung der Qualität und Effizienz Ihres Codes.
quelle
The true goal is to master your conceptual understanding of a language or languages.
Genau. Das habe ich wirklich gemeint.Sie kennen bereits die Antwort darauf
Es kommt auf harte Arbeit und Entschlossenheit an, und bei allem, was Sie vielleicht nie erreichen werden.
Überlegen Sie, woher wir den Begriff haben - um ein Meister zu werden, mussten Sie ein Lehrling und dann ein Geselle sein, und nur bei ihnen könnten Sie die Chance haben, Meister zu werden. Auf dem Weg dorthin würden Sie unterrichtet und Sie würden üben und Sie würden andere an ihrem Handwerk beobachten und befragen und (hoffentlich) von ihnen lernen.
Es gibt keine Wundermittel ...
quelle
Beginnen Sie damit, SDLC (auch bekannt als Software Development Life-Cycle) zu lesen und zu verstehen . Es ist ein iterativer Prozess, der Selbstverbesserung, Lernen,
**practicing, practicing...**
Das würde Ihnen Horizonte eröffnen, in welchen Bereichen Sie lernen oder sich verbessern müssen. Es gibt mehrere Kernbücher zur Softwareentwicklung, die Sie auch sehr nützlich finden, wenn Sie einige Anwendungen selbst erstellen.
Wenn Sie sich erst einmal mit einer OOP-Sprache vertraut fühlen , können Sie anfangen, Designmuster zu lernen , und Head First Design-Muster sind ein wirklich gutes Buch, das Sie in Betracht ziehen sollten. Ich liebe dieses Buch.
quelle
Es gibt keinen Ersatz für Erfahrung. Um etwas zu meistern, muss man es für viele verschiedene Dinge tun / verwenden.
Verwenden Sie diese Sprache also für Übungen (wie Project Euler ) und persönliche Projekte, Dinge, die Sie tatsächlich benötigen oder die Sie für interessant halten. Schreiben Sie ein Spiel, schreiben Sie eine Webapp, schreiben Sie einen Parser, was immer Sie wollen. Versuchen Sie bei jedem Schritt zu verstehen, was Sie tun, anstatt nur Code zusammenzufügen oder Anweisungen zu befolgen.
Das können Sie sofort tun, wenn Sie die grundlegende Syntax verstanden haben. Nehmen Sie sich einfach Code und nehmen Sie sich die Zeit, um es im Detail herauszufinden. Suchen Sie nach Dingen, die Sie nicht verstehen, oder stellen Sie bestimmte Fragen zu Orten wie Stack Overflow .
quelle
Erfahren Sie mehr über Architektur: Wie organisieren Sie Ihre Projekte, wie ist ihre Struktur? Lass sie nicht einfach zufällig wachsen.
Lernen Sie auf der mittleren Ebene verschiedene Techniken und Paradigmen. Je vielfältiger Ihr Repertoire ist, desto mehr Macht haben Sie. Wenn Sie nur Java, Python und Ruby studiert haben, waren Sie nur einem kleinen Teil des Programmierraums ausgesetzt. Lernen Sie imperative und funktionale Programmierung, lernen Sie Prolog und J. Die Idee ist nicht, hundert Sprachen zu "beherrschen", sondern verschiedene Wege zu erlernen, um dieselben Probleme zu lösen.
Auf der niedrigen Ebene des Problems ist eine Sache, die Ihnen helfen könnte, ein besserer Programmierer zu sein (in der Tat besser in dem, was Sie tun), ein gutes mentales Modell der Plattform zu haben. Sie können beispielsweise lernen, wie C-Steuerelementstrukturen funktionieren und die gängigsten Bibliotheken kennen. Wenn Sie jedoch kein mentales Modell für die Funktionsweise von Zeigern und Speicher haben, haben Sie Probleme mit mäßig komplexen Ausdrücken.
quelle
Darf ich ein paar Vorschläge machen?
Erstens, wenn Sie einen Mentor finden, der Ihre Verwendung der Sprache mit Ihnen bespricht, die besten Tipps und Tricks erhält und antwortet, wenn eine Technik besser ist als eine andere.
Zweitens, üben Sie so viel wie möglich und probieren Sie die Sprache maximal aus! Früher arbeitete ich in einem Team, das jeden Tag (aus Spaß) ein Verb oder ein anderes Stück der Programmiersprache aus dem Handbuch auswählte. Es war ein Zeichen der Ehre, wenn Sie es an diesem Tag in Ihre Kodierung einarbeiten konnten. Dies bedeutete, dass das gesamte Programmierteam sich den (manchmal) undurchsichtigen Begriff ansehen und verstehen musste, um ihn effektiv zu verstehen und zu verwenden. An manchen Tagen sind wir gescheitert, aber dieses Team hat Spaß gemacht und war technisch wirklich gut aufgestellt !!
quelle
Programmiersprachen spiegeln die Ideen hinter den Programmierparadigmen wider, die für die allgemeine Softwareentwicklung oder für die Entwicklung von Spezialsoftware entwickelt wurden. Beispielsweise stellt eine Programmiersprache wie Java das objektorientierte Programmparadigma dar, aber AspectJ (eine Erweiterung von Java) wird verwendet, um gemäß aspektorientierter Programmierung zu programmieren.
In Anbetracht dieser kurzen Einführung wäre es nicht sehr hilfreich, ein Buch zu kaufen und zu lesen, um eine Sprache wirklich zu beherrschen. Sie müssen die Umgebung verstehen, in der Sie mit der gewünschten Sprache programmieren, das Paradigma kennen lernen und vor allem eine sinnvolle Anwendung mit der Sprache erstellen können. Das Erstellen einer kleinen Anwendung, die Ihnen einen Einblick in die verschiedenen von der Sprache bereitgestellten Tools gibt, ist ein sehr hilfreicher Lernansatz.
Ich habe Leute gesehen, die aus der reinen C-Community kamen, ohne etwas über Objektorientierung und Schwierigkeiten beim Erlernen von Java oder Objective-C zu lernen. Ich habe auch Leute gesehen, die Schwierigkeiten mit der Programmierung von Benutzeroberflächen hatten, wenn sie nicht wirklich mit den Elementen der Benutzeroberfläche, der ereignisgesteuerten Programmierung usw. vertraut waren.
Ich hoffe das hilft!
quelle
Ich würde zwei Elemente zu Glen's Liste hinzufügen
quelle
Aufbauend auf dem, was @TMN gesagt hat. Ich habe sehr erfolgreich Sprachen gelernt, indem ich das gleiche Programm in einer anderen Sprache geschrieben habe.
Schreiben Sie beispielsweise ein Programm, das eine CSV-Datei einliest, den Text analysiert und dann mit den Spalten in umgekehrter Reihenfolge in eine zweite CSV-Datei zurückschreibt.
So was,
zu
Dadurch erhalten Sie ein grundlegendes Verständnis oder die Sprache. Dann sehen Sie, was Sie sonst noch tun können. Ermöglichen Sie möglicherweise die Ersetzung von Werten oder das Neuanordnen oder Lesen von der Befehlszeile. Machen Sie es so komplex wie Sie wollen.
Auch ich denke, was @ GlenPeterson sagte,
Ist eine tolle Idee. Ich würde eine Sprache wie Haskell vorschlagen, da Sie in den neuesten Versionen alle vier Programmierparadigmen von OO verwenden können, ob prozedural, logisch oder funktional. Obwohl es sich tatsächlich um eine funktionierende Sprache handelt, können Sie mit einigem Aufwand die anderen Paradigmen umsetzen, die eine gute Lernerfahrung wären.
Tolle Sprache zum Herumspielen.
quelle
Sie können keine Sprache aus dem Buch lernen. Alles was du brauchst ist üben und üben. Denken Sie nicht, dass Sie eine Sprache aus diesem bestimmten Buch oder dieser bestimmten Quelle lernen können. Denken Sie einfach, dass die Programmiersprache die gleiche ist wie die menschliche Sprache. Sie können nicht einfach Englisch oder Französisch lernen, indem Sie ein bestimmtes Buch lesen Tagesleben. Code von Grund auf neu, erweitern Sie seine Funktionalität und versuchen Sie, etwas zu erstellen, das Sie ein wenig zufrieden stellt. Und wenn Sie daran denken, eine Sprache als Ganzsprache zu beherrschen und jedes Element der Programmiersprache in der praktischen Codierung zu verwenden, KÖNNEN SIE NICHT. Oder auch wenn Sie können, könnte es 10-15 Jahre dauern.
quelle