Wie kann ein Rechtshirn mit massivem Linkshirn-Code umgehen? [geschlossen]


11

Meistens bin ich Künstler, obwohl ich mich selbst als Künstler / Physiker bezeichne. Während ich rechnen kann, mit Wörtern umgehen kann und das "logische" Zeug, das als linke Gehirnhälfte betrachtet wird, ist es eine Anstrengung und ich mache Fehler, während ich gut mit den Dingen umgehen kann und die meiste Zeit in Bezug auf die Dinge denke, die mit der rechten Gehirnhälfte verbunden sind Denken - räumliche Beziehungen, ganzheitlicher Gesamtkontext usw. Natürlich ist alles verschwommen, da die Theorie der rechten und linken Gehirnhälfte zu stark vereinfacht ist und keine mentale Aktivität so einfach ist. Ich spüre jedoch, dass ich gut zu Künstlern, Videoregisseuren, Köchen und anderen nonverbalen Denk- und Kreativtypen passe, während die meisten Leute in "IT" - oder Hardcore-Software-Ingenieuren Köpfe haben, die anders arbeiten, mit Liebe zum Detail, halten viele Details gleichzeitig im Auge und starke rationale und verbale Fähigkeiten.

Hier bin ich also in einem Job, der dafür bezahlt wird, pingelige und obskure Fehler in einem riesigen Schwarm von C ++ - Software zu beheben, der sehr schwer mit OO zu tun hat, und jede einzelne Codezeile macht keinen Sinn, es sei denn, ich denke an ungefähr zwanzig andere Klassen- und Methodennamen. Beziehungen zwischen ihnen, der Fluss der Ausführung (sehr spaghettiartig) und andere Details.

Abgesehen davon bin ich auch ziemlich stark gegen viele zeitgenössische C ++ - und OO-Stile. Diejenigen, die diesen Code geschrieben haben, haben wirklich die tiefe OO und Modern C ++ Kool-Ade getrunken. Ich finde, es macht es tatsächlich viel schwieriger, Code zu befolgen, und es ist viel schwieriger zu entscheiden, wo etwas repariert oder geändert werden soll. Ich weiß nicht, ob dies Teil des Unterschieds zwischen links und rechts ist (oder wie auch immer Sie es nennen möchten) oder nicht.

Aber ich muss an C ++ arbeiten - die Leute sind für mein Einkommen auf mich angewiesen. Was sind Tipps und Techniken, um mit dieser Situation umzugehen und für meinen Arbeitgeber so effektiv wie möglich zu sein?


9
Es ist kein Unterschied zwischen linker und rechter Gehirnhälfte - niemand kann diese Art von C ++ - Code ohne großen Aufwand verstehen oder modifizieren, außer der Person, die ihn geschrieben hat (oft nicht einmal sie). Stellen Sie nur sicher, dass Sie, wenn Sie nach einer Schätzung gefragt werden, wie lange etwas dauern wird, diese zu gut hundert Prozent ausfüllen, um mit dem "zeitgenössischen" Design fertig zu werden.
Carson63000

8
Sei nicht so frustriert. C ++ ist eine sehr seltsame Sprache, in der das Entwurfsziel weder Benutzerfreundlichkeit (für Menschen) noch Kompilierbarkeit, Klarheit und Korrektheit (für Compiler) war. Das einzige Entwurfsziel von C ++ war es, jede mögliche lexikalische Permutation so zu gestalten, dass sie etwas bedeutet, auch wenn sie völlig unpraktisch war.

1
@ Rocket: Du hast es in die Luft gesprengt :-) aber ich stimme in Stücken zu.
Geek

@mojuba - ja, wir verwenden eine extra fortgeschrittene Form von C ++: D
DarenW

2
Dies wird als "Legacy-Code" bezeichnet, und das Problem liegt nicht nur bei Ihnen. Unter en.wikipedia.org/wiki/Legacy_code finden Sie einen Link zu Michael Feathers Buch darüber, wie man ein solches Tier zähmt.

Antworten:


2

Versuchen Sie, mehr in die Design-Seite von Dingen einzusteigen, bei denen es eine Stärke ist, sich mit der Unschärfe vertraut zu machen, was mein Vorschlag in Bezug auf den beruflichen Aufstieg wäre. Als jemand, der gerne kreativ ist, passt die Arbeit an der Wartung möglicherweise nicht besonders gut, während die Arbeit an neuen Dingen möglicherweise besser ist, wenn dies möglich ist.

Es ist zwar nichts Falsches daran, stolz auf seine Arbeit zu sein, aber wenn Sie nicht in den Details stecken bleiben möchten, müssen Sie möglicherweise einen neuen Ansatz finden, um sich zu verbessern. Anstatt es als schmutzig anzusehen, könnte es eine andere Perspektive geben, die es irgendwie lustig machen könnte.


Support und Wartung haben wahrscheinlich ihre Fans, da einige Leute es vorziehen würden, vorhandene Systeme zu optimieren, als ein neues System einzubauen. Ich weiß, dass ich eher mit einem vorhandenen System arbeite, das ich ändere, als zu versuchen, etwas aus dem Äther herauszuholen.

Was Sie versuchen können, ist zu notieren, wenn Leute Ideen für den Umgang mit verschiedenen Krisenherden und Brainstorming-Lösungen suchen, da dies Teil Ihrer Vorlieben ist. Es geht nicht darum zu wissen, welche Codezeilen geändert werden müssen, sondern darum, ob Sie jemandem sagen können: "Haben Sie in dieses Objekt geschaut und festgestellt, ob es mehr tut, als es behauptet?" Art der Sache.

Ein weiterer Punkt ist zu wissen, was Sie erstellen möchten: Grafiken, Anwendungen, Websites, Prozesse oder Systeme? Dies sind alles etwas andere Dinge, bei denen Sie beim Erstellen gefragt werden könnten, ob Sie was erstellen möchten.


Diese Idee ist fast direkt aus dem gestrigen Treffen mit meinem Chef hervorgegangen. Ich frage mich - ist es nicht immer wünschenswerter, Dinge zu schaffen, und Wartung ist immer wie das Reinigen von Toiletten? Wenn jemand herumgeht und sagt "Ich würde lieber Dinge ERSTELLEN!" würden sie ernst genommen werden?
DarenW

4
Ich mag Codepflege. Es ist jedoch eher eine Operation als das Reinigen von Toiletten: Sie müssen einen Teil eines funktionierenden Systems reparieren, ohne es zu beschädigen.
Frank Shearar

"etwas aus dem Äther ziehen" - erinnert mich an einen Traum, in dem ich Zitronendonuts aus der Luft zog, um ein Mädchen zu beeindrucken: D Aber im Ernst, das ist ein wichtiger Punkt für mich - ich möchte immer darüber nachdenken, neue Dinge schaffen.
DarenW

3
@FrankShearar Manchmal ist es wie eine Operation in der Toilette durchgeführt; (
mlvljr

16

Es klingt (zumindest für mich) nicht so, als ob Ihr Code besonders objektorientiert oder "Modern C ++" besonders ähnlich ist. Im Gegenteil, eines der Schlüsselelemente einer guten Objektorientierung ist die Kapselung, deren Hauptabsicht darin besteht, die Anzahl der Dinge zu reduzieren, die Sie zu einem bestimmten Zeitpunkt verfolgen müssen. Ebenso klingt "sehr spaghettiartiger ... Ausführungsfluss" weder objektorientiert noch modern (irgendetwas).

Wenn ich mir den Code anschaue, den Sie pflegen, sehe ich ihn möglicherweise anders und / oder Sie sehen meinen Code ähnlich wie den, den Sie gerade pflegen - das ist ein bisschen schwer zu erraten. Es ist wahr, wenn Sie versuchen würden, jedes Detail der Funktionsweise meines Codes nachzuvollziehen, könnten Sie es als einen eher spaghettiartigen Kontrollfluss ansehen.

Zum Beispiel mag ich einige implizite Konvertierungen viel mehr (oder zumindest toleranter) als viele Programmierer - ich verwende Dinge wie Proxy-Klassen ziemlich oft. Dies bedeutet, dass beim Aufrufen einer einzelnen Funktion leicht drei oder vier temporäre Objekte unterschiedlichen Typs erstellt werden können (und beachten Sie, dass ich nicht davon spreche , die Funktion tatsächlich auszuführen , sondern nur aufzurufen ). Natürlich werden alle diese temporären Objekte am Ende des Ausdrucks, der den Funktionsaufruf enthält, wieder zerstört. Wenn Sie es hochzählen, können Sie leicht ein halbes Dutzend oder mehr separate Funktionen aufrufen, die beim Aufrufen / Zurückkehren von einer Funktion aufgerufen werden, die im Code "sichtbar" aufgerufen wird.

Der Punkt , Dinge zu tun auf diese Weise jedoch zu machen , ist es einfach zu ignorieren die meisten der Haupt in (zum Beispiel) beteiligt sich mit Details wie , wie ein bestimmtes Objekt dargestellt wird, und konzentrieren sich ausschließlich auf das, was es wirklich ist , statt. Sie müssten sich immer nur mit dem größten Teil dieses Codes befassen, wenn Sie einen Fehler in diesem bestimmten Teil gesehen hätten. Ich versuche jedoch, viel davon zu vermeiden, indem ich Klassen erstelle, die so klein und einfach sind, dass sie kaum mehr als einen Blick benötigen, um zu erkennen, dass sie offensichtlich korrekt sind, und von da an leicht zu ignorieren sind.


Pfui! Solche Sachen lassen mich zusammenzucken! Vielleicht ist mein Denkstil zu niedrig, dh "opcode-orientierte Programmierung", um damit vertraut zu sein.
DarenW

2
Was "um es einfach zu machen, die meisten Trivia zu ignorieren" betrifft - der Codierungsstil scheint ein Trivia-Verherrlicher zu sein. Bei dem Versuch, diese Woche eine Kleinigkeit zu beheben, gab es unglaublich viele Details, die eigentlich nichts bewirken.
DarenW

"... indem man Klassen erstellt, die so klein und einfach sind, die so wenig tun, dass es kaum mehr als einen Blick braucht ..." Gibt es gute Open-Source-Beispiele dafür?
DarenW

2
@ Darrenw sicher, Smalltalk 80
Tim Williscroft

10

Warnung : Diese Antwort ist sehr lang und hat viel Psychobabble (was ich zu erklären versuche, aber immer noch). Was kann ich sagen? Psychologie ist eines meiner Lieblingsfächer außerhalb der Programmierung.

Meistens bin ich Künstler, obwohl ich mich selbst als Künstler / Physiker bezeichne. Während ich rechnen kann, mit Wörtern umgehen kann und das "logische" Zeug, das als linke Gehirnhälfte betrachtet wird, ist es eine Anstrengung und ich mache Fehler, während ich gut mit den Dingen umgehen kann und die meiste Zeit in Bezug auf die Dinge denke, die mit der rechten Gehirnhälfte verbunden sind Denken - räumliche Beziehungen, ganzheitlicher Gesamtkontext usw. Natürlich ist alles verschwommen, da die Theorie der rechten und linken Gehirnhälfte zu stark vereinfacht ist und keine mentale Aktivität so einfach ist. Ich spüre jedoch, dass ich gut zu Künstlern, Videoregisseuren, Köchen und anderen nonverbalen Denk- und Kreativtypen passe, während die meisten Leute in "IT" - oder Hardcore-Software-Ingenieuren Köpfe haben, die anders arbeiten, mit Liebe zum Detail, halten viele Details gleichzeitig im Auge und starke rationale und verbale Fähigkeiten.

Dies basiert tatsächlich auf einer etwas veralteten Sicht der Neurowissenschaften. Zu einem bestimmten Zeitpunkt glaubten Wissenschaftler, dass die linke Gehirnhälfte nur für Logik und sensorische Rohdaten verantwortlich war, während die rechte Gehirnhälfte allein für Intuition und Gefühl verantwortlich war. Wie sich herausstellt, ist die linke Gehirnhälfte wirklich zu allem fähig, was die rechte Gehirnhälfte ist, und umgekehrt. Als jemand, der extrem rechtshirnig und doch logisch ist, schrecklich in Bezug auf Richtungen und räumliche Ausrichtung und völlig frei von jeglicher künstlerischen Kreativität, die traditionell mit der rechten Gehirnhälfte verbunden ist, kann ich dies bestätigen.

Der beste Weg, sich den Unterschied zwischen der linken und der rechten Gehirnhälfte vorzustellen, besteht darin, sie als Spiegelbilder voneinander zu betrachten. Um dies zu verstehen, benötigen Sie einige Hintergrunddaten. Ein Psychologe namens Carl Jung entwickelte in den 20er Jahren eine Persönlichkeitstheorie, die die Persönlichkeit in mehrere Dimensionen aufteilte. Sie haben wahrscheinlich von einem davon gehört: Introversion gegen Extraversion. Ich habe ein paar Blogposts zu diesem Thema geschrieben, aber es läuft im Grunde darauf hinaus: Introversion unterscheidet sich von anderen, während Extraversion sich darauf konzentriert, wie sie sich mit anderen verbinden kann. Dies wird als "Haltung" bezeichnet.

Dann haben Sie vier verschiedene kognitive Funktionen: Denken, Fühlen, Empfinden und Intuition. Nehmen wir der Einfachheit halber einfach an, dass zwei dieser Funktionen als "Beurteilungsfunktionen" (Denken und Fühlen) betrachtet werden, während die anderen beiden Funktionen "Wahrnehmen". Die Bewertungsfunktionen treffen Entscheidungen. Wenn Sie urteilen, versuchen Sie, Überraschungen zu vermeiden. Sie möchten im Voraus alle richtigen Entscheidungen getroffen haben, damit Sie sich nicht anpassen müssen, wenn Überraschungen auftreten. Weil Sie so viel im Voraus geplant haben, neigen Sie möglicherweise dazu, starr und unflexibel zu werden, sobald eine Entscheidung getroffen wurde. Andererseits neigt eine wahrnehmende Denkweise dazu, lieber am Sitz ihrer Hose vorbei zu fliegen und mit den Schlägen zu rollen.

Im Allgemeinen kombinieren Sie die Funktion und eine Haltung, um eine (kreativ benannte) Funktionshaltung zu erzeugen (introvertiertes Denken, extravertiertes Gefühl usw.). Die bewussten Persönlichkeiten der Menschen werden hauptsächlich durch eine dominante Funktionshaltung und eine Hilfsfunktionshaltung definiert. Schließlich waren sich die Psychologen einig, dass es im Großen und Ganzen zwei Arten von Menschen gibt: Menschen, deren primäre zwei Funktionen aus einer introvertierten Beurteilungsfunktion und einer extravertierten Wahrnehmungsfunktion bestehen, oder Menschen, deren primäre zwei Funktionen aus einer extravertierten Beurteilungsfunktion und einer introvertierten Wahrnehmungsfunktion bestehen . Wenn Sie jemals den MBTI oder einen ähnlichen Persönlichkeitstest absolviert haben, erfahren Sie im letzten Buchstaben, in welche Kategorie Sie fallen. Wenn Sie ein P sind, bedeutet dies, dass Sie ein introvertierter Richter / extravertierter Wahrnehmender sind und J umgekehrt ist.

Bis jetzt noch bei mir? Hier komme ich zu dem, was ich damit gemeint habe, dass die beiden Seiten Spiegelbilder voneinander sind. Niemand hat es damals bemerkt, aber sie haben im Wesentlichen eine Skizze erstellt, wo Funktionalität im Gehirn liegt. In der Tat wurde jede von Jungs Funktionseinstellungen auf eine raue Stelle im Gehirn abgebildet. Wie sich herausstellt, befinden sich alle P-Funktionen (introvertiertes Beurteilen und extravertiertes Wahrnehmen) auf der rechten Seite des Gehirns und die J-Funktionen auf der linken Seite des Gehirns.

Immer wenn Sie sagen, dass Menschen mit dem linken Gehirn gut in Details sind und Menschen mit dem rechten Gehirn gut im "großen Bild" (obwohl ich sagen würde, dass "ganzes Bild" genauer wäre), konzentrieren Sie sich auf die extravertierte Seite der Dinge . Wenn eine Person mit dem linken Gehirn eine Person mit dem rechten Gehirn verwaltet, möchte der Linke alle Details darüber wissen, wie der Rechte seine Arbeit im Voraus und im Voraus erledigen wird. Sie wollen die in Stein gemeißelten Anforderungen und die im Voraus festgelegten harten Fristen. Der Righty möchte nur eine sehr umfassende Vorstellung davon, was er tun muss, damit er die Details später ausfüllen kann.

Beachten Sie jedoch, dass dies nicht das zu sein scheint, was Sie gerade erleben. Es scheint, als ob der Code der Linken im Voraus wahrscheinlich nicht besonders gut durchdacht war und einige Probleme aufweist, die durch Voraussicht hätten verhindert werden können. Dies liegt daran, dass Sie beim Erstellen abstrakter Modelle von Dingen wie Code in Ihrem Kopf Ihre introvertierte Funktion verwenden, die umgekehrt funktioniert. Der Righty möchte dieses Modell im Voraus erstellen und dies so, dass es alle erforderlichen Details ausfüllt oder problemlos alle Details ausfüllen kann . Außerdem können sie in Bezug auf den besten Ansatz starr werden (beachten Sie, dass Sie eine harte Linie in Bezug auf Ihre Meinung zu den fortschrittlicheren Funktionen von C ++ haben). Das Modell der Linken wird ad hoc sein und im Laufe der Zeit ausgefüllt werden.

Ich habe die Erfahrung gemacht, dass die Linken aus diesem Grund die Rechten beschuldigen, alles überarbeitet zu haben, während die Rechten die Linken beschuldigen, zu schnell und schmutzig zu sein. Beide Seiten haben ein Körnchen Wahrheit, aber nur, wenn dieser Ansatz bis zum Äußersten geht. Das ist jedoch lustig: Sie verfolgen entgegengesetzte Ansätze, um dasselbe Ziel zu erreichen (dh Dinge zu erledigen). Die Rechten möchten, dass ihr Modell im Voraus festgelegt wird, damit sie weniger Zeit für die Implementierung der Sache aufwenden und somit das gesamte Projekt schneller erledigen können. Die Linken wollen weniger Zeit mit Architektur verbringen, damit sie die Dinge früher erledigen können.

Im Übrigen sind diese beiden Einstellungen umgekehrt, wenn es um Dinge vom Typ Projektmanagement geht (Festlegen von Zeitplänen, Festlegen von Anforderungen usw.). Dies kann zu einer wirklich verwirrenden Situation führen, in der eine Seite die andere beschuldigt, zu starr zu sein, während die andere behauptet, dass die andere Seite nicht vorausschauend genug plant, und dann beim nächsten Argument beide Seiten genau die entgegengesetzte Haltung einnehmen.

Was können Sie dagegen tun? Nichts anderes, als sich dieser Unterschiede bewusst zu sein und zu versuchen, der Sichtweise der anderen Seite so weit wie möglich Rechnung zu tragen. Das Problem ist jedoch, dass dies in beide Richtungen geht. Sie können die Linken so gut wie möglich verstehen und aufnehmen, aber das wird keinen großen Unterschied machen, wenn sie nicht versuchen, den Gefallen zu erwidern. Das ist immer die Herausforderung. Nicht weil die Linken Arschlöcher sind und das Leben der Rechten unglücklich machen wollen, sondern weil die Linken es gewohnt sind, auf dem Gebiet der Programmierung dominant zu sein. Wenn Ihre Denkweise von so ziemlich allen anderen bestätigt würde, wären Sie ziemlich überzeugt, dass Sie auch Recht haben.


Schön tief und lang genug zum Lesen, um die Arbeit für eine Weile zu verschieben!
DarenW

6
Sehr interessantes Zeug. Hast du irgendwelche Quellen?
Mason Wheeler

4

Vertraue deiner Intuition. Wenn Sie ein guter Profi sind, bedeutet dies, dass Sie unabhängig von Ihrem "Verstand" - links oder rechts - Dinge, die Linkshirnler bewusst tun, intuitiv tun können. Am Ende ist es dasselbe. Leider kontrollieren wir unser Unterbewusstsein nicht, aber es erledigt die Arbeit schneller als unser Bewusstsein, wenn es es überhaupt tut. Diese intuitiven Erkenntnisse aus dem Nichts sind genau das Ergebnis unbewusster Berechnungen.

Oh, und Sie können scheitern, es ist zu unzuverlässig. Aber da hast du gefragt ...;)


2

Ich denke auch visuell und die Details der Typografie stören mich.

Google-Begriffe: Britische Legasthenie-Website auch Lernstile: visuelles räumliches Denken, ganzes bis teilweises Lernen.

Konzepte zuerst, Tipps danach

  1. Rechtshirnige Menschen stellen sich alles in ihrem „geistigen Auge“ vor.
  2. Wenn Ihre Visualisierung gut der Realität entspricht, ist die Arbeit einfach
  3. Denker mit dem rechten Gehirn, die nicht gut denken, müssen sich auf die Visualisierung verlassen
  4. Rechtshirnige Lernende lernen das Ganze auf einmal 'aha!' dann passen Details in das mentale Konstrukt. Sie brauchen zuerst die Übersicht, dann Details.
  5. Ohne eine Übersicht über den Kontext schweben die Details in einem Vakuum, das im Auge des Geistes nicht verbunden ist - daher muss Brute-Force-Memorization verwendet werden. Sehr schwer für die Rechtshirn.

TIPPS, die mir geholfen haben:

  • 1 Verwenden Sie Farbe, um Syntaxteile zu unterscheiden
    1. Schreiben Sie den Pseudocode des Codes, den Sie debuggen: Dies geschieht, dann gehen Sie hierher und beschriften Sie die Codeabschnitte entsprechend
    2. Wenn die Objekte beispielsweise echte Tiere wären, hätten sie Gewohnheiten und erwartete Verhaltensweisen. Dies ist eine leichter zu visualisierende Art, über das Codieren nachzudenken.
    3. Ich stelle mir den Code als eine Geschichte mit Pseudicode als Notizen vor und verfolge dann den Prozess.

  • Welcher Abschnitt muss als nächstes behoben werden?

  • Mein Workflow

  • Wer lebt dort? (Prozess, Verbindungen, Daten usw.)

  • Was müssen sie tun? (Funktion) OK

    in Ordnung

  • Code es irgendwo kann es Syntax / Rechtschreibprüfung OK OK Kopieren und Einfügen

  • Prüfung

    Ergebnis -> es funktioniert? Ja, mach weiter

    Nein? Die Charaktere müssen Hamlet spielen, wo jeder stirbt.

  • Zurück zur Umwelt-

  • etwas ausgelassen?, Sysntax-Fehler
  • braucht eine Verbindung
  • braucht Daten
  • Fehlercode hat Bedeutung?
  • funktioniert es in einem anderen Teil des Codes?
  • Versionsprobleme?
  • es soll funktionieren
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.