Dies ist eine wahre Geschichte, über mich selbst. Wie glitt ein rationales Lebewesen allmählich in den Wahnsinn ab?

Ich saß in einem Anzug in meinem Büro, während eine vage Startup-Idee in meinem Kopf schwebte. Dann beschloss ich, Programmieren zu lernen. Ich hatte einmal mitbekommen, wie ein paar Leute damit angaben, dass sie mit einer Sprache namens Ruby Büroarbeit mühelos automatisierten. Ich dachte: "Ha, Ruby." Ich ging nach Hause und googelte Ruby. Fünfzehn Sekunden später wählte ich zufällig ein Ruby-Tutorial aus und begann zu lernen.

Eine Woche später besuchte ich das erste Hacker-Meetup meines Lebens. Alle dort diskutierten über Scala, Clojure und Go. Ich dachte, die wissen wirklich viel. Ich drehte mich um und lieh mir drei O'Reilly-Bücher aus und las etwa 50 Seiten von jedem.

Was? Du fragst, warum ich kein einziges Buch zu Ende gelesen habe? Das liegt daran, dass jedes Buch einfach und leicht verständlich beginnt und dann beginnt, Annahmen zu treffen – anzunehmen, dass du bestimmtes Wissen hast, anzunehmen, dass du weißt, wie man bestimmte Tools benutzt – aber ich wusste nichts davon, okay?

Ein Freund von mir sagte mir, ich sollte Emacs lernen, und gab mir seine Konfigurationsdatei. Ich verbrachte mehrere weitere Stunden damit, die grundlegende Lisp-Syntax zu lernen, damit ich meine eigene Konfigurationsdatei einrichten konnte.

Dann ging jemand an mir vorbei, sah, wie ich Emacs benutzte, und fragte: "Warum benutzt du noch Emacs (stell dir den Gesichtsausdruck vor), weißt du nicht, dass Vim besser ist?" Ich dachte: "Ha, Vim", und so begann ich, Vims endlose Tastaturkürzel auswendig zu lernen.

Entwickler diskutieren oft darüber, welcher Texteditor der beste ist. Darüber hinaus behandeln Entwickler dies als einen Glaubenskrieg – die Beurteilungskriterien basieren nicht auf objektiven Maßstäben, sondern auf historischen Trennlinien.

Damals glaubte ich, je schneller ich tippen konnte, desto schneller konnte ich programmieren. Also verließ ich das traditionelle Tastaturlayout und wechselte zum für Programmierer unverzichtbaren Dvorak-Layout (genau wie das unten abgebildete). Objektiv betrachtet ist dies für Programmierer das effizienteste Tastaturlayout.

Wenn du dir das Tastaturlayout oben ansiehst, kannst du mir sagen, wie viele Buchstabentasten, Zifferntasten und Sonderzeichentasten an ihrer ursprünglichen Position geblieben sind? Die Antwort liegt im einstelligen Bereich.

Zu dem Zeitpunkt, als ich Linux erfolgreich booten und zehn Wörter pro Minute tippen konnte, begann ich, Python mithilfe von Büchern und Udacity-Kursen zu lernen.

Nach sieben Monaten mühsamen Ringens ergatterte ich meine erste Stelle als Softwareentwickler.

Als mich der CTO interviewte, erzählte ich ihm von all den Tools, die ich gelernt hatte, und den schicken Konfigurationsdateien, die ich verwendete. Der CTO hörte höflich zu und nickte von Zeit zu Zeit. Nachdem ich damit fertig war, mit meinem umfangreichen Wissen zu prahlen, sah er mich an und sagte: „Eigentlich gibt es viele Wege, die meisten Probleme zu lösen, aber nur ein winziger Bruchteil davon ist sinnvoll.“

Vor vier Jahren beschloss das Unternehmen, bei dem ich war, sein Produkt mit Ruby on Rails zu entwickeln. Keiner der Ingenieure hatte Einwände gegen die Wahl der Sprache, und bis heute läuft ein Großteil ihres ursprünglichen Codes noch. Alle Ingenieure verwenden MacBooks, nicht nur, weil MacBooks zuverlässig sind, sondern auch, weil sie den in ihrem Produkt verwendeten Ubuntu-Linux-Servern sehr ähnlich sind. Die Ingenieure hier streiten nicht darüber, ob Vim oder Emacs besser ist – alle verwenden RubyMine, eine leistungsstarke integrierte Entwicklungsumgebung mit hervorragenden Standardkonfigurationen. Jeder Ingenieur hier verwendet genau dieselben Tools, was bedeutet, dass jeder einen beliebigen Platz wählen und sofort mit dem Kollegen zu seiner Linken oder Rechten Pair Programming machen kann, ohne sich Gedanken über die Einrichtung der Umgebung machen zu müssen. Die Verwendung identischer Konfigurationen erleichtert die Zusammenarbeit zwischen zwei Entwicklern erheblich.

Obwohl ich Ruby on Rails nicht kannte, hielt mich das Unternehmen für geeignet für die Stelle. Weil ich Python und Django kannte und einen Hackathon gewonnen hatte, fand das Unternehmen, dass dies ausreichte, um meine Fähigkeiten zu belegen.

Die ersten paar Wochen waren hart. Die Schwierigkeit kam nicht nur daher, dass ich in ein neues Team kam und eine neue Sprache, ein neues Framework und eine neue Codebasis verwendete, sondern auch daher, dass ich erkannte, dass die Menschen um mich herum mit einer selbstquälerischen Haltung programmieren lernten.

Ich verbrachte Monate allein in Bibliotheken und Cafés damit, blind verschiedene Tools über die Kommandozeile zu installieren, Linux-Treiber zu debuggen und triviale Probleme wie nicht übereinstimmende Klammern zu lösen. Ich probierte jeden Online-Kurs aus, der mir einfiel, und meldete mich für unzählige MOOCs an. Ich glaube, ich habe tatsächlich nichts gelernt, bis ich bei einer Leistungsbeurteilung nach einem Monat auf den fünften Platz vorrückte. Diese Erfahrungen gaben mir den Eindruck, dass Programmieren ein Kampf ist, den man niemals gewinnen kann. Ich begann zu verstehen, wie trostlos die Vergangenheit dieser scheinbar normalen Programmierer wirklich war – sie hatten so viel durchgemacht und so viel so lange unterdrückt. Ich muss sagen, Programmieren zu lernen ist praktisch eine antisoziale Aktivität.

5474239b87b81

Am ersten Wochenende, nachdem ich meinen vorherigen Job gekündigt hatte, lud ich dieses Selfie hoch. Ich stand an diesem Tag früh auf und zog einen ordentlichen Anzug an. Ich trug den Anzug, um mich daran zu erinnern: Ich bin ein Mensch, der gerade dabei ist, Programmieren zu lernen. Die Facebook-Bildunterschrift lautete: „Mein neues Büro – der Esstisch. Ich lebe jeden Tag von 8 bis 6 und ruhe mich nur aus, wenn es unbedingt sein muss.“ Im echten Leben redete ich wie ein Programmierer und dachte wie einer. Mittlerweile habe ich mich an dieses Wort gewöhnt.

Meine Kollegen stoßen fast nie auf Syntaxfehler, weil ihre IDE dieses Problem für sie löst. Und wenn sie doch auf eine Fehlermeldung stoßen, schicken sie, falls sie sie nicht innerhalb weniger Minuten lösen können, eine Sofortnachricht an einen anderen Kollegen und bitten um Hilfe. Sie gehen ohne Hemmungen an den Schreibtisch von jemandem und beginnen mit Pair-Programming. Die Programmierer hier sind nicht übermäßig egoistisch und halten sich auch nicht für Eliten. Sie betrachten Programmieren auch nicht als schmerzhafte Anstrengung. Es ist einfach ein konstruktives Gespräch zwischen erwachsenen Freunden.

Die von den Mitgliedern eines Teams verwendeten Tools sind sehr einheitlich. In Herzensprojekten und Hackathons verwenden Entwickler vielleicht neuere JavaScript-Frameworks wie Angular.js. Aber in einem echten Team konzentrieren die Mitglieder ihre Energie darauf, das Produkt mit bestehenden Technologien zu verbessern. Aus dieser Perspektive sind sie konservativ.

Bei ThoughtBot wirst du etwas Ähnliches sehen. Bei ThoughtBot halten sich alle an einen kleinen, effizienten Satz von Tools (Rails, Vim, Postgres und Redis). Weil das Toolset klein ist, können Ingenieure in diesem Bereich leicht zu Experten werden, und weil alle dasselbe Toolset verwenden, wird die Zusammenarbeit untereinander einfach.

Die eigentliche Frage ist also: Wenn effiziente Teams am produktivsten sind, wenn sie einen kleinen, festen Satz von Tools verwenden, dann ist es für Menschen, die Programmieren lernen, vielleicht auch am besten, einen kleinen, festen Satz von Tools zu verwenden. Diese Online-Programmierkurse und Coding-Bootcamps sind offensichtlich dieser Meinung.

Aber als Einzelperson gibt es so viele Tools zur Auswahl, dass es wirklich schwer ist zu entscheiden, welchen Weg man gehen soll. Ich weiß das, weil ich es selbst durchgemacht habe. Das Können eines guten Programmierers lässt sich durch eine T-Form darstellen – ein wenig über viele Bereiche zu wissen, aber nur wenige wirklich zu beherrschen. Im Laufe der Jahre wird sich die T-Form jedoch allmählich in eine Unterstrichform verwandeln.

Ich habe viele Menschen getroffen, die Programmieren lernen und von Anfang an alles lernen und alles beherrschen wollen. Am Ende scheitern sie alle und geben ihren Traum, Programmierer zu werden, auf. Ich möchte nicht, dass dir das auch passiert.

Du musst dich auf weniger Dinge konzentrieren

Ohne weitere Umschweife: Hier sind einige große Fehler, die Anfänger typischerweise machen:

  • Von einer Sprache zur anderen wechseln, von einem Framework zum nächsten springen oder sich selbst etwas vormachen und glauben, jede Sprache oder jedes Framework beherrschen zu können.
  • Nischen-Tools zu verwenden, um deine Entwicklungsumgebung aufzubauen, statt traditionelle, zuverlässige Tools zu wählen.
  • Tools wie Docker und Famo.us nur deshalb zu lernen, weil sie neu und angesagt sind, obwohl du die grundlegenderen Technologien noch nicht einmal beherrschst.

Wenn ich meinen Rat in einem einzigen Wort zusammenfassen müsste, würde ich sagen: Fokus.

Lass mich dich fragen – würdest du das Wort „Fokus“ verwenden, um deinen Programmier-Lernplan zu beschreiben? Wenn du denkst, dein Plan ist fokussiert genug, gut. Du kannst jetzt aufhören zu lesen und zu deinem Plan zurückkehren, um mit dem Lernen zu beginnen, denn ich möchte nichts sagen, das dich aus dem Fokus bringen könnte.

Wenn dein Plan nicht fokussiert genug ist, hast du ebenfalls Glück – tu, was ich sage, und du wirst dich fokussieren können, aber es dauert ein paar Minuten deiner Zeit, um ein paar schwierige Entscheidungen zu treffen. Warte, geh nicht weg!

Okay, du bist immer noch hier. Hier sind die schwierigen Entscheidungen, die du treffen musst.

  1. Wähle eine Art von Software: Es kann eine Web-App, eine Mobile-App, ein Spiel oder ein eingebettetes System sein. Ich empfehle Web-Apps, weil sie flexibel sind. Es gibt reichlich Lernressourcen und unzählige Jobmöglichkeiten. Wenn dein Interesse nicht Web-Apps gilt, schließe diese Seite, tippe „getting started in _____ development“ in das Google-Suchfeld und klicke die Ergebnisse eines nach dem anderen durch.
  2. Wähle eine Programmiersprache: JavaScript, Ruby oder Python. Jede Sprache hat ihre Stärken, und jede hat ein entsprechendes Tool zum Erstellen von Web-Apps (Node.js, Rails bzw. Django). Wenn du nicht klar weißt, welche Sprache du lernen solltest, empfehle ich JavaScript, weil es am weitesten verbreitet ist.
  3. Wähle einen Online-Kurs. Hier sind einige Optionen: Wenn du an JavaScript interessiert bist, schau dir FreeCodeCamp.com oder NodeSchool.io an; wenn du an Ruby interessiert bist, schau dir TheOdinProject.com oder TeamTreehouse.com an; wenn du an Python interessiert bist, schau dir Udacity.com an. Vertraue der Weisheit der Kursleiter, die diese Kurse entworfen haben, schließe den Kurs in der vorgeschlagenen Reihenfolge ab und springe nicht herum.
  4. Kaufe ein neues oder gebrauchtes MacBook oder installiere Ubuntu Linux auf deinem aktuellen Computer. Was andere Werkzeuge betrifft, die du vielleicht brauchst, installiere einfach, was der Online-Kurs empfiehlt.

Wenn du diese Entscheidungen einmal getroffen hast, ist der Rest des Weges einfach. Bleib einfach besonnen und lass dich nicht von den neuen Tools um dich herum ablenken. Verbringe jeden Tag, sieben Tage die Woche, ein wenig Zeit mit deinem Online-Kurs – auch wenn es nur eine halbe Stunde am Stück ist. Vertraue auf die Entscheidungen, die du heute triffst. Denk schließlich daran: Mit Geduld kann jede fähige Person eine herausragende Programmiererin oder ein herausragender Programmierer werden – und das schließt dich absolut mit ein.

Quelle: http://code.csdn.net/news/2822796