Kürzlich habe ich viele Artikel von Steve Yegge gelesen. Einer davon mit dem Titel "Practicing Programming" (Programmieren üben) wurde 2005 geschrieben, und nachdem ich ihn gelesen hatte, war ich verblüfft:
Entgegen Ihrer Überzeugung ist es keine echte Übung, sich einfach jeden Tag in Arbeit zu vergraben – an Meetings teilzunehmen trainiert nicht Ihre zwischenmenschlichen Fähigkeiten; das Beantworten von E-Mails verbessert nicht Ihre Tippfähigkeiten. Sie müssen regelmäßig Zeit für gezieltes Üben einplanen, um Dinge besser zu machen.Das ist ein wichtiger Unterschied – ich fahre jeden Tag zur Arbeit, aber mein Fahrkönnen liegt weit unter dem eines professionellen Fahrers; ebenso reicht es vielleicht nicht aus, jeden Tag zu programmieren, um ein professioneller Programmierer zu werden. Was kann also einen gewöhnlichen Menschen in einen professionellen Fahrer oder einen professionellen Programmierer verwandeln? Was müssen Sie üben?
Ich kenne viele herausragende Programmierer – das ist einer der besten zusätzlichen "Vorteile" der Arbeit bei Amazon. Wenn Sie sie genau beobachten, werden Sie feststellen, dass sie ständig üben. Sie sind bereits exzellent, aber sie üben trotzdem. Ihre Übungsmethoden sind vielfältig, und ich werde in diesem Artikel nur einige davon vorstellen.
Soweit ich es verstehe, liegt der Grund, warum diese herausragenden Programmierer so erfolgreich sind, darin, dass sie die ganze Zeit geübt haben. Einen perfekten Körper erhält man nur durch regelmäßige Bewegung, und man muss weiter trainieren, um ihn zu erhalten, sonst gerät er aus der Form. Dasselbe gilt für Programmierung und Software-Engineering.
Die Antwort findet sich in einem Artikel im Scientific American mit dem Titel "The Expert Mind" (Experten-Denken):
Ericsson schlug vor, dass es nicht auf die Erfahrung selbst ankommt, sondern auf „bewusstes Üben“, das heißt, ständig Dinge herauszufordern, die über die aktuellen Fähigkeiten hinausgehen. Manche begeisterten Amateure verbringen viel Zeit mit Schachspielen, Golf oder Musikinstrumenten, bleiben aber möglicherweise auf Amateurniveau, und deshalb kann ein gut ausgebildeter Schüler sie in relativ kurzer Zeit überholen. Bemerkenswert ist, dass im Hinblick auf die Verbesserung des eigenen Niveaus eine große Menge Zeit, die mit Schachspielen verbracht wird (sogar in verschiedenen Wettkämpfen), immer noch weniger wirksam zu sein scheint als gezieltes Training. Der Hauptwert des Trainings besteht darin, Schwächen zu entdecken und sie gezielt zu verbessern.„Bewusstes Üben“ bedeutet, sich häufig mit Problemen zu befassen, die gerade an der Grenze der eigenen Fähigkeiten liegen, also mit Dingen, bei denen die Wahrscheinlichkeit eines Scheiterns hoch ist. Wenn man kein Scheitern erlebt, wächst man möglicherweise nicht. Man muss sich ständig selbst herausfordern und seine Grenzen überschreiten.
Solche Herausforderungen treten manchmal bei der Arbeit auf, aber nicht unbedingt. Die Trennung von Übung und beruflicher Arbeit wird im Programmierbereich oft „Code Kata“ genannt.
Das Konzept Code Kata wurde von David Thomas vorgeschlagen, einem der Autoren von The Pragmatic Programmer: From Journeyman to Master. Dieses Konzept bezieht sich hauptsächlich auf wiederholtes Üben einer bestimmten Technik oder Fertigkeit, um sie zu beherrschen. — Anmerkung des Übersetzers.

Ein sogenanntes Kata ist eine Reihe von Bewegungen. Dieses Konzept ist aus den Kampfkünsten entlehnt.
Wenn du einige Beispiele für Code Katas sehen möchtest (das heißt, Wege, intensiv zu lernen und Programmierfähigkeiten zu schärfen), bietet Steve Yegges Artikel tatsächlich einige gute Vorschläge. Er nennt sie „Übungsdrills“:
1. Schreibe deinen eigenen Lebenslauf. Liste alle deine relevanten Fähigkeiten auf und markiere dann diejenigen, die auch 100 Jahre später noch nützlich sein werden. Gib jeder Fähigkeit eine Punktzahl von 10.
2. Liste die Programmierer auf, die du bewunderst. Versuche, diejenigen einzubeziehen, mit denen du zusammenarbeitest, denn durch sie wirst du bei der Arbeit einige Fähigkeiten erwerben. Schreibe 1–2 herausragende Punkte von jedem von ihnen auf, also die Aspekte, die du bei dir selbst verbessern möchtest.
3. Sieh dir den Abschnitt "Computer Science" auf Wikipedia an, finde die Kategorie "Computer Science Pioneers", wähle eine Person aus der Liste aus, lies ihre Geschichte und öffne alle Links, die dich beim Lesen interessieren.
4. Verbringe 20 Minuten damit, den Code von jemand anderem durchzulesen. Exzellenten Code zu lesen und schlechten Code zu lesen ist beides nützlich; lies beides im Wechsel. Wenn du den Unterschied zwischen ihnen nicht erkennen kannst, bitte einen Programmierer, den du respektierst, dir zu zeigen, wie exzellenter Code und schlechter Code aussehen. Zeige anderen den Code, den du gelesen hast, und bitte um ihre Meinungen.
5. Liste deine 10 liebsten Programmierwerkzeuge auf — diejenigen, die du deiner Meinung nach am meisten benutzt und auf die du nicht verzichten kannst. Wähle zufällig eines aus und verbringe eine Stunde damit, seine Dokumentation zu lesen. Versuche in dieser Stunde, eine Funktion dieses Werkzeugs kennenzulernen, von der du nicht wusstest, dass es sie gibt, oder eine neue Art und Weise zu entdecken, es zu verwenden.
6. Denke darüber nach, worin du außer Programmieren am besten bist. Denke dann darüber nach, welche Art von Übung dich so geschickt und professionell gemacht hat. Welche Inspiration bringt das für deine Programmierarbeit? (Wie kannst du diese Erfahrungen auf das Programmieren anwenden?)
7. Nimm einen Stapel Lebensläufe und verbringe eine Stunde in einem Raum mit einer Gruppe von Interviewern. Stelle sicher, dass jeder Lebenslauf von mindestens 3 Interviewern gelesen und mit einer Punktzahl von 1 bis 3 bewertet wird. Diskutiert die Lebensläufe, die von verschiedenen Interviewern sehr unterschiedlich bewertet wurden.
8. Nimm an einem Telefoninterview teil. Schreibe danach dein Feedback auf, teile deine Meinung mit und sprich dann mit der Person, die das Telefoninterview geführt hat, um zu sehen, ob ihr euch auf eine Schlussfolgerung einigen könnt.
9. Führe ein technisches Interview durch, und die interviewte Person sollte ein Experte auf einem Gebiet sein, von dem du nicht viel verstehst. Bitte ihn, davon auszugehen, dass das Publikum nichts über dieses Gebiet weiß, also lass ihn mit den Grundlagen beginnen. Versuche zu verstehen, was er sagt, und stelle bei Bedarf Fragen.
10. Nutze die Gelegenheit, bei einem technischen Interview von jemand anderem dabei zu sein. Höre währenddessen einfach aufmerksam zu und lerne. Während der Kandidat hart daran arbeitet, technische Probleme zu lösen, solltest du auch versuchen, diese Probleme in deinem eigenen Kopf zu lösen.
11. Finde eine Person, mit der du praktische Probleme austauschen kannst, und tauscht alle zwei Wochen Programmierprobleme miteinander aus. Verbringt 10–15 Minuten damit, sie zu lösen, dann 10–15 Minuten damit, sie zu besprechen (egal, ob sie gelöst sind oder nicht).
12. Wenn du eine Interviewfrage hörst, die du nicht sofort lösen kannst, kehre schnell an deinen Platz zurück und schicke dir die Frage per E-Mail als Erinnerung für später. Finde in dieser Woche etwas Zeit, um sie mit deiner Lieblingsprogrammiersprache zu lösen.
Der Grund, warum ich Steves Liste mag, ist, dass sie umfassend erscheint. Manche Programmierer verstehen unter „Übung“ einfach schwierige Programmierrätsel. Aber meiner Meinung nach geht esbeim Programmieren mehr um Menschen als um Code.Deshalb ist dieser Ansatz, indem man alle obskuren Programmier-Interviewfragen der Welt löst, nur begrenzt geeignet, deine persönlichen Fähigkeiten zu verbessern.
Was „bewusstes Üben“ betrifft, mag ich auch Peter Norvigs„Teach Yourself Programming in Ten Years“ (lerne zehn Jahre lang selbstständig programmieren)viele Vorschläge, die in dem Artikel vorgebracht werden:
1. Kommuniziere mit anderen Programmierern. Lies den Code anderer Leute. Das ist wichtiger als jedes Buch oder jeder Trainingskurs.
2. Schreibe selbst Programme! Der beste Weg zu lernen ist, es durch eigenes Tun zu lernen.
3. Belege Programmierkurse in Bachelor- oder Masterstudiengängen.
4. Finde einige Projekte, die du umsetzen kannst, und bilde mit anderen Programmierern ein Team. Während des Projekts lerne zu erkennen, wer die besten und wer die schlechtesten Programmierer sind.
5. Arbeite mit anderen Programmierern an Projekten, lerne, Code zu warten, den du nicht geschrieben hast, und lerne, Code zu schreiben, der für andere leicht zu warten ist.
6. Lerne viele verschiedene Programmiersprachen, insbesondere solche, die eine andere Weltsicht und ein anderes Programmiermodell haben als die Sprachen, mit denen du jetzt vertraut bist.
7. Verstehe den Einfluss von Hardware auf Software. Wisse, wie lange dein Computer braucht, um eine Anweisung auszuführen, wie lange es dauert, ein Wort aus dem Speicher zu holen (mit oder ohne Cache), wie lange es dauert, Daten über Ethernet (oder das Internet) zu übertragen, wie lange es dauert, sequenzielle Daten von einer Festplatte zu lesen oder zu einer anderen Stelle auf einer Festplatte zu springen, und so weiter.
Du kannst dir auch Inspiration von Dave Thomas' 21 praktischen Code-Katas holen (CodeKata.com), oder du ziehst es vielleicht vor, einem lokalen "Programmier-Dojo" (CodingDojo.org) beizutreten.
Für "bewusstes Üben" kann ich keine lange Liste mit Vorschlägen wie Steve, Peter oder Dave anbieten. Ich bin weit weniger geduldig als sie. Tatsächlich braucht "coding kata" meiner Meinung nach nur zwei Bewegungen:
1. Schreibe einen Blog. Ich habe Anfang 2004 den CodingHorror.com-Blog als eine Form meines eigenen bewussten Übens gegründet. Er war zunächst sehr unbekannt, wurde später aber das Wichtigste, was ich in meiner Karriere getan habe. Also solltest du auch einen Blog schreiben. Diejenigen, die schließlich "der Welt bekannt werden", sind oft diejenigen, die effektiv schreiben und kommunizieren können. Ihre Stimmen sind die lautesten; sie sind diejenigen, die die Regeln aufstellen und die Trends der Welt anführen.
2. Beteiligen Sie sich aktiv an berühmten Open-Source-Projekten. All das hochtrabende Gerede klingt gut, aber sind Sie ein Großsprecher oder ein Macher? Reden Sie nicht nur, ohne zu handeln. Das ist sehr wichtig, denn Menschen werden Sie an Ihren Taten messen, nicht an Ihren Worten. Arbeiten Sie hart daran, etwas Echtes und Nützliches öffentlich zu hinterlassen, und dann können Sie sagen: „Ich habe zu diesem Projekt beigetragen.“
Wenn du brillanten Code schreiben und diesen Code der Welt mit brillanten Worten erklären kannst, dann denke ich, dass du die übelste Coding-Kata gemeistert hast!
Quelle: http://www.topthink.com/topic/11711.html