Si je regarde ma carrière et ma vie de programmeur, j’ai amélioré mes compétences en programmation de différentes manières: lire du code, écrire du code, lire des livres, écouter des podcasts, regarder des screencasts, etc.
Ma question est la suivante: quelle est la chose la plus efficace que vous ayez faite pour améliorer vos compétences en programmation? Que recommanderiez-vous aux autres qui veulent améliorer?
Je m'attends à des réponses variées ici et à aucune réponse unique - je voudrais savoir ce qui a fonctionné pour différentes personnes.
Réponses:
Sans ordre particulier ...
Travailler avec des gens bien plus intelligents que moi
Toujours à l'écoute de ce que les autres ont à dire, qu'ils soient junior, intermédiaire, senior ou gourou. titre du travail ne veut rien dire.
Apprendre d'autres frameworks / langages et voir comment ils font les choses, et comparer cela à des choses que je connais déjà
Lire sur les modèles, les meilleures pratiques, puis examiner mes anciennes données et les appliquer si nécessaire
Programmation en binôme
En désaccord avec tout ce que dit Joel. ;)
la source
Décider D' être un « Jack-de-tout »
Assez tôt dans ma carrière, j'étais un expert d'une base de données et d'un langage de programmation particuliers. Malheureusement, cette base de données en particulier a perdu les «guerres de bases de données» et j'ai découvert que mes options de carrière étaient ... limitées. Après cela, j’ai consciemment décidé que je ne me laisserais plus jamais encaisser ainsi. J'ai donc étudié tout ce que je pouvais mettre sous la main: Windows, Unix, C, C ++, Java, C #, Perl, Python, Access, SQL Server, Oracle, Informix, MySQL, etc. Quels que soient les outils nouveaux ou inhabituels, je est devenu le "va-à-gars" - "Demandez à Craig, s'il ne le sait pas, il l'apprendra." En conséquence, j'ai travaillé sur toutes sortes de projets, des systèmes intégrés pour la télémétrie environnementale aux systèmes de commande et de contrôle pour la défense antimissile.
Le seul problème que j’ai jamais eu, c’est avec des entreprises qui tiennent absolument à ce que je devienne une spécialité, alors que ma spécialité est la généraliste. [EDIT: Également appelé Polymath ou Man Renaissance ou multi-spécialiste. ]
Il faut garder à l'esprit… quelle est la demi-vie de la connaissance dans la haute technologie? Il suit la loi de Moore: la moitié de tout ce que vous savez sera obsolète dans 18 à 24 mois. Un expert qui choisit la mauvaise discipline peut facilement être mis à mal par la technologie. un généraliste n'a qu'à ajouter quelques compétences supplémentaires et à se souvenir des leçons du passé pour appliquer ces compétences.
la source
J'ai toujours pensé à moi-même comme à un très bon programmeur. Puis un nouveau gars, appelez-le Aaron, a été embauché dans notre équipe. Aaron était évidemment bien meilleur que moi dans la plupart des domaines. Il était plus jeune que moi aussi. Il m'a fait comprendre que je n'avais pas beaucoup progressé ces dernières années. J'étais un pirate informatique ad-hoc et médiocre.
Cela m'a mis en garde d'essayer consciemment de m'améliorer et surtout la qualité du code que j'écris.
Aaron m'a amené à apprendre beaucoup de choses. Il m'a appris que la plupart du code que j'écris devra être maintenu et étendu pendant au moins plusieurs années. Je devrais donc écrire le code dans cet esprit. Je devrais écrire des tests automatiques pour mon code. Aaron parlait toujours du fait que je ne devrais jamais m'arrêter à la première version de travail, mais refactoriser et affiner jusqu'à ce que le code soit élégant. J'ai découvert que les langages et les outils que j'utilisais laissaient beaucoup à améliorer.
La chose la plus importante que j'ai apprise d'Aaron est de ne jamais cesser d'apprendre.
Après quelques années, Aaron a quitté la société. Je me sentais vide. Les années passées avec lui m'avaient amené à de nouveaux niveaux de compétence et je me suis rendu compte que j'étais maintenant bien meilleur que le reste de l'équipe. Ils écrivaient toujours du mauvais code et faisaient les mêmes erreurs qu'auparavant. J'ai essayé de leur apprendre, mais ils n'avaient aucun intérêt à apprendre. En fait, ils étaient ennuyés que quelqu'un soit si arrogant pour leur dire quelles erreurs ils faisaient.
Ainsi, quelques mois plus tard, j'ai également quitté l'entreprise. J'ai déménagé dans une petite entreprise avec une équipe très talentueuse. Tout le monde voulait en savoir plus et j'ai adoré.
Je suis content d'avoir rencontré Aaron. Sans lui, je travaillerais probablement encore dans l'ancienne société avec le vieux gang, n'irais nulle part et penserais trop à moi-même.
la source
Deux choses:
L'écriture de code est extrêmement facile. toutes les autres personnes que je connais peuvent le faire. Mais lire le code de quelqu'un d'autre et comprendre ce qu'il faisait était pour moi un tout nouveau monde.
la source
Frapper la gym régulièrement.
Sérieusement, mon cerveau fonctionne beaucoup mieux quand je suis en forme. Les problèmes deviennent plus faciles et moins accablants, faire des bêtises est beaucoup moins tentant, et travailler étape par étape ne semble pas une tâche aussi ardue.
la source
Programmation. Travailler sur des projets intéressants. Il n'y a rien comme entrer et travailler sur des choses. Surtout sous pression. Je dis toujours à tous ceux qui me demandent comment programmer - il suffit de trouver un projet intéressant (même si vous devez l'inventer) et de travailler dessus.
la source
A pris un emploi à temps partiel comme tuteur chez des étudiants CS de mon université. Cela vous oblige vraiment à comprendre quelque chose à un niveau complètement différent lorsque vous devez l'expliquer à quelqu'un d'autre.
la source
Je suis un grand fan du système "Apprendre un langage de programmation chaque année". Une année vous donne assez de temps pour dépasser le biais "d'accord, je connais la syntaxe, donc maintenant je connais le langage" et vous oblige à aller un peu plus loin et à comprendre ce qui est bénéfique dans cette langue, et à programmer dans un style natif de ce langage (je veux dire par là, vous ne finissez pas par écrire des applications Java en utilisant la syntaxe Ruby). Chaque langue changera votre façon de penser en matière de programmation. Je savais utiliser la récursivité, mais penser en récursivité ne se faisait pas avant de suivre un cours de prologue (j'imagine qu'un langage fonctionnel comme ML aurait le même effet).
Démarrer un projet d'animal de compagnie. Mon équation personnelle pour un bon projet de compagnie est: quelque chose que vous avez + d'expérience que vous ne trouvez pas = une application que vous jugeriez utile. Par exemple, Migratr (mon propre projet contenant de la caféine et devenu un projet en cours) a débuté sous le nom "Je sais c #, mais je n'ai jamais codé contre une API Web. Et je souhaite transférer toutes mes photos vers Zooomr". Cela aurait tout aussi bien pu être "J'ai déjà codé contre des API Web, mais je ne connais pas le C #"
Publier le projet de votre animal de compagnie est une expérience éducative extraordinaire en soi. Tout à coup, pratiquement rien n’est enseigné, mais tout le monde est censé le savoir (c’était pour moi de mettre en place votre propre système de test, de tirer le meilleur parti des systèmes de contrôle de version, de savoir comment vous tenir au bon moment quand personne ne fixe vos délais, comment utilisateurs et comment savoir quand dire "non" aux demandes de fonctionnalités), tout cela ressort en surface et vous oblige à vous auto-éduquer à un niveau que vous n'étiez pas auparavant - du moins pas en lisant inutilement des warwars sur dzone avantages / inconvénients de la façon de faire les choses "foo" vs "bar".
Faire ces deux choses couvre les deux extrémités du spectre. Apprendre une nouvelle langue fera de vous un meilleur codeur. Le projet animal de compagnie fera de vous un meilleur développeur: P
la source
M'a appris le montage. Est-ce que c'était sur une vieille puce 6502 quand j'avais 13 ans? 14? Il y a trop longtemps. Mais je ne peux penser à rien qui puisse améliorer votre développement davantage que de descendre au niveau de bits.
Apprendre en assembleur vous donne un aperçu de la façon dont les ordinateurs «pensent» à un niveau fondamentalement inférieur et l'élégance à ce niveau est surprenante ... il n'y a pas de mouvements perdus, pas de "destruction" de données. Développer à ce niveau vous apprendra l'efficacité et affinera votre esprit critique et vos compétences en logique. Cela vous guérira aussi de toutes les habitudes bâclées que vous aurez assez rapidement!
La puce 65xx avait trois registres (l'accumulateur, X et Y) et aucune instruction de niveau machine pour multiplier ou diviser. Je me souviens d'avoir codé une routine pour calculer les dommages au combat, avoir parcouru le livre et m'être soudainement rendu compte que je devrais écrire ma propre bibliothèque de mathématiques. J'ai passé quelques semaines à gribouiller les 1 et les 0 partout dans mon cahier, à essayer de comprendre ce que «diviser» et «décimales» signifiaient vraiment.
J'ai étudié le C ++, pascal, le .NET, beaucoup d'autres depuis ... mais aucun d'eux ne m'a appris autant, ne m'a autant intrigué, ni ne m'a laissé le sentiment de "wow" que l'assemblage de mon ancien client a fait. .
la source
En regardant les vieilles choses que j'ai écrites et en réalisant à quel point elles étaient mauvaises.
la source
Lis
Il suffit de développer l'appétit pour la lecture.
la source
Programmation.
Sérieusement, il y a des livres, il y a des katas de codage, il y a des sites comme celui-ci, mais je pense que le meilleur moyen de s'améliorer en tant que développeur est de travailler sur de vrais projets, avec de vrais clients instables, avec des exigences toujours changeantes et une véritable ingénierie. problèmes. Il n'y a pas de substitut à l'expérience.
la source
Je pense que la chose la plus importante que vous puissiez faire est de faire un effort conscient d’amélioration. Il n'y a pas de solution miracle, vous devez continuer à rechercher de nouvelles sources d'informations, de nouvelles expériences et davantage de pratique.
Et la deuxième chose la plus importante, pensez à ce que vous faites, pourquoi vous le faites et comment vous pouvez le faire mieux. Même chose avec les projets précédents. Examinez ce que vous avez fait et voyez comment vous pourriez le faire différemment maintenant. Pensez à ce qui aurait pu être mieux fait, ou dans lequel vous pourriez encore l’améliorer.
Je vois deux excellents exemples de cela au travail tous les jours. J'ai un collègue qui aime apprendre et veut être le meilleur développeur possible. Il utilise tous les temps d'arrêt pour lire des blogs, lire des livres, discuter de techniques de programmation et poser des tonnes de questions. Il s'est également très nettement amélioré l'année dernière. Un autre collègue fait son travail et le fait assez bien. Mais c'est tout ce qu'il fait. Il s'en tient à ce qu'il sait, ne fait pas beaucoup d'efforts pour s'améliorer, ne travaille sur aucun projet en dehors de celui en cours et, au bout de 4 ans, il a exactement les mêmes compétences et la même capacité de programmation que lors de ma rencontre. lui.
la source
Beaucoup de gens ont suggéré d'écrire du code. Je dois dire que lire le code des autres est beaucoup plus bénéfique.
la source
Pair-programmé avec des gens très divers et d'opinion
la source
Les choses de base qui m'ont aidé en tant que programmeur:
Taper pour un programmeur est essentiel. Tout le monde a eu un collègue "programmeur" qui a tapé avec exactement deux doigts et a dû regarder le clavier pour tout. Pas drôle. Apprendre à saisir du texte améliore considérablement votre productivité en tant que programmeur.
Et si tu ne demandes pas, personne ne te le dira.
la source
Contribuer à / participer à des projets open-source était de loin la plus grande chose pour moi.
la source
Vous pouvez lire tous les livres, le code et les projets open source que vous aimez, mais vous devez comprendre l'aspect utilisateur final du développement logiciel. Vous devez sortir de la chambre d'écho. Je vais donc aborder quelques points non techniques qui aideront votre carrière technique.
Éloignez-vous du clavier, interagissez avec l'utilisateur final et voyez, à travers leurs yeux, comment ils utilisent le logiciel. Les utilisateurs finaux ne sont généralement pas des techniciens. Ils considèrent donc le logiciel comme un travail magique, alors que vous le voyez comme un ensemble logique d'étapes. Les deux mondes sont complètement différents. Donc, ce qui vous semble facile et logique peut sembler cryptique et intimidant pour les autres.
Tester, tester, tester. Une grande partie des logiciels que j'ai vus dans de grandes entreprises utilisent des scénarios de test. Enfer, ils utilisent JUnit, xUnit et tous les autres langages de tests unitaires. Mais le problème que j'ai constaté est que la plupart des programmeurs ne voient jamais à quoi ressemble leur logiciel dans Production. Découvrez comment les utilisateurs (ou les systèmes, s’il s’agit de travaux par lots), interagissent avec votre application, votre bibliothèque ou votre interface pour déterminer le type d’information déplorable qu’ils lui transmettent. Cela vous aidera à générer de bons tests et à cesser de supposer que votre programme sera toujours alimenté avec le bon jeu de données.
la source
Schéma appris.
la source
Écrire du code et beaucoup de celui-ci.
la source
Apprendre les expressions régulières.
la source
Concurrence dans les concours d'algorithmes TopCoder .
la source
Faites tout votre possible: créez votre propre projet, vos jalons, vos ressources, vos dépendances, vos exigences et votre plan de tests. Cela vous obligera non seulement à améliorer vos compétences en programmation afin de fonctionner avec des paramètres spécifiques, mais servira également à mettre en évidence les domaines où vous avez le plus besoin d’être améliorés. Faites des mises à jour régulières sur vos progrès, que ce soit par le biais d'un blog ou de mises à jour de projets plus formelles, afin que vous puissiez voir exactement où vous êtes allé et où vous souhaitez aller.
la source
Quitte mon dernier travail.
la source
Je pense que remettre en question constamment ce que vous faites est la chose la plus importante. Ne pensez jamais que votre code est parfait, efforcez-vous toujours de l'améliorer.
Il semble que j'en ai eu 2 ou 3 fois quand je pensais que mon code était parfait, puis je me suis rendu compte que j'avais un long chemin à parcourir.
Je suppose que la chose la plus importante a été lorsque j'ai commencé à voir mon code lui-même consommé par d'autres programmeurs et non par une machine. Il est facile d’écrire du code que votre machine peut traiter, mais il est difficile d’écrire du code compréhensible et sec.
Et je ne parle pas seulement de comprendre "qu'est-ce que cette ligne fait", je veux dire qu'il est trivial de comprendre "comment cette classe s'intègre-t-elle à toutes les autres classes" tout en rendant l'interface de classes si bien formée que c'est pratiquement impossible en abuser.
la source
Ils disent que 70% du bon code est la vérification et la gestion des erreurs. Quand j'ai commencé à programmer de cette façon, mon code s'est beaucoup amélioré. Penser à ce qui peut mal se passer et le gérer immédiatement a fait une énorme différence. Il se sent comme faire tout ce que le contrôle est tout simplement de prendre le chemin d'obtenir la mise en code et en cours d' exécution, mais il raccourcit le temps du début à la fin par un facteur de 2 à 4.
la source
Mes compétences en codage se sont beaucoup améliorées lorsque j'ai commencé à me demander avant de mettre en œuvre quelque chose, comment vais-je documenter cette chose ?
"Chose" ici devrait avoir toute la granularité possible. De la méthode au produit entier. Par exemple, au niveau de la méthode, cela empêche d'ajouter dans l'API une méthode qui ne correspond pas ou qui n'est pas claire avant de l'écrire. Et si j'ai vraiment besoin d'implémenter une méthode que je ne peux pas documenter (facilement), c'est un signe qu'il y a un problème de conception quelque part ...
Automatiquement, l'attitude " si je ne peux pas l'expliquer, je ne l'écris pas " filtre le mauvais code et inversement, une fois que je sais comment documenter correctement une chose, elle devient plus simple et plus propre à mettre en œuvre.
la source
Constamment apprendre et pratiquer ce que vous apprenez.
Au moyen de:
Projets personnels: Depuis que j'ai commencé à programmer, je réalise des projets personnels. Qu'il s'agisse de petits jeux, du traitement d'images, de la stéganographie, de la mise en œuvre de spécifications de type de fichier, de la mise en œuvre de divers protocoles à partir de zéro ou de la mise en œuvre de divers programmes au fil du temps.
Lecture de livres: j'ai décidé de lire et de suivre divers livres pendant mon temps libre. Il existe de nombreux livres bien rédigés par des experts qui ne demandent qu'à être lus. La profondeur que vous pouvez obtenir d'un livre est inégalée, par exemple en lisant divers messages du forum.
la source
C'est généralement mon ordre chronologique d'apprentissage de toute nouvelle technologie:
Lisez régulièrement de bons blogs (Atwood, Martin Fowler, etc.), restez au courant de l'actualité technologique, suivez des informations sur les nouvelles technologies intéressantes. Ces étapes me laisseront décider si je trouve quelque chose d'intéressant à explorer davantage.
Lisez le bon livre ou toute autre ressource à apprendre pour votre niveau (par exemple, pour les débutants, si vous souhaitez apprendre les modèles de design, je suggérerais «Head First Design Patterns»). J'ai aussi des préférences spécifiques pour les livres .
Déployez un projet de jouet ou deux en utilisant ce que j'ai appris. Je ne m'inquiète pas de l'utilité du projet. Mon intention est simplement d'exploiter mon apprentissage. (par exemple, un projet de calculateur pour la POO serait bien)
Je verrais si je pouvais utiliser les choses au travail . (Par exemple, bien que nous n'utilisions pas subversion au travail, je l'utilise comme référentiel local, mais j'utilisais Ruby pour une tâche qui serait autrement trop monotone et longue.)
C’est la meilleure partie que la plupart des gens ignorent. Sessions de partage de connaissances .Par exemple , donnez une ou deux séances à d’autres membres de l’équipe. Je crois que l’enseignement est l’un des meilleurs moyens d’apprendre réellement la technologie. Je vous garantis que votre niveau de compréhension de la technologie deviendra multiple, que votre public le comprenne ou non. :-)
la source
Pirater un projet open source pendant quelques mois; le plus grand sera le mieux. Lorsque vous interagissez avec des personnes aux opinions très diverses et géographiquement diverses qui ne vous connaissent pas, vous ne pouvez pas vous empêcher de tirer des leçons de vos erreurs beaucoup plus rapidement - je pense que c'est un certain facteur de gêne. De plus, si vous identifiez une ou deux personnes vraiment intelligentes, vous pourrez alors en tirer des informations précieuses, voire des connaissances pures.
la source