Schneller codieren (ohne Qualitätseinbußen) [closed]

144

Ich bin seit mehreren Jahren ein professioneller Programmierer. Die Kommentare zu meinem Code waren im Allgemeinen die gleichen: Schreibt tollen Code, ist gut getestet, könnte aber schneller sein .

So wie werde ich schneller Coder, ohne Abstriche an der Qualität? Um dieser Frage willen beschränke ich den Geltungsbereich auf C #, da ich hauptsächlich (aus Spaß) Code für dieses Programm verwende - oder Java, das in vielerlei Hinsicht ähnlich genug ist.

Dinge, die ich bereits mache:

  • Schreiben Sie die minimale Lösung, mit der die Aufgabe erledigt wird
  • Schreiben Sie eine Menge automatisierter Tests (verhindert Regressionen)
  • Schreiben (und verwenden) Sie wiederverwendbare Bibliotheken für alle Arten von Dingen
  • Verwenden Sie bekannte Technologien, bei denen sie gut funktionieren (z. B. Ruhezustand).
  • Verwenden Sie Entwurfsmuster dort, wo sie passen (z. B. Singleton).

Diese sind alle großartig, aber ich habe nicht das Gefühl, dass meine Geschwindigkeit mit der Zeit steigt. Es ist mir wichtig, denn wenn ich etwas tun kann, um meine Produktivität zu steigern (sogar um 10%), ist das 10% schneller als bei meinen Konkurrenten. (Nicht, dass ich welche hätte.)

Außerdem habe ich dieses Feedback von meinen Managern immer wieder bekommen - egal ob es sich um eine kleine Flash-Entwicklung oder eine Enterprise Java / C ++ -Entwicklung handelte.

Edit: Es scheint eine Menge Fragen zu geben, was ich unter schnell verstehe und woher ich weiß, dass ich langsam bin. Lassen Sie mich noch einige Details erläutern.

Ich habe in kleinen und mittleren Teams (5-50 Personen) in verschiedenen Unternehmen über verschiedene Projekte und verschiedene Technologien (Flash, ASP.NET, Java, C ++) gearbeitet. Die Beobachtung meiner Manager (die sie mir direkt mitteilten) ist, dass ich "langsam" bin.

Ein Teil davon ist, dass eine bedeutende Anzahl meiner Kollegen Qualität für Geschwindigkeit geopfert hat; Sie haben fehlerhaften Code geschrieben, der schwer zu lesen, zu warten und schwer zu automatisieren war. Mein Code ist im Allgemeinen gut dokumentiert, lesbar und testbar.

Bei Oracle löste ich Fehler konsequent langsamer als andere Teammitglieder. Ich weiß das, weil ich Kommentare dazu bekommen würde; Dies bedeutet, dass andere (ja, ältere und erfahrene) Entwickler meine Arbeit in kürzerer Zeit erledigen konnten als ich, und dies bei nahezu gleicher Qualität (Lesbarkeit, Wartbarkeit und Testbarkeit).

Warum? Was vermisse ich? Wie kann ich das verbessern?

Mein Endziel ist einfach: Wenn ich Produkt X heute in 40 Stunden herstellen und mich irgendwie verbessern kann, so dass ich morgen das gleiche Produkt nach 20, 30 oder sogar 38 Stunden erstellen kann, dann ist es das, was ich wissen möchte. wie komme ich dort hin? Mit welchem ​​Prozess kann ich mich kontinuierlich verbessern? Ich hatte gedacht, es ginge darum, Code wiederzuverwenden, aber das scheint nicht genug zu sein.

Asche999
quelle
4
Codieren andere schneller als Sie in derselben Qualität? Wenn nicht, zeigen Sie auf Ihre Wartungsaufzeichnungen und Fehlerberichte, um anzuzeigen, dass die Geschwindigkeit kein Problem darstellt.
Michael K
1
Um zu versuchen, das Rennen zu gewinnen, werden einige ihre schnellsten Pferde auswählen und sie schlagen, um schneller zu werden. Irgendwelche Fragen?
Paul
24
Ich habe keine Antwort für Sie, aber ich habe etwas, mit dem Sie sich besser fühlen können. Wie langsam Sie als Programmierer auch sein mögen, so ineffizient Sie sich auch fühlen mögen, Ihr Manager ist viel, viel schlechter. Was für ein Idiot sagt "Hey Bob, du bist zu langsam", ohne dir dabei zu helfen, dich zu verbessern? Könnte dir auch sagen, dass du zu klein bist. Das ist keine Führung, es ist nur Zwischenruf. Ich schätze, ich habe einen Vorschlag: Finden Sie einen Job bei einem kompetenten Manager, der mit Ihnen zusammenarbeitet, um Ihre Mängel zu beheben.
Malvolio
1
Alle Antworten machen mich unglücklich. Wenn Sie nur den Schritt noob-> mittelmäßig wollen, dann ist vielleicht eine Sache in Ordnung. Aber ein mittelmäßiger Experte muss immer alles lernen. Sie müssen Ihr VCS, Ihren Editor, Ihre Programmiersprache und Ihre Frameworks gründlich erlernen. Sie müssen schwierige und interessante Schritte wiederholen, die Sie ohne nachzudenken ausführen können. Und dann müssen Sie einen Weg finden, um den Kontext anzuwenden, wie den Unterschied zwischen Kundenbedürfnissen und den Bedürfnissen Ihrer Mitarbeiter, und wie Ihre tägliche Stimmung Ihre Fähigkeit beeinflusst, Code / Design / Diskussion zu erstellen. Wenn du 1 Ding willst, mach das: lerne alles.
Erikbwork

Antworten:

158

Ich mag Jeff Atwoods Ansatz, der hier zu finden ist: http://www.codinghorror.com/blog/2008/08/quantity-always-trumps-quality.html .

Grundsätzlich verweist er in dem Artikel auf eine Passage aus dem Buch Art & Fear von David Bayles und Ted Orland. Die Passage lautet:

Der Keramiklehrer gab am Eröffnungstag bekannt, dass er die Klasse in zwei Gruppen aufteilt. Alle, die sich auf der linken Seite des Studios befänden, würden nur nach der Menge der von ihnen produzierten Arbeiten beurteilt, alle, die sich auf der rechten Seite befanden, nur nach ihrer Qualität. Sein Verfahren war einfach: Am letzten Schultag brachte er seine Personenwaage mit und wog die Arbeit der "Mengen" -Gruppe: 50 Pfund Töpfe mit einem "A", 40 Pfund einem "B" und so weiter. Diejenigen, die mit "Qualität" bewertet wurden, mussten jedoch nur einen Topf produzieren - wenn auch einen perfekten -, um ein "A" zu erhalten. Nun, es kam die Sortierungszeit und eine merkwürdige Tatsache trat zutage: Die Arbeiten von höchster Qualität wurden alle von der Gruppe produziert, die nach Quantität sortiert wurde. Es scheint, dass während der "Menge"

Wenn Sie Ihre Hände schneller und häufiger schmutzig machen, verbessern Sie Ihre Fähigkeiten besser als wenn Sie Ihre Zeit mit Lernen und Theoretisieren über die "perfekte" Art und Weise verbringen, dies zu tun. Mein Rat, übe weiter, halte dich mit der Technologie auf dem Laufenden und studiere Design.

chrisw
quelle
12
Bedeutet diese Analogie nicht, dass die Töpfer einen Stapel Mülltöpfe produzierten, bevor sie die Qualitätsmülltöpfe produzierten? Könnten Sie das in einem professionellen Umfeld und mit gutem Gewissen tun? Und was ist mit denen, die studiert und theoretisiert haben und die Arbeit dann vor Ablauf der Frist erledigt haben?
pdr
4
Ich bin in Ordnung mit 20 Mülltöpfen für Hobby-Programmiererfahrung. Das hilft mir auch bei meiner professionellen Programmiererfahrung; außerdem muss ich irgendwo anfangen.
Asche999
23
Ich entscheide mich einfach, dies als Oberflächenwert zu betrachten: "Übung macht den Meister." Schau nicht zu tief
rein
6
Ich mag diese Antwort nicht, weil sie zu leicht falsch verstanden werden kann, so wie "Wegwerf-Prototypen" nie wirklich weggeworfen zu werden scheinen.
Rudolf Olah
2
Ich finde es seltsam, dass so viele Leute ein Problem damit haben. Es ist fast eine perfekte Analogie für den iterativen Entwicklungsprozess. Sie erstellen schnell etwas, um die Anforderungen zu erfüllen, Fehler zu beheben und zu überarbeiten, bis es korrekt und gut genug ist. Wenn Sie keine Software auf diese Weise erstellen, müssen Sie sie unbedingt ausprobieren. Rumination und Navel-Staring sind weitaus weniger effektiv, als etwas zu erledigen und die Leute darauf einwirken zu lassen.
JimmyJames
72

Eine Möglichkeit, die anscheinend niemand erwähnt hat, ist, dass es Ihnen gut geht und Ihre Manager nicht sehr gut sind. Wie messen sie die Produktivität? Können sie Ihnen konkrete Beispiele nennen oder handelt es sich nur um eine allgemeine Wahrnehmung? Haben sie die Zeit berücksichtigt, die sie für die Reparatur der Arbeit anderer Leute im Vergleich zu Ihrer aufgewendet haben?

Ich habe gesehen, dass viele Leute Anerkennung dafür bekommen, dass sie Sachen erledigt haben, während der Rest ihres Teams das Chaos, das sie hinterlassen haben, repariert.

pdr
quelle
1
Dies ist wahrscheinlich ein großer Teil des Problems. Rückblickend erscheint es mir zu zufällig, dass ich immer mit Leuten verglichen werde, die in meinem Unternehmen länger arbeiten als ich. Hmm ...
Asche999
Wenn das der Fall ist, ist mein Rat den ersten zwei meiner Fragen direkt zu stellen und sehen , welche Antwort Sie erhalten, nehmen Sie es von dort
pdr
16
Wie zutreffend, so oft bin ich auf Manager gestoßen, die behaupteten, ich sei inkompetent, als die Projekte, die ich in der Produktion ausgab, systematisch ein oder zwei Größenordnungen weniger Supportanfragen ergaben als vergleichbare Arbeiten von anderen Teams. Viele sehen einfach nicht das Gesamtbild. Metriken helfen in etwa so viel wie es ein Ärgernis ist. Normalerweise versucht ein solcher Manager, das System so zu spielen, dass seine Statistiken gut aussehen.
Newtopian
Dies ist eher ein Kommentar als eine Antwort. Persönlich möchte ich als Programmierer immer schneller und effizienter werden, unabhängig davon, was andere denken. Zu diesem Thema gibt es definitiv viel zu besprechen.
Andres Canella
@AndresCanella Jede Antwort auf diese Frage ist im Grunde ein langer Kommentar. Du hast recht, es gibt viel zu besprechen. Dies ist wirklich kein gutes Diskussionsformat (und soll es auch nicht sein). Am Anfang war es jedoch eine gute Frage, weshalb es geschlossen und als Community-Wiki gekennzeichnet ist - für das niemand Reputationspunkte erhält - und nicht gelöscht wird.
pdr
39

Das meiste, was die Leute für wichtig halten, ist nicht wichtig. Tippgeschwindigkeit ist nicht wichtig. Schnellere Maschinen oder Werkzeuge sind nicht wichtig. Wir sind keine Schreibkräfte oder Maschinenbediener. Wir sind Denkarbeiter. Wir sind Entscheider .

Es ist wichtig, Feedback zu verwenden, um Ihren Entscheidungsprozess kontinuierlich zu verbessern. Der einzige Weg, dies zu tun, ist durch Erfahrung, zielgerichtetes Üben und kontinuierliches Feedback.

  • Arbeiten Sie an Nebenprojekten.
  • Arbeiten Sie an Open Source-Projekten.
  • Arbeiten Sie mit Entwicklern zusammen, die besser sind als Sie. Pair-Programm!
  • Setzen Sie sich neuen Werkzeugen und Techniken aus. Behalten Sie, was funktioniert.
  • Machen Sie Programmierübungen, um Ihre Entscheidungsfindungsapparate * zu trainieren.
  • Überwachen Sie Ihre Verbesserungen anhand objektiver Kennzahlen wie Fehlerrate und -geschwindigkeit sowie subjektiver Kennzahlen wie Codequalität und -fitness.

Schließlich: Denken Sie daran, dass Geschwindigkeit ohne Qualität nutzlos ist und umgekehrt. Finden Sie ein Gleichgewicht zwischen diesen Spannungen, um Ihren Nutzen zu maximieren.

* http://codekata.pragprog.com/

Rein Henrichs
quelle
Können Sie Google andere Websites / Begriffe vorschlagen? Ich denke, eine seltsame Herausforderung pro Woche anzugehen, könnte mein Gehirn in verschiedenen Dimensionen in Bewegung bringen.
Asche999
Ein neuer Favorit von mir ist pragprog.com/titles/btlang/seven-languages-in-seven-weeks
Rein Henrichs
1
Der Teil am Anfang macht keinen Sinn. Alles, was dich schneller macht, macht dich schneller. Wenn mindestens ein Teil Ihrer Zeit für das Tippen aufgewendet wird, werden Sie durch die Verbesserung Ihrer Schreibgeschwindigkeit schneller. Wenn Sie mindestens einen Teil Ihrer Zeit damit verbringen, auf den Computer zu warten, werden Sie durch einen schnelleren Computer schneller. Wenn Sie auf der Suche sind, so schnell wie möglich zu werden und sich ständig zu verbessern, sollte nichts übersehen werden.
still_dreaming_1
12
Die kleinen Dinge wie Tippen und Computergeschwindigkeit machen einen großen Unterschied. Dies liegt an den unerwarteten Nebenwirkungen. Wenn Sie auf Ihren Computer warten müssen, werden die meisten Menschen frustriert und manche sogar abgelenkt. Die Kombination aus Frustration und Ablenkung ist ein gewaltiger Produktivitätskiller. Ähnliches gilt für das Tippen. Wenn Sie schnell tippen, bedeutet dies wahrscheinlich, dass Sie das Tippen mit Fingerspitzengefühl beherrschen, und dass Sie wahrscheinlich nicht viel über das Tippen nachdenken. Dies macht Ihre Augen und Ihr Gehirn frei, damit Sie sich auf die anstehende Aufgabe konzentrieren können - eine enorme Steigerung der Produktivität.
still_dreaming_1
Ich stimme zu. Wenn Sie Zeit damit verbringen, darüber nachzudenken, wie das Wort "werfen" auf Ihren Bildschirm gelangt ("Ich muss die Maus dorthin bewegen, dann klicken, dann muss ich das" t "auf meiner Tastatur finden"), hat Ihr Gehirn auch keine Zeit dafür Betrachten Sie die tatsächlichen Entscheidungen.
Erikbwork
25

Es ist gut möglich, dass Sie tatsächlich aufgefordert werden, etwas Qualität zu opfern , um schneller zu sein.

In einigen Entwicklungsumgebungen 1 lohnt es sich einfach nicht, etwas Poliertes zu produzieren, wenn "gerade gut genug" ausreicht.


1 - Ich denke insbesondere an "interne Werkzeugmacher", aber es gibt wahrscheinlich auch andere.

Jens Bannmann
quelle
5
Das schloss ich aus meinen frühen Jobs - andere schrieben auf Kosten hoher Geschwindigkeit in deutlich geringerer Qualität. Das ist meine Achillesferse; Es fällt mir sehr schwer, schlechten Code zu schreiben, von dem ich weiß, dass er mich später beißt.
Asche999
Das ist ein leicht zu lösendes Problem. Sie müssen Ihre Softwareumgebung ändern. Sie müssen in einer Umgebung arbeiten, in der es wichtiger ist, alles richtig zu machen, als es schnell zu erledigen. Es gibt Jobs da draußen, bei denen es darauf ankommt.
Michael Shaw
Nachdem wir in Umgebungen gearbeitet haben, in denen beide gleichermaßen geschätzt werden, schlagen diejenigen, die es richtig machen, diejenigen, die es schneller machen, diejenigen, die es richtig machen, langsamer. Und ich denke, ich bin in der letzteren Gruppe.
ashes999
2
In diesem Fall liegt es wahrscheinlich an den Strategien, mit denen Sie Code schreiben, testen und debuggen. Fragen Sie, ob Sie ein Programm mit einem "schnellen" Programmierer kombinieren können, um zu sehen, wie diese ihre Gedankenprozesse organisieren.
Michael Shaw
1
@ ashes999: Mit Übung und Erfahrung und Geduld werden Sie von der letzteren Gruppe zur ersteren Gruppe wechseln. Es gibt keine magische Pille, die Sie über Nacht umstellen könnte.
FrustratedWithFormsDesigner
12

Es hört sich so an, als ob Sie all die guten Dinge tun - das wird Sie mittelfristig schneller machen, daher ist es nicht offensichtlich, ob Sie tatsächlich langsam sind. Nur du weißt das wirklich. (Aber es ist eine sehr reale Möglichkeit - PeopleWare behauptet einen Produktivitätsunterschied von bis zu 10X zwischen Entwicklern für die gleiche Aufgabe).

Also habe ich ein paar Vorschläge für dich:

  1. Zeit ist eine relative Sache, also ist das Problem vielleicht nicht Ihre tatsächliche Geschwindigkeit, sondern die Wahrnehmung der Zeit, die Sie geben. Sie könnten annehmen, dass es eine Woche dauern wird, aber am Ende zwei Wochen, während andere 3 Wochen verbringen könnten ... aber Sie sehen nur 1 Woche langsam aus.

  2. Da Sie dieses Feedback häufig erhalten, ist es vielleicht an der Zeit, mit Ihrem Vorgesetzten und Kollegen zu sprechen, um zu sehen, was sie sagen - es muss viel zu lernen geben.

  3. Führen Sie eine Paarprogrammierung mit einem Entwickler mit "schneller Qualität" durch, um festzustellen, ob Sie den Unterschied feststellen können.

Stephen Bailey
quelle
8

Im Endeffekt läuft es auf Erfahrung hinaus . Um schneller zu sein, als wenn Sie ein Auto fahren, haben Sie zunächst Angst davor, dass andere schnelle (oder betrunkene) Fahrer (oder beides) sind und Sie sicher nach Hause gelangen möchten (in Bezug auf die Software) funktioniert wie entwickelt und es funktioniert gut).

Im Laufe der Jahre / Monate lernen Sie, sobald Sie die Grundlagen des Fahrens und der Autobahnen verstanden haben, ein paar Tricks, mit denen Sie Spaß am Fahren haben. Das nennen wir Erfahrung. Diese "Tricks" (die ich Eigenschaften nenne) helfen.

In meinem Fall habe ich die reale Verwendung von Entwurfsmustern gelernt, indem ich (sogar @ home) codierte und die Verwendung einiger lernte. Wenn ich also auf ein Problem stoße, für das ein Entwurfsmuster erforderlich ist, nutze ich die Erfahrungen aus der Vergangenheit, um festzustellen, welche davon erfolgreich waren und warum es für meine Situation funktionieren würde / nicht.

In Summe:

  • Erfahrung schafft Eigenschaften, die das Vertrauen und die Software verbessern.

PS: Erfahrung entsteht auch, wenn man von anderen lernt. ZB Hilfe von SO, Pair Programming, Peer Reviews usw. Sie können keine Erfahrung machen, wenn Sie nicht zurückblicken und aus Fehlern lernen können (oder wenn jemand Ihre Bemühungen niemals in Frage stellt).

Buhake Sindi
quelle
Ich hoffe wirklich, dass dies nicht die richtige Antwort ist. Ich verbringe bereits viel Zeit mit dem Programmieren und hoffe, dass mir noch etwas fehlt, das mir einen entscheidenden Vorteil verschafft.
ashes999
@ ashes999, ok! Überprüfen Sie Ihre Arbeit mit Freizeit-Codierung? Mein Punkt ist, es muss Zeit sein, an der Optimierung des Codes zu arbeiten und den Dreh raus zu kriegen. Wir können alle programmieren, aber wie oft geben wir uns Zeit für die Optimierung?
Buhake Sindi
@TEG Ich überprüfe es zwischen Projekten; z.B. Wenn ich bei Projekt Nr. 1, bei einem ähnlichen Projekt Nr. 2, etwas auf eine bestimmte Art und Weise codiert habe, könnte ich über die Designfehler nachdenken und viel überarbeiten.
Asche999
@ashes - "viel umgestalten" bedeutet, dass Sie genau dort eine Zeitsenke haben, weil Ihr ursprüngliches Design nicht optimal war. Wenn Ihr Chef nicht weiß, dass Sie ein Problem haben, zu erklären, wo die Stunden waren. Wenn der Chef es weiß, haben Sie ein Problem damit, zu erklären, warum Sie Ihr Design überhaupt nicht von einem erfahrenen Mitarbeiter überprüfen ließen.
@TRA Entschuldigung, ich hätte spezifizieren sollen - bei Hobbyprojekten überarbeite ich viel. Bei der Arbeit überarbeite ich leicht oder erstelle sichtbare Aufgaben, damit mein Manager weiß, dass ich überarbeite.
Asche999
8

Die Frage ist, ob Sie weniger teuer sind, wenn Sie die langfristigen Gesamtkosten betrachten.

Mit anderen Worten, sind Ihre sorgfältig ausgearbeiteten Fehlerbehebungen von so hoher Qualität (einschließlich Testfällen und Dokumentation), dass die Kosten für die Wartung der von Ihren schnelleren Mitarbeitern vorgenommenen Fehlerbehebungen überwiegen ?

Wenn ja, müssen Sie Ihre Vorgesetzten auf diese Tatsache aufmerksam machen. Es kann schwierig sein zu argumentieren, wenn sie nicht messen und über die erforderlichen Daten verfügen, um Ihre Einschätzung zu bestätigen.

Wenn nein, müssen Sie sich genau überlegen, warum dies der Fall ist:

  • Bist du zu unerfahren
  • Verbringst du viel zu viel Zeit mit Dingen, die nicht angefordert wurden und von denen du glaubst, dass sie da sein sollten?
  • Haben Sie Schwierigkeiten festzustellen, wann der Fix abgeschlossen ist?
  • Ist Ihr Code immerhin von schlechterer Qualität als Sie denken?
  • Sollten Sie die Codeentwicklung anders angehen, weil Sie zu lange brauchen, um so schnell wie jetzt auf den neuesten Stand zu kommen?
  • Haben Sie zu viel Zeit mit solchen Dingen verbracht?

Überlege es dir und bearbeite deine Frage mit deinen Erkenntnissen.

user1249
quelle
8

Alle Befragungen, ob Sie wirklich langsam sind oder nicht, sind albern. Ein schneller Programmierer zu werden, ohne auf Qualität zu verzichten, ist immer ein gutes Ziel, egal wie langsam oder schnell Sie bereits sind. Dies ist mein oberstes Ziel als Programmierer und ich werde es niemals schaffen. Ich versuche immer, schneller zu werden, ohne Abstriche bei der Qualität zu machen, ich bin davon besessen. Hier ist, was für mich bisher in der Reihenfolge der Hilfsbereitschaft gearbeitet hat, zusammen mit einigen experimentellen Ideen am Ende:

1) Niemals aufhören zu lernen: Lernen Sie alles, was Sie über das Programmieren und Verwenden von Computern im Allgemeinen können. Finden Sie Bereiche, in denen Sie schwach sind, und lernen Sie sie. Auch wenn es völlig unabhängig von Ihrer Arbeit und C # zu sein scheint, kann ich Ihnen versichern, dass Sie, wenn Sie danach suchen, häufig Möglichkeiten finden, es auf Ihre Arbeit anzuwenden. Lernen hat auch etwas mit Erfahrung zu tun. Lesen Sie also nicht nur, sondern probieren Sie es aus und erweitern Sie Ihre Fähigkeiten. Wenn Sie Windows gewohnt sind, probieren Sie Unix aus oder umgekehrt. Wenn Sie normalerweise IDEs verwenden möchten, versuchen Sie es mit Befehlszeilentools und Texteditoren oder umgekehrt. Wenn Sie von einem Tool oder einer Technologie hören, von der Sie vorher noch nichts gehört haben oder von denen Sie nicht viel wissen, geben Sie nicht der Versuchung nach, weiterzumachen. Schlag es nach! Haben Sie keine Angst, über den Tellerrand hinauszudenken und experimentelle neue Technologien zu erlernen, von denen andere sagen, dass sie unpraktisch sind.

2) Projekte aufteilen: Versuchen Sie, Ihre Projekte in Mini-Projekte aufzuteilen. Versuchen Sie, jeden Tag oder höchstens alle paar Tage ein neues Release zu erstellen. Fragen Sie sich: "Was ist die minimale Menge an Funktionen, die ich freigeben kann, und dennoch etwas, das für den Benutzer nützlich ist." Dies ist eine Fähigkeit, die Sie dadurch lernen werden. Möglicherweise müssen Sie Ihre Manager davon überzeugen, dies zu tun, aber sie werden in der Regel recht schnell mit den Ergebnissen zufrieden sein. Auf diese Weise werden Sie feststellen, dass Dinge, von denen Sie dachten, dass sie für Ihre Funktion wesentlich sind, tatsächlich zusätzliche Funktionen sind, die später entwickelt werden können. Dies ermöglicht es Ihnen und Ihren Managern, nur die wichtigsten Funktionen anstelle aller Funktionen zu priorisieren, die sich auf die Funktion beziehen, an der Sie gerade arbeiten. Auf diese Weise können Sie schneller denken, indem Sie Ihren Geist klar und konzentriert halten. Sie werden wiederum legitimerweise schneller programmieren. Ihre Manager oder zumindest die Manager Ihres Managers werden wahrscheinlich auch bemerken, dass Sie jetzt noch schneller programmieren als Sie es wirklich sind, weil Sie mehr Releases herausbringen. Ein weiterer großer Vorteil davon ist, dass Sie viel besser einschätzen können, wie lange die Veröffentlichung dauern wird, und Ihre Manager werden Sie dafür lieben. Da Sie bereits viele automatisierte Tests durchführen, sollten Sie keine Probleme damit haben, häufige Releases auszuführen, die stabil sind. Möglicherweise müssen Sie Ihr automatisiertes Build-System aufrüsten. Ich empfehle dringend, das Buch Continuous Delivery in der Martin Fowler-Reihe zu lesen. Es ist schwer zu lesen und weil es sich extrem wiederholt, aber immer noch sehr hilfreich. s Manager werden wahrscheinlich auch bemerken, dass Sie jetzt noch schneller programmieren, als Sie es wirklich sind, weil Sie mehr Releases herausbringen. Ein weiterer großer Vorteil davon ist, dass Sie viel besser einschätzen können, wie lange die Veröffentlichung dauern wird, und Ihre Manager werden Sie dafür lieben. Da Sie bereits viele automatisierte Tests durchführen, sollten Sie keine Probleme damit haben, häufige Releases auszuführen, die stabil sind. Möglicherweise müssen Sie Ihr automatisiertes Build-System aufrüsten. Ich empfehle dringend, das Buch Continuous Delivery in der Martin Fowler-Reihe zu lesen. Es ist schwer zu lesen und weil es sich extrem wiederholt, aber immer noch sehr hilfreich. s Manager werden wahrscheinlich auch bemerken, dass Sie jetzt noch schneller programmieren, als Sie es wirklich sind, weil Sie mehr Releases herausbringen. Ein weiterer großer Vorteil davon ist, dass Sie viel besser einschätzen können, wie lange die Veröffentlichung dauern wird, und Ihre Manager werden Sie dafür lieben. Da Sie bereits viele automatisierte Tests durchführen, sollten Sie keine Probleme damit haben, häufige Releases auszuführen, die stabil sind. Möglicherweise müssen Sie Ihr automatisiertes Build-System aufrüsten. Ich empfehle dringend, das Buch Continuous Delivery in der Martin Fowler-Reihe zu lesen. Es ist schwer zu lesen und weil es sich extrem wiederholt, aber immer noch sehr hilfreich. und Ihre Manager werden Sie dafür lieben. Da Sie bereits viele automatisierte Tests durchführen, sollten Sie keine Probleme damit haben, häufige Releases auszuführen, die stabil sind. Möglicherweise müssen Sie Ihr automatisiertes Build-System aufrüsten. Ich empfehle dringend, das Buch Continuous Delivery in der Martin Fowler-Reihe zu lesen. Es ist schwer zu lesen und weil es sich extrem wiederholt, aber immer noch sehr hilfreich. und Ihre Manager werden Sie dafür lieben. Da Sie bereits viele automatisierte Tests durchführen, sollten Sie keine Probleme damit haben, häufige Releases auszuführen, die stabil sind. Möglicherweise müssen Sie Ihr automatisiertes Build-System aufrüsten. Ich empfehle dringend, das Buch Continuous Delivery in der Martin Fowler-Reihe zu lesen. Es ist schwer zu lesen und weil es sich extrem wiederholt, aber immer noch sehr hilfreich.

3) Verwenden Sie die Pomodoro-Technik und passen Sie an, was bei Ihnen nicht funktioniert. Wenn Sie dies mit Nummer 2 auf dieser Liste kombinieren, erhalten Sie einen RIESIGEN Produktivitätsschub.

4) Lerne Vim. Selbst wenn Sie diese Befehle in Visual Studio über ViEmu, in Eclipse über ein Plugin oder in Emacs verwenden, werden Sie produktiver. Der beste Weg, um Vim zu lernen, besteht darin, es zu benutzen und sich zu zwingen, es niemals zu deaktivieren (oder zu alten Werkzeugen zurückzukehren), bis Sie es beherrschen. Es ist anfangs schmerzhaft, aber Sie werden niemals zurück wollen und sogar zusammenzucken, wenn Sie ohne es arbeiten müssen. Einige würden sagen, dass dies Ihre Geschwindigkeit nicht wesentlich erhöht. Aber schneller ist schneller, besonders wenn das Lesen und Ändern von Code DAS IST, WAS WIR TUN, und ich habe festgestellt, dass ich damit gelegentlich viel Zeit gespart habe.

5) Letzteres wird nicht unbedingt empfohlen, da ich nicht sicher bin, ob es eine gute Idee ist, und es kann Ihre Produktivität tatsächlich verringern, aber ich werde es trotzdem tun. Sie können versuchen, mehr Abnahmetests und weniger Komponententests durchzuführen, oder stellen Sie zumindest sicher, dass Sie einige Abnahmetests durchführen. Ich hatte Erfolg mit SpecFlow, aber ich vermute, dass es etwas Besseres gibt. Sogar das Schreiben der Spezifikationen kann ziemlich technisch sein, daher möchten Sie vielleicht Ihren Manager / Kunden dazu bringen, zuerst eine grobe Entwurfsversion zu schreiben, die Sie erheblich ändern, oder Sie schreiben die gesamte Sache selbst und lassen sie einfach lesen und OK. Dies wird Ihnen mit der Nummer 2 aus dieser Liste helfen. Akzeptanztests können auch praktischer sein und erfordern weniger Code als Unit-Tests. Das heißt nicht, dass sie sie ersetzen, verschiedene Werkzeuge für verschiedene Dinge.

6) Dieser ist noch experimenteller und kontroverser. Ich habe das nicht selbst gemacht, daher kann ich es nicht wirklich empfehlen. Lernen und verwenden Sie das Meta Programming System von JetBrains. Verwenden Sie diese Option, um Tools zu erstellen, mit denen Ihr Manager / Kunde die gewünschte Software selbst erstellt. Möglicherweise können Sie sogar die Durchführung von Unit- und Abnahmetests einstellen, wenn Sie damit Tools erstellen, mit denen Ihr Manager / Kunde das Verhalten auf sehr einfache und unkomplizierte Weise festlegt. Die Idee ist, den Programmierer nicht loszuwerden. Die Programmierer müssten diesen Tools, die vom Kunden / Manager verwendet werden, immer dann neue Funktionen hinzufügen, wenn sie (die Personen, nicht die Tools) nicht einfach die gewünschten Funktionen erstellen können. Ich glaube, dass entweder MPS oder ähnliche Tools der Weg der Zukunft sind.

INTPnerd
quelle
5

Verwenden Sie Ihr Gehirn mehr und machen Sie weniger Tests. Um ehrlich zu sein, das Testen hat seinen Platz, ist aber teuer.

Lesen Sie auch Die Kunst der Unix-Programmierung (kostenlos online, das Buch ist den Preis wert)

Schließlich sind Sie möglicherweise nicht am richtigen Ort. Runder Stift in Vierkantform usw.

Letztendlich ist es wie in der Schule: "Geben Sie aus, was der Lehrer will" wird zu "Geben Sie aus, was das Management verlangt und bezahlt".

Christopher Mahan
quelle
3
Testen macht mich schneller, nicht langsamer. Weniger Tests bedeuten, dass mehr Regressionen länger ungenutzt bleiben und schwerer zu beheben sind, da Sie keine großen Code-Sprünge machen können, weil Sie befürchten, dass "etwas kaputt gehen könnte".
Asche999
automatisiertes Testen ist für mich Code-Geruch. Dies bedeutet, dass der Code nicht einfach genug war.
Christopher Mahan
6
Wenn Ihr Code so einfach ist, dass er keine Tests benötigt, macht er nichts Interessantes.
Rein Henrichs
Woher weißt du das genau? Oh, ich nehme noch einmal an ... Ich verweise Sie auf Regel der Modularität: Schreiben Sie einfache Teile, die durch saubere Schnittstellen verbunden sind. (aus Die Kunst der Unix-Programmierung)
Christopher Mahan
Ich glaube, du hast dort etwas, Christopher. Hier verbringt ashes99 viel Zeit, zB "slew". Zu viel von irgendetwas ist eine schlechte Sache. In diesem Fall sollten Sie die Anzahl der durchgeführten Tests überdenken, es sei denn, Sie richten Code für Flugsteuerungssysteme ein. Oder gehen Sie in diese Art von Feld.
user21007
5

Wenn Sie ein umfangreiches, abgeschlossenes Projekt erstellen und die Anzahl der "letzten" Codezeilen pro Arbeitsstunde ermitteln, werden Sie feststellen, dass Programmierer VIEL langsamer programmieren, als Sie es sich vorgestellt haben.

Wir sprechen nur ein paar Zeilen Code pro Tag. Den Rest der Zeit verbringen Sie mit dem Debuggen, Umschreiben und allgemeinen Programmieren.

Möglicherweise haben Sie das alte Sprichwort gehört: Wenn Sie während des Tippens einen Fehler bemerken, sparen Sie das 10-fache der Zeit, wenn Sie ihn zur Erstellungszeit bemerkten. Dies ist 10-mal besser als das Erkennen während der Qualitätssicherung, was 10-mal besser ist als es nach der Freilassung zu fangen ..

Wie beschleunigen Sie es? Ich würde mich nicht auf irgendeine Art von Tippgeschwindigkeit konzentrieren - Fehler zu reduzieren und andere "zukünftige Interaktionen" mit Ihrem Code zu verbessern, sollte eine viel bessere Investition Ihrer Zeit sein.

Lesbarer, klarer Code ist wichtig. Sie schreiben Ihren Code einmal, aber er wird dutzende Male gelesen. Das Schreiben zur besseren Lesbarkeit erspart Ihnen jede Menge Ärger auf der ganzen Linie (was auch viel Zeit spart). Wenn du NIEMALS zurückgehst und deinen Code liest und auch nur eine Sekunde darüber nachdenken musst, dann machst du es falsch.

Die Programmierung von Paaren kann die QS-Zeit verkürzen. Wenn Sie davon ausgehen, dass ein Programmierer nur wenige Zeilen pro Tag erstellt, können zwei Programmierer mit der gleichen Rate wie einer programmieren, aber mit weniger Fehlern.

Defensives Codieren (z. B. Parameterprüfung) kann Probleme reduzieren. Wenn Sie einen wirklich guten Analysten / Architekten in Ihrem Team haben, können Sie mit einem guten Startdesign etwas Zeit sparen.

Ansonsten verbessern Sie einfach Ihre Designfähigkeiten. Wenn Sie Erfahrung sammeln, werden Sie in der Lage sein, Muster, die nicht funktionieren, besser zu erkennen und zu vermeiden, und Sie können Zeitabbrüche früher erkennen usw.

Bill K
quelle
3

Haben Sie darüber nachgedacht, während Ihrer Arbeit eine detaillierte Prüfung Ihrer Person durchzuführen? Verfolgen Sie mit Stift und Papier, wie Sie Ihre Zeit verbringen, oder verwenden Sie Rescue Time , um sich selbst zu verfolgen.

Wenn Sie genau wissen, wie Sie Ihre Zeit verbringen, können Sie sich einen besseren Überblick über den Verbesserungsbedarf verschaffen und Ihre Anstrengungen dort konzentrieren.

Idealerweise können Sie auch einige Ihrer Kollegen dazu herausfordern, Ihre Ergebnisse zu vergleichen und sich gegenseitig Anregungen zu holen. Sie haben wahrscheinlich einige Stärken, von denen auch sie profitieren könnten.

Vielleicht stellen Sie fest, dass Sie zu viel Zeit für einen Teil Ihres Prozesses aufwenden, der automatisiert werden könnte, oder dass Sie an einem bestimmten Tag viele Ablenkungen haben und ein anderer Teil des Tages ruhig ist. Dann können Sie Ihre Aufgaben planen das usw.

Oder vielleicht stellen Sie fest, dass das Testen mehr Zeit in Anspruch nimmt als Sie dachten, und Sie müssen Ihre Wahrnehmung überdenken, dass es Sie schneller macht.

Es gibt Ihnen nicht zuletzt Benchmarks, gegen die Sie arbeiten können.

DKnight
quelle
3

Von Ihrer Liste geht es Ihnen gut.

Wenn Ihre Kollegen Code mit einer höheren CRAP-Nummer erstellen, werden sie schneller. CRAP ist eine namensgebende Metrik, die zyklomatische Komplexität und Testabdeckung kombiniert.

Schreiben Sie keinen Code, der mehr CRAP als nötig ist. ;)

Meine einzige Änderung, die ich vorschlagen möchte, ist die Verwendung von Bibliotheken. Schreiben Sie diese nur, wenn:

  1. Ihr Unternehmen verkauft Bibliotheken
  2. Sie haben wiederkehrenden Code in eine Bibliothek überarbeitet

Du liest und machst und das ist großartig. Aber Sie könnten stecken geblieben sein, wenn Sie über Procuedural- oder OO-Code nachgedacht haben. Haben Sie sich der funktionalen Programmierung (sagen wir Haskell?) Und Prolog ausgesetzt?

Haben Sie mit Smalltalk / Squeak gespielt, um Ihre OO-Programmiertechnik zu verbessern?

Und schließlich die Theorie. Haben Sie zumindest ein rudimentäres Verständnis der Graphentheorie? (Einige Programme arbeiten mit Bäumen, DAGs oder einfachen Graphen. Netzwerke sind Graphen.)

Tim Williscroft
quelle
Viele tolle Punkte hier. Ich benötige Bibliotheken, weil ich eine Funktion für Spiel X benötige (z. B. Silverlight-Speicher für mehrere Sitzungen meines Spiels), und ich kann sagen, dass sie später benötigt werden - oder sie sind nur abstrakter Code (wie das Finden von Pfaden) habe nichts spezielles mit meinem Spiel zu tun. Ich habe einen comp-sci Hintergrund, also habe ich prozedural, OO, funktional und den anderen gemacht (Prolog). Graphentheorie, ja; Tiefenrekursion habe ich sehr oft verwendet, seltsamerweise.
Asche999
3

Ich werde Onkel Bob zitieren :

Der einzige Weg, schnell zu gehen, ist, gut zu gehen.

Jedes Mal, wenn Sie die Versuchung verspüren, Qualität gegen Geschwindigkeit zu tauschen, werden Sie langsamer. Jedes Mal.

- "Vehement Mediocrity", Robert C. Martin

Johnsyweb
quelle
3

Soweit ich weiß, ist es:

  1. gut
  2. schnell
  3. billig

Als Manager können Sie 2 beliebige auswählen.

Mach dir keine Sorgen über die Kommentare, die du bekommen hast. Als Mitkodierer würde ich eher gut durchdachten und gut geschriebenen Code beibehalten als etwas, das zusammengeschlagen wurde.

Nico
quelle
2

Die wichtigsten Dinge, an die ich denken kann, sind folgende

  • Erhöhen Sie Ihre Schreibgeschwindigkeit.
  • Verwenden Sie Tools, die Produktivitätssteigerungen ermöglichen. Zum Beispiel ReSharper.
  • Schnellere Maschinen oder Werkzeuge. Wie mehr RAM oder ein Solid State Drive.

Ich bin sicher, es gibt einige Dinge, die Sie auch im Bereich der Codierungsfähigkeiten tun können, aber es hört sich so an, als wären Sie über all diese Dinge hinweg. Die Dinge, die ich oben aufgeführt habe, werden in der Regel von Entwicklern übersehen.

mpenrow
quelle
In diesen Dingen bin ich mit meinen Kollegen auf Augenhöhe (vielleicht habe ich einen Vorteil bei der Tippgeschwindigkeit). sie sind irgendwie immer noch schneller. Erfahrung vielleicht?
Asche999
1
Oberhalb eines bestimmten minimalen "Hunting and Peck" -Minimums ist die Tippgeschwindigkeit nicht der begrenzende Faktor.
2
Sie könnten mit ihnen Ebene in mit den Werkzeugen (zB ReSharper), aber wissen Sie , wie sie effektiv zu nutzen? Ich habe viele Leute gesehen, die Resharper installiert haben und dann nicht gelernt haben, wie man 80% der Funktionen verwendet. Stellen Sie im Übrigen sicher, dass Sie alle Refactoring- und Verknüpfungsfunktionen von Visual Studio verstehen. Ich habe einen leichten Vorteil von 2-3% gegenüber allen anderen in meinem Büro, nur weil ich den ganzen Tag meine Hände auf der Tastatur habe. Mäuse sind langsam :)
EZ Hart
@EZ Hart: Sehr guter Punkt. Einige moderne IDEs (ich denke an Eclipse, aus dem Kopf) verfügen über sehr leistungsfähige Tools für das Refactoring und die Suche nach Codereferenzen (z. B., wo auf eine Klasse oder Methode verwiesen wird, nicht nur, wo der Text "myMethod" angezeigt wird ). Für einige dieser "erweiterten" Funktionen lohnt es sich, 5 Minuten zu investieren, um zu lernen, wie man die Codebasis effizienter verwaltet.
FrustratedWithFormsDesigner
Wir sind alle gleich. Keiner von uns hat die Werkzeuge :)
Asche999
2

Sie könnten einen Speed-Typing-Kurs belegen. Ich weiß nicht, ob schnelleres Schreiben ein Problem ist, aber "zu langsames Codieren" könnte durch einfach langsame Schreibgeschwindigkeiten verursacht werden.

Was ist mit Codegeneratoren? Manchmal wiederholt sich der Code. Refactoring kann einen Teil davon entfernen, aber auch dann können sich wiederholende Aufrufe derselben refactored-Funktion auftreten. In Abhängigkeit von den Daten und Code mit dem Sie arbeiten, Code - Generatoren (geschrieben in Excel, Perl, Java, was auch immer ...) könnten eine Menge Zeit sparen. Und die Verwendung von Tools zur Code-Generierung für die Benutzeroberflächenentwicklung ist in der Regel ein Kinderspiel.

Und schließlich sind vielleicht die Metriken falsch. Haben Sie darüber nachgedacht , dass Sie bei der fasteset möglichen Geschwindigkeit sind Codierung alles andere gegeben, und dass die Fristen zu kurz sind, so dass Sie scheinen ein langsamer Codierer zu sein?


Aufgrund der Änderungen in Ihrer Frage könnten Sie entweder den Weg einiger Ihrer Mitarbeiter einschlagen und die schnellste Lösung zusammen hacken - und Dokumentation und Qualitätssicherung sind verdammt!

Oder ... sammeln Sie mehr Erfahrung und üben Sie in einem bestimmten Bereich, damit Sie die Codebasis und API so gut kennen, dass Sie die Lösungen im Schlaf codieren können. Dies kann durchgeführt werden, erfordert jedoch mehr Zeit. Wenn die anderen Entwickler , die schneller sind als Sie mehr ältere und erfahrenere dann bekannt sind es nur eine Sache zu tun - Sie müssen sich mehr ältere und erfahren!

FrustratedWithFormsDesigner
quelle
Es ist keine Zeitleiste; andere Mitarbeiter können die gleiche Arbeit schneller erledigen. Vielleicht ist es Erfahrung. +1 für Tippgeschwindigkeit; Ich kann ungefähr 100WPM eingeben, das ist es auch nicht.
Asche999
@ ashes999: und wenn die Leute, die die gleiche Arbeit schneller erledigen können, erfahrener sind, dann würden Sie wahrscheinlich am meisten von mehr Erfahrung mit den fraglichen Systemen profitieren. Erfahrung braucht Zeit ...
FrustratedWithFormsDesigner
Codegeneratoren sind ein gemischter Segen. Sie sparen möglicherweise Zeit, aber wenn Sie zu viel Zeit mit dem generierten Code verbringen müssen, kann das Speichern zu einem unüberschaubaren Verlust führen.
2

Ich habe einen Einwand gegen die Ansicht von OP, dass "Qualität für Geschwindigkeit geopfert" wurde.

Professionelle Programmierer (Programmierer) müssen 3 Objekte erfüllen:
1) Der Code sollte wie vorgesehen ausgeführt werden.
2) Die Lieferung sollte pünktlich erfolgen.
3) Gute Qualität, Dokumentation usw.
4) Andere usw.

Ich denke, OP wurde als langsam beschuldigt, wahrscheinlich, weil OP nicht rechtzeitig fertig war.

9dan
quelle
2

Dies ist ein Haken 22, der schwer zu umgehen ist. Obwohl es Ihnen möglicherweise immer noch an Erfahrung mangelt und einige Kenntnisse in vielen Bereichen bereits schneller als die meisten sind, ist der Haken, dass es schwieriger ist zu messen .

Persönlich ist das Beste, was Sie an diesem Punkt tun können, sich selbst zu messen. Geben Sie selbst Feedback zu Ihrer Arbeitsweise. Vielleicht können Sie durch einfache Änderungen Ihrer Arbeitsgewohnheiten produktiver werden.

Ich stellte fest, dass Mails viel mehr fraßen als ich dachte, nur weil sie unterbrochen wurden. Jetzt beantworte ich Mails nur noch zweimal am Tag und habe an manchen Tagen fast 1 Stunde Produktivität gewonnen. Versuchen Sie Methoden wie Pomodoro , ich habe es als Mittel zum Messen verwendet. In regelmäßigen Abständen (15 Minuten) notierte ich, was ich zu dieser Zeit tat. So konnte ich sehen, wie meine Tage strukturiert waren und was ich tun konnte, um die Effizienz zu maximieren.

Newtopian
quelle
Sie sagen also, dass Sie selbst ein Musterprofil erstellt haben? Interessant. :)
sum1stolemyname
Eigentlich war es ein Nebeneffekt einer Zeiterfassungsmethode, die ich eine Weile ausprobiert hatte ( davidseah.com/tools/ett/alpha ). Es hat sich herausgestellt, dass einige interessante und unerwartete Datentrends aufgetreten sind, als ich angefangen habe, sie über den Time-Tracker-Teil hinaus zu betrachten. Es ist, nachdem ich etwas über Pomodoro, GTD und so gelernt habe.
Newtopian
0

Der Vorteil von Squeak für schnelles Codieren geht weit über das "Honen der eigenen OOP-Fähigkeiten" hinaus. Es gibt einen Grund, warum moderne GUIs sowie IDEs in Smalltalk erfunden wurden, ganz zu schweigen davon, dass JUNIT eine Portierung von SUNIT nach Java war, der Begriff "OOP" erfunden wurde, um Smalltalk usw. usw. zu beschreiben.

Man muss immer die Sprache und Umgebung verwenden, die am besten für das geeignet ist, was man erreichen möchte, aber für das allgemeine Prototyping würde ich zumindest Quietschen mit allem vergleichen, mit der möglichen Ausnahme von HyperCard Tatsächlich schneller, da in Squeak hyperkartenähnliche Funktionen integriert sind.

user22340
quelle