Un développeur doit-il être obligé de mémoriser des détails? [fermé]

33

Plusieurs fois, j'oublie des choses à propos de ma candidature. Je ne mémorise pas les noms de table ou ce qu'une requête a fait et je cherche à obtenir ce que je veux. Mon chef d'équipe m'a dit que je devais mémoriser les noms de table que j'utilise.

Le développeur doit-il mémoriser les noms de table dans la base de données, les noms de classes, etc.? Et si la réponse est "Oui, tout le temps", que dois-je faire pour me souvenir de ces choses?

Anyname Donotcare
la source
27
J'aimerais pouvoir les oublier.
JeffO
6
Dites-lui qu'il devrait écrire de la main gauche (ce qui est extrêmement facile pour certains et assez difficile pour d'autres).
Job
4
“Forcé de mémoriser les noms de table” ??? WTF !? «Tout le monde doit apprendre ces dix mille noms de colonnes d’ici la fin de la semaine! Ensuite, il y aura un test; quiconque ne recevant pas 100% sera gavé de force les pieds d'abord pour ma fierté privée de lions enragés !!! Bwahahahahaa !!!!! ”
Donal Fellows
4
Quand j'étais étudiant en coop, je travaillais avec un gars qui me demandait exactement cela, il me disait que je perdais du temps quand je regardais les choses, je lui disais que tu avais déjà étudié ça! quand je ne pouvais pas réciter les noms de table (et leur contenu) de mémoire, et utilisais mon manque d'engagement pour mémoriser les noms de table comme une excuse pour cesser de me guider complètement. Je l'ai sauvé dans mon rapport de coopérative.
user16764
2
Ne pas mémoriser, mémoize.
Tylermac

Réponses:

63

Vous ne devriez pas avoir besoin de mémoriser explicitement ces choses. Je veux dire par là, assieds-toi et apprends-les comme une liste de mots pour un test d'orthographe. En premier lieu, les noms doivent être mémorisables et découvrables afin que vous puissiez les retrouver sans trop d'effort.

Vous devriez également avoir accès à des outils qui vous aident ici avec l'auto-complétion, etc.

Dans un grand système de plus de 100 tables, vous ne devez absolument pas vous souvenir de chaque nom de table et de colonne. Cependant, avec des noms mémorables et faciles à découvrir et une utilisation régulière, vous devez vous rappeler les détails les plus importants et ceux que vous utilisez journée.

ChrisF
la source
6
Ayant travaillé dans une application avec des tables 4k, je peux attester de l'utilité de ce conseil. La mémorisation n’aide pas, les conventions de projet l’aiment (surtout quand elles sont appliquées; sinon, vous devez vous fier à votre mémoire).
Vineet Reynolds
1
Pour faciliter la découverte, créez des feuilles de triche et / ou des diagrammes (de modèle) des éléments dont vous avez besoin. De cette façon, il vous suffira de regarder votre papier ou votre doc / image pour pouvoir rechercher les noms de table et de colonne dont vous avez besoin.
Kissaki
34

Einstein a déclaré "ne jamais mémoriser ce que vous pouvez rechercher [dans les livres]", et je suis tout à fait d'accord.

Utilisez votre mémoire pour des éléments abstraits (techniques et principes de développement) et non pour des faits que vous pouvez trouver quand vous en avez besoin.

Chat heureux
la source
Eh oui ... ne le mémorisez pas, il viendra lorsque vous utiliserez les informations. Avez-vous les documents de référence pour cette pratique à tout moment cependant.
Newtopian
17

C'est gênant d'admettre - j'utilise C depuis près de 30 ans maintenant, mais je ne me souviens jamais comment déclarer des pointeurs de fonction - je dois toujours obtenir K & R pour vérifier la syntaxe.

Encore plus embarrassant, je dois réfléchir très sérieusement au fonctionnement de typedef - est-ce:

 typedef foo int;

ou

 typedef int foo;

Ce sont mes angles morts personnels. Je ne m'inquiéterais pas si vous en avez de semblables.

Neil Butterworth
la source
2
+1: J'ai commencé à programmer le C en 1985 et je dois encore chercher comment déclarer les pointeurs de fonction. L’autre jour, j’ai pris un coup de poignard et cela a fonctionné, et j’étais assez satisfait de moi-même. (Je me souviens comment faire des typedefs ... :-)
Bob Murphy
2
Je suis heureux que, dans le langage avec lequel je travaille (C #), l'équivalent des pointeurs de fonction soit réellement analysable par les humains, pas seulement par le compilateur.
svick
@svick Oh, je n'ai aucun problème à lire les pointeurs de fonction, c'est à me rappeler comment les écrire qui me pose problème.
Neil Butterworth
3
Je n'ai délibérément pas mémorisé les tableaux de priorité C ou C ++. Je les ai à portée de main pour une référence instantanée si j'en ai besoin, et je ne veux vraiment pas écrire de code qui dérouterait quelqu'un d'autre qui ne les a pas mémorisées.
David Thornley
Un code qui dépend de règles de priorité non évidentes est un code incorrect.
Gort le robot
9

Les ordinateurs sont bons pour se souvenir des choses exactement. Les ordinateurs sont également efficaces pour rechercher des éléments dont ils se souvenaient auparavant.

La compétence clé consiste donc à utiliser l'ordinateur comme extension de votre mémoire. Écrivez un code propre, documentez des éléments, apprenez à utiliser efficacement les outils de recherche, configurez votre environnement de développement de manière à ce qu'il soit facile de trouver des éléments, etc.

Un bel effet secondaire est que vous aiderez également les autres à lire votre code.

tdammers
la source
5

La mémoire est importante

Une mémoire forte est en effet l'un des meilleurs talents qu'un développeur puisse avoir; en fait, tout le monde peut en avoir. C'est vraiment une chose spéciale et j'envie et admire ceux qui en sont bénis. Cela peut certainement aider une personne à devenir un développeur, un avocat, un mécanicien ou un (un emploi de choix choisi ici) plus fort.

Combien devrait être nécessaire?

Mais je ne crois pas qu'il soit juste d'exiger la mémorisation de toutes choses. Je crois que vous allez commencer à mémoriser des choses en tant que partie intégrante de vos activités. C'est pourquoi lire un livre sur une langue et l'utiliser dans un environnement de production ne sont pas la même chose. En travaillant quotidiennement avec quelque chose (certains appellent cela une "pratique"), vous commencerez à faire des choses de la seconde nature.

Comme pour les autres affiches, je pense que la mémorisation des éléments clés de l'application est utile. Cependant, je ne suis pas sûr que l’investissement dans la mémorisation de toutes ces ressources en vaut la peine si vous pouvez tirer parti de fonctionnalités telles que intellisense, qui est de plus en plus courante dans les outils modernes.

Comment pouvez-vous améliorer?

Je ne suis pas un expert en mémoire, mais certains pensent que vous pouvez réellement améliorer votre mémoire grâce à des exercices mentaux tels que des jeux de réflexion (mots croisés, mots croisés, sudoku, énigmes, etc.). La théorie est que votre cerveau est comme un muscle et que si vous l'utilisez de différentes manières et que vous l'exercez, vous pouvez le renforcer.

Il serait intéressant de voir des études sur la manière dont des choses telles que les jeux, la programmation et les activités interactives pour le cerveau pourraient affecter le cerveau au fil du temps. Est-ce que de telles choses pourraient aider à combattre l'apparition de perte de mémoire causée par l'âge ou la démence?

Bernard Dy
la source
5

D'où je viens, il y a un vieil adage qui dit quelque chose comme ceci en anglais: "Un imbécile mémorise, un homme intelligent écrit". En gros, peu importe la qualité de votre mémoire, vous oublierez . Vous êtes seulement humain. Et ceci, en conséquence, fait dépendre de la mémoire humaine… enfin, peu fiable. Même si vous pensez vous souvenir de ces noms de tables, pouvez-vous être sûr à 100%? Vous avez besoin de quelques secondes pour rechercher les noms de table, mais vous pourriez avoir besoin de plusieurs heures, voire de plusieurs jours, pour localiser les bogues causés par une faute de frappe.

En conclusion, non, c'est une exigence ridicule, en particulier pour les grands projets, qui peuvent contenir des milliers de tables et de classes.

Davor Ždralo
la source
3

Si vous travaillez sur quelque chose sur lequel vous travaillez et qu'il s'agit d'une tâche à long terme, alors vous devriez travailler pour apprendre et être capable de vous souvenir de divers noms de tables et de colonnes, de classes, de variables et de méthodes. C’est quelque chose qui passera par le temps lorsque vous travaillerez avec eux. Vous ne les apprendrez pas tous du jour au lendemain, mais vous devez vous efforcer d'en savoir le plus possible sur le système sur lequel vous travaillez. En outre, dans un grand système, il est impossible de tout mémoriser, mais il n'y a aucune raison de ne pas apprendre et de ne pas oublier autant que possible.

Avoir à tout regarder en permanence n’est qu’un coup dur pour la productivité - si vous travaillez sur une tâche et que vous devez vous arrêter et regarder les choses toutes les quelques minutes, vous perdez en concentration. Utilisez les outils appropriés pour vous aider et apprenez / mémorisez ce que vous pouvez. Cela va grandement améliorer votre productivité.

Thomas Owens
la source
1
Je suis fortement en désaccord avec la mémorisation des détails. Vous devez vous rappeler les concepts et les fonctions. Autrement dit, sachez ce que votre système peut faire et comment savoir quel est le nom exact de la méthode / variable / colonne.
edA-qa mort-ora-y
1
Je ne m'attendrais pas à ce que vous sachiez tout, mais je m'attendrais à ce que toute personne travaillant sur un sous-système particulier connaisse ce sous-système à l'intérieur et à l'extérieur. Je considérerais que cette connaissance se soucie de votre travail.
Thomas Owens
3

Est-il utile de mémoriser les noms de classe exacts? Je ne pense pas.

Est-il utile de connaître le type de termes utilisés par votre projet dans les noms de classe afin de pouvoir les rechercher plus rapidement? Absolument.

Scott McIntyre
la source
2

Je ne suis pas d'accord pour que les noms de table soient mémorisés, mais ils doivent être faciles à deviner. Pour le rendre facile à deviner, soyez cohérent. De cette façon, vous ne vous demanderez pas "Hmm .. est-ce que la table de foo est au pluriel ou au singulier? Est-ce que la clé primaire est ID ou RID ou FooRID?"

Earlz
la source
2

Je ne sais pas comment vous pouvez interroger une base de données à tout moment sans connaître les noms de tables principaux et les noms de colonnes critiques (mais certainement pas tout). Je connais les personnes qui connaissent ces informations sans avoir à les comprendre à chaque fois, ont plus de valeur pour l'organisation et deviennent des personnes "à consulter" lorsque les autres sont bloqués.

Je constate que souvent, lorsque les gens ne commencent pas à apprendre ce genre de choses, ils commettent des erreurs dans les requêtes sans s'en rendre compte. Les erreurs que je remarque souvent dans les revues de code sont souvent instantanées, car je comprends la structure de notre base de données, la relation entre les tables et les règles de gestion critiques sans avoir à les rechercher.

Personnellement, je trouve que les personnes qui ne se donnent pas la peine d'apprendre la structure restent souvent au niveau débutant pour interroger cette base de données particulière. Ils ont également tendance à ne pas survivre aux licenciements. Je pense que votre patron essaie de vous faire une faveur pour vous amener à faire plus attention.

HLGEM
la source
1

Plus que la mémoire puissante, celle qui aide beaucoup est la conception dirigée par le domaine et les conventions simples telles que les noms de table et les noms de classe. Si le propriétaire de votre entreprise vous parle de l'exigence, les termes spécifiques au domaine qu'il utilise doivent figurer dans le code. Dans ce cas, nous n'avons pas à nous rappeler les correspondances entre les termes métier et les noms dans le code. Cette habitude prend du temps à se répandre mais elle est très utile car elle réduit également les erreurs de traduction entre les propriétaires d’entreprise et les développeurs.

Parallèlement à cela, si la durée du projet est très longue, se familiariser avec la base de code sur une période donnée aidera inconsciemment la mémoire.

Vinod R
la source
excusez-moi, pourriez-vous expliquer quel est le sens de domain driven design?
Anyname Donotcare
1
@just_name J'ai commencé avec ce martinfowler.com/bliki/EvansClassification.html
Vinod R