Ich bin durch eine Mischung aus Tricks und Täuschung sozusagen durch die Tür der Programmierung gestolpert und dann mit voller Geschwindigkeit weitergelaufen. Vor dem Alter von 26 hatte ich fast keine Erfahrung im Schreiben von Code, doch nach meinem Masterabschluss wählte ich unerwarteterweise ein Startup, das unmöglich eine Ausbildung bieten konnte. Ich kämpfte stromaufwärts unter dem dreifachen Druck täglicher Sorgen, dass die Firma bankrottgehen könnte, der Angst, gefeuert zu werden, und kalter Blicke von Kollegen. Eineinhalb Jahre später, als ich ging, war ich bereits leitender Backend-Engineer für ein Produkt mit 5 Millionen Nutzern. Früher fürchtete ich die Computertechnik und glaubte, technische Meister müssten von Buddhas Licht umhüllt sein, Tag und Nacht ohne Pause tippen und täglich Zehntausende Zeilen Code produzieren. Jetzt, da ich ein wenig mehr von der Welt gesehen habe, finde ich diesen unruhigen Prozess wie eine erste Nacht im Rückblick überhaupt nicht inspirierend, sondern halte ihn für selbstverständlich. Ein idealer Programmierer unterscheidet sich nicht von einem idealen Architekten, einem idealen Buchhalter oder einem idealen Masseur; sie sind im Wesentlichen alle Handwerker. Ich glaube, dass jeder ein idealer Programmierer werden kann.



In den vergangenen drei Jahren habe ich mich im Internetkreis herumgetrieben. Ich habe einige Programmierer kennengelernt, mit einigen gearbeitet, einige geleitet und einige interviewt. Sie haben unterschiedliche Bildungshintergründe – einige von der Peking-Universität, einige aus Trainingsinstitutionen, einige mit Doktortitel, einige High-School-Abbrecher; sie haben auch unterschiedliche Referenzen – einige von BAT, einige von einer bankrotten Fondsgesellschaft (und waren sogar Verkäufer). Ihre Berufserfahrung reicht von 0 bis 15 Jahren. Aber ich denke, Programmierer müssen nur in drei Kategorien eingeteilt werden: geniale Programmierer, ideale Programmierer und mittelmäßige Programmierer. Was geniale Programmierer betrifft, wage ich zu sagen, dass ich nur mit dreien in Kontakt gekommen bin. Das ist Schicksal. Sieben Punkte werden entschieden, wenn man ein Spermium ist: überragendes mathematisches Talent, ruhige und akribische Logik und eine Leidenschaft für Technik, die Freude daran hat, die ganze Nacht wach zu bleiben, um schwierige Probleme zu lösen. Drei Punkte kommen vom frühen, frühen, frühen Anfangen – mit dem Wunsch, dass du, während deine Altersgenossen im Schlamm spielen, anfängst, mit Computern zu spielen, und die 10,000-Stunden-Regel durchbrichst, bevor du das College abschließt. Danach ist es bereits ein Spiel des Lebens.


Geniale Programmierer sind selten zu finden und noch schwerer in großer Zahl zu halten. Die 90 %, die ich sehe, sind immer noch mittelmäßige Programmierer. Die Ausbreitung des IT-Zeitalters hat Programmierer so häufig gemacht wie Drucker während der Renaissance. Die meisten, die in dieses Feld einsteigen, tun es nur wegen einer größeren Reisschale, höherer Bezahlung und eines besseren Lebensunterhalts. Mittelmäßige Programmierer schreiben faulen Code, ohne Standards oder Konsistenz, klammern sich an die Sprachen der alten Welt und lieben es doch, über großartige Architektur und Performance zu reden. Ihre Worte sind schöner als ihre Taten. Und ohne Ausnahme glauben sie, dass Technologie keine Zukunft hat und dass Produkt, Marketing und Management vornehmere Handwerke sind. Was 99 % von ihnen betrifft, so werden sie ganz selbstverständlich offenbaren, dass sie zufällig Talent in diesen Bereichen haben, während sie es verachten, triviale Probleme zu verstehen, wie etwa warum ein Prozess abgestürzt ist.


Aber am liebsten bin ich mit idealen Programmierern zusammen. Ich wünschte, ich könnte mit ihnen essen und leben. Wenn es erlaubt wäre, hoffe ich, dass mein Team mit ihren Bannern gefüllt sein könnte. Ideale Programmierer sind gutherzig (sie sind nie die Lieblinge der Büropolitik; sie sind eine Gruppe unschuldiger, aufgeweckter und fröhlicher Handwerker), haben eine naive Neugier (ihre Augen funkeln oft: „Wow, wie wird das gemacht!“), streben immer nach Exzellenz (ihr Lieblingssatz ist „Lass mich das noch ein bisschen genauer untersuchen“) und sind bereit zu teilen (sie sind aktiv auf GitHub, in Q&A-Communities und um dich herum und bereit, kostbare Zeit aufzuwenden, um Anfängern zu helfen). Ja, sie müssen nicht gemanagt werden. Gib ihnen nur eine grobe Richtung, und sie kommen immer mit unerwarteten Ergebnissen zurück.


Der ideale Programmierer und der mittelmäßige Programmierer sind nur durch eine Wand getrennt. Der Unterschied zwischen beiden beträgt nur sechs kleine Bits, und genau in diesen über die Zeit angesammelten kleinen Bits wird die Kluft zwischen Menschen für immer vergrößert. Interessanterweise habe ich festgestellt, dass diese sechs kleinen Bits alle mit Bewusstsein zu tun haben. Das heißt, Programmierer können, wie alle anderen Berufe in aufstrebenden Branchen, die ideale Stufe erreichen, solange sie Bewusstsein plus die Läuterung durch die Zeit mitbringen. Ein idealer Programmierer ist notwendigerweise auch ein ausgezeichneter Problemlöser.


Das erste kleine Bit: Fokus auf die Gegenwart


Ich habe zu viele Programmierer mit unruhigem Geist gesehen, deshalb muss ich "Fokus auf die Gegenwart" zur ersten Regel machen. Sie haben oft alle möglichen kleinen Träume, wie ein kleiner Teebauer, ein kleiner Gänsehändler zu werden, Produktarbeit, Vertrieb oder Investitionen zu machen, aber sie werden durch das hohe Gehalt als Programmierer oder durch den Mangel an Mut zum Berufswechsel "zurückgehalten". Wegen ihres mangelnden Fokus kümmern sie sich nicht darum, ihre eigene Arbeit gut zu machen, sie kümmern sich nicht darum, ihre Fähigkeiten zu schärfen, und sie kümmern sich nicht darum, neue Technologien zu lernen. Zugegeben, diese Welt hat großartige Produktmenschen (wie Jobs), großartige Verkäufer (wie Ellison) und großartige Investoren (wie Peterffy), und sie waren alle irgendwann einmal Programmierer. Aber haben Sie Buffetts Kommentar über Gates gehört? Wenn Bill Gates den Beruf wechseln würde, um Hunde zu verkaufen, wäre er der größte Hundehändler der Welt. Ich bin fest davon überzeugt, dass außer einigen wenigen Genies gewöhnliche Sterbliche in mehreren Bereichen Erfolg haben können, solange sie ausreichend Fokus bewahren. Und selbst wenn Sie nächstes Jahr Hunde verkaufen wollen, kann Ihre Programmiererfahrung Sie dennoch mit starker Logik, Umsicht und Geduld schulen, was in jeder Branche beträchtliche Wettbewerbsvorteile sind.


Das zweite kleine Bit: Denkfähigkeit und Antriebskraft


Ich glaube, dass der Umgang mit unerwarteten Ereignissen wie Bugs, Abstürzen, Tuning und Eindringlingen die Kluft zwischen mittelmäßigen Programmierern und idealen Programmierern besser widerspiegeln kann als das Programmieren selbst. Wenn man mit einem unbekannten Problem konfrontiert ist, wie man das Kernproblem unter komplexen Bedingungen lokalisiert, wie man Schicht für Schicht die zugrunde liegenden Ursachen analysiert, wie man Störungen beseitigt und ein minimales verifizierbares Szenario wiederherstellt und wie man Schlüsseldaten ergreift, um seine Vermutungen und Experimente zu überprüfen – das sind die besten Szenarien, um die Denkfähigkeit eines Programmierers zu demonstrieren. Ja, wenn man den Maßstab eines idealen Programmierers misst, ist Denkfähigkeit wichtiger als Erfahrung.


Manchmal kommt ein Kumpel angerannt und fragt mich: „Eine eingereichte Aufgabe hängt; was soll ich tun?“ Ich habe immer das Gefühl, er könnte es besser machen. Zum Beispiel könnte er andere Aufgaben prüfen oder testen, um den Code selbst auszuschließen; er könnte über die Web-UI nach Ausnahmen suchen (wenn er kein Konto hat, kann er mich bitten, eines bereitzustellen); er könnte Host-Logs einsehen oder Caches leeren. Zumindest sollte er mir die Aufgaben-ID und die Konsolen-Logs geben. Ideale Programmierer warten nie darauf, dass Dinge vorangehen; sie nutzen jede mögliche Methode, um Dinge voranzubringen.


Der dritte kleine Punkt: Sag niemals Nein


Ich erinnere mich, dass ich vor dem Verlassen meines vorherigen Unternehmens ein Gespräch mit meinem Chef hatte. Er sagte, meine größte Stärke sei, dass ich ihm nie gesagt hätte, etwas sei nicht machbar. Später stellte ich fest, dass es in vielen Teams einen Gegensatz zwischen Technik und Produkt gibt. Programmierer verwenden oft „technisch unmöglich“, um Produktanforderungen zu blockieren, während Produktleute oft „Warum kann Facebook das, aber wir nicht?“ verwenden, um Programmierer zu verspotten. Diese beiden Sätze sollten verbotene Wörter sein. Im Grunde sind sie nicht förderlich für die gegenseitige Zuneigung zwischen Programmierer-Affen und Produkt-Hunden.


Der Ausdruck „technisch unmöglich“ ist leicht dahergesagt, aber wie viele Menschen sind sich, wenn sie ihn sagen, zu 100 % sicher? Wenn du nicht sicher bist, warum schaust du nicht erst bei Google nach, bevor du antwortest? Ich dachte ursprünglich, Programmierer seien voller Fantasie; gerade wegen der Fantasie sind so viele Software- und Internetprodukte entstanden, die unser Leben verändern. Nachdem ich mehr gesehen habe, verstehe ich, dass die meisten Programmierer im Kampf gegen Bugs konservativ geworden und nicht bereit sind, Risiken einzugehen, während viele Teams auch nicht bereit sind, Misserfolge zu tolerieren. So wird „Nein sagen“ zu einem habituellen Widerstand. Erinnerst du dich noch, warum Zeng Guofan die Hunan-Armee auflöste? Er sagte, diese Armee habe „tief angesammelten Abendgeist“ und könne nicht mehr kämpfen. Um ein idealer Programmierer zu sein, darfst du dir nicht die Gelegenheit geben, diesen Abendgeist zu nähren. Wenn du mit unvernünftigen Forderungen konfrontiert wirst, kannst du die Zeitkosten darlegen und einen indirekten Rettungsplan aufzeigen. Einfach nur direkt „Nein“ zu sagen, ist nicht ratsam.


Der vierte kleine Punkt: In die Zukunft investieren


Programmierer ist ein sehr grausamer Beruf. Die Sprachen, Frameworks und Muster, die du lernst und verwendest, können innerhalb weniger Jahre zu den Blumen von gestern werden; die andere Gruppe von Programmierern, über die du dich jetzt lustig machst, kann sich bald umdrehen und sich über dich lustig machen. Also müssen ideale Programmierer, neben der guten Erledigung ihrer eigenen Arbeit, Zeit damit verbringen, in die Zukunft zu investieren. Was ist eine „Investition“? Investition bedeutet, dass die Zeit, die du jetzt hineinsteckst, in der Zukunft in Form von mehr Zeit oder Geld zu dir zurückkommt (schau dir die aktuellen Gehälter von Programmierern an, die vor ein paar Jahren iOS gelernt haben!). Nehmen wir mein eigenes Feld – Data Mining – als Beispiel. Um 2008 begann Hadoop aufzusteigen, und das Konzept „Big Data“ wurde heiß; Hadoop-Ingenieure waren selbst mit einem Vermögen kaum zu finden, und Internetfirmen verlagerten ihre Geschäfte mit Datenstatistik, Datenanalyse und Data Mining auf verteilte Plattformen. In den letzten Jahren, während Hadoop weiter iteriert, ist Spark plötzlich als neue Kraft aufgetaucht und hat Hadoops Sortierrekord gebrochen. Sein Leistungsvorteil durch das Speichern von Zwischendaten im Arbeitsspeicher und seine reichen Datenstrukturen lassen die Leute sich endlos in es verlieben, während verschiedene seltsame kleine Bugs und die steile Lernkurve die Leute am liebsten wieder aussteigen lassen. Wer klare Augen hat, weiß also, dass Spark der Zukunftstrend ist (Speicher wird immer billiger). Unter der Bedingung, dass das Hauptgeschäft auf Hadoop bleibt, kannst du einige kleine Module angemessen auf Spark umstellen und dabei die Entwicklung der Spark-Community im Auge behalten. Bald werden die durch Spark gewonnenen Leistungsvorteile die früher investierte Lernzeit wieder einbringen.


Der fünfte kleine Punkt: Mach guten Gebrauch von Werkzeugen


Der gute Einsatz von Werkzeugen lässt sich in vier Ebenen unterteilen:

  • Suchmaschine
  • Glaube nicht an Wiederholung
  • Code-Schnipsel
  • Automatisierung

Als ich damals in die Branche einstieg, fragte mich ein Freund, der Informatik studiert hatte, aber Beamter geworden war: „Du hast überhaupt nie Programmieren gelernt. Wie schreibst du normalerweise Code?“ Ich sagte: Google, und wurde gnadenlos verspottet, so sehr, dass meine Kontonamen überall 2shou sind und ich mir sage, dass ich ein schamloser Second-Hand-Programmierer bin. Das ist ein Witz, aber wenn man mich jetzt fragen würde, würde ich immer noch Google antworten. Das Wachstum eines Programmierers gleicht einem wachsenden Kreis. Außerhalb liegt ein grenzenloses Meer; je größer der Kreis, desto größer die Fläche, die das Meer berührt. Je mehr man weiß, desto mehr weiß man nicht. Die Informatik ist außerdem eine Disziplin, die extrem schnelle Generationenwechsel durchläuft, und sie ist die Disziplin mit dem besten internetbasierten Wissen. Es ist schwierig, traditionelle formale Lehrmethoden mit Unterricht und Lernen anzuwenden; im Gegenteil, es ist einfach, das neueste Wissen über Suchmaschinen zu erlangen.


Glaube nicht an Wiederholung. Die Worte des Meisters nennen es das DRY-Prinzip (Don't repeat yourself). Nachdem man viel Code geschrieben hat, entwickelt man ein intuitives Gespür für guten und schlechten Code. Meine Maßstäbe sind Prägnanz und Standardisierung. Prägnanz ist kein Maßstab für ästhetische Schönheit. Je weniger Wiederholung, desto weniger Gelegenheiten hat man, Fehler zu machen, und desto geringer sind die Kosten der späteren Wartung.


Wenn du unglücklicherweise Code von vor drei Wochen verlierst, kannst du vielleicht mit einem außergewöhnlichen Gedächtnis die in deinem Kopf verweilenden Fragmente reproduzieren, aber wenn es Code von vor drei Monaten ist, wirst du wahrscheinlich nicht so viel Glück haben. Ein idealer Programmierer wird alle Anstrengungen unternehmen, um effektive Wege zur Speicherung von Informationen zu finden und kurze Fragmente wie Code, Skripte, Konfigurationen und Erfahrungen, die bei der Arbeit in Geistesblitzen notiert wurden, festzuhalten, damit sie jederzeit eingesehen werden können.


Ein idealer Programmierer muss faul sein. Für ihn sind sich wiederholende Arbeitsschritte genauso hässlich wie sich wiederholender Code. Wenn er erkennt, dass eine Aufgabe langfristig wiederholt werden könnte, gilt: Je früher sie automatisiert wird, desto besser.


Der sechste kleine Baustein: Zeit einteilen


Zeitmanagement ist für den Beruf des Programmierers besonders wichtig, denn bei der Erledigung von Aufgaben muss man wie ein Wolf in der Wildnis allein gehen. Wenn du dich ohne äußere Zwänge beständig selbst kontrollieren und effizientes Arbeiten und Lernen sicherstellen kannst, wirst du mit der Zeit sicherlich leistungsfähiger als der Durchschnittsmensch.


Programmierer verrichten hochintensive geistige Arbeit. Im Allgemeinen reichen 4-5 Stunden konzentrierter Fokussierung auf die Hauptarbeit pro Tag aus, aber außerhalb der Arbeit musst du Zeit fürs Lernen einplanen. Neben dem Lernen ist es auch notwendig, etwas Zeit zu lassen, um den Kopf frei zu bekommen. Nutze die Pausen zum Teekochen oder Kaffeetrinken, um diese kostbare Zeit für dich zu behalten, vorauszudenken und zurückzublicken – mit halbem Aufwand doppelten Erfolg zu erzielen.


Nach all dem könnte mancher fragen: Was bringt es, sich solche Mühe zu geben, um ein idealer Programmierer zu werden? Bringt es ein hohes Gehalt? Nein. Kann es zu einer Beförderung führen? Nicht unbedingt. Eine hellhäutige, reiche und schöne Frau heiraten? Dann lieber Hunde verkaufen.


Kazuo Inamori erzählte einmal eine Geschichte: Handwerker aus der Meiji-Ära wurden vom Kaiser gerufen. Obwohl sie ungebildete Landleute waren, widmeten sie ihr ganzes Leben einem einzigen Handwerk und trugen auf natürliche Weise einen edlen Charakter. Ein idealer Programmierer ist vielleicht jemand, der diesem edlen Geist folgt.

Autor: Sandy
Original-Link: http://mdsa.51cto.com/art/201511/496267.htm#topx