Mon design proposé est généralement pire que celui de mon collègue - comment puis-je m'améliorer? [fermé]

69

Je fais de la programmation depuis quelques années et je suis généralement bon en résolution de problèmes et en création de scripts de taille petite à moyenne. Cependant, je ne suis généralement pas doué pour concevoir des programmes à grande échelle orientés objet. Quelques questions

  1. Récemment, un collègue possédant le même nombre d'années d'expérience que moi travaillait sur un problème. Je travaillais sur un problème plus longtemps que lui, cependant, il a proposé une meilleure solution et à la fin, nous allons utiliser sa conception. Cela m'a vraiment touché. Je reconnais que son design est meilleur, mais je voulais proposer un design aussi bon que le sien. J'envisage même de quitter le travail. Je ne sais pas pourquoi mais tout à coup je me sens sous une pression, par exemple, que penseraient les juniors de moi, etc.? Est-ce normal? Ou je pense un peu trop à cela?

  2. Mon travail consiste à programmer en Python. J'essaie de lire le code source, mais comment pensez-vous que je peux améliorer mes compétences en conception? Existe-t-il de bons livres ou logiciels que je devrais étudier?

S'il te plaît, éclaire-moi. J'apprécierai vraiment ton aide.

utilisateur151193
la source
9
@Oded: Je pense que l'OP fait valoir qu'il a le même nombre d'années d'expérience que son collègue, mais que celui-ci produit de meilleurs designs et que l'OP aimerait savoir comment s'améliorer pour être aussi performants. bon comme le collègue. Je pense ...
FrustratedWithFormsDesigner
34
@Oded: Oui, il ne devrait pas s'attendre à être un maître sans mettre ses 10 ans, mais d'un autre côté, ces 10 années ne lui feront pas beaucoup de bien s'il n'a aucune source à apprendre. . Il essaie de faire pousser un peu ici; ne le décourageons pas, s'il vous plaît?
Mason Wheeler
6
Avez-vous appris quelque chose de l'autre conception? Pouvez-vous l'appliquer à d'autres situations de codage que vous avez eues? Sucer et apprendre autant que vous pouvez de votre collègue. Offrez le déjeuner.
JeffO
17
Je resterais dans les parages. Si vous pouvez apprendre d'un collègue, faites-le. Ne laissez pas votre ego entraver une opportunité - que se passe-t-il si vous passez à autre chose et finissez par travailler avec des gars qui n'ont rien à vous apprendre. J’ai plus de 25 ans d’expérience, mais j’ai heureusement (et fait ma part de générosité) des critiques constructives d’un programmeur avec 3. Je travaille avec un gars qui est meilleur lors de sa pire journée que moi au meilleur de ma vie, à la fois ces gens, je suis un meilleur programmeur qu'il y a deux ans.
mattnz
7
Un fait de la vie est que vous trouverez toujours des gens meilleurs que vous. Ne vous laissez pas décontenancer, essayez simplement tout ce qui est en votre pouvoir pour vous améliorer.
maple_shaft

Réponses:

69

Je pense que c'est un signe très positif de vos compétences. Il est beaucoup plus courant que les personnes qui ont des difficultés à concevoir le «meilleur» design dans une équipe soient complètement incapables de comprendre pourquoi un autre design est meilleur.

Vous avez deux atouts vraiment formidables (et étonnamment rares):

  • Vous êtes capable d'évaluer objectivement vos créations par rapport à d'autres
  • Vous avez le désir et la volonté de rendre vos conceptions optimales

Vous êtes seulement dans quelques années et vous avez un long chemin à parcourir, mais avec cette attitude, vous y arriverez certainement, n'abandonnez pas; nous avons tous affaire à des revers mentaux comme celui-ci. Aussi souvent que j'en ai l'occasion, j'aime appliquer les principes de conception (et non les mêmes que les modèles de conception) et je pense que c'est un exemple parfait de leur utilité. Etudiez-les et exercez-vous à les appliquer à vos conceptions avant de savoir que le projet a fait un autre pas en avant à cet égard.

En fin de compte, rappelez-vous, la conception est difficile. Nous traitons tous les jours avec des abstractions complexes de haut niveau, pour les créer du jour au lendemain, les faire bien fonctionner, et une utilisation facile par des collègues est une tâche extrêmement difficile. Cela prend de la pratique pendant des années .

Alors, lancez-vous et rappelez-vous: il y a beaucoup de gens qui ne peuvent pas évaluer deux designs et en reconnaître un comme préférable à un autre. Dans quelle mesure pensez-vous qu'ils s'entendent bien pour créer de bons designs?

Éditer:
«Autre conseil, après avoir bien compris les principes et appliqué un peu leur application, je pense qu’il existe un autre joyau d’une autre question, qui porte sur l’utilité d’étudier diverses langues ayant des objectifs et des règles différentes:

Idéalement, chaque programmeur devrait connaître une langue de chaque classe. Que pourriez-vous apprendre:

  1. Un langage ordinaire de programmation orientée objet typé: Java, C # (principalement utilisé dans les logiciels d'entreprise) et C ++ (programmation système et applications bureautiques complexes)
  2. Un langage OOP basé sur un prototype: Javascript (programmation Web côté client)
  3. Un langage procédural: C (logiciel embarqué et programmation système)
  4. Un langage fonctionnel: Haskell, ML ou Lisp (les langages fonctionnels conviennent aux logiciels hautement parallélisés).

Un langage de programmation logique (Prolog) n'est probablement pas très utile dans l'industrie, il est principalement utilisé dans la recherche en IA.

Cela contribuera à élargir la diversité des idées qui vous viennent à l’esprit lorsque vous essayez de concevoir une solution.

Jimmy Hoffa
la source
2
+1 Si l’on comprend le pourquoi , ils ont déjà de beaux designs (surtout s’ils n’ont que quelques années d’expérience).
Daniel B
22
  1. Ceci est tout à fait normal que plusieurs personnes proposent des designs de qualités différentes. J’ai été invité par le passé à juger des concours en matière de conception de logiciels; j’en ai donc été témoin direct: même les conceptions les plus simples donnaient lieu à des solutions d’une qualité radicalement différente, émanant toutes de personnes intelligentes et expérimentées.
  2. La lecture du code source est trop faible pour vous aider à améliorer vos compétences en conception: le code traite de la complexité au niveau inférieur à la conception globale.

Le meilleur moyen d’améliorer la conception de logiciels est de concevoir des logiciels * . Une façon de le faire consiste à consulter les concours de conception: TopCoder dispose d'une archive de plus de 100 conceptions de composants, ainsi que de la documentation de conception UML et de ses implémentations en Java et / ou C #. Choisissez un composant fini que vous aimez, lisez la spécification des exigences et essayez de créer une conception originale pour répondre à ces exigences. Passez une heure ou deux à réfléchir au problème et à dessiner un diagramme de classes, puis ouvrez le dessin gagnant et lisez ce que l'auteur a fait. Comparez son dessin au vôtre, repérez les différences et voyez si votre dessin est meilleur. Consultez le tableau de bord de la compétition pour voir comment les juges ont évalué le design. Cela vous donnera les informations dont vous avez besoin pour décider de la manière d'améliorer vos compétences en conception.


* Ceci s’applique à d’autres choses que la conception de logiciels: faites quelque chose à plusieurs reprises avec un feedback qualifié, faites attention à ce qu’ils disent, et vous irez mieux dans tous vos projets.

dasblinkenlight
la source
1
Merci d'avoir attiré mon attention sur TopCoder, idée intéressante de l'utiliser comme outil pédagogique.
Neontapir
Pourriez-vous, s'il vous plaît, être très gentil de fournir un lien vers une archive de TopCoder archive of 100+ component designs,. Impossible de trouver de tels fichiers.
StepUp
1
@StepUp Le voici . Vous devrez peut-être vous connecter pour y accéder.
dasblinkenlight
Si je veux voir un bon design de ASP.NET où je devrais voir? Je viens de voir "Rechercher des composants" sur le lien que vous avez fourni.
StepUp
1
@StepUp ASP.NET est trop général. Les composants de TopCoder sont beaucoup plus spécifiques: analyseur SQL, évaluateur d'expressions, etc.
dasblinkenlight
11

Eh bien, ne quittez pas votre travail. Il est préférable de travailler avec quelqu'un qui a de meilleures compétences que vous, afin que vous puissiez apprendre de lui.

Regardez la meilleure conception et déterminez pourquoi elle est meilleure. Découvrez le design accepté et réfléchissez à différentes manières d’appliquer un design similaire dans d’autres situations. Une fois que vous savez pourquoi il est meilleur que votre conception, vous savez alors ce que l’on ne doit pas faire la prochaine fois que vous réaliserez une conception. Parlez à l'autre développeur et demandez-lui comment il a conçu le design.

Pour améliorer les compétences en conception, la meilleure chose à faire est de créer des conceptions, puis d’être brutal avec vous-même en les évaluant et en déterminant les moyens de les améliorer. Posez-vous des questions telles que: cela fonctionnera-t-il et répondra-t-il à l'exigence dans tous les aspects, est-il maintenable, comment vais-je pouvoir le tester, va-t-il causer des problèmes de performances, quelle est la probabilité de l'exigence de changement et dans quelle mesure la conception être capable de gérer le changement. Lisez à propos des modèles de conception, puis essayez de les appliquer à vos conceptions. Refactorisez sans pitié après avoir conçu un design initial. Si vous concevez une base de données avec l'application, lisez beaucoup sur la normalisation et le réglage des performances de la base de données, vous en apprendrez beaucoup sur la conception de la base de données si vous apprenez à faire fonctionner une base de données plus efficacement. Pour les applications, pensez aux principes DRY et SOLID lors de la conception. Lisez à propos des anti-modèles pour savoir ce qu’il faut éviter.

HLGEM
la source
3

Reconnaître une meilleure conception est une capacité importante. Vous devriez encourager cela lorsque vous suivez certaines des suggestions précédentes concernant l'examen des conceptions.

Sur quels critères avez-vous jugé l'autre design mieux? Était-ce plus simple et plus facile à comprendre? At-il procuré un avantage de performance? Était-ce plus extensible? Il existe de nombreux principes de conception, tels que la décomposition, l'abstraction, la dissimulation d'informations et la modularité des composants, que vous pouvez utiliser pour évaluer les conceptions et que vous reconnaissez peut-être déjà.

  • Essayez de nommer vos critères, de les comprendre, de les développer et de les réutiliser lorsque vous examinez d’autres modèles. Lorsque vous concevez vous-même des éléments, intégrez ces critères à votre processus et mesurez-les consciemment à vos conceptions. Ensuite, soyez prêt à modifier complètement ou à jeter votre dessin s'il ne correspond pas à vos critères.

Vous obtiendrez des idées sur différents principes de conception à partir des sources suivantes: http://www.cs.wustl.edu/~schmidt/PDF/design-principles4.pdf Conception de logiciels sur wikipedia Google "Principes de conception de logiciels"

  • Comprendre différents modèles de conception logicielle, tels que la conception orientée objet, la conception fonctionnelle ou la conception d'analyse structurée. Celles-ci peuvent être des mentalités totalement différentes à partir desquelles aborder une tâche de conception et elles ont chacune des domaines dans lesquels elles excellent. Apprenez-les comme des outils pour votre boîte à outils. http://userpages.umbc.edu/~khoo/survey2.html

  • Assurez-vous de séparer la conception de la mise en œuvre, essayez de schématiser les choses que vous considérez comme de bonnes conceptions, afin de séparer le langage et les spécificités de la mise en œuvre des principes de conception de niveau supérieur. Et pour développer votre "œil design" et vos capacités de communication.

  • Dernier point, mais peut-être le plus important, lire largement est un très bon outil - il y a beaucoup de choses intéressantes allant de l'analyse fractale à l'analyse bayésienne, de la logique floue au traitement du langage naturel, qui peuvent alimenter des idées qui émergeront plus tard et de manière inattendue. Avec le Web, vous pouvez parcourir des sujets de toutes parts, rien que pour votre divertissement et votre édification, et vous en tirerez parti. Vous n'avez pas besoin de devenir expert, vous devez juste connaître les termes et les idées.

Amusez-vous - ne le faites pas si vous ne l'appréciez pas au moins un peu!

Lindsay Morsillo
la source
2

Eh bien, vous avez déjà fait le premier pas. Vous admettez que vous avez quelque chose à apprendre, que le travail de votre collègue est meilleur que le vôtre et que vous souhaitez apprendre et vous améliorer.

La deuxième étape consiste à analyser. Regardez son travail et ne dites pas simplement que c'est mieux; comprendre pourquoi c'est mieux. Rechercher des détails spécifiques et des points qu'il a fait mieux.

Une fois que vous avez compris cela, extrayez les principes sous-jacents. Posez des questions comme celles-ci:

  • Qu'en est-il de cette conception est meilleure que ma conception?
  • Est-ce que ce point est spécifique à cette conception, ou est-ce un principe général qui pourrait être appliqué à d'autres conceptions à l'avenir?
  • Si c'est un principe général, quelles sont ses limites? Quand est-ce une bonne idée de ne pas faire les choses de cette façon? (Celui-ci est très important. Il vous empêche de traiter une idée utile comme un marteau d'or , même dans des cas inappropriés.)

Essayez de comprendre vous-même les choses, car vous assimilerez mieux les idées si vous proposez la chaîne de raisonnement qui vous a amené à la conclusion vous-même, mais parlez également à votre collègue pour vous assurer de bien comprendre les choses. droite. (Après tout, vous ne voulez pas commettre d'erreur de raisonnement et d'intériorisation d'un mauvais principe.) Et n'hésitez pas à demander de l'aide à votre collègue si vous ne pouvez pas comprendre. La programmation est une discipline où l'humilité a tendance à être respectée, et beaucoup de codeurs saisissent l'occasion d'apprendre à quelqu'un quelque chose de nouveau, ce qui explique probablement en grande partie pourquoi StackOverflow est devenu si gros si rapidement.

Maçon Wheeler
la source
2

J'aimerais également ajouter (en plus des bonnes réponses) qu'il n'y a pas que cela "il peut créer un meilleur design que moi". Les autres réponses se concentrent sur la façon dont vous pouvez vous améliorer en design, ce qui est bien et bon ... mais ...

Je parie que vous pouvez faire mieux que votre collègue. Ne pas créer un match pissé ou quoi que ce soit (vous pouvez faire mieux, vous foutez, je peux mieux faire X!), Mais souligner que tout le monde a des forces et des faiblesses.

À mon travail, il y a 4 développeurs. Il y a des moments où les deux principaux "programmeurs" peuvent créer des choses qui me laissent simplement tomber dans la poussière. Ça me fait tourner la tête en essayant de m'enrouler autour de leurs créations.

Mais je suis bien meilleur en SQL et en script de ligne de commande qu’ils ne le sont, et je peux automatiser tout ce qui les laisse dans la poussière.

Sont-ils meilleurs que moi? Dans certains domaines, c'est définitivement. Bon sang, dans beaucoup de domaines ils sont - je suis de loin le développeur junior de mon magasin et individuellement ils ont des années d'expérience sur moi. En dépit de ces années d'expérience, je suis meilleur dans certains domaines que même eux.

Arrêtez de vous concentrer sur le fait que quelqu'un est meilleur que X chez vous. Cette personne, sans essayer ni même y penser, pourrait être capable de vous concevoir même après que vous ayez pratiqué pendant 10 ans. Non pas que vous ne devriez pas travailler du tout à corriger vos faiblesses, mais souvenez-vous que pour chaque force il y a une faiblesse.

Concentrez-vous sur vos forces et vos faiblesses, ainsi que sur celles de vos collègues.

WernerCD
la source
1

Dans tous les aspects de la vie, vous trouverez des gens qui ne sont pas aussi bons que vous, ainsi que des gens qui sont meilleurs que vous, surtout après seulement "quelques années" d'expérience.

Vous devez apprendre de tout le monde.

Ne te sens pas mal. Peut-être que votre collègue est un naturel. Vous devriez le féliciter sincèrement et apprendre le plus possible de lui.

Ne laissez pas les professionnels se mettre jalousement entre vous et une opportunité d’apprendre.

Tulains Córdova
la source
1
  1. Quelques années, ce n’est vraiment pas beaucoup. Et qu'il existe des personnes avec des vues de conception de haut niveau meilleures ou pires. Par exemple, je connais des personnes capables d’écrire en un clin d’œil un algorithme complexe pour les programmes de bas niveau, mais incapable de comprendre la conception de haut niveau et les concepts tels que la cohésion et les dépendances. Cependant, il ne s'agit pas d'un état de facto. Vous pouvez tous les deux vous améliorer à la conception de niveau supérieur (lire quelques livres, essayer quelques astuces à la maison, etc.) et vous pouvez aussi découvrir que, dans d’autres domaines de la programmation, votre collègue programmeur est moins bon. En outre, si vous pensez que vous avez à peu près le même niveau d'expérience et de connaissances techniques, cela peut être dû à une situation aléatoire. La prochaine fois, vous aurez peut-être de meilleures idées de design. De plus, au lieu de quitter votre emploi, saisissez cette opportunité et apprenez de vos collègues. La prochaine fois, fais un dessin ensemble, essayez de saisir ses secrets, ses pensées. La programmation est comme un métier, elle s’apprend en agissant et en regardant les autres le faire.

  2. Les compétences en conception viennent généralement avec l'expérience et après la lecture de quelques livres importants. Je vous recommanderais les suivants:

    • Robert C. Marting - Principes, modèles et pratiques agiles (il en existe 2 versions, une en Java et une en C #. Peu importe celle que vous choisissez, les idées et les principes peuvent être appliqués à tout objet orienté, et pas seulement. - code source)
    • Than, Robert C. Marting a 2 autres livres intéressants: Clean Code et The Clean Coder
    • Même si Martin couvre tous les modèles de design modernes de son premier livre, vous souhaitez consulter le livre de modèles de design original de Gang of Four.
    • Enfin, il existe d’autres livres très prisés aujourd’hui: logiciel orienté objet de plus en plus guidé par des tests, refactoring par M. Feathers (je pense), ou rédaction de cas d’utilisation efficaces par A. Cockburn et quelques autres que vous découvrirez en chemin.

Aucun de ces livres n'est une solution miracle, mais la lecture des 2 premières recommandations va probablement changer votre vision et votre perception de la programmation pour toujours.

Patkos Csaba
la source
0

Ne laissez pas ça vous arriver. Si vous avez des années d'expérience à corriger des bugs et à créer de petits programmes, vous excellerez dans ce domaine. Votre collègue a probablement des années d'expérience dans la conception de projets plus vastes.

Connaître les éléments sous-jacents est extrêmement pratique, mais si vous souhaitez améliorer la conception, vous devez concevoir quelques projets. Répétez jusqu'à ce que la compétence s'enfonce.

En bref, "années d'expérience" n'est pas toujours équivalent. Faites en sorte que vos années valent quelque chose.

Philippe
la source
0

"Améliorer" implique souvent de mesurer vos conceptions ou votre code par rapport à quelque chose / quelqu'un de mieux, de comparer soigneusement les différences, d'apprendre de ces différences et d'essayer continuellement d'améliorer vos futures conceptions en fonction de cela. Se sentir trop mal de savoir que vous devez en savoir plus ralentira ce processus bénéfique. Si vous vous déplacez dans un endroit où il n'y a pas beaucoup de personnes (ou d'autres ressources) qui peuvent parfois ou toujours vous fournir une meilleure comparaison, vous risquez de perdre cette occasion d'apprendre et de ralentir votre processus de mieux miser.

hotpaw2
la source