Que faire lorsque vous êtes confronté à une tâche de programmation que vous n'avez jamais accomplie?

37

J'ai commencé ma carrière en tant que développeur .NET il y a 3 mois et après un long programme de formation sur diverses technologies, modèles et concepts, les développeurs qui me supervisaient ont décidé que je suis prêt à participer à l'un des nombreux projets gérés par la société.

Je suis très heureux de pouvoir enfin commencer à coder. L’équipe à laquelle j’ai adhéré est plutôt petite pour l’instant car nous partions d’un nouveau projet, ce qui est formidable car je peux participer à tout le cycle de vie du projet. Il s’agit d’un projet SPA basé sur le Web et utilisant une API Web ASP.NET MVC / ASP.NET, ainsi que dans le framework Durandal et les bibliothèques associées front-end.

Mon problème est qu'après avoir rencontré mes collègues et établi les tâches et les estimations pour le mois prochain, je me trouve dans une position que je ne sais pas si je suis capable d'assumer aucune de ces tâches.

Je n'ai jamais effectué aucune des tâches créées et je ne sais pas comment procéder.

Par exemple, l’une des tâches créées est la création d’un mécanisme générique de traitement des erreurs pour l’ensemble de l’application.

Comment procède-t-on généralement devant des tâches qu'il n'a jamais accomplies?

Aleczandru
la source
7
Cela peut sembler unique à la programmation, mais tous les deux premiers emplois que la plupart des gens font, se sentent de cette façon. Ils ne vous ont pas embauché parce que vous connaissiez les réponses - c'est un travail de débutant! - Ils vous ont embauché parce que vous seriez capable de les comprendre.
Marco

Réponses:

59

Vous pouvez et devez faire plusieurs choses pour vous préparer à la tâche:

  • Pensez au problème et dessinez des diagrammes. Assurez-vous de connaître le problème que vous essayez de résoudre.
  • Faites des recherches sur ce que vous essayez de faire. Internet est une source d'informations précieuse. Je ne dis pas demander à Stack Overflow, mais bien de faire des recherches sur la façon dont d’autres personnes ont déjà résolu un problème comme le vôtre ou l’ont abordé. C'est ce que Google a proposé: "La gestion des exceptions en tant que problème à l'échelle du système" . Personnellement, j'essaie toujours d'apprendre des autres.
  • Enfin, et le plus important peut-être, parlez aux autres membres de votre équipe pour obtenir plus de précisions et d’indications sur les mesures à prendre. Je veux toujours voir de nouveaux ingénieurs venir demander conseil sur des projets.

Ne sachant pas faire quelque chose ne finira jamais vraiment. Chaque jour, je rencontre des problèmes que je n’ai jamais résolus. Avoir la capacité de comprendre comment résoudre de nouveaux problèmes est extrêmement important. Même les problèmes les plus anciens ne sont jamais totalement anciens - dans la programmation, il y a presque toujours une nouvelle tournure ou une demande pour que votre solution fonctionne d'une manière nouvelle ou différente.

C'est pourquoi je suis un ingénieur; J'aime découvrir de nouvelles choses.

Ne jamais arrêter d'apprendre de nouvelles choses. L'apprentissage est ce qui vous rend meilleur.

barrem23
la source
27

Il n'y a pas de solution parfaite, mais certaines choses pourraient aider:

  • Divisez les tâches en unités les plus petites possibles - décomposez-les jusqu'à ce que vous puissiez faire quelque chose.

  • Répétez la tâche ou le problème immédiat pour vous assurer de bien le comprendre. Ensuite, faites une analyse et répétez.

  • Commencez par choisir la tâche la plus simple, même si cela semble trop simple pour prendre votre élan . Certaines personnes préfèrent la tâche la plus difficile, de sorte que le «travail dur» est à l'abri. J'ai constaté que la «tâche la plus simple» fonctionnait généralement mieux, car vous cherchiez simplement à prendre un élan et j'ai vu «le plus difficile en premier» conduire à des projets en perte de vitesse avant qu'ils ne reçoivent un véritable élan.

  • Demandez de l’aide pour choisir la bonne tâche et la bonne approche pour commencer.

  • Cherchez un mentor qui peut vous donner des commentaires constants (idéalement quotidiens) pendant une semaine ou deux.

  • Posez beaucoup de questions mais concentrez-vous sur la politesse envers vos coéquipiers. Demandez toujours s'ils ont le temps et faites attention aux signes verbaux et non verbaux habituels qu'ils n'ont pas le temps.

  • Conservez une liste des problèmes que vous rencontrez, puis examinez-les tous les jours ou à une heure de votre choix.

  • N'ayez pas peur de poser les questions les plus élémentaires. Les hypothèses des autres peuvent être difficiles à contester, mais si vous ne pouvez pas continuer avec ce que vous avez reçu, vous devez remettre en question.

  • Si vous connaissez l'objectif, faites-en autant que vous le pouvez jusqu'à ce que vous soyez bloqué, puis affichez l'avancement et la question sur Stack Overflow.

Michael Durrant
la source
11
Je suis plutôt d'accord, à part "choisir la tâche la plus simple en premier" . Du point de vue des risques liés aux projets, il peut être préférable de commencer par les tâches essentielles les plus difficiles. Mieux vaut apprendre tôt si les parties difficiles sont trop difficiles. Ensuite, vous pouvez (peut-être) revenir à une conception plus simple ... ou renégocier les exigences.
Stephen C
18

Bien sûr, vous ne savez pas comment écrire un "mécanisme d'erreur générique". Personne ne sait comment écrire un "mécanisme d'erreur générique" jusqu'à ce que certaines exigences soient définies. On dirait que tout ce que vous avez, c'est l'idée de quelqu'un selon laquelle un "mécanisme d'erreur générique" est en quelque sorte requis pour démarrer ce projet.

Personnellement, je repousserais cette idée. Écrire quelque chose de «générique» avant de mettre en œuvre les besoins réels des utilisateurs est presque toujours une perte de temps. Et comme il est générique , par définition, il n’est pas spécifique à votre entreprise ou à votre application. Il existe donc probablement déjà quelque chose de disponible qui répondra à environ 95% de vos besoins.

Mais puisque vous êtes le membre junior, repousser peut ne pas être une bonne idée. Vous devez donc parler aux personnes qui pensent avoir besoin d'un "mécanisme d'erreur générique" et savoir quels services elles attendent de ce mécanisme. Ensuite, recherchez sur le net si quelque chose déjà écrit suffira. Si vous trouvez quelque chose, proposez simplement de l'utiliser. Ils ne seront probablement pas d'accord, car quiconque demande un "mécanisme d'erreur générique" souffre probablement d'un mauvais cas de non-inventé-ici.

Si cela échoue, l'étape suivante consiste à définir une interface pour le mécanisme d'erreur et à la faire approuver par les parties prenantes. Après cela, la mise en œuvre sera probablement triviale.

==================

PS Certains programmeurs pensent que la meilleure façon de démarrer n’importe quel projet est d’écrire une "plate-forme" fournissant tous les services communs dont les modules de l’application auront besoin. Cela se traduit généralement par des mois de travail trivial qui réinvente des éléments déjà disponibles gratuitement. Tant que vous n’atteignez pas les limites de performance des solutions disponibles, il n’ya aucune raison d’écrire des services "plateforme". Il n'y a pas non plus de raison d'écrire des enveloppes autour des API existantes. Si vous refactorisez en continu, l'emballage exact requis par votre application apparaîtra comme par magie.

Kevin Cline
la source
5
Je pense que je passe peut-être même une majorité de mon temps à supprimer les fonctionnalités que les utilisateurs pensaient avoir besoin, alors qu'en fait, il s'avère que ce n'était que légèrement pratique et problématique lorsqu'il s'agissait de s'adapter rapidement à de nouveaux besoins. Votre avertissement est sur place!
Eamon Nerbonne
11

Je pense que vous souffrez plus d'anxiété qu'un déficit de compétences. À un moment donné, tout n'était pas nouveau? Vous a-t-on déjà confié une tâche sans parvenir à la résoudre dans une certaine mesure? Vous êtes payé pour comprendre les choses.

Utilisez votre équipe - Si vous faites partie d'une bonne équipe, vous devriez pouvoir demander de l'aide. Il y a des choses que vous saurez que même les plus âgés ne sauront pas. Demander de l'aide n'est pas un signe de faiblesse (pas plus que de courir sur un site de questions.).

Recherche - Une recherche Web sur la gestion des erreurs génériques n'a rien donné? Vous ne pouvez pas trouver une solution complète. De toute façon, vous allez devoir travailler dessus et l'adapter à votre application.

Prototype - Changez votre perspective sur la tâche de la production au prototype. Juste obtenir quelque chose à travailler et à construire à partir de là. Lorsque vous en arrivez au point, vous pouvez l'utiliser, puis commencez à le considérer comme une production. Maintenant, vous ne verrez pas la tâche comme quelque chose que vous ne saurez même pas par où commencer.

Get Over It - Seulement faire des choses que vous savez comment faire deviendra ennuyeux. Cela vous conduit également à un piège consistant à simplement forcer certaines solutions en répétant les mêmes choses encore et encore (si vous aimez répéter des choses, allez travailler sur une chaîne de montage.). Soyez prêt à faire des erreurs. Ceux qui vous disent qu'ils savent tout, ne demandent jamais d'aide et ne font pas de recherches, mentent.

C'est la vieille blague sur les médecins "pratiquant" toujours la médecine; ils n'ont pas toutes les réponses non plus.

JeffO
la source
Je suis d'accord avec l'utilisation de votre équipe. Seraient-ils ouverts à la programmation couplée pendant un certain temps pour vous mettre au courant?
Neontapir
Toutes les équipes / développeurs ne sont pas dans l'idée de la programmation en binôme, mais cela ne signifie pas que vous ne pouvez pas vous asseoir et regarder par-dessus leur épaule ou vice-versa.
JeffO
6

Réjouissez-vous en ce que vous ne faites pas quelque chose que vous avez fait cent fois auparavant. Vous avez trouvé la joie du développement logiciel (pour moi, en tout cas, YMMV): apprendre à conduire pendant que vous dévalez l'autoroute à une vitesse extraordinaire. C'est le genre de chose pour laquelle un grand développeur vit et excelle.

Mon processus personnel ressemble à ceci:

  • Recherche. Découvrez si et comment ce problème, ou un problème similaire, a déjà été résolu. Même si vous ne pouvez trouver que des informations sur des solutions pour différentes langues ou plates-formes, cela peut être extrêmement informatif.
  • Prototype. La meilleure façon absolue de faire quelque chose de bien est de le faire en premier. Construisez une solution, inventant tout au fur et à mesure, sur la base de vos recherches. Essayez de le rendre conforme aux principales exigences, en tenant compte des exigences accessoires. Ne vous embêtez pas pour le rendre joli, parfait, extensible, flexible ou performant, faites-le simplement fonctionner. Prenez note des leçons apprises - ce qui a fonctionné, ce qui n'a pas fonctionné, les obstacles potentiels, etc. Ensuite, jetez le code. Si vous craignez de devenir idiot si vous prenez trop de temps, faites-le à votre rythme. Cela vous profite personnellement, en termes de connaissances.
  • Conception. Combinez vos connaissances externes (recherche) avec des connaissances personnelles (prototypes de leçons apprises) et formulez une conception de ce que vous pensez être la bonne façon de le faire.
  • Coopérer. Trouvez un membre expérimenté de l'équipe, montrez-leur la conception proposée et obtenez des commentaires. Montrez-le à quelqu'un d'autre, obtenez ses commentaires. Affinez votre conception.
  • Répéter. Si vous n'êtes toujours pas sûr de votre solution, assurez-vous que les examens par les pairs font partie de votre cycle d'itération. Apportez régulièrement votre mise en œuvre à un membre de l'équipe senior pour obtenir ses commentaires.
  • Soyez heureux - vous avez approfondi vos connaissances et votre carrière, et vous devez faire quelque chose de nouveau et d'intéressant au lieu de quelque chose d'ancien et d'ennuyeux que vous avez fait mille fois auparavant. Essayez de faire de votre prochain projet un défi encore plus grand.

Enfin, ne vous inquiétez pas trop des apparences. En tant que responsable de l'équipe de développement, je préférerais que quelqu'un puisse prouver qu'il peut apprendre ce dont il a besoin d'apprendre au besoin, plutôt que quelqu'un qui peut prouver qu'il sait déjà ce que nous essayons de faire maintenant. Le premier sera plus utile pour tout ce que nous aurons à faire demain, le mois prochain ou l’année prochaine.

Adrian
la source