Was haben Sie am effektivsten getan, um Ihre Programmierkenntnisse zu verbessern?

876

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.

Oded
quelle
18
Üben, üben, üben. Und geben Sie sich niemals mit dem Ersten zufrieden, was Ihnen in den Sinn kommt.
Mark Ransom
2
+1 für Mark Ransom ... Die Schwierigkeit entsteht, wenn Sie mit der 100. Sache, die Ihnen in den Sinn kam, immer noch nicht zufrieden sind!
Stimul8d
5
Da ich keine Zeit auf der Programmers Stack Exchange-Site verschwendete, konnte ich meine Codierungsfähigkeiten erheblich verbessern.
Job
3
@ Mark Trapp wie ist das nicht konstruktiv?
Rightfold
1
@WTP - Lesen Sie die Beschreibung. "Diese Frage passt nicht gut zu unserem Q & A-Format." - Als jemand, der diese Frage gestellt hat, stimme ich zu. Es wurde in entspannteren Zeiten gefragt.
Oded

Antworten:

753

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. ;)

Cranley
quelle
41
Ich weiß, es scheint wirklich unentgeltlich und potenziell eine Hure für das Ansehen zu sein, aber wenn Sie diese Punkte in einen Punkt pro Antwort aufteilen, können die Leute darüber abstimmen, mit welchen sie einverstanden sind, was eine spezifischere Endabstimmung "Lösung" dieser Frage ermöglicht.
117
Beobachten Sie, wie klügere Leute mit Fehlern umgehen - dann lerne ich am meisten von ihnen
82
Wenn dies eine Liste in keiner bestimmten Reihenfolge ist, sollte es nicht eine ungeordnete und keine geordnete Liste sein? : P
Jon W
3
Ich stimme mmyers zu - nur weil Sie mit jemandem nicht einverstanden sind, heißt das nicht, dass Sie ihn ignorieren. Tatsächlich ist es das Gegenteil - um mit ihnen nicht einverstanden zu sein, schenkt man ihnen tatsächlich Aufmerksamkeit.
Cristián Romo
15
Ich bin nicht einverstanden mit allem, was Joel sagt. Ich denke, dass er in den meisten Fällen interessante Dinge zu sagen hat. Mein Kommentar war ironisch. Es gibt eine Menge Dinge, denen ich zustimme, wenn es um Joel geht, aber ungefähr einmal im Monat bringt er mich dazu, den Kopf zu schütteln und zu fragen: "Was? Ist das dein Ernst ?!". Was ich liebe, weil ich die herausforderndsten Dinge finde, die mich dazu zwingen, meine Position und meine Überzeugung wirklich zu überprüfen.
557

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.

Craig Trader
quelle
224
"Alleskönner, Meister von keinem, obwohl oft besser als ein Meister von einem." -Adam Savage
jms
9
Ausgezeichneter Rat, bis gewählt. Die "Orphan Tech" in meiner Vergangenheit war mein 8-Bit-Atari, der gegen den C64 verlor. Ich kam jedoch zu dem gleichen Schluss - um Heinlein zu zitieren: "Spezialisierung ist für Insekten."
17
Es gibt immer Kompromisse und es gibt nur 86.400 Sekunden an einem Tag - Sie müssen entscheiden, wie Sie sie ausgeben möchten. In meinem Fall habe ich mich entschieden, zusätzliche Stunden (über die Arbeitszeit hinaus) zu investieren, um Dinge zu lernen, die ich für interessant hielt oder die in Zukunft gefragt sein würden. Sie müssen Ihre eigenen Entscheidungen treffen.
Craig Trader
74
"Spezialisierung ist für Insekten." - Heinlein
Kelly S. Französisch
31
Wo ist dein "Generalist" -Abzeichen? ^^
Arnis Lapsa
459

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.

Ville Laurikari
quelle
54
Das funktioniert normalerweise in beide Richtungen. Ich bin jetzt als 'Aaron' in ein paar Unternehmen eingetreten und habe festgestellt, dass die anderen Programmierer, sobald sie mich mit Energie versorgen, mir einen Lauf um mein Geld geben und mich dazu ermutigen, meine eigenen Anstrengungen zu verdoppeln. Guter Eintrag!
28
+1 für "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"
17
"Niemals bei der ersten Arbeitsversion aufhören" ??? - Wann sollen Sie den Rest Ihrer Arbeit erledigen? :)
4
Ich habe versucht, Aaron zu sein, manchmal funktioniert es, aber manchmal irre ich mich. "Wer nicht aus der Geschichte lernen kann, ist dazu verdammt, sie zu wiederholen." Es ist gut, unsere Gedanken offen zu halten für neue Ideen, aber es ist schlecht, ein N00B über diejenigen zu hören, die bereits die Fehler für Sie gemacht haben. Jeder braucht eine gewisse Skepsis, da wir daraus lernen, Fragen an uns und andere zu stellen.
27
Das Problem ist, dass zu viele Leute denken, sie seien "Aaron"
cinqoTimo
257

Zwei Dinge:

  1. Lesen Sie Code, der von verschiedenen Personen geschrieben wurde.
  2. Schreiben Sie eine Dokumentation für Code, der von anderen Personen geschrieben wurde.

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.

Swati
quelle
42
UND eine der besten Möglichkeiten, um zu lernen, was nicht zu tun ist :)
AviD
9
Sie können sehen, wie sie etwas tun. Vielleicht machen sie es besser als Sie?
4
Ich musste mich in ein wirklich altes und völlig undokumentiertes Projekt vertiefen, es dokumentieren, einige Fehler darin beheben und es auf ein neues System portieren. Ich habe viel gelernt und nicht alles war das, was ich nicht tun sollte. Obwohl ich den Wert von Kommentaren gelernt habe.
Und während Sie die Dokumentation schreiben, schreiben Sie vielleicht einige Unit-Testfälle dafür (wenn sie nicht existieren). Dann wissen Sie auch, wie Sie den Code verwenden.
Dhable
So wahr, das war der schwierigste Teil meiner Arbeit seit langer Zeit.
199

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.

Ken
quelle
30
Die traurige Tatsache, dass die Mehrheit der Menschen nicht regelmäßig Sport treibt oder sich überhaupt streckt, ist ein großes Problem in der heutigen Welt.
Sneakyness
5
Ich werde dies, wenn ich darf, auf jede Menge körperlicher Exkursionen ausdehnen. Manchmal sehne ich mich nach körperlicher Müdigkeit, wenn ich eine Weile nicht mehr viel Handarbeit geleistet habe. Es ist ein bisschen neu, wenn Sie es gewohnt sind, geistig ausgelaugt zu sein, und es hilft Ihnen, auszubrechen, wenn Sie sich nur im Kreis herumdenken.
Stimul8d
1
Ja, das ist heute das große Problem. Wir haben nicht die Zeit, vor allem in Pakistan, wo die Arbeitszeiten viel höher sind
Maz3tt
2
+1 als Erinnerung an mich , mehr Bewegung zu bekommen.
SingleNegationElimination
Ich finde, dass ein Sport ein großer Motivator ist - für mich ist es Basketball.
Adel
181

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.

user13276
quelle
4
Genau. Meine Hände in einem Projekt schmutzig zu machen, hat wahrscheinlich am meisten zu meiner Verbesserung beigetragen. ; )
Mike Grace
1
Genau. Der beste Weg, um ein besserer Codierer zu werden, ist Code. Sie können aus Büchern, Podcasts und Mitarbeitern alles lernen, was Sie wollen, aber Sie müssen es anwenden, bevor Sie es wirklich verstehen. Code mehr und Code mehr verschiedene Sachen. Weil Sie nicht viel lernen, wenn Sie denselben alten Trick wiederholen.
Herausfordernde und faszinierende Projekte auswählen. Ich denke, der Kampf außerhalb Ihrer Komfortzone beschleunigt Ihre Fähigkeiten wirklich. Sie sind nicht zum Mond gegangen, weil es einfach war.
Kim Jong Woo
172

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.

Bill the Lizard
quelle
1
Dafür kann ich bürgen.
1
Ein Dozent an der Universität erzählte mir von der Eröffnung, als ich noch Student war. Ich blieb fast ein Jahr (Teilzeit), nachdem ich meinen Abschluss gemacht hatte.
Bill the Lizard
29
Wie Douglas Adams in "Dirk Gentleys Holistic Detective Agency" schreibt: "Der beste Weg ist, es jemand anderem zu erklären. Das zwingt Sie, es in Ihren Gedanken zu klären. Und je langsamer und düsterer Ihr Schüler, der mehr muss man die Dinge in immer einfachere Ideen zerlegen. "
2
Zu wahr. Das Unterrichten von Fotografie hat mich zu einem besseren Fotografen gemacht. Nicht viel von einem Kodierer tho :(
CAD Kerl
9
mutuo ista fiunt, und homines dum docent discunt - Seneca
135
  1. 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).

  2. 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

Callingshotgun
quelle
Da kann ich nur zustimmen; "Haustierprojekt in einer bisher unbekannten Sprache" ist gut, kann ich bestätigen
Sehr guter Vorschlag, etwas halbwegs Vertrautes zu lernen.
Toller Vorschlag "etwas, mit dem Sie Erfahrung haben + etwas, mit dem Sie keine Erfahrung haben"! Vielen Dank
sica07
Ich brauche jetzt ein Haustier.
Adel
118

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 .

Snogfish
quelle
16
Ich muss dich dafür wählen, dass du wundervolle Erinnerungen zurückbringst! Vielleicht habe ich es sogar ein wenig zerrissen :)
Charlie Flowers
3
Ich übersetze C / C ++ immer noch mental in die 68K-Assemblersprache. Es ist erstaunlich, wie Sie damit effizienten Code für jede Plattform schreiben können.
Bob Murphy
1
Ah, der 6502 bringt großartige Erinnerungen zurück. Ich habe so viel mit Assembler auf diesem Chip gelernt.
5
JEDER Programmierer sollte früh in seiner Ausbildung mit dem Assembler vertraut sein!
2
Ich habe das Gleiche getan wie als Jugendlicher. Es hat wirklich gezeigt, wie Computer funktionieren, mehr als es eine Hochsprache jemals kann.
CAD Kerl
110

Wenn ich auf alte Dinge zurückblicke, habe ich gemerkt, wie schlimm sie waren.

Grant Johnson
quelle
Ich schließe mich dem an ... Ich kann kaum etwas von meinen alten Sachen lesen.
Unkwntech
28
Wenn ich über meine alten Sachen nachdenke, bekomme ich fast unwiderstehlichen Drang, die ganze Datei zu löschen. Manchmal das ganze Verzeichnis.
Christopher Mahan
+1 für Objektivität. Wenn Sie Ihren alten Code durchsehen, erfahren Sie nicht, wie Sie sich verbessern können, nur wenn Sie sich verbessert haben und wie - oder umgekehrt, wenn Sie dies nicht getan haben.
Ich habe das getan - ich habe diesen ganzen Skript-Interpreter in VB6 geschrieben, ich habe es über zwei Jahre geschrieben; Es konnte Fenster schaffen, ihre Ereignisse bewältigen usw. Es wurde so groß und außer Kontrolle geraten, dass ich es nicht mehr ergänzen konnte, ohne alles zu zerbrechen. Das war das Letzte, was ich geschrieben habe, bevor ich das Programmieren für Bücher über das Programmieren aufgegeben habe. Jetzt bin ich viel besser, Puh . Das Zurücklesen dieses Monsterprojekts lässt mich erkennen, wie weit ich gekommen bin
Carson Myers,
3
@Christopher Mahan: Und bei wirklich schlechten Gelegenheiten die gesamte Lautstärke.
Thanatos
93

Lesen

  • Bücher, nicht nur Websites
  • zur Selbstverbesserung, nicht nur für das neueste Projekt
  • über die Verbesserung Ihres Handels, nicht nur über die neueste Technologie
  • Code lesen, nicht nur, an dem du arbeitest.

Entwickeln Sie einfach den Appetit zum Lesen.

lamcro
quelle
2
Plus, verdammt, 1. Ich begann mich zu fragen, wo diese Wahl war.
Thanatos
87

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.

Fischtoaster
quelle
8
Wenn Sie etwas verbessern möchten, gibt es nichts Besseres, als es zu tun.
Jeff Siver
4
+1 - Dies erinnert mich an Finding Forrester : "Der erste Schlüssel zum Schreiben ist ... zu schreiben"
Wizard79
2
Es gibt keine andere Antwort. Sie können nicht wirklich sagen, dass Sie wissen, was Sie tun, bis Sie einen nicht trivialen Haufen Code geschrieben und einige Produktiterationen mit den Geschäftsleuten und den Kunden durchgearbeitet haben. Sie wissen / wirklich / nicht, wie gut Ihr Code ist, bis es Zeit ist, ihn an neue Anforderungen anzupassen.
blucz
1
Das Beste, was ich getan habe, um meine Programmierung zu verbessern, war auf jeden Fall, einen Job zu bekommen.
Matt Ellen
1
Meine Vermutung ist, dass die Frage "neben der Programmierung" impliziert ...
UncleZeiv
81

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.

Christopher Cashell
quelle
7
Und er hat wahrscheinlich weniger Fähigkeiten, weil ein Teil seines Wissens veraltet ist.
72

Viele Leute haben vorgeschlagen, Code zu schreiben. Ich muss sagen, dass das Lesen des Codes anderer viel vorteilhafter ist.

Baudtack
quelle
11
Eine Mischung aus beidem ist eigentlich das, was für mich am besten funktioniert. Den Code anderer Leute zu lesen und ihn zu überarbeiten, um ihn besser lesbar zu machen, ist eine großartige Übung
Natürlich guten Code lesen ... und verstehen. Und es zu modifizieren oder Tests dafür zu schreiben.
4
Das Lesen von Code ist interessant, aber es geht Ihnen erst richtig unter die Haut, wenn Sie es tatsächlich tun.
Sie müssen es tun, um es zu lernen. Es ist wie mit dem Fahrrad ...
70

Paarprogrammiert mit sehr unterschiedlichen und einfühlsamen Menschen

Heidegrenzen
quelle
Die einzige "Erfahrung" mit Paarprogrammierung, die ich habe, ist die Zeit, in der ich Kollegen aushelfen muss. Ich programmiere viel glücklicher, wenn eine andere Person mit mir da ist, um die Probleme zu besprechen, mit denen ich konfrontiert bin, und wie ich sie lösen werde.
mhitza
67

Die grundlegenden Dinge, die mir als Programmierer geholfen haben:

  • Erfahrenes Tippen.
  • Ich habe gelernt, Schüchternheit zu überwinden und Fragen zu stellen.

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.

Nasir
quelle
15
Tippen ist die wichtigste Fähigkeit. Die größten Verbrechen bei der Programmierung wurden von denjenigen begangen, die ein paar Tastenanschläge sparen wollten.
5
Dies schlägt meiner Meinung nach alle anderen Antworten. Das Tippen spart Tonnen von Zeit, was bedeutet, dass Sie mehr Zeit damit verbringen können, Code einzugeben und auszuprobieren. Dies bedeutet, dass Sie die Beispiele in ein Buch eingeben können, anstatt nur mit dem Kopf zu nicken, weiterzumachen und zu vergessen. Der Versuch, ein Programmierer mit Hunt-and-Peck zu sein, ist wie der Versuch, ein Konzertpianist zu sein, indem man das Elfenbein mit den Füßen kitzelt.
Kyralessa
2
Ich habe gesehen, wie Leute 15 Pfeile nach oben gedrückt haben, um einen Befehl mit 2 Zeichen wiederherzustellen. Ziemlich traurig. Es ist wie bei manchen Kindern ohne IDE ... völlig inkompetent.
7
Um hier zu widersprechen, habe ich nie gelernt, die Schrift zu berühren. Ich habe einmal versucht zu lernen, bekam aber sofort Schmerzen in meinen Handgelenken und legte sie auf den Schreibtisch, um die richtige Handhaltung anzunehmen, was Druck auf den wichtigen Karpaltunnel ausübte. Also denke ich, dass meine Tipparbeit zumindest einige ergonomische Vorteile hat. Und ich mache das schon so lange, dass ich nur sporadisch auf die Tastatur schaue, also keinen wirklichen Produktivitätsverlust. Die meiste Zeit verbringe ich sowieso nicht damit, Zeichen einzugeben, sondern Code zu lesen und herauszufinden, wie ich die Probleme am besten lösen kann, sobald sie auftreten.
Eloff,
2
Die Handpositionen sind nicht wichtig - das Wichtigste ist, dass Sie tippen können, ohne schauen zu müssen. Auf meinem Laptop lege ich meine Handgelenke nicht aus.
56

Zu Open-Source-Projekten beizutragen / daran teilzunehmen, war bei weitem das Größte für mich.

user13643
quelle
53

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.

  1. 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.

  2. 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.

typicalrunt
quelle
Wahr. Sie können Ihre (bis jetzt) ​​endgültige Version testen, indem Sie eine Reihe von Leuten, die Sie als technisch weniger versiert kennen, die Möglichkeit geben, sie zu testen und ihre Kommentare dazu zu hören Dies hilft Ihnen offensichtlich nicht im geringsten.)
48

Gelerntes Schema.

mbishop
quelle
Ja, das war auch das große für mich. Signifikant waren auch das Tippen von Berührungen und das Programmieren von Paaren.
46

Schreiben von Code und viel davon.

Oded
quelle
Wir alle fangen an, beschissenen Code zu schreiben. Wenn Sie genug schreiben und daran arbeiten, werden Sie besser. Codeüberprüfungen helfen, aber der beste Weg ist, Ihren eigenen Code zu überprüfen.
Code lesen und vieles davon.
Stefan
3
Viel Code lesen und schreiben ... Open Source ist für uns so ein Segen;)
Oded
45

Reguläre Ausdrücke lernen.

Vhaerun
quelle
Hab das erst vor vier Monaten gemacht, als ich anfing, mir Perl beizubringen! Meine Fähigkeit, Vim und Unix im Allgemeinen zu verwenden, schoss in die Höhe! Tolle.
Sixtyfootersdude
Reguläre Ausdrücke sind nicht nur nützlich, sie bringen Sie auch dazu, anders zu denken.
Tikhon Jelvis
+1. Stimme voll und ganz zu. Ich bin überrascht, dass die Leute oft überrascht werden, wenn sie ganz einfache Dinge in vi, sed oder grep tun.
39

Teilnahme an TopCoder-Algorithmus-Wettbewerben .

Paul Reiners
quelle
14
TopCoder finde ich etwas problematisch. OK, Sie können besser über Algorithmen nachdenken, müssen jedoch mit schlechtem Stil (alle Codes in einer Klasse) und unter Zeitdruck arbeiten, sodass Sie wahrscheinlich nicht kommentieren und testen werden. Vielleicht ist Project Euler die bessere Wahl.
3
Sie sind nicht gezwungen, mit schlechtem Stil zu arbeiten. Sie können so viele Klassen haben, wie Sie möchten. Außerdem sollten Sie besser testen, ob Sie konsequent bestehen möchten, da eine Lösung, bei der ein Fall mit einer Kante fehlschlägt, null Punkte erhält.
2
@hstoerr - ganz zu schweigen von der Tatsache, dass Konkurrenten dafür belohnt werden, dass sie ihren Code schwer lesbar machen (ihre Lösung ist schwerer herauszufordern)
Shane Fulmer
7
(Entschuldigung, wenn das beleidigend klingt) Ich finde Leute, die Topcoder (oder ähnliche Wettbewerbe) nicht mögen, die versuchen, Gründe zu erfinden, warum sie Sie zu einem schrecklichen Programmierer machen. Es ist in Ordnung, wenn Sie sie nicht mögen. Aber falsche Gründe zu finden ist meiner Meinung nach nicht hilfreich. Kein ernsthafter Kandidat bei TC verschleiert absichtlich den Code (es ist tatsächlich ein Grund für die Disqualifikation, wenn er gefangen wird). Ich sehe viele Leute, die nicht konkurrieren, die ganze Zeit schlechten Code schreiben. Algorithmuswettbewerbe zielen nicht darauf ab, gute Codierungsgewohnheiten zu vermitteln (lernen Sie das von woanders), sondern darauf, etwas viel Tieferes zu lehren / zu entwickeln.
MAK
2
TopCoder zeigt Ihnen, wie viel besser Sie werden können.
38

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.

Magsol
quelle
36

Kündige meinen letzten Job.

mihn
quelle
2
ich auch! (Brauchen Sie noch ein paar Zeichen ...)
6
Wenn Sie uns sagen würden, warum, könnte dies sogar eine Antwort sein. ;-)
2
Ein Projekt zu unterstützen, das mit Inhouse Framework (basierend auf EJB2) erstellt wurde, war nicht meine Idee von Spaß. Kein neues Zeug, nur alter Mist. Und die Perspektive im neuen Job ist nicht besser. :(
mihn
Kenne ich schon.
Allbite
+1 Viel Glück bei der Landung eines Jobs, der keine Sackgasse ist.
Tomek Szpakowicz
29

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.

Bill K
quelle
29

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.

Nur wer sind diese Leute "sie" und wo leben "sie"?

Harold Bamford
quelle
28

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.

Kabado
quelle
28

Lernen und üben Sie ständig, was Sie lernen.

Mittels:

  1. 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.

  2. 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.

Brian R. Bondy
quelle
10
+1 für die Erwähnung von Büchern. Viel Erfahrung ist nicht viel wert, wenn man alles falsch macht.
Mbillard
27

Dies ist normalerweise meine chronologische Reihenfolge, in der ich neue Technologien lerne:

  1. 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.

  2. 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 .

  3. 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)

  4. 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.)

  5. 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. :-)

rpattabi
quelle
24

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.

rauben
quelle