Comment puis-je améliorer mes compétences tout en travaillant sur des projets réels, en l'absence de développeurs plus expérimentés? [fermé]

15

Je suis le développeur principal d'une petite entreprise, travaillant avec C # et ASP.Net. Notre équipe est petite, 2-3 personnes, sans grande expérience dans le développement et la conception. Je n'ai pas l'opportunité d'apprendre de développeurs plus expérimentés, il n'y a personne dans mon équipe pour me guider et m'aider à choisir les meilleures approches, car je m'occupe de la plupart des projets.

Comment puis-je améliorer mes compétences en développement de logiciels tout en travaillant sur des projets réels, en l'absence de développeurs plus expérimentés?

Akash KC
la source
1
Votre question est vraiment vague. La façon dont vous apprenez les meilleures stratégies de développement consiste à les étudier dans des livres, des blogs et des podcasts, puis à les appliquer dans votre codage quotidien.
Robert Harvey
Merci d'avoir commenté .... J'ai l'habitude de parcourir de nombreux blogs la plupart du temps et je m'améliore vraiment en phase de codage mais quand vient le temps de mettre en œuvre une stratégie de développement (comme TDD, DDD, etc.) et un design design (SOLID, DRY, etc.), j'ai peur de les implémenter car il y a une contrainte de temps dans le développement du système et enfin, je choisis mon propre style de développement qui, je pense, n'est pas implémenté de la meilleure façon ....
Akash KC
1
@LolCoder Je peux comprendre que certaines personnes peuvent rejeter TDD pour un problème de temps de développement limité (bien que TDD économise réellement du temps plus tard), mais je ne comprends pas comment l'application SOLID ou DRY peut affecter la contrainte de temps?!
Songo
1
@Yannis Rizos: Merci d'avoir édité la question ... Maintenant, ça semble vraiment bien ... Le thème de la question reste le même .... Encore une fois, merci ....
Akash KC
1
@LolCoder En fait, j'ai eu un problème similaire que j'ai posé ici il y a quelque temps.
Songo

Réponses:

12

Il existe de nombreuses sources à apprendre auprès de collègues plus expérimentés: livres, blogs de développeurs compétents, Stack Exchange, conférences / conférences, etc. Les révisions de code sont également cruciales, et CodeReview.SE est une ressource précieuse.

Voyons comment cela pourrait fonctionner sur un exemple.

Exemple

Vous lisez un article de blog qui mentionne un terme "ETL". Vous n'en connaissez pas la signification, mais à partir de cet article, vous comprenez vaguement qu'il s'agit d'une sorte de processus ou de flux de travail qui déplace les données d'un support de données à un autre.

Vous allez sur Wikipedia et d'autres ressources et obtenez une vision plus précise de la chose. Il n'est pas encore très clair quand serait-il utile d'utiliser un ETL. Après tout, il semble beaucoup plus facile d'écrire une requête SQL qui fera tout le travail, plutôt que de passer trop de temps à construire un véritable ETL.

Pour répondre à ces questions, vous empruntez un livre sur les ETL à votre bibliothèque locale. Il explique que certains processus d'extraction-transformation-chargement ne sont pas facilement réalisables avec une simple requête SQL: non seulement la phase d'extraction peut gérer plusieurs supports de données diversifiés, non seulement une base de données relationnelle, mais également l'étape de transformation peut être très compliquée pour à la fois valider / normaliser les données et les cartographier.

Vous avez maintenant une vision claire de ce qu'est un ETL, comment l'utiliser et surtout quand vous avez besoin d'un ETL et quand ce n'est pas un outil approprié. Pendant ce temps, vous avez implémenté un petit ETL en tant que projet personnel. Ce projet vous permet de découvrir certains points qui ne sont pas assez clairs pour vous et qui ne sont pas couverts par un livre. Ces points étant plutôt abstraits et non liés au code source, vous posez une question sur Programmers.SE .

Lorsque vous avez l'occasion d'en créer un dans votre entreprise, vous commencez à le créer. Vous avez quelques problèmes. Certains sont liés au code; vous postez des questions sur Stack Overflow . D'autres sont liés à la base de données; vous posez les questions sur DBA.SE .

Enfin, il y a une conférence organisée par un développeur très compétent sur la façon d'optimiser les ETL. Vous assistez à cette conférence et elle vous donne de précieux conseils sur les améliorations que vous pouvez apporter à votre projet.

Vous commencez également à suivre le blog d'un développeur qui travaillait sur différents ETL depuis des années. Il est intéressant de voir les différentes approches, et à travers ce blog, vous en apprendrez plus sur l'ECCD; vous êtes intéressé, alors vous empruntez le Data Warehouse ETL Toolkit de Ralph Kimball, le livre qui parle en détail du processus "extraire, nettoyer, se conformer et livrer". Le même blog mentionne également de nombreuses applications destinées à créer des ETL sans compétences en programmation. Cela est particulièrement utile pour l'ETL que vous avez fait pour votre entreprise, car votre patron, personne non technophile, vous demande constamment d'apporter de petits changements à ce que vous avez fait.

Découvrir des choses

À mon humble avis, la partie difficile, quand vous n'avez pas de mentor ou un collègue plus expérimenté, c'est de découvrir des choses, et par découvrir, je veux dire passer de l'état "je n'ai jamais entendu parler de cette chose" à "j'ai j'en ai entendu parler mais je ne sais pas très bien ce que c'est ".

Si quelqu'un examine mon code et dit que je devrais vraiment commencer à utiliser certaines conventions de style, avec un peu de curiosité, je peux trouver que dans la programmation, il existe différents styles d'écriture de code, que l'on devrait s'en tenir à un style pour un langage et une base de code donnés, et que de nombreux langages disposent d'outils pour appliquer un style (comme StyleCop pour C #).

Si personne ne me parle du style, comment saurais-je qu'une telle chose existe?

C'est là que les ressources telles que les blogs ou Stack Exchange sont pratiques. Wikipédia n'aiderait pas (sauf si vous passez des jours à frapper des pages aléatoires sur la programmation), et les livres parlent rarement de ces choses.

La même chose s'applique également aux modèles et aux pratiques ou aux choses qui sont moins liées au code. Par exemple, j'imagine à peine un développeur se réveiller le matin en se disant qu'il doit apprendre quelque chose sur ITIL alors qu'il ne l'a jamais aimé auparavant.

Une fois que vous avez découvert un nouveau terme, il est assez facile de l'apprendre. Si vous avez donné un nouveau terme "contrats de code" et que vous êtes un développeur C #, vous pouvez facilement trouver suffisamment d'informations vous-même sur MSDN (ou, mieux, dans le livre de Jon Skeet).

La curiosité aide

Lorsque je travaille avec des stagiaires, je remarque toujours que les meilleurs sont ceux qui étaient curieux en dehors de leurs cours. Ils peuvent savoir qu'il existe une chose appelée programmation fonctionnelle même si aucun de leurs enseignants ne l'a jamais mentionné, et même s'ils ne connaissent aucun langage fonctionnel, ils sont toujours capables d'expliquer en termes généraux ce qu'est la PF et en quoi est-elle différente des autres paradigmes. Ils peuvent connaître Agile, ou Unicode, ou le modèle de confiance partielle / sandbox, simplement parce qu'ils lisent des blogs et utilisent Stack Exchange, plutôt que d'assister simplement à leurs conférences.

Même quand ils n'ont pas de mentor, ils apprennent toujours toutes ces choses qui ne sont pas racontées au collège.

Arseni Mourzenko
la source
Merci pour cette merveilleuse réponse ... L'exemple d'ETL est génial .... Depuis le début de la vie professionnelle, j'ai toujours l'impression que si je travaillais pour une petite équipe et dirigais le projet moi-même, cela me fournirait un aperçu approfondi du développement logiciel et donc peut mieux apprendre les trucs de développement .... Maintenant, je suis dans l'état d'esprit où je pense que je manque les meilleures approches de développement en examinant d'autres projets tels que GitHub, Codeplex .... Ce type de meilleur les approches ne peuvent être apprises que par un développeur expérimenté ou je pourrais l'apprendre moi-même?
Akash KC
@LolCoder: IMO, ces meilleures approches sont plus faciles à apprendre avec un mentor, mais il est toujours possible de les apprendre vous-même à l'aide des ressources que j'ai énumérées dans ma réponse.
Arseni Mourzenko
Merci beaucoup pour cette excellente réponse expliquée ..... Il est temps d'accepter la réponse avec beaucoup de remerciements ......
Akash KC
4

Je suis dans une situation similaire: nous sommes une petite équipe et notre travail de développement de produits de base consiste principalement en des changements incrémentiels sur une base de code qui a quelques années.

Quelques techniques que j'utilise pour rester à jour et améliorer mes compétences.

Au travail:

  • Lire: livres, blogs, matériel de relations publiques. Je suis un certain nombre de flux RSS. Lorsque l'accord O'Reilly du jour porte sur une technologie dont je n'ai pas entendu parler, j'ai lu la description du livre. Si la technologie a beaucoup de rapport avec tout ce sur quoi je travaille, je passe cinq ou dix minutes à la rechercher un peu plus en profondeur, similaire à la réponse de MainMa. Je répète cela avec quelques flux RSS différents.
  • Construisez un plan de formation avec votre direction qui peut être soutenu par les ressources de l'entreprise (temps et / ou argent)
  • Contrairement à la plupart des tendances du programmeur, essayez d'embrasser le changement et les nouvelles options de conception. Changer pour l'amour du changement n'est pas bon , mais je pense que trop souvent les développeurs évitent d'utiliser une nouvelle conception ou un nouveau framework à cause du changement. C'est une ligne fine à parcourir et ne vous précipitez pas dans des décisions contraignantes, mais gardez un œil sur les nouvelles façons de faire les choses. Certains changements peuvent avoir des avantages inattendus: passer au DVCS m'a permis d'expérimenter plus facilement notre base de code et d'y essayer de nouvelles technologies.
  • Certaines personnes aiment les conférences; J'ai trouvé que le gain est faible pour le temps investi.

En dehors du travail:

J'ai constaté que travailler sur mes compétences en dehors du travail quotidien est essentiel. La liberté d'expérimenter, de commettre des erreurs et de poursuivre mes intérêts me maintient engagé dans l'informatique. Si je n'avais que mes projets sur le tas et que je devais limiter mon apprentissage à ce qui était immédiatement utile, je m'épuiserais rapidement.

  • Impliquez-vous dans un projet non professionnel. Pour moi, cela consiste à développer un site Web fonctionnel lié à un intérêt personnel. Je refaçonne librement et j'essaie activement d'expérimenter différentes technologies. Contribuer à l'Open Source vous permettra également de vous familiariser avec le code des autres. Cela vous donnera également du bon matériel à partager pour des entretiens avec l'entreprise qui aura des développeurs plus expérimentés.
  • Camp de code: S'il y a un camp de code dans votre région, assistez. Parce que ceux-ci ne sont pas pendant les heures de travail et sont gratuits, vous vous sentez libre d'assister à toutes les sessions sur des sujets qui vous intéressent personnellement. Par rapport aux conférences typiques, celles-ci sont généralement locales et couvrent de larges pans de technologie, donc je pense qu'il y a une valeur plus concentrée.

Et n'oubliez pas de visiter fréquemment SO ou Programmers.SE.

Jamie F
la source
Merci beaucoup pour la réponse .... L'idée du camp de code est vraiment bonne mais malheureusement, à ma place il n'y a rien de tel .... Maintenant, je vais sûrement m'impliquer dans le projet Open source ....
Akash KC
3

Les réponses ici seront probablement d'une grande aide, mais je voudrais souligner quelque chose: rien ne peut remplacer de travailler avec quelqu'un de mieux que vous (pour des définitions arbitraires et personnelles de mieux) pendant 8 heures par jour, 5 jours par semaine. C'est certain.

Si vous êtes le type de développeur qui veut toujours s'améliorer, veut toujours apprendre, vous devrez éventuellement vous rendre dans une autre entreprise. Cela est inévitable et devrait être planifié.

Lorsque vous trouverez l'entreprise qui vous convient, vous constaterez que vous pouvez continuer à croître en son sein, plutôt qu'en sortir.

Steven Evers
la source
Merci pour la bonne réponse .... Dès le début de la vie professionnelle, j'ai toujours l'impression que si je travaillais pour une petite équipe et dirigais le projet moi-même, cela me fournirait une connaissance approfondie du développement logiciel et donc pourrait mieux apprendre le développement .... Maintenant, je suis dans un état d'esprit où je pense que je manque les meilleures approches de développement en examinant d'autres projets tels que GitHub, Codeplex .... Ce type de meilleures approches ne peut être appris que par expérience développeur ou je pourrais l'apprendre moi-même?
Akash KC
1

Le développement de logiciels est un sport d'équipe. Comme un sport, pour jouer à un niveau très élevé, vous devez être avec et rivaliser avec d'autres qui font de même. Cherchez des occasions de vous déplacer.

N'oubliez pas que la pratique rend permanent, donc si vous ne travaillez pas constamment vers de meilleures techniques et connaissances, si vous travaillez de manière isolée sans critique ni modèle, vous constaterez peut-être que vos compétences ne se développent pas.

Dans le monde entier, les choses deviennent plus compétitives, alors attendez-vous à ce que votre créneau soit temporaire et préparez-vous au genre d'opportunité qui répond à vos critères de travail satisfaisant, tout en vous faisant sortir de votre zone de confort pour travailler avec une équipe supérieure.

DeveloperDon
la source
1

Avant de faire des suggestions, je dois dire que j'étais dans une position très similaire il y a un peu plus d'un an.

Si vous réalisez les projets, mais vous sentez qu'il y a beaucoup d'espace à améliorer, c'est une bonne chose.

À une occasion, je n'avais pas les capacités techniques et la confiance nécessaires pour mener à bien le projet. Souvent, j'achetais un livre, je lisais un blog assez technique et je me retrouvais "hors de ma profondeur". Je pense que le plus gros problème pour moi était le fait que je n'étais exposé à aucune application de grande entreprise. Très souvent, je ferais quelque chose de bien, mais je n'aurais personne à mes côtés pour valider ce que j'ai fait.

C'était démotivant et difficile, donc je vois d'où vous venez. Comment ai-je résolu ce problème? J'ai quitté une entreprise et j'ai rejoint une maison de développement de logiciels bien établie, ce qui m'a aidé à acquérir beaucoup d'expérience au cours de la dernière année.

À moins que vous ne souhaitiez quitter l'entreprise, je vous suggère des livres écrits par les pionniers de notre industrie. Je commencerais par The Pragmatic Programmer d'Andrew Hunt. Le livre contient des tonnes d'analogies utiles qui sont très faciles à retenir. Les premiers chapitres de ce livre m'ont encouragé à choisir un langage de programmation très différent de celui que nous utilisons au travail. J'ai commencé à lire de la littérature non technique - je crois maintenant que la lecture de romans et de science-fiction fera de moi un meilleur programmeur. Écrire des essais n'est pas loin d'écrire du code propre. Certains écrivains sont bons et certains sont mauvais. Ce livre m'a fait me soucier de ce que j'écris. L'une des analogies s'appelle "Broken Windows". Vous laissez une voiture abandonnée dans une rue pendant des jours et rien ne lui arrive. Une fois que vous avez cassé une seule fenêtre, la voiture sera probablement détruite le lendemain. Le code n'est pas différent. Si vous voyez du code cassé ou mal écrit, corrigez-le tout de suite, ne le laissez pas simplement là car tôt ou tard, il reviendra vous "hanter". Une fois que vous aurez commencé à parcourir ce livre, vous découvrirez des dizaines d'analogies similaires qui vous feront penser au code d'une manière différente.

Je vous suggère ensuite de passer au Clean Code de Robert C. Martin. Ce livre est plus pratique car il vous oblige à lire du mauvais et du bon code (propre). L'auteur utilise des échantillons de code de l'un des projets open source. Vous dites qu'il n'y a personne pour vous guider. Il existe une occasion parfaite de regarder le code de quelqu'un d'autre, de le comparer avec le vôtre et de voir comment vous pouvez l'améliorer. Pour moi, lire ce livre, c'était comme suivre quelqu'un qui travaillait sur un projet. Le livre met également l'accent sur la chose la plus simple et la plus difficile - la séparation des préoccupations. L'auteur a demandé aux pionniers de notre industrie ce qu'ils considèrent comme un code "propre". Une fois que vous aurez lu leurs réponses, vous pourrez les comparer à votre propre opinion sur le code propre.

Enfin, avez-vous envisagé de travailler sur des projets open source? Vous collaborerez avec d'autres développeurs, probablement plus expérimentés, qui pourront réviser votre code et vous orienter dans la bonne direction.

Comme je l'ai dit dans ma réponse originale, cela ne se fera pas du jour au lendemain. Je fais cela depuis quelques années maintenant et presque tous les jours, je découvre que je l'ai mal fait.

Bonne chance!

CodeART
la source
1

Entraînez-vous à résoudre des problèmes. Lisez et travaillez pour comprendre le code des autres (github est une excellente ressource pour cela) et soumettez-y des améliorations. Faire du travail de conseil peut vraiment vous aider à élargir vos compétences.

Nathan Pilling
la source