Wenn ich auf meine Karriere und mein Leben als Programmierer zurückblicke, gab es viele verschiedene Möglichkeiten, meine Programmierkenntnisse zu verbessern: Code lesen, Code schreiben, Bücher lesen, Podcasts anhören, Screencasts ansehen und vieles mehr.
Meine Frage lautet: Was haben Sie am effektivsten getan, um Ihre Programmierkenntnisse zu verbessern? Was würdest du anderen empfehlen, die sich verbessern wollen?
Ich erwarte hier vielfältige Antworten und keine einzige "one size fits all" Antwort - ich würde gerne wissen, was für verschiedene Leute funktioniert hat.
self-improvement
skills
Oded
quelle
quelle
Antworten:
In keiner bestimmten Reihenfolge ...
Arbeiten mit Menschen, die viel schlauer sind als ich
Höre immer auf das, was andere zu sagen haben, egal ob Junior, Intermediate, Senior oder Guru. Berufsbezeichnung hat nichts zu bedeuten.
Andere Frameworks / Sprachen lernen und sehen, wie sie Dinge tun, und das mit Dingen vergleichen, die ich bereits kenne
Lesen Sie über Muster, bewährte Methoden, und überprüfen Sie dann meine alten Sachen, und wenden Sie diese Muster an, wenn nötig
Paar-Programmierung
Nicht einverstanden mit allem, was Joel sagt. ;)
quelle
Die Entscheidung TO sein , 'Jack-of-all-Trades'
Ziemlich früh in meiner Karriere war ich Experte mit einer bestimmten Datenbank und Programmiersprache. Leider hat diese bestimmte Datenbank die "Datenbankkriege" verloren und ich habe festgestellt, dass meine Karrieremöglichkeiten ... begrenzt waren. Danach habe ich bewusst entschieden, dass ich mich nie wieder so einschüchtern lassen würde. Also habe ich alles studiert, was ich in die Hände bekommen kann: Windows, Unix, C, C ++, Java, C #, Perl, Python, Access, SQL Server, Oracle, Informix, MySQL usw. Welche Tools und Technologien auch immer neu oder ungewöhnlich sind wurde der 'go-to-guy' - "Frag Craig, wenn er es nicht weiß, wird er es lernen." Infolgedessen habe ich an allen möglichen Projekten gearbeitet, von eingebetteten Systemen für die Umwelttelemetrie bis hin zu Befehls- und Kontrollsystemen für die Raketenabwehr.
Das einzige Problem, das ich jemals hatte, sind Unternehmen, die darauf bestehen, mich in eine Spezialität zu stecken, wenn meine Spezialität Generalist ist. [BEARBEITEN: Auch als Polymath oder Renaissance-Mann oder Multi-Spezialist bekannt. ]
Etwas zu beachten ... Wie lang ist die Halbwertszeit des Wissens im High-Tech-Bereich? Es folgt dem Mooreschen Gesetz: Die Hälfte von allem, was Sie wissen, wird in 18 bis 24 Monaten veraltet sein. Ein Experte, der die falsche Disziplin wählt, kann durch die Presse der Technologie leicht untergraben werden; Ein Generalist muss nur einige weitere Fähigkeiten hinzufügen und sich an die Lehren der Vergangenheit erinnern, wenn er diese Fähigkeiten anwendet.
quelle
Ich habe mich immer als einen ziemlich heißen Programmierer gesehen. Dann wurde ein neuer Mann, Aaron genannt, in unser Team aufgenommen. Aaron war offensichtlich in den meisten Bereichen viel besser als ich. Er war auch jünger als ich. Er machte mir klar, dass ich mich in den letzten Jahren nicht wirklich verbessert hatte. Ich war ein Ad-hoc-Hacker und noch dazu ein mittelmäßiger.
Dies hat mich alarmiert, bewusst zu versuchen, mich und insbesondere die Qualität des von mir geschriebenen Codes zu verbessern .
Aaron hat mich dazu gebracht, viele Dinge zu lernen. Er hat mir beigebracht, wie der größte Teil des Codes, den ich schreibe, für mindestens einige Jahre gepflegt und erweitert werden muss. Deshalb sollte ich den Code unter Berücksichtigung dessen schreiben. Ich sollte automatische Tests für meinen Code schreiben. Aaron sprach immer darüber, wie ich niemals bei der ersten Arbeitsversion aufhören sollte, sondern überarbeiten und verfeinern sollte, bis der Code elegant ist. Ich habe festgestellt, dass die von mir verwendeten Sprachen und Tools viel Raum für Verbesserungen bieten.
Das Wichtigste, was ich von Aaron gelernt habe, war, nie aufzuhören zu lernen.
Nach ein paar Jahren verließ Aaron die Firma. Ich fühlte mich leer. Die vergangenen Jahre mit ihm hatten mich auf ein völlig neues Niveau gebracht, und mir wurde klar, dass ich jetzt viel besser war als der Rest des Teams. Sie schrieben immer noch schlechten Code und machten die gleichen Fehler wie zuvor. Ich habe versucht, sie zu unterrichten, aber sie hatten kein Interesse zu lernen. Tatsächlich ärgerten sie sich, dass jemand so arrogant war, ihnen zu sagen, welche Fehler sie machten.
Einige Monate später verließ ich das Unternehmen. Ich bin in ein kleineres Unternehmen mit einem sehr talentierten Team gewechselt. Alle wollten mehr lernen, und ich habe es geliebt.
Ich bin froh, Aaron getroffen zu haben. Ohne ihn würde ich wahrscheinlich immer noch mit der alten Gang in der alten Firma arbeiten, nirgendwo hingehen und zu viel an mich denken.
quelle
Zwei Dinge:
Das Schreiben von Code ist extrem einfach. jede andere Person, die ich kenne, kann das. Aber den Code eines anderen zu lesen und herauszufinden, was er tut, war für mich eine ganz neue Welt.
quelle
Gehen Sie regelmäßig ins Fitnessstudio.
Im Ernst, mein Gehirn arbeitet viel besser, wenn ich in Form bin. Probleme werden einfacher und weniger überwältigend, das Ausplaudern ist weitaus weniger eine Versuchung, und es scheint keine so mühsame Aufgabe zu sein, die Dinge Schritt für Schritt durchzuarbeiten.
quelle
Programmierung. Arbeiten an interessanten Projekten. Es gibt NICHTS wie reinzukommen und an Sachen zu arbeiten. Besonders unter Druck. Ich sage immer jedem, der mich fragt, wie man programmiert - finde einfach ein cooles Projekt (auch wenn du es erfinden musst) und arbeite daran.
quelle
Ich habe einen Teilzeitjob als Nachhilfelehrer für CS-Studenten an meiner Universität übernommen. Es zwingt Sie wirklich dazu, etwas auf einer ganz anderen Ebene zu verstehen, wenn Sie es jemand anderem erklären müssen.
quelle
Ich bin ein großer Fan des Systems "jedes Jahr eine Programmiersprache lernen". Ein Jahr gibt Ihnen genug Zeit, um die Vorurteile "Okay, ich kenne die Syntax, also jetzt kenne ich die Sprache" zu überwinden, und zwingt Sie, ein wenig weiter zu gehen und zu verstehen, was in dieser Sprache von Vorteil ist, und in einem Stil zu programmieren, für den sie ursprünglich ist diese Sprache (Damit meine ich, dass Sie am Ende keine Java-Anwendungen mit Ruby-Syntax schreiben). Jede Sprache ändert die Art und Weise, wie Sie über Programmierung denken. Ich wusste, wie man Rekursion verwendet, aber das Denken in Rekursion fand erst statt, als ich einen Prologkurs belegte (ich stelle mir vor, eine funktionale Sprache wie ML hätte den gleichen Effekt).
Starten Sie ein Pet-Projekt. Meine persönliche Gleichung für ein gutes Haustierprojekt lautet: Etwas, mit dem Sie Erfahrung haben + etwas, das Sie nicht haben = eine App, die Sie nützlich finden würden. Zum Beispiel begann Migratr (mein eigenes koffeinhaltiges Projekt, das aus einem Wochenende ein laufendes Projekt machte) mit dem Titel "Ich kenne C #, habe aber noch nie eine Web-API als Code verwendet. Und ich möchte alle meine Fotos nach Zooomr verschieben". Es hätte genauso gut "Ich habe schon früher gegen Web-APIs codiert, aber ich kenne C # nicht"
Das Veröffentlichen Ihres Haustierprojekts ist eine erstaunliche pädagogische Erfahrung für sich. Plötzlich alles, was praktisch niemand lehrt, aber jeder sollte es wissen (für mich bestand es darin, ein eigenes Testsystem einzurichten, das Meiste aus Versionskontrollsystemen herauszuholen, wie man sich selbst anpasst, wenn niemand anderes Ihre Termine festlegt, wie man mit Ihrem interagiert) Benutzer und wie man weiß, wann man zu Feature-Anfragen "Nein" sagt), all das Zeug sprudelt an die Oberfläche und zwingt Sie dazu, sich auf einer Ebene weiterzubilden, die Sie vorher nicht waren - zumindest nicht, indem Sie faul Flamewars auf dzone über das lesen Vor- / Nachteile der "foo" vs "bar" Art, Dinge zu tun.
Wenn Sie diese beiden Dinge tun, werden beide Enden des Spektrums abgedeckt. Das Erlernen einer neuen Sprache macht Sie zu einem besseren Programmierer. Das Lieblingsprojekt macht Sie zu einem besseren Entwickler: P
quelle
Hat mir die Montage beigebracht. War es auf einem alten 6502-Chip, als ich 13 war? 14? Zu lange her. Aber ich kann mir nichts vorstellen, was Ihre Entwicklung mehr verbessern könnte, als auf das Bit-Level zu kommen.
Das Lernen des Assemblierens gibt Ihnen einen Einblick in die Art und Weise, wie Computer auf einer grundlegend niedrigeren Ebene „denken“, und die Eleganz auf dieser Ebene ist überraschend. Wenn Sie sich auf dieser Ebene weiterentwickeln, lernen Sie Effizienz und verbessern Ihre kritischen Denk- und Logikfähigkeiten. Es wird Sie auch von irgendwelchen schlampigen Gewohnheiten heilen, die Sie ziemlich schnell haben!
Der 65xx-Chip hatte drei Register (den Akkumulator, X und Y) und keine Anweisungen auf Maschinenebene zum Multiplizieren oder Dividieren. Ich erinnere mich, wie ich eine Routine programmiert habe, um den Kampfschaden zu berechnen, das Buch durchgesehen und plötzlich erkannt habe, dass ich meine eigene Mathematikbibliothek schreiben müsste. Verbrachte ein paar Wochen damit, auf meinem Notizbuch Einsen und Nullen zu kritzeln und herauszufinden, was "Teilen" und "Dezimalstellen" wirklich bedeuteten.
Ich habe C ++, Pascal, .NET und viele andere seitdem studiert ... aber keiner von ihnen hat mir so viel beigebracht, mich so fasziniert oder mich mit dem Gefühl des „Wow“ zurückgelassen, wie es die Assembly auf meinem alten Commodore getan hat .
quelle
Wenn ich auf alte Dinge zurückblicke, habe ich gemerkt, wie schlimm sie waren.
quelle
Lesen
Entwickeln Sie einfach den Appetit zum Lesen.
quelle
Programmierung.
Im Ernst, es gibt Bücher, es gibt Codierungs-Katas, es gibt Sites wie diese, aber ich glaube, dass der beste Weg, sich als Entwickler zu verbessern, darin besteht, an einem echten Projekt mit echten, unsteten Kunden zu arbeiten, die echte, sich ständig ändernde Anforderungen mit echtem Engineering haben Probleme. Es gibt keinen Ersatz für Erfahrung.
quelle
Ich denke, das Wichtigste, was Sie tun können, ist, sich bewusst um eine Verbesserung zu bemühen. Es gibt keine einzige Silberkugel, Sie müssen ständig nach neuen Informationsquellen, neuen Erfahrungen und mehr Übung suchen.
Und das zweitwichtigste: Überlegen Sie, was Sie tun, warum Sie es tun und wie Sie es besser machen können. Gleiches gilt für frühere Projekte. Schauen Sie zurück, was Sie getan haben und wie Sie es jetzt anders machen könnten. Überlegen Sie, was hätte besser gemacht werden können oder wo Sie es noch verbessern können.
Ich sehe jeden Tag zwei großartige Beispiele dafür bei der Arbeit. Ich habe einen Kollegen, der es liebt zu lernen und der beste Entwickler sein will, den er kann. Er nutzt jede Ausfallzeit, um Blogs zu lesen, Bücher zu lesen, Programmiertechniken zu diskutieren und Unmengen von Fragen zu stellen. Er hat sich auch im letzten Jahr deutlich verbessert. Ein anderer Mitarbeiter macht seinen Job und das ziemlich gut. Aber das ist alles, was er tut. Er bleibt bei dem, was er weiß, unternimmt keine großen Anstrengungen, um sich zu verbessern, arbeitet nicht an Projekten außerhalb seiner bestehenden und nach 4 Jahren hat er genau die gleichen Fähigkeiten und Programmierfähigkeiten, die er hatte, als ich mich traf ihm.
quelle
Viele Leute haben vorgeschlagen, Code zu schreiben. Ich muss sagen, dass das Lesen des Codes anderer viel vorteilhafter ist.
quelle
Paarprogrammiert mit sehr unterschiedlichen und einfühlsamen Menschen
quelle
Die grundlegenden Dinge, die mir als Programmierer geholfen haben:
Das Schreiben für einen Programmierer ist unerlässlich. Jeder hatte einen "Programmierer" -Mitarbeiter, der mit genau zwei Fingern tippte und für alles auf die Tastatur schauen musste. Kein Spaß. Das Erlernen des Tippens steigert Ihre Produktivität als Programmierer enorm.
Und wenn Sie nicht fragen, wird es Ihnen niemand sagen.
quelle
Zu Open-Source-Projekten beizutragen / daran teilzunehmen, war bei weitem das Größte für mich.
quelle
Sie können alle Bücher, Codes und Open Source-Projekte lesen, die Sie mögen, aber Sie müssen den Endbenutzeraspekt der Softwareentwicklung verstehen. Sie müssen aus der Echokammer treten. Also werde ich ein paar nicht-technische Punkte ansprechen, die Ihrer technischen Karriere helfen werden.
Entfernen Sie sich von der Tastatur, interagieren Sie mit dem Endbenutzer und sehen Sie mit seinen Augen, wie er die Software verwendet. Endbenutzer sind in der Regel nicht technisch, daher betrachten sie Software als magische Arbeit, während Sie Software als logische Folge von Schritten betrachten. Die beiden Welten sind völlig unterschiedlich. Was Ihnen also einfach und logisch erscheint, mag für andere kryptisch und einschüchternd wirken.
Test, Test, Test. Viele der Software, die ich in großen Unternehmen gesehen habe, verwenden Testfälle. Zur Hölle, sie verwenden JUnit, xUnit und alle anderen Unit-Testing-Sprachen. Das Problem, das ich gesehen habe, ist, dass die meisten Programmierer nie sehen, wie ihre Software in der Produktion aussieht. Erfahren Sie, wie Benutzer (oder Systeme, wenn es sich um Batch-Jobs handelt) mit Ihrer Anwendung, Bibliothek oder Benutzeroberfläche interagieren, um herauszufinden, welche abscheulichen Informationen sie darauf ablegen. Auf diese Weise können Sie gute Testfälle generieren und davon ausgehen, dass Ihrem Programm immer die richtigen Daten zugeführt werden.
quelle
Gelerntes Schema.
quelle
Schreiben von Code und viel davon.
quelle
Reguläre Ausdrücke lernen.
quelle
Teilnahme an TopCoder-Algorithmus-Wettbewerben .
quelle
Alles in allem: Erstellen Sie Ihr eigenes Projekt, Ihre Meilensteine, Ihre Ressourcen, Abhängigkeiten, Anforderungen und Ihren Testplan. Es wird Sie nicht nur dazu zwingen, Ihre Programmierkenntnisse zu verbessern, um innerhalb bestimmter Parameter zu arbeiten, sondern wird auch dazu dienen, genau hervorzuheben, wo Sie am meisten verbessern müssen. Informieren Sie sich regelmäßig über Ihre Fortschritte, sei es in Form eines Blogs oder formellerer Projektaktualisierungen, damit Sie genau sehen können, wo Sie waren und wohin Sie gehen möchten.
quelle
Kündige meinen letzten Job.
quelle
Ich denke, ständig zu hinterfragen, was Sie tun, ist das Größte. Denken Sie niemals, dass Ihr Code perfekt ist, und bemühen Sie sich immer, ihn zu verbessern.
Es scheint, als hätte ich zwei- oder dreimal gedacht, mein Code sei perfekt, und dann gemerkt, dass ich noch einen langen Weg vor mir habe.
Ich denke, das Größte war, als ich anfing, meinen Code selbst als von anderen Programmierern konsumiert und nicht als eine Maschine anzusehen. Es ist einfach, Code zu schreiben, den Ihr Computer verarbeiten kann, aber es ist schwierig, trockenen, verständlichen Code zu schreiben.
Und ich meine nicht nur zu verstehen, was diese Zeile tut, sondern es einfach zu machen, herauszufinden, wie sich diese Klasse in alle anderen Klassen einfügt, während die Klassenoberfläche so wohlgeformt ist, dass es so gut wie unmöglich ist es zu missbrauchen.
quelle
Sie sagen, dass 70% des guten Codes die Fehlerprüfung und -behandlung ist. Als ich auf diese Weise zu programmieren begann, wurde mein Code viel besser. Überlegungen, was schief gehen kann, und die sofortige Behandlung haben einen großen Unterschied gemacht. Es fühlt sich so an, als würde das Überprüfen den Code nur daran hindern, ihn zum Laufen zu bringen, aber es verkürzt die Zeit vom Anfang bis zum Ende um den Faktor 2 bis 4.
quelle
Meine Codierungsfähigkeiten haben sich sehr verbessert, als ich mich fragte, bevor ich etwas implementierte, wie ich diese Sache dokumentieren werde .
"Thing" sollte hier alle mögliche Granularität haben. Von der Methode zum gesamten Produkt. Beispielsweise wird auf Methodenebene verhindert, dass eine Methode in die API eingefügt wird, die nicht passt oder unklar ist, bevor sie tatsächlich geschrieben wird. Und wenn ich wirklich eine Methode implementieren muss, die ich nicht (einfach) dokumentieren kann, ist dies ein Zeichen dafür, dass irgendwo ein Designproblem vorliegt ...
Automatisch filtert die Einstellung " Wenn ich es nicht erklären kann, schreibe ich es nicht " schlechten Code heraus und umgekehrt wird die Implementierung einfacher und sauberer, sobald ich weiß, wie man eine Sache richtig dokumentiert.
quelle
Lernen und üben Sie ständig, was Sie lernen.
Mittels:
Persönliche Projekte: Seit ich mit dem Programmieren angefangen habe, habe ich persönliche Projekte gemacht. Angefangen von kleinen Spielen, Bildverarbeitung, Steganografie, Implementierung von Dateitypspezifikationen, Implementierung verschiedener Protokolle von Grund auf neu oder Implementierung verschiedener Programme im Laufe der Zeit.
Bücher lesen : In meiner Freizeit habe ich beschlossen, verschiedene Bücher zu lesen und zu lesen. Es gibt viele gut geschriebene Bücher von Experten, die nur darauf warten, gelesen zu werden. Die Tiefe, die Sie aus einem Buch erhalten können, ist unerreicht, wenn Sie beispielsweise verschiedene Forenbeiträge lesen.
quelle
Dies ist normalerweise meine chronologische Reihenfolge, in der ich neue Technologien lerne:
Lesen Sie regelmäßig gute Blogs (Atwood, Martin Fowler usw.). Bleiben Sie auf dem neuesten Stand der Technik. Verfolgen Sie Neuigkeiten zu interessanten neuen Technologien. Anhand dieser Schritte kann ich entscheiden, ob ich etwas Interessantes finde, das ich weiter erforschen möchte.
Lesen Sie das richtige Buch oder eine andere Ressource, die Sie für Ihr Niveau lernen möchten (z. B. für Anfänger, wenn Sie Designmuster lernen möchten, würde ich "Head First Design Patterns" vorschlagen). Ich habe auch spezielle Vorlieben für Bücher .
Roll ein oder zwei Spielzeugprojekte mit dem, was ich gelernt habe. Ich mache mir keine Sorgen über den Nutzen des Projekts. Meine Absicht ist nur, mein Lernen auszunutzen. (zB ein Rechnerprojekt für OOP wäre in Ordnung)
Ich würde sehen, ob ich das Zeug bei der Arbeit gebrauchen könnte . (Obwohl wir Subversion bei der Arbeit nicht verwenden, verwende ich es als lokales Repository. Ich habe Ruby für eine Aufgabe verwendet, die ansonsten zu eintönig und zeitaufwändig wäre.)
Dies ist der beste Teil, den ich denke, die meisten Leute verpassen. Sitzungen zum Wissensaustausch. Geben Sie beispielsweise eine oder zwei Sitzungen an andere Teammitglieder. Ich glaube, Lehren ist eine der besten Möglichkeiten, um die Technologie wirklich zu lernen. Ich garantiere Ihnen, dass sich Ihr Verständnis für die Technologie vervielfacht, unabhängig davon, ob Ihr Publikum es versteht oder nicht. :-)
quelle
Hacken Sie für ein paar Monate in ein Open-Source-Projekt. je größer desto besser. Wenn Sie mit einigen hochmeinenden, geografisch unterschiedlichen Menschen interagieren, die Sie nicht kennen, müssen Sie aus Ihren Fehlern um ein Vielfaches schneller lernen - ich denke, das ist ein gewisser Peinlichkeitsfaktor. Wenn Sie ein oder zwei wirklich kluge Leute identifizieren, können Sie von ihnen wertvolle Einsichten, wenn nicht reines Wissen, gewinnen.
quelle