Yao Dongs Ansicht
Lernfähigkeit, insbesondere die Fähigkeit zum Selbststudium, wann haben Sie jemals gesehen, dass diese berühmten Programmier-Experten in Foren fragen: „Welches Buch sollte ich lesen, um XX zu lernen,wie lernt man XXX schnell,welchen Code empfehlen Sie zum Lernen von XXX“? Was auch immer sie lernen wollen, sie können schnell selbst relevante Materialien finden. Diese Branche entwickelt sich zu schnell, und Technologie veraltet sehr schnell. Wenn Sie 3 Jahre lang nichts Neues lernen, können Sie ins Hintertreffen geraten.
Praktische Fähigkeit, jeder liest Bücher und Materialien, aber während andere sich noch damit abquälen, welches Buch sie lesen sollen und was die Wörter im Buch bedeuten, haben einige bereits Hunderte oder Tausende Zeilen Code zum Laufen gebracht.
Geduld und Ausdauer, Interesse ist für einen Programmierer sicherlich wichtig – Code zu schreiben, den man mag, ist eine sehr angenehme Sache –, aber in der Softwareentwicklung gibt es immer eine große Menge langweiliger und uninteressanter Arbeit, und man muss durchhalten und die Zähne zusammenbeißen, um sie zu erledigen.
Ausdrucksfähigkeit, die Fähigkeit, seine Ideen logisch, flüssig und klar vor Publikum darzulegen, sodass die Leute verstehen.
Was ist mit technischen Fähigkeiten? Technische Fähigkeiten sind nicht wichtig. Mit den oben genannten Fähigkeiten können Sie jede Technologie, die der Markt benötigt, schnell beherrschen.
Zum Schluss sprechen wir über das Gehalt. Merken Sie sich zwei Sätze:
- Das Gehalt ist nicht die Belohnung des Chefs für Ihre bisherigen Beiträge, sondern seine Erwartung an Ihre zukünftigen Beiträge.
- Dein aktueller Chef wird dir nie ein zufriedenstellendes Gehalt geben; nur dein nächster Chef wird es tun.

Cao Zhengs Ansicht
Yao Dong hat sehr gut geantwortet. Ich möchte als Ergänzung noch ein paar Worte hinzufügen.
Wir alle wissen, dass Lernfähigkeit sehr wichtig ist, aber woher kommt die Lernfähigkeit? Wie lernt und wächst man in der praktischen Arbeit, abgesehen vom Lesen von Büchern und dem Besuch von Kursen?
Ich habe früher auf Weibo ein allgemeines Konzept genannt: Was ist Fähigkeit? Deine Einstellung zu Problemen und deine Herangehensweise und Methoden, sie zu behandeln.
Erstens: Einstellung
Dein Server gibt gelegentlich 501-Fehler zurück, vielleicht nicht mit hoher Rate (auch bei Zhihu ist das schon viele Male vorgekommen). Viele Programmierer – ja, viele – tun so, als sähen sie es nicht, kümmern sich nicht darum oder schieben es auf Pech. Das ist ein Einstellungsproblem.
Später, wenn die Last hoch wird oder aus einem anderen Grund, treten plötzlich häufig 501-Fehler auf. Statt die Ursache zu untersuchen, suchen sie alle möglichen Ausreden: Der IDC-Anbieter sei schlecht, die Servermarke sei schlecht, das Betriebssystem sei schlecht, die Datenbank sei schlecht, das CDN sei schlecht, die Netzwerkbedingungen seien schlecht, der Webserver sei schlecht, oder sie sagen sogar direkt dem Chef: „Wir werden DDoS-attackiert!“ (Ich habe das erlebt – ich habe seinem Chef geholfen, mehrere Sicherheitsexperten für eine gemeinsame Beratung zu finden, und am Ende stellten wir fest, dass es überhaupt kein DDoS war; der Programmierer war einfach zu schlecht.)
Das ist Einstellung, und sie ist erschreckend. Wenn du sensibel für Probleme sein kannst und genügend Scharfsinn für jedes kleine, unbedeutende Problem hast, hast du eine Grundlage für schnelles Wachstum. Scharfsinn gegenüber Problemen ist sehr wichtig. Viele nicht fatale Fehler bei der Leistung oder in der Programmlogik können nicht erkannt werden, wenn du nicht scharf genug bist, aber sobald ein spezielles Szenario eintritt, brechen sie plötzlich aus. Ein wenig mehr Scharfsinn deinerseits verringert das Risiko solcher Krisen.
Die zweite Haltung ist die Haltung gegenüber der Lösung von Problemen. Manche Menschen sind voller Vertrauen in ihre Lösungen und glauben, sie seien narrensicher, während andere sich einen zusätzlichen Ausweg offenlassen. Zum Beispiel, wenn du sagst, sollte ich die Sicherheit meines Servers härten? Du solltest definitiv, oder? Du solltest so rigoros und gründlich wie möglich sein. Aber solltest du Passwörter trotzdem verschlüsseln, wenn du sie in der Datenbank speicherst? Und ein zufälliges Salt verwenden? Ist das nicht genau, um den schlimmsten Fall zu verhindern, dass es noch eine Schwachstelle gibt und jemand die Datenbank erbeutet? Dasselbe gilt für Programme. Einige serverseitige Daemon-Prozesse, die ich früher geschrieben habe, hatten Bugs und beendeten sich unerklärlicherweise. Natürlich muss dieser Bug gefunden und behoben werden, aber gleichzeitig schreibe einen Cron, um den Status des Daemons zu überprüfen und ihn automatisch wiederherzustellen, sobald er sich beendet. Das ist ein Backup-Plan. Selbst wenn du wirklich nicht willst, dass er ausgeführt wird, musst du trotzdem diese Vorbereitung treffen. Zwei oder sogar drei Pläne für ein Problem zu haben, ist ebenfalls eine Schlüsselqualität exzellenter Programmierer und Architekten.
Die dritte Haltung basiert auf Kommunikation und Verständnis. Wenn das Produkt- oder Betriebsteam eine unvernünftige Anforderung stellt, ist es sicherlich befriedigend und beeindruckend, sie mit einem Satz abzulehnen. Aber hast du sorgfältig kommuniziert und analysiert, auf welchem tatsächlichen Bedarf diese Anforderung basiert und ob dieser tatsächliche Bedarf eine vernünftigere Möglichkeit hat, umgesetzt zu werden? Ein pauschales "Das geht nicht, der Umsetzungsaufwand ist zu hoch" ist nicht die richtige Kommunikationshaltung. Außerdem sind die besten Produkte oft diejenigen, die Bedürfnisse verwirklicht haben, von denen die Leute ursprünglich dachten, sie könnten nicht verwirklicht werden.
Mit einer solchen Haltung hast du eine Grundlage für kontinuierlichen Fortschritt. Jetzt sprechen wir über Ansätze und Methoden.
Wenn man nur auf die Geschwindigkeit beim Tippen von Code schaut, kann man meiner Meinung nach einen hervorragenden Programmierer nicht von einem mittelmäßigen unterscheiden. Vielleicht kann jeder an einem Tag viele Zeilen Code schreiben, aber wenn ein Problem auftritt, ist der Unterschied in der Effizienz bei der Problemlösung zwischen einem mittelmäßigen und einem hervorragenden Programmierer wie Himmel und Erde. Die sogenannte Lösungseffizienz ist nichts anderes als die Analyse, Lokalisierung und Behebung von Bugs.
Der grundlegendste Punkt: Sehen Sie sich Ausführungslogs an, sehen Sie sich alle möglichen Logs an – Webserver-Logs, Datenbank-Logs, Slow-Query-Logs, Binlog-Logs, PHP-Fehler-Logs und so weiter. Wenn in der Produktion Probleme auftreten, gibt es reichlich Leute, die wild raten, ohne auch nur einen Blick in die Logs zu werfen. Es gibt auch reichlich Leute, die Logs nicht sorgfältig oder nicht vollständig lesen. Wenn Sie sich ernsthaft mit Logs beschäftigen können, haben Sie bereits viele Menschen übertroffen.
Zweitens: Modultests und Breakpoint-Analyse. Eine schlechte Angewohnheit von Programmierern ist, zunächst einen riesigen Codeblock zu schreiben und ihn dann auszuführen, ohne zu wissen, dass man Modul für Modul schreiben und testen sollte, und ohne zu wissen, dass man Breakpoints setzen, den Bereich eingrenzen und Schritt für Schritt analysieren sollte, wenn nach der Ausführung etwas schiefgeht. Breakpoint-Analyse ist ganz einfach: Fügen Sie mehrere Zwischenausgaben in den Code ein, um zu beobachten, welcher Teil das Problem hat, oder beobachten Sie den System-Overhead jedes Teils. Das ist sowohl für das Debugging als auch für die Performance-Optimierung sehr wichtig. Experten halten das wahrscheinlich für Grundlagen, aber was diese Sache angeht: Die meisten Programmierer, die ich gesehen habe, haben diese Angewohnheit nicht.
Drittens: Fehlermeldungen verstehen und suchen. Suchmaschinen bieten alle Arten von umfangreichen technischen Materialien und technischen Frage-und-Antwort-Inhalten. Die Fehlermeldungen und Hinweise, auf die Sie stoßen, lassen sich normalerweise online finden. Natürlich müssen Sie nach dem Finden im Kontext Ihres Szenarios sorgfältig nachdenken und sie gründlich verstehen, anstatt sie durch stumpfes Kopieren zu behandeln. Andernfalls haben Sie diesmal vielleicht Glück und raten richtig, aber beim nächsten Mal, wenn das Glück nicht auf Ihrer Seite ist, wissen Sie nicht, was los ist.
Viertens: ständig zusammenfassen und verallgemeinern. Bei einem Problem, einer Klasse von Problemen und verschiedenen Arten von Problemen sollten Sie gut darin sein, zu organisieren und zusammenzufassen, und ständig über Ihre eigenen Probleme nachdenken. Selbst bei Code, der keine Fehler erzeugt, gibt es, wenn Sie nach einiger Zeit zurückblicken, viele Stellen, an denen Ihr Denken falsch oder unvernünftig war, und viele Optimierungspunkte. Wenn Sie glauben, Ihr Code sei schon immer großartig und fehlerfrei gewesen, dann treten Sie definitiv auf der Stelle und machen keine Fortschritte.
Zum Thema Zusammenfassen möchte ich einen Fall teilen.
Früher hatten wir ein System mit einem sehr großen Anfragevolumen und sehr hoher Last. Ein ziemlich guter technischer Manager kam, um es zu bearbeiten. Er listete mehrere Upgrade-Pläne auf, alle zuverlässig, führte sie aus, und die Ergebnisse waren sehr gut. Als wir dann den Bericht nachverfolgten, sprach er über die von ihm vorgenommenen Upgrades und die Gesamtergebnisse. Dann habe ich ihn kritisiert.
Was habe ich kritisiert? Er hat die Upgrades gemeinsam durchgeführt und dann die Auswirkungen gemeinsam beobachtet. Also hatte er unter diesen Plänen keine Daten zur tatsächlichen Wirkung jedes einzelnen Plans oder dazu, wie sehr er zur Verbesserung beigetragen hat. Daher hatte er keine Vorstellung vom Wert und der Bedeutung jedes einzelnen Upgrade-Plans. Du hast das Problem richtig gelöst, aber wenn du nicht sorgfältig zusammengefasst und geordnet hast, sind deine Erkenntnisse begrenzt. Upgrades gemeinsam durchzuführen kann nicht als falsch bezeichnet werden, aber die Wirkungsbewertung muss separat erfolgen, und diese Daten sind sehr wertvoll. Wissensakkumulation entsteht nicht unbedingt aus dem, was du bearbeitet hast; sie entsteht aus dem, was du organisiert hast.
Das ist so ziemlich alles.
Zum Schluss möchte ich es noch einmal wiederholen.
Was ist Fähigkeit?
- Deine Haltung, wenn du auf Probleme stößt
- Deine Herangehensweise und Methoden zum Umgang mit Problemen
Das ist Fähigkeit
Originalquelle:Zhihu