Vermeiden Sie es, ein "Theoretiker" -Programmierer zu werden

28

Ich habe diesen Artikel in mehreren Posts auf SO gefunden. Ich falle in den 6. Archetyp; der "Theoretiker".

Es definiert den "Theoretiker" als:

Der Theoretiker weiß alles über Programmierung. Er oder sie kann vier Stunden lang Vorlesungen über die Geschichte einer obskuren Programmiersprache halten oder nachweisen, dass der von Ihnen geschriebene Code nicht optimal ist. Die Ausführung kann zusätzliche drei Nanosekunden dauern. Das Problem ist, The Theoretician weiß nichts über Softwareentwicklung. Wenn der Theoretiker Code schreibt, ist er so „elegant“, dass bloße Sterbliche keinen Sinn daraus ziehen können. Seine oder ihre Lieblingstechnik ist die Rekursion, und jeder Codeblock wird auf Kosten der Aktualität und Lesbarkeit optimal optimiert.

Der Theoretiker ist auch leicht abzulenken. Eine einfache Aufgabe, die eine Stunde dauern sollte, dauert Theoretiker drei Monate, da sie feststellen, dass die vorhandenen Tools nicht ausreichen und sie neue Tools zum Erstellen neuer Bibliotheken erstellen müssen, um ein ganz neues System zu erstellen, das ihren hohen Standards entspricht. Der Theoretiker kann zu einem Ihrer besten Spieler werden, wenn Sie ihn dazu bringen können, innerhalb der Grenzen des Projekts selbst zu spielen und keine Zeit mehr mit der Arbeit am ultimativen Sortieralgorithmus zu verbringen.

Selbst wenn ich an einem einfachen Projekt arbeite, neige ich dazu, zu zögern, alles von Grund auf neu zu konstruieren war irgendwann sinnlos).

Was kann mir dabei helfen? Und bei den KISS-Prinzipien bleiben?

Vielen Dank

Kevin Hicks
quelle
3
Nun, die Tatsache, dass Sie den Trend erkennen, ist ein guter Anfang!
Michael K
13
Ich mag nicht, wie der Artikel Wörter wie "Theoretiker" und "elegant" neu definiert, nur um "schlecht" zu bedeuten.
Rein Henrichs
2
Sobald Sie die Idee haben, dass die intellektuell herausforderndste Aufgabe darin besteht, einen wirklich komplexen, kniffligen Code zu schreiben, der so einfach und lesbar wie möglich ist, werden Sie den Rest der damit verbundenen Probleme hinter sich bringen.
SK-logic
15
Wahre Eleganz zeichnet sich durch Einfachheit aus. Wenn andere den Code nicht verstehen können, ist er vielleicht nicht so elegant, wie Sie denken.
Berin Loritsch
1
"Wenn Sie zwei Code Cowboys für dasselbe Projekt einsetzen, ist ein Scheitern garantiert, da sie sich gegenseitig auf Veränderungen treten und sich gegenseitig in den Fuß schießen." - Dieser ist brillant :)
P Shved

Antworten:

21

Als Theoretiker von Natur aus kann ich Ihnen sagen, dass die Arbeit in einem agilen Geschäft alle derartigen Tendenzen schnell und entscheidend heilen wird. Insbesondere ein eXtreme-Programmiervorgang mit Pair-Programmierung (im Idealfall häufig wechselnd), testgetriebener Entwicklung, Time-Boxing und begrenzten Sprints macht Ihre Arbeit für alle Kollegen sofort sichtbar und erfordert, dass Sie sich öffnen und zusammenarbeiten Minute für Minute. Dies ist eine enorme Abkehr von den getrennten Aufgaben in isolierten Büroumgebungen, in denen die Arbeit im theoretischen Stil floriert. Es erfordert völlige Ehrlichkeit und völlige Integrität, da jeder ständig von allen anderen abhängig ist.

Ich schätze meinen Blick auf den Bauchnabel immer noch, aber ich muss ihn zu Hause genießen oder in seltenen Fällen, wenn ich an einem Nebenprojekt arbeiten kann, das nicht Teil der Hauptentwicklung ist.

Jollymorphic
quelle
Ja! Einen anderen Programmierer zu haben, der den theoretischen Tendenzen entgegenwirkt, funktioniert sehr gut.
Michael K
Ich habe versucht, Agile-Konzepte auf die Arbeit als Einzelprogrammierer anzuwenden, und das funktioniert ziemlich gut.
Bob Murphy
10
  1. Haben Sie Ziele für das, was Sie entwickeln sollen.

  2. Grenzen Sie diese Ziele auf etwas ein, das in naher Zukunft erreicht werden kann.

  3. Konzentrieren Sie sich dann auf diese Ziele und eliminieren Sie alle anderen Überlegungen. Kein Hintergrund. Keine Geschichte. Keine Erweiterungen. Nichts allgemeines oder abstraktes.

  4. Dann schränken Sie sie so weit ein, wie es nur geht. Nicht gut. Nicht flexibel Nicht wartbar. Nur akzeptabel.

  5. Priorisieren Sie dann das absolute Minimum, um das Minimum zu erreichen, das Sie erreichen können. Der Punkt ist, ein Datum in ungefähr einer Woche auszuwählen und auf dieses Datum aufzubauen. Wenn Sie in einer Woche nichts liefern können. Eng. Fokus. Trimmen. Reduzieren.

  6. Dann die Flusen entfernen. Sie haben nur eine Woche. Schneiden Sie weiter.

  7. Konzentrieren Sie sich dann nur auf eine reduzierte Implementierung, die so früh wie möglich durchgeführt wird. Idealerweise weniger als eine Woche, damit Sie Zeit haben, Unterlagen zu schreiben.


Ich habe mit Theoretikern gearbeitet. Ich halte die "Extras" für eine Ausrede, um zu vermeiden, etwas zu tun, das als Fehler eingestuft werden könnte.

Tun - und Scheitern - ist schwer. Über etwas zu reden ist einfacher als etwas zu tun. Viele Nachforschungen und Überlegungen sind ein Weg, um zu vermeiden, dass etwas Falsches getan und dann überarbeitet wird, nachdem festgestellt wurde, dass die Benutzer gelogen haben.

Stellen Sie einfach Code vor sie. Sie nennen den Code einen Fehler. Es passiert. Im Verlauf des Scheiterns werden Sie jedoch die tatsächlichen Anforderungen kennen lernen. Und du wirst lernen, dass sie gelogen haben.

S.Lott
quelle
2
Anstatt -1 (was für einen Mitbeantworter moralisch fragwürdig wäre), lassen Sie mich einfach sagen: (a) "Tun ist schwer?" Ich habe in der Vergangenheit viele Nachtschwärmer dazu gezwungen, hart zu programmieren, um meine Projekte mit Blick auf den Bauch zu beenden, und einige davon (obwohl in der Tat nicht alle) haben den Organisationen, für die ich gearbeitet habe, tatsächlich geholfen. Theoretiker sind nicht (oder zumindest nicht alle) faule Leute. (b) "Nichts Allgemeines oder Abstraktes?" "Ja wirklich?" Sie befürworten keine Abstraktion bei der Gestaltung von Software? Das scheint verdammt schlimm zu sein. (c) "Nicht wartbar?" JA WIRKLICH???
Jollymorphic
@Jollymorphic: Wann habe ich faul gesagt? Ich mache eine zu subtile Unterscheidung zwischen "Tun" und "Denken über das Tun", was möglicherweise eine Codierung von begrenztem Wert beinhaltet. Sie haben angedeutet, "Theoretiker" sei eine schlechte Angewohnheit. Ich befürworte "überhaupt keine Abstraktion", um eine Gewohnheit zu brechen. Ich befürworte "Unmaintainable" als einen Weg, eine Gewohnheit zu brechen. Was Sie tatsächlich tun, ist Ihr Problem. Die meisten Leute, die zu viel nachdenken, denken und abstrahieren auch dann noch viel, wenn sie ausdrücklich darauf verzichten. Es ist eine Gewohnheit. Brechen Sie es, indem Sie tatsächlich aktive Schritte unternehmen, um es zu brechen.
S.Lott
1
Ja, ich habe "so hart tun" genommen, um nicht zu bedeuten, "das ist harte Arbeit, und Theoretiker sind zu faul, um es zu tun", sondern "das ist psychologisch schwer" - dass es sicherer und komfortabler ist, endlos (hart!) Daran zu arbeiten etwas, als es tatsächlich festzunageln und zu beenden.
Carson63000
6

Ich bin mir nicht sicher, ob das so schlimm ist. Natürlich müssen Sie produktiv sein, oder Sie werden Ihren Job nicht machen, aber ein Interesse auf dem Gebiet zu haben, ein Student der Kunst zu sein, ist sozusagen keine schlechte Sache.

Ich würde Ihre Stärken ausspielen, nach Möglichkeiten suchen, bei denen Ihr Stil und Ihre Vorlieben von Vorteil sind.

Um sicherzustellen, dass Sie produktiv bleiben, während Sie ein MVC-Framework in Erlang schreiben (oder was auch immer Sie interessant finden), sollten Sie Ihre essoterischere Arbeit vielleicht auf eine Stunde pro Tag beschränken. Konzentrieren Sie sich für den Rest des Tages nur auf die Grunzarbeit und erledigen Sie die Arbeit. Wenn Sie etwas Interessantes sehen, das Sie ablenken würde, markieren Sie es oder machen Sie eine Notiz, aber fahren Sie fort, und kehren Sie dann in Ihrem zugewiesenen Zeitfenster dazu zurück.

Persönlich habe ich Unmengen von URLs, die interessant aussehen, und einen Stapel von Bibliotheksbüchern. Am Ende kommen vielleicht 10% dieser URLs auf mich zu, und am Ende lese ich vielleicht 50% der Bücher, aber ich erledige auch immer noch die tägliche Arbeit.

Steve
quelle
5

Ich habe dieses Problem selbst gehabt. Zwei Techniken haben geholfen:

  1. Verwenden Sie die Pomodoro-Technik oder eine andere Zeitmanagement-Technik, bei der Sie eine Abfolge von sehr kurzfristigen Zielen festlegen. Wenn Sie herausfinden müssen, was Sie in den nächsten 25 Minuten erreichen können, werden Sie sich auf nützliche Arbeiten konzentrieren.
  2. Testgetriebene Entwicklung. Wenn Sie einen konkreten Test schreiben müssen, bevor Sie Code schreiben, wird das Tagträumen minimiert. (Es gibt keine Möglichkeit, einen Test für "elegant" zu schreiben.) Nachdem Sie etwas zum Laufen gebracht haben, verbringen Sie möglicherweise mehr Zeit damit, es zu überarbeiten, aber zumindest arbeiten Sie an echtem Code und nicht an einem imaginären Ideal.

Schlage dich nicht zu sehr zusammen. Es ist einfacher, einen Theoretiker dazu zu bringen, sich zu konzentrieren und nützliche Arbeit zu leisten, als die Leute, denen es egal ist, dazu zu bringen, ihren Horizont zu erweitern.

Kristopher Johnson
quelle
4

Vermeiden Sie stackoverflow.com . Versteht mich nicht falsch - ich bin ein großer Fan - aber SO und andere programmierorientierte Foren machen den Feind des Guten perfekt . Nach einer Weile haben Sie vielleicht das Gefühl, dass Tausende kluger Leute über Ihre Schulter schauen und nichts, was Sie schreiben, gut genug ist. Lass einfach etwas funktionieren und versuche es verständlich zu machen. Sie können jederzeit wiederkommen, wenn Verbesserungen erforderlich sind.

Vermeiden Sie auch Artikel wie die, die Sie verlinkt haben. Glauben Sie wirklich, dass es zehn Arten von Programmierern gibt? Oder dass jemand, den Sie kennen, vollständig in genau eine der beschriebenen Kategorien passt? Artikel wie dieser haben eine gewisse Anziehungskraft, weil sie ein bisschen Wahrheit enthalten - Sie können sich und / oder einige Ihrer Mitarbeiter in einigen Stereotypen sehen. Aber die Kategorien enthalten ungefähr so ​​viel Wasser wie astrologische Zeichen. Versuchen Sie es das nächste Mal, wenn Sie im Mixer nach der Konferenz sind: "Hallo, ich bin ein Code Cowboy! Was ist Ihr Typ?"

Das soll nicht heißen, dass Ihre Frage ungültig ist - wenn Sie Dinge überdenken, ist es gut zu lernen, wie Sie diese Tendenz vermeiden können. Aber lassen Sie sich nicht von dieser Panditerie dazu überreden, sich selbst in eine Schublade zu stecken.

Caleb
quelle
2

Es gibt eine einfache Richtlinie, die im vollständig entpackten Zustand ausführlich erklärt, wie dieses Szenario vermieden werden kann.

Tun Sie das Einfachste, was möglicherweise funktionieren könnte.

- Kent Beck

Rein Henrichs
quelle
Oder wie Einstein sagte: "Mach alles so einfach wie möglich, aber nicht einfacher."
Ian
Das Problem ist, dass für einen Theoretiker "einfach" viele verschiedene Bedeutungen hat. Das Umschreiben des OS-Kernels in Haskell unter Verwendung von Monaden könnte einen Theoretiker als ultimative "Einfachheit" betrachten.
Kristopher Johnson
1

Ich denke, eine Möglichkeit, Ihren Kopf aus den Wolken herauszuhalten, besteht darin, sich dazu zu zwingen, tatsächliche Anwendungen von Anfang bis Ende zu schreiben und zusätzlich Ihre theoretischen APIs oder Frameworks zu schreiben. Versuchen Sie, eine Zeitbox um etwas zu platzieren, und versuchen Sie, sie innerhalb dieser Zeit zu "beenden". Das Schreiben von Frameworks erfordert ein gutes Verständnis der Entwurfsmuster und der Architektur, aber ich habe festgestellt, dass das Schreiben einer vollständigen Anwendung innerhalb eines festgelegten Zeitrahmens andere Fähigkeiten erfordert als das Schreiben eines hervorragend gestalteten Frameworks.

Wenn Sie jemals einen Antrag ausfüllen möchten, müssen Sie sich irgendwann auf die Erde begeben und ihn einfach erledigen. Dies kann erfordern, dass Sie Opfer bei den Entwürfen bringen oder gezwungen werden, ein Feature auf eine Weise zu implementieren, mit der Sie aufgrund einer bestimmten Einschränkung nicht zufrieden sind. Ich bin ein bisschen wie Sie - ich bin geneigt, Dinge millionenfach zu schreiben und neu zu schreiben, aber wenn ich vor Aufgaben stehe, die innerhalb einer bestimmten Zeit erledigt werden müssen, wähle ich meine Schlachten aus und wähle nur die wichtigste Dinge.

Andy White
quelle
1

Einfach:

  1. Pragmatisch sein .

Die Gegenseite des Theoretikers (die ihre Vorteile auf der Informations- / Wissensseite des Programmierbereichs hat) ist das Pragmatische.

KISS, DRY, SOC und andere Denkweisen, wie in dieser Antwort beschrieben , anzuwenden, bedeutet, pragmatisch zu sein.

Sie können auch lernen, pragmatisch zu sein, indem Sie dieses Buch lesen:

http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X/ref=sr_1_1?ie=UTF8&qid=1302893763&sr=8-1

Vergessen Sie nicht, dass Theorie und Praxis zusammenarbeiten und nicht allein. Ohne viel Übung ist Ihr Wissen nichts. Ohne viel Wissen können Sie Ihre Praxis nicht schnell verbessern.

Übe also viel. Und viel lernen. Aber lass nicht zu, dass einer über den anderen hinwegkommt.

Legen Sie in Ihren Projekten eine Frist fest. Bleibe dabei. Überlegen Sie sich dann pragmatisch, wie Sie Ihr Projekt vor Ablauf dieser Frist abschließen können. Beginnen Sie dann mit dem Codieren, lesen Sie, was Sie wissen müssen, wechseln Sie vom Lesen zum Codieren und begrenzen Sie die Lesezeit.

Klaim
quelle
0

Hrm ... Vielleicht versuchen Sie mal, einen Job in einem Unternehmen zu finden, bei dem Sie Bewerbungen unter einem Zeitplan schreiben müssen. Ich würde für mich selbst sagen, dass ich wahrscheinlich so weit davon entfernt bin, Theoretiker zu sein, wie Sie es können, zumindest bei der Arbeit. Diese Art von Arbeit zu verrichten hat seinen Ort und seine Zeit und ist wichtig, um sich weiterzuentwickeln. Obwohl ich diese Fähigkeit schätze, hat sie in der Geschäftswelt keinen Platz, insbesondere dort, wo ich arbeite. Eine rasante Entwicklungsumgebung, in der Sie Anwendungen manchmal in wenigen Wochen schreiben und der Kunde sie gestern haben möchte! Ich war mit großartigen Entwicklern gesegnet und es hat einige Zeit gedauert, bis alle als Team arbeiteten.

Ich hatte einen Typ, der so brillant wie möglich war, aber wie Sie, musste er immer das letzte bisschen aus seinem Code herauspressen, auch wenn es gut funktionierte, sogar bis zu dem Punkt, an dem er anfing, benutzerdefinierte Steuerelemente zu schreiben, die im Wesentlichen die waren das gleiche wie die von der Umwelt zur Verfügung gestellten. Es war alles sehr cool, aber eine solche Zeitverschwendung, wenn wir Sachen pünktlich rausbringen mussten. Oft unterstützten diese Nebenprojekte das Team und schließlich spürte er den Druck der anderen und formte sich weiter. Ich würde vorschlagen, in einer Teamumgebung mit einigen anderen guten Entwicklern zusammenzuarbeiten, die Produkte herausbringen müssen. Es ist immer Zeit später, Dinge umzugestalten und zu wiederholen oder die beste MergeSort-Version aller Zeiten zu schreiben. Aber manchmal muss man das Produkt an einen Punkt bringen, an dem es funktioniert, und es an den Kunden ausliefern.

Nodey The Node Guy
quelle
0

Es ist nichts Falsches daran, ein "Theoretiker" im üblichen Sinne des Wortes zu sein. Hintergrundwissen zu haben und in der Lage zu sein, die neuesten CS-Forschungsergebnisse zu verstehen, ist eine großartige Fähigkeit, da es sich um eine Goldmine guter und origineller Ideen handelt.

Die eigentliche Frage wird in der späteren Hälfte des Beitrags deutlicher. Kennen Sie das spezifische Projektziel und arbeiten Sie auf dieses Ziel hin, nicht auf ein anderes. In diesem Fall ist es wirklich nur eine Frage der Selbstdisziplin. Weitere Informationen hierzu finden Sie in der Antwort von S. Lott :).

Darius Jahandarie
quelle
0

Konzentrieren Sie sich nicht mehr nur auf das Programmieren, sondern auch auf die Bereitstellung von funktionierender Software. Es setzt Ihre Prioritäten richtig.

Wie das zu erreichen ist, ist eine andere Geschichte. Der beste Weg ist, ein Projekt zu konzipieren und alle Schritte zu durchlaufen, um es in Produktion zu bringen. Danach haben Sie eine andere Denkweise als zuvor.


quelle
0

Vielen Dank für diesen Beitrag. Das macht meine Arbeit noch mehr wert. Genauso empfinde ich eine Ausbildung in Informationsarchitektur als Softwareentwickler. Oft kämpfe ich eher mit "wo man Dinge ändert" als mit "was man ändert". Es gibt zu viele Beziehungen, zu viele clevere und generische Dinge, die zu lange dauern, um herauszufinden, wie diese Dinge funktionieren.

Also stelle ich Fragen und noch mehr Fragen, bis ich weiß, WIE und WO das wirklich aufgebaut ist. Und lassen Sie sich sagen - es funktioniert. Je mehr Fragen ein Feuer stellt, desto weniger ist es wichtig, die ursprüngliche Architektur beizubehalten und schließlich zu den Grundlagen zurückzukehren

if (weWantToMakeChangesToCodeLaterOnAndProbablyBySomeOtherProgrammer)
{
    Console.Writeline("We need to keep the code readable and simple enough ");
    Console.Wrietline("to make it easy for him/her to understand it!");
}
Benny Skogberg
quelle
0

Bitten Sie Ihren Chef, sich einen Mentor zu suchen, und tun Sie dann, was der Mentor sagt.

Der schwierige Teil besteht darin, den Fokus zu behalten und zu erkennen, dass "Hey, lasst uns das Betriebssystem neu schreiben" keinen wesentlichen Nutzen für die Beendigung der Ihnen übertragenen Aufgabe hat (weshalb ein Projektmanager dies nicht tut).

Lassen Sie auch den Mentor ALLE Ihre Entwürfe vor dem Codieren und den tatsächlichen Code nach dem Codieren überprüfen . So können Sie sich auf das konzentrieren, was getan werden muss.


quelle
0

Ich habe die gleiche Versuchung, Dinge zu übertreiben, und es erfordert Selbstdisziplin und Organisation, um daran vorbeizukommen. Wenn ich für jemand anderen codiere, mache ich das folgendermaßen:

  1. Überlegen Sie zu Beginn einer diskreten Aufgabe einige Minuten, was in Bezug auf Funktionalität, Qualität, Liefertermin usw. wirklich erforderlich ist.
  2. Nehmen Sie sich etwas mehr Zeit, um zu planen, wie das geht, und teilen Sie es in Unteraufgaben, Unteraufgaben usw. auf, wobei Sie die Ziele des Kunden im Auge behalten.
  3. Schätzen Sie die Zeit für jeden Artikel und addieren Sie bis zu 50% für Unbekannte. Wenn ein Gegenstand länger als vier Stunden dauert, zerlegen Sie ihn noch etwas. (Wenn ich College-Projekte durchführen würde, würde ich eine Tabelle verwenden, aber als Berater mit mehreren Kunden verwende ich ein Issue-Tracking-System namens Redmine.)
  4. Am wichtigsten: nur die Gegenstände machen, die ich mir ausgedacht habe .

Natürlich passiert etwas. Manchmal muss ich mehr tun - also fange ich bei # 1 von vorne an. Manchmal finde ich, dass eine Aufgabe viel länger dauert, als ich dachte - fangen Sie bei # 1 von vorne an. Manchmal weiß ich im Voraus, dass mein Design später mehr Details benötigt - daher plane ich eine Teilaufgabe zur erneuten Schätzung, bei der ich bei # 1 von vorne beginne.

Je mehr ich das tue, desto besser komme ich damit klar. Selbstdisziplin ist ein mentaler Muskel, der durch Bewegung gestärkt wird, und ich kann auch besser abschätzen, wie lange es dauern wird, und technische Kompromisse eingehen. Und ich finde es hilfreich, mich an ein Zitat von General Patton zu erinnern: "Ein guter Plan, der jetzt gewaltsam ausgeführt wird, ist besser als ein perfekter Plan, der nächste Woche ausgeführt wird."

Als Einzelentwickler kombiniert mein Workflow dies mit Aspekten von Agile, einschließlich eines Kanban-Boards. Ich gehe manchmal auf Tangenten los, aber ich versuche, Abweichungen auf einige Stunden pro Woche zu begrenzen, und es funktioniert ziemlich gut.

Wenn Sie in der Privatwirtschaft arbeiten möchten, ist es sehr wichtig, den "Theoretiker" -Impuls zu kontrollieren. Der brillanteste Programmierer, den ich kenne, lebt im Silicon Valley, hat aber seit Jahren keinen Job mehr, weil er den Ruf hat, viel zu spät perfekten Code zu liefern.

Bob Murphy
quelle