Wie kann ich sicherstellen, dass ich das Programmieren lerne, anstatt nur die Details einer Sprache zu lernen? [geschlossen]


82

Ich höre oft, dass ein echter Programmierer innerhalb einer Woche leicht jede Sprache lernen kann. Sprachen sind nur Werkzeuge, um Dinge zu erledigen. Programmierung ist die ultimative Fähigkeit, die gelernt und gemeistert werden muss.

Wie kann ich sicherstellen, dass ich das Programmieren lerne , anstatt nur die Details einer Sprache zu lernen? Und wie kann ich Programmierkenntnisse entwickeln, die auf alle Sprachen anstatt nur auf eine angewendet werden können?


25
Versuchen Sie eine andere Sprache zu lernen. Versuchen Sie, Probleme zu lösen, die Sie bereits in Ihrer ersten Sprache in Ihrer neuen Sprache zu lösen wissen. Am Anfang wird es nicht einfach. Aber Sie werden wissen, dass Sie lernen, sobald Sie alte Probleme auf eine neue Art und Weise lösen (Hinweis: Dies kann einige Zeit in Anspruch nehmen).
FrustratedWithFormsDesigner

42
Außerdem müssen Personen, die behaupten, in einer Woche eine Sprache lernen zu können, definieren, was sie mit "Lernen" meinen. "What do you mean you're not an expert in LanguageX?!? I can learn a language in a Week!". 1 Woche später:"See, I've learnt the language, and here's a Hello World example I copied from Wikipedia to prove it!"
JohnL

9
Eine Frage muss gestellt werden. Konstruieren Sie Ihre Logik in Syntax oder verwenden Sie ein schnelleres und effizienteres mentales Modell? Ich finde, dass unerfahrene Programmierer dazu neigen, mit Syntax zu denken.
ChaosPandion

10
@PaulR: Ich habe nicht 10.000 Stunden gebraucht, um Fahrrad fahren zu lernen. Oder schwimmen.
Robert Harvey

7
@PaulR Das Sprichwort besagt, dass es 10.000 Stunden dauert, um eine Fertigkeit zu beherrschen , nicht nur, um sie "zu lernen"
Tobias Kienzler,

Antworten:


96

Mach dir keine Sorgen, wenn du ein lächerliches Konzept von "Geschicklichkeit" triffst, das so häufig in folgenden Aussagen vorkommt:

  • Alle Programmiersprachen sind grundsätzlich gleich.
  • Sobald Sie eine Sprache gut gelernt haben, können Sie schnell und einfach jede andere Sprache lernen.
  • Sprachen sind nur Werkzeuge, es gibt einige übergreifende Hirnmagie, die die Software tatsächlich macht.

Diese Aussagen beruhen alle auf einer fehlerhaften Prämisse und verraten mangelnde Erfahrung in einem breiteren Spektrum von Programmiersprachen. Sie sind sehr verbreitete Aussagen und werden von einer großen Anzahl von Programmierern nachdrücklich geglaubt. Ich werde das nicht bestreiten, aber ich werde ihre Richtigkeit bestreiten.

Dies ist einfach bewiesen: Verbringen Sie eine Woche (oder wirklich mehr als ein paar Tage), um die Grundlagen von Haskell , Prolog oder Agda zu erlernen . Sie werden bald nach dem Start das alte Lied der Sesamstraße in Ihrem Kopf spielen hören "Eines dieser Dinge ist nicht wie die anderen ...".

Wie sich herausstellt, gibt es eine ganze Reihe von Programmiersprachen, -techniken und -ansätzen, die für 95% von uns so fremd sind oder waren. Viele sind sich überhaupt nicht bewusst, dass eines dieser anderen Konzepte überhaupt existiert, was in Ordnung ist und diese Konzepte nicht notwendig sind, um ein angestellter und sogar effektiver Programmierer zu sein.

Aber die Tatsache bleibt: Diese Techniken und Ansätze existieren, sie eignen sich für viele verschiedene Dinge und können sehr nützlich sein, aber sie sind nicht nur so, wie Sie es gewohnt sind, und die Leute können sie nicht einfach mit einem Nachmittag des Geigenspiels aufgreifen.

Außerdem würde ich sagen, dass die Mehrheit der Fälle, in denen Leute behaupten, so komplexe Dinge wie Programmiersprachen zu haben oder zu lernen, so schnell wie eine Woche unter dem Mahnkrüger-Effekt (Wikipedia) leiden (Hervorhebung von mir):

Der Dunning-Kruger-Effekt ist eine kognitive Verzerrung, bei der ungelernte Personen unter einer illusorischen Überlegenheit leiden und fälschlicherweise ihre Fähigkeiten überdurchschnittlich bewerten. Diese Tendenz wird auf eine metakognitive Unfähigkeit der Unqualifizierten zurückgeführt, ihre Fehler zu erkennen.

Ich verweise die Leute auf diesen erfahreneren Überblick über das Konzept des Programmierlernens von Peter Norvig: Programmieren lernen in zehn Jahren .

Forscher (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) haben gezeigt, dass es ungefähr zehn Jahre dauert, um Fachwissen in einer Vielzahl von Bereichen, einschließlich Schachspielen und Musik, zu entwickeln Komposition, Telegraphenbedienung, Malen, Klavierspielen, Schwimmen, Tennis und Forschung in Neuropsychologie und Topologie. Der Schlüssel liegt in der überlegten Praxis: nicht nur immer wieder zu tun, sondern sich selbst mit einer Aufgabe herauszufordern, die über Ihre derzeitigen Fähigkeiten hinausgeht, es zu versuchen, Ihre Leistung während und nach dem Ausführen zu analysieren und Fehler zu korrigieren. Dann wiederhole. Und noch einmal wiederholen.


Sicher gibt es eine Reihe von übergreifenden Prinzipien, die das Erlernen aller Sprachen vereinfachen.

Vielleicht, aber ich würde behaupten, dass diese Prinzipien so umfangreich sind, dass es fast immer Sprachen außerhalb Ihrer Reichweite von einer Woche geben wird. Wenn Sie der Liste, mit der Sie vertraut und vertraut sind, neue Begriffe hinzufügen, wird diese Liste von Sprachen, die sich nicht in Ihrer unmittelbaren Reichweite befinden, möglicherweise kleiner, aber ich kann kaum glauben, dass sie jemals aufhören wird. Die Liste der konzeptionellen Computeransätze für Dinge ist so umfangreich, dass sie verwirrend ist, von verketteten Sprachen über vektorbasierte Sprachen bis hin zu Sprachen, die sich auf KI oder Metaprogrammierung spezialisiert haben ( oder Sprachen, die ausschließlich zur Unterstützung regulärer Ausdrücke existieren ).

Nach zehn Jahren können Sie generell programmieren. Dies bedeutet, dass Sie in einigen Sprachen oder Sprachstilen etwas anständigen Code schreiben können. Nach 10 Jahren sind Sie bereit, diese unzähligen übergreifenden Konzepte für den Rest Ihres Lebens in Angriff zu nehmen, und wenn Sie nicht Edsger W. Dijkstra , Donald Knuth oder John D. Carmack sind , werden Sie nicht alle erreichen von ihnen.


11
Enh. Es gibt einen Unterschied zwischen dem "Kennen" einer Sprache und der Fähigkeit, einen kleinen Fehler in einer Sprache zu entdecken und zu beheben. Letzteres kann ein guter Programmierer auch in archaischen Sprachen recht schnell tun.
Telastyn

5
@CharlesE.Grant Ich denke, Sie überschätzen, was die Mehrheit am College lernt, und wie lange es dauert, bis Sie eine Sprache wie Haskell oder Prolog beherrschen. Ich würde behaupten, ein erfahrener Ingenieur ohne Erfahrung in der Funktionsprogrammierung würde deutlich mehr als eine Woche brauchen, um seinen ersten Fehler in einem Haskell-Programm zu beheben.
Jimmy Hoffa

11
Ich würde immer noch argumentieren, dass die sehr grundlegenden Konzepte ziemlich kompakt sind. Sobald Sie das Umschreiben von Begriffen verstanden haben , haben Sie ein Werkzeug zum Definieren von Lambda-Kalkül, SK-Kalkül, Turing-Maschine, Markov-Algorithmus usw. Eine kleine Anzahl wirklich grundlegender Ideen kann den größten Teil der Informatik abdecken. Aber natürlich ist Erfahrung erforderlich, um die einfachen Muster in scheinbar komplexen Dingen sehen zu können.
SK-logic

4
Ich würde sagen, es ist weniger der Mahn-Krüger-Effekt als die Annahme, dass "Programmiersprache" = "Programmiersprache im C-Stil". Nachdem ich eine anständige Menge an c ++, eine anständige Menge an C # und ein bisschen Perl und Python gekannt habe, gehe ich davon aus, dass ich in einer Woche einigermaßen fließend Java, PHP usw. sprechen kann. Nicht unbedingt Experte, aber zumindest ziemlich fließend. Ich habe in ein paar Tagen Javascript gelernt. An diesem Punkt geht es hauptsächlich darum, die Unterschiede zwischen ihnen zu lernen. Hinweis: Die gängigsten Real-World-Sprachen sind C-like. Das gleiche würde nicht unbedingt für Prolog gelten.
neminem

2
@WayneWerner Im Ernst, der Unterschied zwischen Haskell oder Prolog und Algol-Sprachen ist so viel mehr als Syntax, dass Sie nur den Mythos aufrechterhalten . Machen Sie meinen Test oben: Verbringen Sie eine Woche damit, Haskell zu lernen und zu sehen, wie das bei Ihnen funktioniert. Ehrlich gesagt, es wird gut für dich sein, viel davon zu lernen.
Jimmy Hoffa

51

... wie kann ich Programmierkenntnisse entwickeln, die auf alle Sprachen anstatt nur auf eine angewendet werden können?

Der Schlüssel zu dieser Frage liegt darin, die Sprache zu überschreiten und nicht in der Sprache zu denken, in der Sie programmieren.

Was?

Erfahrene polyglotte Programmierer denken im abstrakten Syntaxbaum (AST) an ihr eigenes mentales Sprachmodell. Man denkt nicht "Ich brauche eine for-Schleife hier", sondern "Ich muss eine Schleife über etwas machen" und übersetzt diese in die für oder während, oder Iterator oder Rekursion für diese Sprache.

Dies ähnelt dem, was man beim Erlernen einer gesprochenen Sprache sieht. Menschen, die viele Sprachen fließend sprechen, denken über die Bedeutung nach und sie kommt in einer bestimmten Sprache zum Ausdruck.

Ein Hinweis auf diesen AST ist in den beiden Eyetracking-Videos Codeverständnis mit Eye-Tracking und Eye-Tracking-Code-Experiment (Anfänger) zu sehen, in denen die Bewegungen des Auges eines Anfängers und eines erfahrenen Programmierers beobachtet werden. Man kann sehen, wie der erfahrene Programmierer den Code in sein mentales Modell "kompiliert" und in seinem Kopf "ausführt", während der Anfänger den Code Schlüsselwort für Schlüsselwort durchlaufen muss.

Der Schlüssel für die Frage, wie Programmierkenntnisse für alle Sprachen entwickelt werden können, liegt also darin, mehrere Sprachen zu lernen, damit man sich vom mentalen Modell einer Sprache distanzieren und die Fähigkeit entwickeln kann, die AST für ein Problem in der Sprache selbst zu generieren eine Kopfsprache, die dann in eine bestimmte Sprache übersetzt wird.

Sobald man diese Fähigkeit hat, das AST im Kopf zu benutzen, wird das Erlernen einer anderen Sprache innerhalb einer ähnlichen Denkschule ( Befunge ist ein kleiner Sprung von Java, aber nicht so viel von Forth ) viel einfacher - es ist 'nur' Übersetzen des AST in eine neue Sprache, was beim 3., 4. und 5. Mal (usw.) viel einfacher ist.


Es gibt einen klassischen Artikel: Echte Programmierer verwenden Pascal nicht . Ein Teil davon lautet:

... der entschlossene Real Programmer Fortran-Programme in jeder Sprache schreiben kann

Es gibt auch Teile, für die Sie nicht nur das mentale AST verwenden können - Sie müssen auch in der Sprache denken. Die Ausführung dieses Vorgangs nimmt einige Zeit in Anspruch (ich bin immer noch beschuldigt, Perl- Code in Python geschrieben zu haben, und mein erster Lisp- Code wurde mit der Meldung "Dies ist ein sehr gutes C-Programm" überprüft.)

Dazu muss ich auf einen Artikel hinweisen, der von der ACM veröffentlicht wurde: Wie man Fortran nicht in einer beliebigen Sprache schreibt . Der dritte Absatz des Artikels (der keine Anführungszeichen enthält) befasst sich direkt mit der vorliegenden Frage:

Es gibt Merkmale einer guten Codierung, die alle allgemeinen Programmiersprachen überschreiten. Sie können gutes Design und transparenten Stil in fast jedem Code implementieren, wenn Sie sich darauf anwenden. Nur weil Sie mit einer Programmiersprache fehlerhaften Code schreiben können, müssen Sie dies nicht tun. Und eine Programmiersprache, die entwickelt wurde, um guten Stil und Design zu fördern, kann immer noch verwendet werden, um schrecklichen Code zu schreiben, wenn der Codierer ausreichend kreativ ist. Sie können in einer Badewanne ertrinken, in der sich ein Zentimeter Wasser befindet, und Sie können problemlos ein völlig unlesbares und nicht wartbares Programm in einer Sprache schreiben, die weder GOTOS noch Zeilennummern enthält. Unabhängig davon, ob Sie Fortran oder Java, C ++ oder Smalltalk schreiben, können (und sollten) Sie guten Code anstelle von schlechtem Code schreiben.

Es ist nicht nur genug, um die AST zu haben - es ist notwendig, die AST zu haben, die man in andere Sprachen übersetzen kann. Ein Fortran AST im Kopf zu haben und Fortran-Code in Java zu schreiben, ist keine gute Sache. Man muss auch mit der Sprache und ihren Redewendungen vertraut genug sein, um in der Sprache denken zu können (trotz dessen, was ich ganz oben gesagt habe).

Ich habe Java-Code von jemandem gesehen, der nicht aufgehört hat, C-Code zu schreiben. Es gab ein Objekt mit einer Hauptmethode. In diesem Objekt befanden sich eine Reihe von statischen Methoden, die von aufgerufen wurden main, und private innere Klassen, die öffentliche Felder hatten (und daher Streben sehr ähnlich sahen). Es war C-Code, der in Java geschrieben war. Es wurde lediglich die Syntax einer Sprache in eine andere übersetzt.

Um diesen Punkt zu überwinden, muss man weiterhin Code in mehreren Sprachen schreiben und beim Entwerfen des Codes nicht in diesen Sprachen denken, sondern in diesen, wenn das Design in den Code übersetzt wird, um mit den Sprachidiomen korrekt zu arbeiten.

Der einzige Weg dorthin - in der Lage zu sein, Programmierkenntnisse zu entwickeln, die auf alle Sprachen angewendet werden können - besteht darin, weiterhin Sprachen zu lernen und diese mentale Programmiersprache flexibel zu halten, anstatt an eine Sprache gebunden zu sein.

(Ich entschuldige mich bei ChaosPandion, dass ich mich stark von der Idee, die er vorgestellt hat , geliehen habe .)


3
Keine Notwendigkeit, sich zu entschuldigen. Ich denke, Sie haben eine beeindruckende Antwort geschrieben.
ChaosPandion

Ich wollte der Person, die mich dazu brachte, darüber nachzudenken, die Antwort zuschreiben.

3
Das ist eine sehr gute Antwort. Ich wünschte, ich könnte zweimal stimmen.
Wayne Werner

2
Genau aus diesem Grund sollten Sie OO nicht zuerst lernen, da dies Ihr Gehirn mit einem der schlechtesten vorstellbaren AST formatiert.
Morg.

1
@ JimmyHoffa - Sie könnten Recht haben. Ich habe anfangs immer in einer Sprache unterrichtet und später langsam mehr eingeführt. Trotzdem denke ich, dass es sich lohnt, es zu erkunden, da ich immer auf die Bremse treten kann und sie auf eine Sprache konzentrieren können. (SML scheint eine ziemlich gute Wahl zu sein.)
ChaosPandion

12

Wählen Sie eine Sprache und starten Sie die Codierung. Python ist eine gute Wahl für Anfänger, und es gibt Online-Tutorials , damit Sie lernen, wie man es richtig macht.

Daraus folgt alles. Ihre Interessen führen Sie zu Frameworks und Designkonzepten, die Ihre Programme verfeinern. Sie werden feststellen, dass es Online-Kurse gibt, die Ihnen die Grundlagen und die Theorie vermitteln, und dass es verschiedene Programmierparadigmen gibt, die Sie erforschen können, und so weiter.

Und ja, Sie werden Sprachen wie Haskell entdecken, die Ihnen etwas Neues beibringen, sobald Sie eine solide Grundlage für die Grundlagen haben.

Einige Programmierer denken wahrscheinlich, dass alle Sprachen gleich sind, weil sie keiner ausgesetzt waren, die sie dazu bringen, anders zu denken. Alle am häufigsten verwendeten Sprachen leiten sich von Algol ab (es handelt sich im Wesentlichen um prozedurale Sprachen), und die meisten von ihnen sind C-ähnliche geschweifte Klammern.


2
Das stimmt aber nicht wirklich? Einige Programmiersprachen codieren alles als reine Funktionen (einschließlich Entscheidungen + Schleifen). Andere können modelliert werden, indem Objekte aus Sets usw.
gedrückt und abgelegt werden

1
Was ist nicht wahr? Sie müssen lernen, wie man kriecht, bevor Sie laufen oder rennen können.
Robert Harvey

1
Ah, ich sollte spezifizieren, ich meinte den letzten Absatz, ich stimme dem Rest der Antwort zu
jozefg

1
Ich habe den letzten Absatz durch einen ersetzt, der mein Gefühl besser wiedergibt.
Robert Harvey

5

Beim Programmieren geht es um Probleme, die so gelöst werden, dass die Lösung in einer so eingeschränkten Grammatik ausgedrückt werden kann, dass sie mit einer Programmiersprache implementiert werden kann. Die Kunst des Programmierens ist daher die Kunst, Probleme zu lösen.

Bestimmte Sprachen fordern andere Programmierparadigmen wie Objektorientierung, ereignisgesteuerte, Multithread- und MVC-Framework-basierte. Dies sind alles nur Modelle und Muster und haben nichts wirklich mit der Implementierung zu tun.

Wenn Sie ein Problem auf Papier so lösen können, dass es leicht in Code übersetzt werden kann und mit einem geeigneten Modell für Ihre Plattform verknüpft ist, sind Sie ein Programmierer. Wenn Sie diese Lösungen nur in der von Ihnen gewählten Sprache implementieren können, ist das eine andere Sache.

Ich programmiere seit 30 Jahren (OMFG!) Und verwende immer noch php.net, um Befehle in PHP nachzuschlagen, da es nicht meine Muttersprache ist.

Ich würde sagen, dass das Fachwissen in Sprachen umgekehrt proportional zu der Häufigkeit ist, mit der Sie sich das Handbuch oder den Stapelüberlauf ansehen. Erfahrung in der Programmierung ist, wie schnell Sie Probleme auf eine Weise lösen, die mit Computerprogrammiersprachen kompatibel ist.

In ähnlichen Nachrichten habe ich letzte Woche Ruby gelernt. Obwohl ich kein "Experte" bin, kann ich ein Problem lösen, das ich in Perl schreiben könnte, und dann ein Zeitalter damit verbringen, es in Ruby zu übersetzen, während ich es noch etwas lerne.


Ihr Kommentar ist der erste, den ich über Modelle und Muster lese! Ich bin zu 100% mit Ihrem Kommentar einverstanden. Eine Sache ist, eine Sprache zu bekommen und mit der Erstellung eines Programms zu beginnen. Eine andere besteht darin, das Problem zu durchdenken und die geeigneten Werkzeuge zu finden, um es zu lösen. Dann fängt man an, eine Sprache zu suchen und zu programmieren.

3

Ich denke, wie bei allem, macht Übung den Meister. Lassen Sie sich einfach nicht dazu überreden, immer das Gleiche zu tun oder immer die gleiche Sprache zu sprechen, und lernen Sie bei jedem Projekt weiter.

Ich denke, man kann leicht eine Parallele zu etwas ziehen, das dem Erlernen des Gitarrenspiels entspricht. Jeder gute Musiker kann in kürzester Zeit lernen, ein neues Lied zu spielen, da er bereits alle Akkorde und die Theorie kennt, warum die Akkorde so gespielt werden, wie sie sind. Wie bekommen sie das gut? Sie haben so viele Songs gespielt, dass sich alle Patterns soeben vermischt haben, während sie gleichzeitig ihr Wissen durch eine tatsächlich dokumentierte Theorie ergänzt haben, die auch diese Patterns abonnieren.

Vielleicht kannst du ein paar Songs sehr gut spielen, aber du kannst nicht schnell davon abweichen oder neue Songs aufnehmen. Dies ist wahrscheinlich das Äquivalent eines .NET- Programmierers, der immer wieder dieselbe CRUD- Anwendung erstellt, irgendwann etwas Neues ausprobiert, einige Webservice-Aufrufe oder eine erweiterte Benutzeroberfläche hinzufügt oder sie in einer ganz neuen Sprache schreibt. Wenn Sie sich einen Überblick verschaffen, warum die Dinge so ablaufen, Fragen zu Stack Exchange usw. stellen, werden Sie schließlich alle Muster sehen, die ständig auftauchen, und einige der zugrunde liegenden Theorien kennen, und das Erlernen einer neuen Sprache wird dies nicht tun scheinen fast so entmutigend.


1

Ich werde nicht untersuchen, wie lange es dauert, eine Sprache zu lernen oder was es bedeutet, eine Sprache zu lernen, sondern ich werde mich mit Ihrem eigentlichen Problem befassen: wie Sie feststellen, ob Sie Programmieren gelernt haben oder eine Programmiersprache gelernt haben .

Sie haben programmieren gelernt, wenn Sie gelernt haben, ein Problem in einzelne Prozesse aufzuteilen und diese Prozesse dann zur Lösung Ihres Problems zu verwenden. Sie haben eine Programmiersprache gelernt, wenn Sie die Syntax einer Sprache kennen und wissen, wie Sie die Funktionsweise eines Prozesses anpassen, wenn er in dieser Sprache implementiert ist.

Dies bedeutet nicht, dass Sie in Fortan programmieren sollten, wenn Sie Lisp verwenden, oder die Werte einer Spalte in einer Tabelle in einer Datenbank mit einem Cursor addieren sollten. Nur dass die Sprache ein Implementierungsdetail ist. Eine, die ändern kann, welche Prozesse benötigt werden, aber nicht die Notwendigkeit, Prozesse zu identifizieren und zu erstellen - am Ende gibt es eine reale Implementierung mit Input / Output und gewünschten Ergebnissen.


1

Meine Strategie war schon immer, mich auf reine Fähigkeiten zu konzentrieren und nicht auf bestimmte Fähigkeiten.

Anstatt die spezielle Syntax von Python (oder einer anderen Sprache) für alles zu lernen, was Sie tun möchten, müssen Sie Ihre Gehirnzyklen damit verbringen, abstrakte Probleme zu lösen, wie Sie jedes Problem in dieser Kategorie am besten lösen können.

Auf diese Weise wissen Sie unabhängig von der Sprache, was zu tun ist, und verfügen meist über zeitlose Fähigkeiten, mit denen Sie in jeder Sprache programmieren können.

Vermeiden Sie insbesondere Tools, die voller Fallstricke sind, wie MySQL, oder eigensinnige Sprachen, wie Java, da alles, was Sie mit diesen Tools lernen, einen großen Anteil an Tool-spezifischem Wissen hat, das mit Sicherheit ziemlich schnell unbrauchbar wird.

Im Gegensatz zu dem, was in vielen Antworten gesagt wurde, hören Sie NICHT auf andere Programmierer. Sie sind ein Noob und es gibt keine Möglichkeit, die Fälschung vom echten Deal zu unterscheiden. Sie sollten also besser alles mit einem Löffel Salz nehmen.

Sie möchten ständig Fragen stellen und nur akzeptieren, wenn die Lösung schnell, elegant und zuverlässig ist.


1
"Hören Sie NICHT auf andere Programmierer" - ja sicher. "- Wie würden Sie wissen, ob Sie lesbaren und leicht zu wartenden Code geschrieben haben? - Ihr Peer sagt es Ihnen, nachdem Sie den Code überprüft haben. Begründung: Sie können dies nicht selbst bestimmen, da Sie mehr als der Autor wissen, als der Code von sich selbst sagt. Ein Computer Ich kann Ihnen aus den gleichen Gründen nicht sagen, ob ein Gemälde Kunst ist oder nicht. Daher brauchen Sie einen anderen Menschen, der die Software warten kann, um sich anzusehen, was Sie geschrieben haben, und seine oder ihre Meinung zu äußern ... " ( Zitat Quelle )
Mücke

@gnat mach was du willst. Ich sage Ihnen nur, dass das Feedback der meisten Programmierer potenziell schädlich ist, da sie nicht für Scheiße programmieren können, und Sie sollten Taschen und Beutel mit Salz mitbringen, um damit fertig zu werden. Außerdem glaube ich, dass "von Trotteln editierbar und lesbar" überhaupt kein Qualitätsmerkmal ist. Glauben Sie, was Sie wollen, aber gehen Sie nicht um -1 herum, nur weil die Leute Ihrer Vision nicht zustimmen.
Morg.

Meine Stimme zeigt die Bewertung der Post- Qualität an , nicht, ob ich zustimme oder nicht (ich glaube eher, dass Sie hier einen Punkt haben). Ich habe eine andere Meinung zitiert, nicht weil es das Gegenteil ist, sondern weil es eine solide Erklärung hat (siehe "RATIONALE"). Wenn Sie ähnlich solide Erklärung denken können , um Ihre Meinung zu sichern, sollten Sie bearbeiten die Post ing es hinzuzufügen
gnat

wie auch immer. Inhalt> Form. Behalte deine Form, ich werde meinen Inhalt behalten.
Morg.

0

Es gibt den theoretischen Ansatz. Erfahren Sie, wie Computer im Hintergrund funktionieren. Wie die grundlegenden Prozessoranweisungen aneinander gereiht werden, um die komplexeren Operationen und Strukturen zu erzeugen, die wir in der Programmiersprache auf hoher Ebene für selbstverständlich halten.

Dann gibt es den praktischeren Programmieransatz. Das Hauptproblem, das die Leute normalerweise als "nicht gute Programmierer" bezeichnen, ist, dass sie nur eine Sprache wirklich beherrschen . Und selbst wenn sie andere kennen, programmieren sie in ihnen genauso wie in ihrer Muttersprache . Das ist ein Zyklus, den man unterbrechen muss, wenn man wirklich lernen will, wie man programmiert. Die Standardantwort darauf besteht darin, mindestens eine Sprache aus jedem Programmierparadigma zu lernen. Lernen Sie also eine OOP-Sprache, eine funktionale Sprache, eine Skriptsprache usw. Und mit Lernen meine ich nicht das Erlernen der Syntax . Sie lernen eine Sprache, indem Sie sie tatsächlich verwenden, um etwas zu erschaffen.

Wenn ich persönlich eine neue Sprache lernen möchte, verwende ich Project Euler- Puzzles. Ich gehe zu einem Rätsel, das ich bereits in einer OOP-Sprache gelöst habe (als Beispiel) und versuche, es mit einer funktionalen zu lösen, während ich versuche, den Best Practices der neuen Sprache zu folgen. Wenn Sie dasselbe Problem mit zwei grundlegend unterschiedlichen Ansätzen lösen, erkennen Sie nicht nur die tatsächlichen Unterschiede, sondern zeigen Ihnen auch, wo sich die gemeinsamen Bereiche befinden. Diese gemeinsamen Bereiche, die von allen Sprachen gemeinsam genutzt werden, stellen die eigentliche Programmierung dar . Die Unterschiede bestehen lediglich darin, wie sie erreicht werden können.


4
Ich würde das Erlernen des physikalischen Verhaltens eines Computers nicht als "theoretischen Ansatz" bezeichnen. Ein "theoretischer Ansatz" wäre das Erlernen der Theorie, das Lesen der kirchlichen These und das Erlernen des Curry-Howard-Isomorphismus, des Lambda-Kalküls und des Grundlagen der Zahlentheorie, das sind theoretische Grundlagen. Nicht zu sagen, dass Ihre Antwort richtig oder falsch ist, nur zu sagen, dass ich dies als den konkreten Ansatz bezeichnen würde, der nicht theoretisch ist, weil ihm die Theorie fehlt.
Jimmy Hoffa

@ JimmyHoffa - Gute Punkte!
System Down

1
"Wie die grundlegenden Prozessoranweisungen aneinander gereiht sind (...)" scheint für Anfänger eine schreckliche Idee zu sein zur Optimierung (3-5-stufige Architektur kann als etwas veraltet angesehen werden ...) Verstehen Sie mich nicht falsch - CA ist faszinierend - aber für eine "richtige" Einschätzung sind Wörter wie "außer Betrieb" und "multiscalar" erforderlich. und wahrscheinlich nach einigen grundlegenden Programmiererfahrungen kommen.
Maciej Piechotka

0

Nun, die meisten Dinge, die ich sagen wollte, wurden bereits gesagt. Was ich hinzufügen möchte, ist eine sehr einfache Analogie.

Wenn Programmiersprachen als bloße Werkzeuge betrachtet werden, gibt es absolut keine Logik, wenn man gut ist und gut ist, wenn man gut ist.

Denken Sie nur an eine Gruppe von angesehenen Schwertkämpfermeistern, die nach sieben Tagen Training plötzlich ihre Schwerter niederlegten und sich auf den Weg machten, um mit den Speeren zu kämpfen. Was würde passieren? Sie würden massakriert werden.

Sprachen sind oft nicht schwer zu lernen, aber es braucht Geduld und Übung, um gut darin zu sein. Außerdem gibt es keinen richtigen Weg, um das Programmieren zu lernen.

Das Erlernen einer Programmierung ist wie das Spielen eines RPG-Spiels. Manchmal benutzt man Schwerter, manchmal Speere, manchmal einen Schild. Für jeden Feind, den du tötest, erhältst du Erfahrungspunkte. Sobald Sie genug Erfahrungspunkte haben, steigen Sie auf. Wenn Sie jetzt ein Schwert beherrschen, werden Sie mit Pfeil und Bogen nicht besonders gut zurechtkommen. Aber ein Teil der Erfahrung, die Sie zuvor gesammelt haben, erhöht Ihre Ausdauer und Geschwindigkeit.

Hier sind ein paar Dinge, die Sie vielleicht tun möchten, wenn Sie eine Sprache lernen.

  • Lesen Sie über die Sprache. Wenn es interessant klingt, probiere die hallo Welt App (s) selbst aus.
  • Lesen Sie einige Tutorials, Tricks, Blogs.
  • Erstellen Sie aus Spaß einfache Apps.
  • Testen Sie verschiedene Funktionen.
  • Wenn Sie es wirklich mögen, kaufen Sie einige Bücher und / oder Video-Tutorials.
  • Suche nach guten Bibliotheken.
  • Suchen Sie nach Antworten, fragen Sie nur, wenn Sie die Antworten nicht finden können.
  • Helfen Sie anderen, nach Antworten zu fragen (wo ist das besser als hier?)
  • Mach etwas Nützliches. Das Erstellen einer Taschenrechner-App mag eine gute Übung sein, aber wenn Sie eine TO-DO-Listen-App erstellen und diese tatsächlich auf Ihrem PC / Telefon verwenden, ist das Gefühl 100-mal zufriedenstellend.

Erleben Sie neue Sprachen, entdecken Sie neue Bibliotheken, lernen Sie neue Tricks in Ihrer Freizeit. Bevor Sie es merken, werden Sie sich mit Ihrem Können überraschen.


0

In meinem Fall lerne ich, wie man tatsächlich programmiert:

  1. Lerne von den Meistern. Hören Sie sich Programmier-Podcasts an, lesen Sie professionelle Blogs in einem Programmierthema Ihrer Wahl, lesen / beobachten Sie wundervolle Tutorials von Gurus, die über das Internet verstreut sind, und lesen Sie schließlich epische Bücher wie The Pragmatic Programmer . Dieses Buch enthält viele Programmierjuwelen, die sich im Laufe der Karriere der Autoren angesammelt haben. Eine sichere Methode, um zu lernen, wie man tatsächlich codiert, besteht darin, zu wissen, wie andere erfolgreiche Programmierer dies tun.
  2. Erleben Sie dabei. Darüber zu lesen und zu wissen ist eine Sache, es tatsächlich in die Praxis umzusetzen und es zur Arbeit zu bringen ist eine andere. Es gibt keinen besseren Lehrer als Erfahrung. Setzen Sie also Ihre Kodierungsbeschränkung auf und legen Sie los.
  3. Fragen Sie jemanden, der es weiß. Haben Sie genau wie jetzt keine Angst davor, Senioren in Ihrem Team nach Best Practices oder besseren Methoden zu fragen, um etwas zu tun, oder wenn Sie das Pech haben, keinen Zugang zu den genannten Senioren, Mentoren oder Gurus zu haben. dann gibt es noch den rest von stackexchange und internet zu fragen.

Wie Ihre Kommentatoren bereits erwähnt haben, vergessen Sie nicht, auch Ihre Tools zu beherrschen. Das Erlernen der besten Praktiken und der besten Theorien ist zwecklos oder wird schlecht umgesetzt, wenn Sie nicht genug über Ihr Tool, in diesem Fall eine Programmiersprache, wissen.


0

Ich denke, wenn Sie analytisch denken können, haben Sie einen guten Anfang.

Lernen Sie jede Sprache, die Sie wollen, und arbeiten Sie sich anhand einer Reihe von Beispielen vor, wie sie beispielsweise in fast allen Büchern zum Thema Programmieren vorgestellt werden.

Versuchen Sie als nächstes, Ihre eigenen Probleme zu lösen. Versuche verschiedene Lösungen zu finden und vergleiche sie. Geschwindigkeit und Speichernutzung sind häufig verwendete Faktoren, die eine Rolle spielen. Besprechen Sie Ihre Lösungen mit anderen Programmierern.

Lesen Sie den Code anderer Programmierer und versuchen Sie zu verstehen, warum sie das Problem auf diese Weise gelöst haben.

Sie sollten auch einige Bücher über Algorithmen lesen, um einen Überblick über Standardansätze zu erhalten. Neue Probleme sind oft Modifikationen alter Probleme.

Viel Übung und das Arbeiten mit Code auch in Teams helfen Ihnen, Ihre Fähigkeiten Schritt für Schritt zu verbessern.

Ich hoffe meine Meinung beantwortet deine Frage zumindest teilweise.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.