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?
Réponses:
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.
la source
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:
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.
Et n'oubliez pas de visiter fréquemment SO ou Programmers.SE.
la source
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.
la source
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.
la source
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!
la source
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.
la source