Anmerkung des Übersetzers: Dieser Artikel wurde 2001 von Peter Norvig veröffentlicht. Nach der Fassung von 2001 wurde eine Übersetzung ins Russische durchgeführt. Im Jahr 2014 wurde der Artikel aktualisiert, aber die Übersetzung wurde nicht aktualisiert. Daher habe ich meine Übersetzung des Artikels über die moderne Version von 2014 abgeschlossen. Ich glaube, dass der Artikel seine Relevanz nicht verloren hat, obwohl er etwas veraltet ist. Wenn Sie Übersetzungsfehler finden, schreiben Sie eine persönliche.Wo haben es alle so eilig?
Wenn Sie in einen Buchladen gehen, sehen Sie sofort ein Buch über das Erlernen von Java in 24 Stunden sowie endlose Optionen zum Erlernen von C, SQL, Ruby, Algorithmen usw. in wenigen Tagen oder Stunden. Amazon Advanced Search [
Titel: Teach, yourself, Stunden, seit: 2000 ] listet 512 Bücher auf. Von den Top Ten sind neun Bücher über Programmierung (nur eines befasst sich mit Buchhaltung). Sie erhalten die gleichen Ergebnisse, wenn Sie "sich selbst beibringen" durch "lernen" und "Stunden" durch "Tage" ersetzen.
Dies führt zu der Schlussfolgerung: Entweder haben die Leute es eilig, Programmieren zu lernen, oder auf fabelhafte Weise ist es einfacher, Programmieren zu lernen als alles andere. Felleisen
et al. erwähnte dies in ihrem Buch
How to Design Programs , als sie schrieben: „Schlechte Programmierung ist einfach.
"Idioten können das in 21 Tagen lernen, auch wenn sie voller Nerds sind." Die Comic-Website Abtruse Goose ging ebenfalls auf dieses Thema ein (
hier ist der Link ).
Mal sehen, was der Titel des Buches
Teach Yourself C ++ in 24 Stunden bedeuten kann:
- Lehren Sie sich selbst: In 24 Stunden haben Sie keine Zeit mehr, einige wichtige Programme zu schreiben und Schlussfolgerungen aus Ihren Erfolgen und Misserfolgen zu ziehen. Sie haben keine Zeit, mit einem erfahrenen Programmierer zusammenzuarbeiten und die Ideologie von C ++ zu verstehen. Kurz gesagt, in dieser kurzen Zeit werden Sie nicht so viel lernen. Das Buch hat also nur eine oberflächliche Bekanntschaft im Sinn, aber kein tiefes Verständnis. Wie Alexander Pope sagte: " Wenig Wissen ist eine gefährliche Sache ."
- C ++: In 24 Stunden sind Sie durchaus in der Lage, etwas aus der C ++ - Syntax zu lernen (wenn Sie bereits eine andere Programmiersprache kennen), aber Sie wissen nicht viel über die Verwendung dieser Sprache. Kurz gesagt, wenn Sie beispielsweise ein Basic-Programmierer sind, lernen Sie, wie Sie Basic-Programme mit der C ++ - Syntax schreiben, aber Sie verstehen nicht, für welche Aufgaben C ++ wirklich gut (oder schlecht) ist. Also was, sagst du? Wie Alan Perlis sagte: " Wenn eine Sprache Ihr Programmierverständnis nicht verändert, ist das Lernen nutzlos ." Nun, außer dass Sie ein wenig C ++ lernen müssen, um zu verstehen, wie man eine Art Bibliothek für eine bestimmte Aufgabe verwendet. In diesem Fall geht es jedoch nicht darum, Programmieren in der Sprache zu unterrichten. Sie lernen gerade, eine bestimmte Aufgabe zu erledigen.
- in 24 Stunden: Leider reicht diese Zeit nicht aus, wie ich unten zeige.
Lerne Programmieren in 10 Jahren
Studien (
Bloom (1985) ,
Bryan & Harter (1899) ,
Hayes (1989) ,
Simmon & Chase (1973) ) zeigten, dass es ungefähr zehn Jahre dauert, um Fähigkeiten in einem bestimmten Bereich zu beherrschen, z Schach spielen, Musik komponieren, mit Telegraphen arbeiten, zeichnen, Klavier spielen, schwimmen, Tennis, Neurophysiologie und Topologie. Das Geheimnis liegt in der
durchdachten Praxis: nicht nur mechanische Wiederholungen, sondern die Suche nach Aufgaben, die über Ihrem aktuellen Niveau liegen, deren Lösung, Analyse Ihrer Aktionen während ihrer Lösung und nach deren Lösung Korrektur von Fehlern. Und wieder. Und wieder. Es gibt keinen kürzeren Weg: Selbst Mozart, der mit vier Jahren ein musikalisches Wunderkind wurde, brauchte 13 Jahre, um Weltklasse-Musik zu schaffen. Die Beatles im Jahr 1964 kamen mit einer Reihe von Hits auf die Bühne und traten in der Ed Sullivan Show auf. Zuvor spielten sie jedoch seit 1957 in den kleinen Clubs von Liverpool und Hamburg. Und trotz ihres weltweiten Ruhmes unter den Fans kam ihr erster Erfolg unter Musikkritikern mit der Veröffentlichung von Sergeant Pepper im Jahr 1967.
Diese Idee wurde von
Malcolm Gladwell in seinem Buch populär gemacht, obwohl er dort von 10.000 Stunden spricht, nicht von 10 Jahren. Der berühmte Fotograf
Henri Cartier-Bresson (1908-2004) drückte diese Idee folgendermaßen aus: "
Die ersten 10.000 Fotos werden Ihre schlechtesten sein " (Er ahnte nicht einmal, dass es einigen Menschen mit einer Digitalkamera gelingt, diese Zahl in einer Woche zu erreichen). Wirkliche Erfahrung kommt mit dem Leben:
Samuel Johnson (1709-1784) schrieb: „
Erfahrung in jedem Bereich kann nur durch die Arbeit eines Lebens gewonnen werden; es gibt keinen niedrigeren Preis “;
Chaucer (1340-1400) beklagte sich: "
So wenig zu leben, so viel zu lernen ."
Hippokrates (400 v. Chr.) Ist berühmt für seine Aussage „Das
Leben ist kurz, die Wissenschaft ist riesig “, die sich ganz so anhört: „Ars longa, vita brevis, gelegentlich praeceps, experimentum periculosum, iudicium difficile“ und in der russischen Übersetzung „Leben Kurz gesagt, die Wissenschaft ist riesig, der Fall von Erschütterungen, die Erfahrung täuscht, das Urteil ist schwierig. “ Natürlich kann keine einzige Zahl die genaue Antwort sein: Es gibt keinen Grund anzunehmen, dass alle Fähigkeiten (Programmieren, Schachspielen, Dame, ein Musikinstrument) genau dieselbe Zeit benötigen, um sie zu beherrschen, sowie was verschiedene Personen benötigen genau zur gleichen Zeit. Wie Professor
K. Anders Ericsson sagte : „
In den meisten Bereichen ist es einfach erstaunlich, wie viel Zeit selbst die talentiertesten brauchen, um zu meistern. Die Zahl '10 .000 Stunden 'hilft Ihnen nur zu verstehen, dass es sich um mehrere Jahre harter Arbeit von 10-20 Stunden pro Woche handelt, um selbst für die natürlich begabtesten Talente von Geburt an das höchste Niveau zu erreichen. “
Sie möchten also Programmierer werden
Hier ist mein Erfolgsrezept für die Programmierung:
- Interessieren Sie sich für das Programmieren und erstellen Sie etwas nur zum Spaß. Es sollte für Sie so interessant sein, dass es nicht schade wäre, die nächsten 10 Jahre / 10.000 Stunden damit zu verbringen.
- Programm . Das beste Training ist Übung . In technischer Hinsicht wird „das maximale Leistungsniveau für eine Person in einem bestimmten Bereich nicht automatisch mit Erfahrung erreicht, im Gegenteil, die Produktivität kann selbst bei den erfahrensten Personen aufgrund eines bewussten Wunsches nach Verbesserung gesteigert werden“ ( S. 366 ) und „für das effektivste Training, das es braucht die Aufgabe mit der für eine bestimmte Person angemessenen Komplexität, einer verständlichen Bewertung ihrer Umsetzung und der Möglichkeit ihrer wiederholten Umsetzung und Korrektur von Fehlern Ibok “(S. 20-21) Das Buch Erkenntnis in der Praxis: Geist, Mathematik und Kultur im Alltag ist eine sehr lehrreiche Lektüre dieses Gedankens.
- Sprechen Sie mit anderen Programmierern. andere Programme lesen. Dies ist viel wichtiger als jedes Buch oder jeder Schulungskurs.
- Wenn Sie möchten, widmen Sie vier Jahre dem Studium an der Universität (oder in der Graduiertenschule). Auf diese Weise erhalten Sie Zugriff auf Arbeiten, für die bewährte Titel und Titel erforderlich sind. Aber wenn Sie nicht gerne studieren, können Sie (mit einem gewissen Eifer) das gleiche Wissen allein oder direkt bei der Arbeit erwerben. In jedem Fall reicht es nicht aus, nur aus Büchern zu lernen. "Die Informatikausbildung wird niemanden zum Experten für Programmierung machen, so wie das Studium von Pinseln und bunten Pigmenten niemanden zum Meisterkünstler machen kann ", schreibt Eric Raymond , Autor des New Hacker's Dictionary. Der beste Programmierer, den ich jemals einstellen musste, hatte nur einen umfassenden Schulkurs hinter sich, und er erstellte hervorragende Programme , moderierte die Mailingliste seiner Fans und verdiente genug Geld mit Optionen, um seinen eigenen Nachtclub zu kaufen.
- Arbeiten Sie mit anderen Programmierern an Projekten . Seien Sie der beste Programmierer in einem Projekt. sei das Schlimmste in anderen. Wenn Sie der Beste sind, testen Sie Ihre Fähigkeit, ein Projekt zu leiten und andere mit Ihrer Vision zu inspirieren. Wenn Sie am schlimmsten sind, lernen Sie von den Meistern, was sie tun und was sie nicht gerne tun (dies ist, was sie Sie anweisen).
- Arbeiten Sie an Projekten nach anderen Programmierern. Versuchen Sie, ein Programm herauszufinden, das von jemand anderem geschrieben wurde. Schauen Sie sich genauer an, was erforderlich ist, um den Code zu verstehen, und beheben Sie ihn, wenn keine Programmierer in der Nähe sind, die ihn geschrieben haben. Überlegen Sie, wie Sie Ihre Programme so gestalten können, dass sie für diejenigen, die nach Ihnen mit ihnen arbeiten, leichter zu unterstützen sind.
- Lernen Sie mindestens ein halbes Dutzend Programmiersprachen . Wählen Sie eine Sprache zum Lernen, die auf Klassenabstraktionen basiert (z. B. Java oder C ++), eine, die funktionale Abstraktionen unterstützt (z. B. Lisp oder ML oder Haskell), eine, die syntaktische Abstraktion unterstützt (z. B. Lisp), eine deklarative Sprache (z. , Prolog oder C ++ - Vorlagen) und eine - Betonung der Parallelität (z. B. Clojure oder Go).
- Vergessen Sie nicht, dass in der Phrase "Informatik" das Wort Computer ist . Denken Sie daran, wie lange Ihr Computer benötigt, um eine Anweisung auszuführen, ein Maschinenwort aus dem Speicher zu lesen (mit und ohne Fehler im Cache), eine Folge von Maschinenwörtern von einer Festplatte zu lesen und nach einem Datensatz auf einer Festplatte zu suchen ( Antworten hier ).
- Nehmen Sie an der Standardisierung einer Programmiersprache teil. Dies kann eine ANSI C ++ - Kommission oder eine Besprechung in Ihrem Team sein, in der Sie festlegen, wie viele Leerzeichen Sie für Einrückungen im Code 2 oder 4 lassen. In jedem Fall werden Sie herausfinden, was andere Personen in der Sprache mögen und wie tief sie sich fühlen und vielleicht finden Sie auch heraus, woher es kam.
- Wissen, wann es Zeit ist , die Kommission für Sprachstandardisierung so schnell wie möglich zu verlassen.
Mit all dem wird Ihnen das Lesen von Büchern nicht so viel bringen. Vor der Geburt meines ersten Kindes las ich alle Bücher über die Pflege von Babys und verstand immer noch nicht, was ich tun sollte. Glaubst du, 30 Monate später, als mein zweites Kind sich auf die Geburt vorbereitete, habe ich in Büchern nachgesehen, um mein Gedächtnis aufzufrischen? Nein. Ich stützte mich auf meine eigenen Erfahrungen, die sich als viel nützlicher und besser herausstellten als Tausende von Seiten, die von Experten verfasst wurden.
Fred Brooks beschrieb in seinem Artikel „
Silver Bullet existiert nicht “ drei Schritte, um großartige Programmierer zu finden:
- Identifizieren Sie systematisch die besten Programmierer so früh wie möglich
- Weisen Sie dem Programmierer einen Mentor zu, der sich mit der Entwicklung von Talenten befasst und seine Karriere sorgfältig überwacht
- Fördern Sie die Kommunikation wachsender Talente untereinander, damit sie Ideen austauschen können
Es stellt sich heraus, dass einige Leute bereits Eigenschaften haben, die es ihnen ermöglichen, großartige Programmierer zu werden. Sie müssen nur auf den richtigen Weg gelenkt werden. Alan
Perlis drückte es kurz aus: „
Jeder kann lernen, Skulpturen zu formen; Michelangelo würde lernen müssen, sie nicht zu formen. Ebenso bei den großen Programmierern . " Perlis wollte sagen, dass die Großen einige innere Eigenschaften haben, die nicht durch Training erworben werden. Aber woher kommen diese Eigenschaften? Ist es angeboren? Oder werden sie durch Eifer erzeugt? Wie Aguste Gusto (Figur im Cartoon
Ratatouille ) sagte: "
Jeder kann kochen, aber nur Furchtlose können großartig werden ." Ich glaube, dass wir in unserem Fall von einem brennenden Wunsch sprechen, den größten Teil meines Lebens dem gezielten Selbstlernen beim Programmieren zu widmen. Aber es kann ein
furchtlos passenderes Wort geben. Oder wie Anton Yego (Kritiker von Aguste Gusto) sagte: "
Nicht jeder kann ein großartiger Künstler werden, aber ein großartiger Künstler kann von überall her auftreten ."
Kaufen Sie also ein Buch über Java / Ruby / JavaScript / PHP. Vielleicht profitieren Sie davon. Aber Sie werden Ihr Leben nicht ändern können und in 24 Stunden oder 21 Tagen kein Programmierexperte werden. Wie wäre es mit 24 Monaten harter Arbeit, um das Thema kontinuierlich zu beherrschen? Jetzt führen wir bereits ein ernstes Gespräch ...
Literatur
- Bloom, Benjamin (Hrsg.) Talententwicklung bei jungen Menschen, Ballantine, 1985.
- Brooks, Fred, keine Silberkugeln, IEEE Computer, vol. 20, nein. 4, 1987, p. 10-19.
- Bryan, WL & Harter, N. "Studien zur telegraphischen Sprache: Der Erwerb einer Hierarchie von Gewohnheiten. Psychology Review, 1899, 8, 345-375
- Hayes, John R., vollständiger Problemlöser Lawrence Erlbaum, 1989.
- Chase, William G. & Simon, Herbert A. "Wahrnehmung im Schach" Cognitive Psychology, 1973, 4, 55-81.
- Lave, Jean, Erkenntnis in der Praxis: Geist, Mathematik und Kultur im Alltag, Cambridge University Press, 1988.
Die Antworten
Geschätzte Zeit für die Ausführung verschiedener Vorgänge in einem typischen PC:
Ausführung einer typischen Anweisung | 1 / 1,000,000,000 sec = 1 Nanosec |
aus dem L1-Cache lesen | 0,5 nanosec |
Fehler bei der Vorhersage des Übergangs | 5 nanosec |
aus dem L2-Cache lesen | 7 nanosec |
Erfassung / Freigabe von Mutex | 25 nanosec |
Lesen aus dem Hauptspeicher | 100 nanosec |
Senden Sie 2K über ein 1-Gbit / s-Netzwerk | 20.000 Nanosec |
Lesen von 1 MB nacheinander aus dem Speicher | 250.000 Nanosec |
mit Suche von der Festplatte lesen (suchen) | 8.000.000 Nanosec |
Lesen Sie 1 MB nacheinander von der Festplatte | 20.000.000 Nanosec |
Senden eines Datenpakets aus den USA nach Europa und zurück | 150 Millisekunden = 150.000.000 Nanosekunden |
Anwendung: Sprachauswahl
Einige Leser fragten mich, welche Programmiersprache sie zuerst lernen sollten. Es gibt keine einheitliche Antwort auf diese Frage, aber beachten Sie die folgenden Punkte:
- Kontaktieren Sie Ihre Freunde . Wenn sie mich fragen: "Welches Betriebssystem soll ich wählen - Windows, UNIX oder Mac?", Antworte ich: "Verwenden Sie das, das Ihre Freunde verwenden." Was Sie von Ihren Freunden lernen, deckt mehr als alle internen Unterschiede zwischen Betriebssystemen oder Programmiersprachen ab. Denken Sie auch an Ihre zukünftigen Freunde: die Community der Programmierer, zu der Sie gehören, wenn Sie Ihr Training fortsetzen. Hat die Sprache Ihrer Wahl eine große wachsende Gemeinschaft oder ist sie klein und stirbt allmählich aus? Gibt es viele Bücher, Websites und Foren, in denen Sie Antworten erhalten können? Magst du Leute, die in diesen Foren rumhängen?
- Fangen Sie einfach an . Die Programmiersprachen C ++ und Java sind für die professionelle Arbeit großer Teams erfahrener Programmierer konzipiert, die sich am meisten um die Effizienz ihrer Codeausführung sorgen. Infolgedessen weisen diese Programmiersprachen komplexe Strukturen zur Lösung solcher Probleme auf. Es ist wichtig, dass Sie lernen, wie man programmiert. Sie benötigen keine zusätzliche Komplexität. Sie benötigen eine Sprache, die speziell entwickelt wurde, um leicht zu erlernen und sich zu erinnern.
- Spielen. Wie möchten Sie lernen, Klavier zu spielen: auf die übliche interaktive Weise, wenn Sie jede Note hören, sobald Sie eine Taste drücken, oder im "Batch-Modus" - wenn Sie die gesamte Melodie erst hören, nachdem Sie alle Noten eines Songs auf den Tasten gedrückt haben? Natürlich ist der interaktive Weg viel einfacher, ebenso wie das Programmieren. Wählen Sie eine Sprache mit einem interaktiven Betriebsmodus und spielen Sie sie ab.
Angesichts all dieser Kriterien empfehle ich Python oder Scheme als erste Programmiersprache. Oder JavaScript, aber nicht, weil es ideal für Anfänger gedacht ist, sondern weil es viele Lehrbücher in dieser Sprache gibt, zum Beispiel an der
Kahn Academy . Ihr spezieller Fall kann jedoch etwas Besonderes sein, sodass Sie aus vielen anderen Sprachen auswählen können. Wenn Sie unter zehn Jahre
alt sind, könnte Ihnen die Sprache von
Alice oder
Squeak oder
Blockly gefallen (ältere Schüler mögen sie möglicherweise auch). Die Hauptsache ist, eine Wahl zu treffen und zu lernen.
Anhang: Bücher und andere Ressourcen
Ich werde gefragt, welche Bücher und Websites am besten zum Lernen geeignet sind. Ich werde noch einmal wiederholen: "Bücher allein zu lesen ist nicht genug", aber ich empfehle Folgendes: