Comment un droitier peut-il gérer un code massif de gauche? [fermé]


11

Je suis un artiste, surtout, bien que je me décrive comme un artiste / physicien. Bien que je puisse faire des maths, traiter des mots et les choses "logiques" considérées comme le cerveau gauche, c'est un effort et je fais des erreurs, alors que je fais bien avec et la plupart du temps je pense en termes de choses associées au cerveau droit pensée - relations spatiales, contexte holistique, etc. Bien sûr, tout cela est flou, car la théorie du cerveau droite-gauche est trop simplifiée et aucune activité mentale n'est si simple. Pourtant, je sens que je m'intègre bien avec les artistes, les réalisateurs vidéo, les chefs et les autres types de pensée non verbale, créative, tandis que la plupart des ingénieurs informatiques ou hardcore ont des esprits qui fonctionnent différemment, avec une attention aux détails, en tenant de nombreux détails à l'esprit en même temps, et de fortes capacités rationnelles et verbales.

Donc, je suis ici dans un travail rémunéré pour corriger des bogues difficiles et obscurs dans un essaim massif de logiciels C ++, très lourd sur OO, et toute ligne de code n'a de sens que si je garde à l'esprit une vingtaine d'autres noms de classe et de méthode, les relations entre eux, le flux d'exécution (très spaghetti-like) et d'autres détails.

En plus de cela, je suis aussi assez fortement contre une grande partie des styles C ++ et OO contemporains. Ceux qui ont écrit ce code ont vraiment bu le kool-ade OO profond et C ++ moderne. Je trouve que cela rend le code beaucoup plus difficile à suivre, beaucoup plus difficile à décider où réparer ou changer quelque chose. Je ne sais pas si cela fait partie de la différence gauche / droite (ou comme vous voulez l'appeler) ou non.

Mais je dois travailler sur le C ++ - les gens dépendent de moi pour mes revenus. Quelles sont les astuces et techniques pour faire face à cette situation, pour être le plus efficace possible pour mon employeur?


9
Ce n'est pas une différence entre le cerveau gauche et le cerveau droit - personne ne peut comprendre ou modifier ce type de code C ++ sans effort massif, autre que la personne qui l'a écrit (souvent, même pas eux). Assurez-vous simplement que lorsque l'on vous demande une estimation du temps que prendra quelque chose, que vous le remplissiez à quelques centaines de pour cent pour faire face au design "contemporain".
Carson63000

8
Ne sois pas si frustré. Le C ++ est un langage très étrange, où l'objectif de conception n'était pas la convivialité (pour les humains) ni la compilabilité, la clarté, l'exactitude (pour les compilateurs). Le seul objectif de conception du C ++ était de faire en sorte que chaque permutation lexicale possible signifie quelque chose, même si cela n'était pas du tout pratique.

1
@Rocket: Vous l'avez fait exploser :-) mais je suis d'accord en morceaux.
Geek

@mojuba - oui, nous utilisons une forme extra-avancée de C ++: D
DarenW

2
Cela s'appelle "Legacy Code", et le problème n'est pas pour vous seul. Voir en.wikipedia.org/wiki/Legacy_code pour un lien vers le livre de Michael Feathers sur la façon d'apprivoiser une telle bête.

Réponses:


2

Essayer d'aller plus loin dans le côté design des choses où être à l'aise avec le flou est une force serait ma suggestion en termes de progression de carrière. En tant que personne qui aime être créative, travailler sur la maintenance peut ne pas être un bon choix alors que travailler sur de nouvelles choses peut être mieux si cela est possible.

Bien qu'il n'y ait rien de mal à vouloir être fier de son travail, vouloir ne pas s'enliser dans les détails peut être quelque chose que vous devrez peut-être trouver une nouvelle approche pour vous améliorer. Plutôt que de le voir comme étant déprimé et sale, il peut y avoir une autre perspective qui pourrait le rendre amusant d'une manière ou d'une autre.


Le support et la maintenance ont probablement leurs fans, car certaines personnes préféreraient modifier les systèmes existants plutôt que d'en installer un nouveau. Je sais que j'ai tendance à mieux travailler avec un système existant que je change plutôt que d'essayer de sortir quelque chose de l'éther.

Ce que vous pouvez essayer de faire, c'est de noter quand les gens veulent des idées pour faire face à divers points chauds et solutions de remue-méninges, car cela fait partie de ce que vous aimez. Il ne s'agit pas de savoir quelles lignes de code modifier, mais plutôt si vous pouvez dire à quelqu'un: "Avez-vous regardé dans cet objet et vu s'il fait plus qu'il ne le prétend?" sorte de chose.

Un autre point est de savoir ce que vous voulez créer: graphiques, applications, sites Web, processus ou systèmes? Ce sont toutes des choses légèrement différentes qu'en voulant créer, on pourrait vous demander "Créer quoi?"


Cette idée est presque directement sortie de la rencontre avec mon patron hier. Je me demande - est-ce que la création de choses n'est pas toujours plus souhaitable pour tout le monde et l'entretien est toujours comme le nettoyage des toilettes? Si quelqu'un dit "je préfère CRÉER des choses!" Seraient-ils pris au sérieux?
DarenW

4
J'aime la maintenance du code. Cela ressemble plus à une intervention chirurgicale qu'à un nettoyage des toilettes: vous devez réparer une partie d'un système de travail, sans le casser.
Frank Shearar

"tirer quelque chose de l'éther" - me rappelle un rêve où je tirais des beignets de citron de l'air pour impressionner une fille: D Mais sérieusement, c'est un point clé pour moi - je veux toujours, penser, créer de nouvelles choses.
DarenW

3
@FrankShearar Parfois, c'est comme une intervention chirurgicale dans les toilettes; (
mlvljr

16

Cela ne sonne pas (du moins pour moi) comme si votre code est particulièrement orienté objet, ou particulièrement similaire à "Modern C ++". Au contraire, l'un des éléments clés d'une bonne orientation des objets est l'encapsulation, dont le principal objectif est de réduire le nombre de choses dont vous avez besoin de suivre à tout moment. De la même manière, "flux d'exécution très spaghetti" ne sonne ni orienté objet ni moderne (quoi que ce soit).

Maintenant, je suppose que si je regardais le code que vous maintenez, je pourrais le voir différemment, et / ou vous pourriez voir mon code comme similaire à ce que vous maintenez en ce moment - c'est un peu difficile à deviner. Il est vrai que si vous essayez de retracer chaque détail du fonctionnement de mon code, je suppose que vous pouvez le voir comme un flux de contrôle plutôt spaghetti.

Par exemple, j'aime beaucoup (ou du moins tolère) pas mal de conversions implicites que de nombreux programmeurs - j'utilise beaucoup des choses comme les classes proxy. Cela signifie qu'il pourrait facilement y avoir trois ou quatre objets temporaires de différents types créés au cours de l'appel d'une seule fonction (et notez que je ne parle pas d' exécuter réellement la fonction, juste de l' appeler ). Bien sûr, tous ces objets temporaires seront à nouveau détruits à la fin de l'expression contenant l'appel de fonction. Si vous comptez, vous pourriez facilement avoir une demi-douzaine ou plus de fonctions distinctes invoquées pour appeler / retourner d'une fonction qui est "visiblement" appelée dans le code.

Le but de faire les choses de cette façon, cependant, est de faciliter l' ignorance de la plupart des anecdotes impliquées dans (par exemple) le traitement de détails tels que la façon dont un objet particulier est représenté, et de se concentrer uniquement sur ce qu'il est réellement . Vous n'auriez besoin de gérer la plupart de ce code que si vous voyiez un bogue dans cette partie particulière. J'essaie cependant d'éviter cela en créant des classes si petites et simples, si peu nombreuses, qu'il suffit d'un simple coup d'œil pour se rendre compte que c'est évidemment correct, il est donc facile d'ignorer à partir de là.


Pouah! Ce genre de choses me fait grincer des dents! Peut-être que mon style de pensée est trop bas, c'est-à-dire "programmation orientée opcode", pour être à l'aise avec cela.
DarenW

2
Quant à «pour qu'il soit facile d'ignorer la plupart des anecdotes» - le style de codage semble être un glorificateur de trivia. En essayant de réparer une petite chose cette semaine, il y avait des quantités incroyables de détails qui ne font vraiment rien.
DarenW

"... en créant des classes si petites et simples, qui font si peu, qu'il suffit à peine d'un coup d'œil ..." Y a-t-il de bons exemples open source de cela?
DarenW

2
@darrenw bien sûr, smalltalk 80
Tim Williscroft

10

Attention : cette réponse est très longue et a beaucoup de psychobabble (que j'essaie d'expliquer, mais quand même). Que puis-je dire? La psychologie est l'un de mes sujets préférés en dehors de la programmation.

Je suis un artiste, surtout, bien que je me décrive comme un artiste / physicien. Bien que je puisse faire des maths, traiter des mots et les choses "logiques" considérées comme le cerveau gauche, c'est un effort et je fais des erreurs, alors que je fais bien avec et la plupart du temps je pense en termes de choses associées au cerveau droit pensée - relations spatiales, contexte holistique, etc. Bien sûr, tout cela est flou, car la théorie du cerveau droite-gauche est trop simplifiée et aucune activité mentale n'est si simple. Pourtant, je sens que je m'intègre bien avec les artistes, les réalisateurs vidéo, les chefs et les autres types de pensée non verbale, créative, tandis que la plupart des ingénieurs informatiques ou hardcore ont des esprits qui fonctionnent différemment, avec une attention aux détails, en tenant de nombreux détails à l'esprit en même temps, et de fortes capacités rationnelles et verbales.

Ceci est en fait basé sur une vision quelque peu dépassée des neurosciences. À un moment donné, les scientifiques pensaient que le cerveau gauche n'était responsable que de la logique et des données sensorielles brutes, tandis que le cerveau droit était seul responsable de l'intuition et des sentiments. Il s'avère que le cerveau gauche est vraiment capable de tout ce que le cerveau droit est et vice versa. En tant que personne extrêmement droite mais logique, terrible avec des directions et une orientation spatiale, et complètement dépourvue de toute créativité artistique traditionnellement associée au cerveau droit, je peux en témoigner.

La meilleure façon de penser la différence entre le cerveau gauche et le cerveau droit est de les considérer comme des images miroirs l'une de l'autre. Pour comprendre cela, vous avez besoin de données de base. Un psychologue du nom de Carl Jung a proposé une théorie de la personnalité dans les années 20 qui divisait la personnalité en deux dimensions. Vous en avez probablement entendu parler: introversion vs extraversion. J'ai écrit quelques articles de blog sur ce sujet, mais cela se résume à ceci: l'introversion se différencie des autres tandis que l'extraversion se concentre sur la façon dont elle peut se connecter aux autres. C'est ce qu'on appelle une "attitude".

Ensuite, vous avez quatre fonctions cognitives différentes: la pensée, le sentiment, la sensation et l'intuition. Par souci de simplicité, disons simplement que deux de ces fonctions sont considérées comme des fonctions de "jugement" (penser et sentir) tandis que les deux autres sont des fonctions de "perception". Les fonctions de jugement prennent des décisions. Lorsque vous êtes dans un état d'esprit de jugement, vous essayez d'éviter les surprises. Vous voulez avoir pris toutes les bonnes décisions à l'avance afin de ne pas avoir à vous adapter lorsque des surprises surviennent. Parce que vous avez fait tant de planification à l'avance, vous pourriez avoir tendance à devenir rigide et inflexible une fois la décision prise. D'un autre côté, un état d'esprit qui perçoit a tendance à préférer voler par le siège de son pantalon et rouler avec les coups de poing.

Généralement, vous combinez la fonction et une attitude pour créer une fonction-attitude (nommée de manière créative) (pensée introvertie, sentiment extraverti, etc.). Les personnalités conscientes des peuples sont définies principalement par une attitude-fonction dominante et une attitude-fonction auxiliaire. Finalement, les psychologues sont parvenus à un consensus sur le fait qu'il existe globalement deux types de personnes: les personnes dont les deux fonctions principales consistent en une fonction de jugement introvertie et une fonction de perception extravertie, ou les personnes dont les deux fonctions principales consistent en une fonction de jugement extravertie et une fonction de perception introvertie . Si vous avez déjà passé le MBTI ou un test de personnalité similaire, la dernière lettre vous indique dans quelle catégorie vous vous situez. Si vous êtes un P, cela signifie que vous êtes un juge introverti / percepteur extraverti et J est l'inverse.

Toujours avec moi jusqu'à présent? Voici où j'en arrive à ce que je voulais dire par les deux côtés étant des images miroir de l'autre. Personne ne s'en rendait compte à l'époque, mais ils construisaient essentiellement un croquis de l'endroit où se trouve la fonctionnalité dans le cerveau. En effet, chacune des attitudes fonctionnelles de Jung a été cartographiée à un emplacement approximatif dans le cerveau. Il s'avère que toutes les fonctions P (jugement introverti et perception extravertie) sont du côté droit du cerveau et les fonctions J sont du côté gauche du cerveau.

Chaque fois que vous dites que les personnes de cerveau gauche sont douées pour les détails et que les personnes de cerveau droit sont douées pour la "vue d'ensemble" (même si je dirais que "la vue d'ensemble" serait plus précise), vous vous concentrez sur le côté extraverti des choses. . Si une personne de cerveau gauche gère une personne de cerveau droit, le gaucher va vouloir connaître tous les détails sur la façon dont le droitier va faire son travail à l'avance et à l'avance. Ils veulent que les exigences fixées dans la pierre et les délais fermes soient décidés à l'avance. Le juste veut juste une idée très large de ce qu'il doit faire pour pouvoir remplir les détails plus tard.

Cependant, notez que cela ne semble pas être ce que vous vivez. Il semble que le code des gauchers n'ait probablement pas été bien pensé à l'avance et comporte des problèmes qui auraient pu être évités par une réflexion préalable. En effet, lorsque vous créez des modèles abstraits de choses comme du code dans votre tête, vous utilisez votre fonction introvertie , qui fonctionne dans l'autre sens. Le droitier veut construire ce modèle à l'avance et le faire de manière à ce qu'il remplisse tous les détails nécessaires ou puisse facilement remplir tous les détails. De plus, ils peuvent devenir rigides en termes de meilleure approche à prendre (notez que vous prenez une ligne dure sur ce que vous pensez des fonctionnalités plus avancées de C ++). Le modèle des gauchers sera plus ponctuel et complété au fur et à mesure.

D'après mon expérience, à cause de cela, les gauchers accuseront les droitiers de tout sur-concevoir tandis que les droitiers accuseront les gauchers d'être trop rapides et sales. Les deux parties ont un grain de vérité pour eux, mais seulement lorsque cette approche est poussée à l'extrême. Voici ce qui est drôle: ils adoptent des approches opposées pour atteindre le même objectif (c'est-à-dire faire avancer les choses). Les droitiers veulent que leur modèle soit décidé à l'avance afin de passer moins de temps à mettre en œuvre la chose et donc à terminer le projet en entier plus rapidement. Les gauchers veulent passer moins de temps à faire de l'architecture afin de pouvoir faire avancer les choses plus rapidement.

Soit dit en passant, ces deux attitudes sont inversées en ce qui concerne les éléments de type gestion de projet (détermination des délais, définition des exigences, etc.). Cela peut conduire à une situation vraiment déroutante où un côté accuse l'autre d'être trop rigide tandis que l'autre prétend que l'autre côté ne planifie pas assez à l'avance, puis l'argument suivant a les deux côtés adoptant la position opposée exacte.

Que pouvez-vous faire à ce sujet? Rien d'autre que d'être conscient de ces différences et d'essayer de tenir compte autant que possible de la vue de l'autre côté. Le problème est que cela va dans les deux sens. Vous pouvez comprendre et accueillir les gauchers autant que possible, mais cela ne fera pas beaucoup de différence à moins qu'ils essaient de retourner la faveur. C'est toujours le défi. Non pas parce que les gauchers sont des connards et veulent rendre leur vie misérable, mais parce que les gauchers ont l'habitude d'être dominants dans le domaine de la programmation. Si votre façon de penser était reprise par à peu près tout le monde, vous seriez plutôt convaincu que vous avez raison aussi.


Joliment profond et assez long pour lire pour ne plus faire de vrai travail pendant un certain temps!
DarenW

6
Des trucs très intéressants. Vous avez des sources?
Mason Wheeler

4

Faites confiance à votre intuition. Si vous êtes un bon professionnel, cela signifie indépendamment de votre "intelligence" - gauche ou droite - ce que les esprits gauches font consciemment, vous pouvez le faire intuitivement. Au final c'est la même chose. Malheureusement, nous ne contrôlons pas notre subconscient, mais il fait le travail plus rapidement que notre conscience, s'il le fait du tout. Ces informations intuitives qui viennent de nulle part sont exactement les résultats de calculs subconscients.

Oh, et vous risquez d'échouer, c'est trop peu fiable. Mais puisque tu as demandé ...;)


2

Je pense aussi visuellement et les détails de la typographie me troublent.

Termes Google: site britannique sur la dyslexie également Styles d'apprentissage: pensée spatiale visuelle, apprentissage complet ou partiel.

Concepts d'abord, conseils après

  1. Les personnes au cerveau droit imaginent tout dans leur «esprit».
  2. Lorsque votre visualisation correspond bien à la réalité, le travail est facile
  3. Les penseurs de cerveau droit qui ne font pas bien La pensée de cerveau gauche doit compter sur la visualisation
  4. Les apprenants au cerveau droit apprennent le tout en même temps 'aha!' puis insérez les détails dans la construction mentale. Ils ont d'abord besoin de l'aperçu, puis des détails.
  5. Sans un aperçu du contexte, les détails flottent dans le vide, sans connexion dans l'œil de l'esprit - il faut donc utiliser la mémorisation par force brute. Très dur pour les bons cerveaux.

CONSEILS qui m'ont aidé:

  • 1 Utilisez la couleur pour distinguer les parties de syntaxe
    1. écrivez le pseudocode du code que vous déboguez: cela fait cela, puis allez ici et étiquetez les sections de code pour les faire correspondre
    2. si les objets étaient, par exemple, de vrais animaux, ils auraient des habitudes et des comportements attendus. C'est une façon plus facile de visualiser le codage.
    3. J'imagine le code comme une histoire avec le pseudicode comme mes notes, puis je continue le processus.

  • Quelle section corriger ensuite?

  • Mon flux de travail

  • Qui vit ici? (processus, connexions, données, etc.)

  • que doivent-ils faire? (fonction) OK

    D'accord

  • coder quelque part, il peut être vérifié la syntaxe / l'orthographe OK copier et coller

  • Tester

    Résultat -> ça marche? Oui, continuez

    Non? Les personnages doivent jouer Hamlet où tout le monde meurt.

  • Retour à l'environnement-

  • omis quelque chose?, erreurs sysntax
  • a besoin d'une connexion
  • a besoin de données
  • le code d'erreur a un sens?
  • ça marche dans une autre partie du code?
  • Problème de version?
  • c'est censé fonctionner
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.