En repensant à ma carrière et à ma vie en tant que programmeur, il y avait de nombreuses façons d'améliorer mes compétences en programmation - lire du code, écrire du code, lire des livres, écouter des podcasts, regarder des screencasts et plus encore.
Ma question est: quelle est la chose la plus efficace que vous ayez faite pour améliorer vos compétences en programmation? Que recommanderiez-vous à d'autres qui souhaitent s'améliorer?
Je m'attends à des réponses variées ici et pas de réponse unique "taille unique" - je voudrais savoir ce qui a fonctionné pour différentes personnes.
J'ai essayé d'appliquer une bonne technique de programmation à un langage tel que TI-83 + BASIC.
Il est facile de se laisser entraîner dans les marathons de codage. Il est essentiel de prendre du recul de temps en temps, de voir comment d'autres personnes ont mis en œuvre des projets similaires.
Lisez des livres écrits par d'excellents auteurs. Parcourez des livres tels que "C: A Programming Language", "The Perl CookBook", ou l'un des meilleurs pour vos langues préférées. Lisez les problèmes qu'ils résolvent, ne regardez pas les exemples de code, écrivez-les vous-même, puis comparez votre code avec le leur. Découvrez pourquoi le leur/le vôtre est meilleur.
Utilisé différents cadres, IDE, systèmes d'exploitation et langages. En général, si vous n'êtes pas confus, vous ne grandissez pas. La mauvaise chose n'est pas d'être médiocre. La mauvaise chose est d'être médiocre quand vous pensez que vous êtes génial.
Lecture de nombreux livres et articles ..
Lisez plus de livres et écrivez plus de codes.
Je pense que la chose la plus importante pour moi a été lorsque j'ai pris du recul par rapport à la mise en œuvre et commencé à regarder l'ensemble, à mieux comprendre l'architecture, les modèles, les processus, l'analyse des exigences, etc.
Je suis sûr que cela ne fait que réitérer les commentaires précédents:
1: Lisez le code de nombreuses langues. Comprendre comment la langue gère une situation donnée. Cela peut vous éclairer davantage dans la langue que vous cherchez à améliorer.
2: Équipes ... Débat sur les pratiques de programmation, les approches, les tests, la planification, la mise en œuvre, etc.
3: Utilisez ce qui précède pour vous concentrer sur un plus petit ensemble de langues.
4: N'assumez jamais votre droit à 100%, alors vous n'aurez aucune raison de remettre en question quoi que ce soit.
travailler avec des gens beaucoup plus intelligents que moi
Utilisez votre ordinateur et comprenez-le bien.
Écrivez le code pour tout ce que vous pensiez pouvoir.
Lisez le bon code et apprenez à écrire. Lisez le mauvais code et apprenez à ne pas coder.
Il y a beaucoup de choses mais ce qui suit a eu un grand impact sur le fait de faire de moi un meilleur programmeur
1) Pendant les journées universitaires, j'étais en compétition continue avec un camarade de classe très talentueux pour créer le meilleur jeu/programme jugé par d'autres camarades de classe. C'était comme 2 petites start-ups se battant pour des parts de marché.
2) Lire "Deep C secrets"
3) Participer à des projets Open Source où des gens intelligents peuvent commenter votre code.
Lorsque vous programmez seul, il est très facile de supposer que les choses qui vous viennent le plus facilement ou qui vous semblent les plus évidentes sont donc les meilleures. Cependant, lorsque vous êtes en contact actif avec un groupe d'autres personnes bien informées (en particulier celles qui ont plus d'expérience que vous), vous trouverez probablement de nombreux problèmes que vous n'avez jamais envisagés et des solutions à ces problèmes qui ne vous sont peut-être pas venus à l'esprit non plus. Il vaut beaucoup mieux apprendre de l'expérience de quelqu'un d'autre que de commettre ses propres erreurs et, ce faisant, foirer un projet important (de votre choix ou de celui de votre employeur). Si vous pouvez apprendre ces choses de vos pairs avant de les affronter vous-même, vous pouvez éviter de nombreux premiers faux pas qui surprennent la plupart des programmeurs. Il est possible de devenir programmeur avec une expérience junior mais une compréhension du développement logiciel par un senior si vous prêtez suffisamment attention à ce que font d'autres personnes plus expérimentées.
La chose la plus utile que j'ai faite a probablement été de passer quelques années à lire régulièrement des forums en ligne tels que comp.lang.c, comp.lang.c ++ et comp.lang.Java (quotidiennement ou au moins une fois par semaine), et participer aux discussions du forum. (Le jour où je fréquentais activement les forums, la plupart d'entre eux étaient sur Usenet. Maintenant, ils ont tendance à s'associer à des sites Web spécifiques et à des communautés de développeurs.)
Dans des groupes de discussion actifs comme ceux-ci qui attirent un grand nombre de développeurs professionnels (et en particulier des développeurs professionnels de haut niveau, tels que les auteurs de langage et les implémenteurs de bibliothèques importantes), il est beaucoup plus facile de savoir quelles techniques de programmation sont jugées utiles. versus découragés, et quels langages de programmation, outils et bibliothèques sont en faveur ou en désaccord. En outre, il est utile de prêter attention aux techniques de génie logiciel utilisées par d'autres professionnels, allant des systèmes de contrôle de version aux langages de modélisation visuelle, aux méthodologies de programmation, etc. Apprendre quels domaines sont controversés est également important - Regarder un débat prolongé entre deux développeurs expérimentés de haut niveau avec des points de vue nettement différents peut être une expérience extrêmement éducative.
Vous constaterez peut-être après un certain temps que votre langue ou votre approche de programmation préférée n'est pas aussi universellement appréciée que vous le pensiez au départ, et vous constaterez peut-être que vous commencez à envisager des alternatives - c'est bien! Cela signifie que vous commencez à devenir plus nuancé et plus réaliste au sujet de vos croyances (plutôt que d'adopter simplement la dernière mode) et, espérons-le, à élargir vos horizons pour inclure différentes façons de faire les choses.
Passez un peu de temps à y penser, plutôt qu'à le faire.
c'est à dire
Apprendre une nouvelle langue par an a été formidable (même si j'ai appris 3 langues l'année dernière seulement). Je préfère toujours le C++, mais connaître différentes façons de résoudre les choses a amélioré mes compétences en codage de nombreuses façons. Cela et j'ai une série de "Katas" ou de petits objectifs de codage que je continue à essayer sur mon temps libre, en leur appliquant chaque fois mes nouvelles connaissances.
Travaillez avec les personnes les plus intelligentes possible et posez-leur des questions. N'ayez pas peur de demander.
Quelqu'un devrait créer un site Web pour ce faire ... ;-)
Participer plusieurs fois à Concours de programmation ICFP .
Il n'y a pas d'autre compétition de programmation comme ça! Chaque fois que j'ai beaucoup appris . Surtout en travaillant dans une équipe avec des gens beaucoup plus intelligents que moi.
J'ai lu K & R2 pour la 2ème fois. Et puis relisez-le une troisième fois.
De retour à l'école élémentaire, je voulais créer un faux écran de connexion qui volerait les mots de passe du PC de bureau de mon père. C'était juste un script batch qui s'exécutait sur MS-DOS et il n'y avait rien d'extraordinaire. Ensuite, au lycée, j'ai continué à écrire de simples virus de macro MSWord parce que je trouvais fascinant de pouvoir "personnaliser" MSWord à mon goût.
Les compétences en programmation que j'ai acquises à l'époque n'étaient que des effets secondaires sur la réalisation de quelque chose que j'ai trouvé fascinant.
Il n'y a pas une seule pensée à laquelle vous pouvez penser pour l'améliorer. c'est une compétence apprise. cela vous rendra meilleur par la pratique. Par pratique, je ne veux pas dire d'un seul attribut. les attributs les plus importants auxquels je peux penser sont 1. Écrire du code 2. Appairer ou collecter des persapactifs de différents ppl (activité comme codage dojo - http://www.codingdojo.org/ ). 3. révision du code
Travailler en programmation par paires avec un programmeur de plus de 50 ans qui est un expert de Smalltalk. Nous programmions en Java, mais j'ai vraiment beaucoup appris sur la conception orientée objet et les techniques de débogage.
La programmation en binôme avec un mentor expérimenté est quelque chose à recommander, tant que nous gardons un esprit ouvert.
Travailler avec des gens plus intelligents que moi (pas si dur) et être curieux de savoir comment tu fais les choses. La lecture aide beaucoup, mais vous devez être capable de trouver votre propre façon de résoudre les choses.
Travailler avec d'autres personnes a été la seule chose qui a fait exploser mes compétences. J'ai commencé à apprendre de leurs échecs. :)
coder beaucoup n'ayez pas peur d'apprendre de nouvelles choses
Je sais que la plupart d'entre elles ont été mentionnées précédemment, mais je les réitérerai car elles ont fonctionné pour moi.
1) La chose la plus importante est de s'intéresser à ce que vous faites. Si cela vous intéresse, vous êtes à mi-chemin. Rien ne tue plus votre désir de travailler/s'améliorer que le désintérêt.
2) Trouvez quelqu'un dans votre organisation qui est plus intelligent/meilleur/plus rapide que vous et absorbez autant de connaissances et d'expertise que possible. Cela s'applique à toute personne, junior/senior/etc. Les titres d'emploi n'ont aucun sens pour moi. J'ai vu des développeurs de niveau "junior" qui avaient beaucoup plus d'expertise/connaissances que ceux supposés de niveau senior.
3) J'ai fait de mon mieux pour suivre mon propre code de codage. Écrivez, lisez, analysez, révisez, discutez. Une fois que vous avez écrit votre code, relisez-le. Est-il maintenable? Est-il bien commenté? A-t-il l'air de faire ce qu'il devrait? Dans ce cadre, vous devez analyser le code. Est-ce la meilleure façon de procéder? Pourrait-il être amélioré de quelque façon que ce soit? Apportez des modifications en conséquence. Ensuite, passez en revue, testez-le. Fait-il ce qu'il devrait? Fait-il quelque chose qu'il ne devrait pas faire? Faites de votre mieux pour essayer de casser votre code. Une fois que vous en êtes satisfait, discutez de votre code avec les autres. Quelle est leur opinion à ce sujet? Est-ce qu'ils sont d'accord ou pas avec vos décisions? Ont-ils d'autres idées sur ce qui aurait pu être fait pour l'améliorer?.
4) Soyez toujours prêt à apprendre de nouvelles choses et/ou idées.
Couverture 100% des tests unitaires.
Faire des tests unitaires a vraiment amélioré ma programmation.
Mais l'utilisation d'un outil de couverture de code pour mesurer la couverture du test unitaire l'amène à un autre niveau.
Un bon exemple est de prendre un module et d'essayer de faire une couverture de test unitaire à 100%.
Vous pourriez même faire une compétition amicale avec vos collègues en prenant chacun un module et voir comment obtenir la couverture la plus élevée.
-
A commencé à enseigner la programmation et la conception de programmes. J'étais surtout désemparé de OO jusqu'à ce que j'enseigne un cours de première année Java cours et un cours de génie logiciel de niveau junior).
Utiliser mon cerveau, au lieu de marteler du code inutile. Code une fois, code correct.
J'ai trouvé que lire Code Complete 2 de Steve McConnell d'un bout à l'autre (et essayer de suivre la plupart de ses conseils) a considérablement amélioré mes compétences en programmation, d'autant plus que je n'ai pas l'avantage de travailler avec d'autres programmeurs dans une grande entreprise. .
De plus, pratiquer un bon design (expliqué dans le livre) et analyser le design des autres est important pour aller dans la bonne direction, en termes de compétences.
Je pense que la chose la plus efficace que j'ai faite est de me forcer à utiliser différents langages et outils alternatifs sur des projets basés sur ce qui convient le mieux. IOW J'ai essayé de regarder les capacités de la langue pour voir si elle correspond mieux à l'un de mes choix standard. Cela m'a obligé à apprendre et à utiliser divers outils en fonction de leurs mérites individuels.
J'essaie TRÈS difficile de ne jamais fourrer les chevilles carrées dans les trous ronds quand il s'agit de mon style de programmation. Nous avons de nombreuses langues disponibles car il existe de nombreuses façons de faire les choses. Plus je peux comprendre d'autres styles, mieux c'est!
Une façon d'améliorer les compétences en programmation consiste à apprendre différents domaines d'activité et comment les logiciels sont utilisés pour résoudre les problèmes dans ces domaines. Par exemple, si vous travaillez uniquement sur des applications Web d'entreprise, vous pouvez acquérir une connaissance approfondie du HTML, du CSS et des bases de données relationnelles, mais pas nécessairement avoir la possibilité de maîtriser des concepts tels que la concurrence ou la programmation graphique 3D.
Écrivez une application non triviale dans plusieurs langues/systèmes. J'ai écrit une application de pool de paris en VB6, LISP commun, Java/jsp, Java/spring/struts, Rails, grails et Django. Je l'écris maintenant en Ruby/cacao OSX
Chaque implémentation est différente. Et j'ai appris comment les systèmes diffèrent les uns des autres.
Travailler avec un ensemble diversifié de programmeurs plus expérimentés et intelligents.
Les gens qui disent "il suffit d'écrire du code" sont à courte vue. J'ai vu beaucoup de projets où quelqu'un "vient d'écrire du code". Cela ne donne à personne un aperçu des bonnes habitudes et de la programmation pratique, ni n'aide à développer de solides compétences dans les parties secondaires du codage. Spécifications, documentation, faire clairement passer les idées.
La lecture de la source de tout logiciel (open-source) est brillante et importante dans votre domaine d'expertise.
Apprendre et apprécier différents paradigmes de programmation (par exemple OO n'est pas la réponse à tout)
Écriture de bibliothèques/composants plutôt que de "systèmes" monolithiques, apprentissage de la valeur de la conception d'interfaces, de la documentation, de la simplicité conceptuelle.
Programmation avec au moins une autre personne (expérimentée), idéalement dans un environnement de programmation extrême. Débattre des approches alternatives aidera à hacher les avantages et les inconvénients de chacun.
Écrivez beaucoup de code comme beaucoup l'ont déjà écrit ici.
Mais, écrivez tellement que vous ne voulez pas en écrire plus, obtenez paresseux en gros, la première des trois grandes vertus .
"La brièveté est l'âme de l'esprit" - Shakespeare
J'ai vu une énorme amélioration après avoir commencé à apprendre comment les autres (les meilleurs programmeurs) codent. L'une des choses que j'ai faites a commencé à regarder des vidéos "Comment faire" par les experts/gourous de toute technologie qui m'intéresse.
Je vois un grand avantage dans les vidéos d'apprentissage par rapport à la lecture d'un livre. Ne pas ignorer le fait que la lecture de livres est également un excellent moyen. Mais les vidéos sont plus interactives, rapides et font une bonne impression visuelle (c'est si les vidéos sont bonnes)
Les podcasts techniques, dnrtv sont mes autres favoris. Lisez ceci fil SO.
J'ai toujours une liste de "petits" projets en tête. Chaque fois que je pense à un "il doit y avoir ...", je le range pour une utilisation future. Ensuite, chaque fois que je rencontre une technologie qui semble intéressante et que je veux jouer avec, je compare ses fonctionnalités à ma liste de projets. Si l'on semble être en bonne forme, je pars pour les courses.
Cela me permet d'avoir toujours quelque chose de plus pratique que "Hello, World!" vers lequel travailler.
Je pense qu'il est important d'améliorer vos compétences en travaillant sur un projet qui vous aime vraiment
et il est important de partager vos connaissances avec les autres.
sur l'autre site, vous devez effectuer des recherches sur un sujet sur lequel vous devez en savoir plus.
Enfin, travailler sur un projet open source m'a été très utile en tant que programmeur.
En fait, la programmation dans un but. Une fois que j'ai commencé à travailler et à écrire des programmes qui seraient réellement utilisés par les utilisateurs et non pas simplement remis pour une note, j'ai commencé à mieux comprendre l'impact de mes programmes. J'ai pu voir la situation dans son ensemble.
Faire de l'informatique fondamentale et apprendre que c'est pareil. Tout se résume aux mêmes concepts et tout est construit sur des machines logiques et de turing, et vous pouvez le faire tout de même.
Appliquer OOP à Assembly and Digital Logic est amusant ...
Quand j'ai commencé à écrire du code qui avait l'air "beau" et très propre, mes programmes ont commencé à fonctionner presque au premier lancement, avec très peu de bugs. S'il y a des bogues, ils ont tendance à être très faciles à trouver.
Je recherche donc simplement la simplicité, la propreté et la beauté. :-)
N'écrivez jamais de code de manière "intelligente" ou complexe. Écrivez aussi propre et lisible que possible, et les programmes fonctionnent et sont facilement maintenables.
Lire de bons livres comme Effective C++. Remarquez que j'avais déjà programmé en C++ pendant plusieurs années, mais ce n'est que lorsque j'ai commencé à lire un bon C++ et d'autres livres de programmation que j'ai ressenti un bond des connaissances, ce qui s'est traduit par devenir un meilleur programmeur.
Faire beaucoup de revues de code avec le principe que je n'ai pas fini la revue jusqu'à ce que j'aie trouvé au moins une pièce à critiquer.
Soit dit en passant, dans de nombreux cas, pour pouvoir faire une telle révision de code, je devais m'asseoir à côté de l'auteur d'origine et leur demander de m'expliquer le code ligne par ligne jusqu'à ce que je le comprenne. Si vous avez la chance d'être invité à réviser le code de grands programmeurs, vous augmenterez rapidement vos compétences également.
Pour la maîtrise de la langue, creuser à travers l'API de base et écrire du code qui utilise chaque méthode/classe. Cela a 2 avantages:
lire, travailler avec les autres et en général entrer et jouer avec :)
Tout ce qui vous encourage à écrire plus de code. Je travaille actuellement sur Project Euler pour améliorer mes compétences, mais j'ai aussi beaucoup appris au cours de la dernière année, simplement en regardant la base de code avec laquelle je travaille au travail. De plus, lire plus de livres ne fait pas de mal, bien qu'il soit préférable de se concentrer sur ceux en génie logiciel jusqu'à ce que vous sachiez dans quelles langues vous voulez réellement programmer.
1) J'ai fait beaucoup d'erreurs et j'ai appris d'elles en demandant aux autres ou en lisant
1) Avait un mentor
2) J'ai écouté beaucoup de podcasts puis lu les sujets dont j'ai entendu parler
3) Programmation jumelée
4) Examiner les projets open source pour le style et les techniques (et enquêter sur des pièces que je ne comprenais pas)
Écrire du code non seulement à mon travail mais aussi à la maison. Cela m'a donné le temps que je n'ai pas au travail pour découvrir des choses très intéressantes et utiles.
Copie douloureuse des échantillons imprimés de magazines informatiques dans les années 1980. Ligne par ligne. Seulement pour comprendre qu'il y avait une erreur quelque part.
En général, lire les échantillons d'autres personnes et les modifier; trouver des bogues en eux; extrapoler d'eux.
En passant de l'équipe, j'étais programmeur principal à une nouvelle équipe qui s'occupe d'une technologie très différente dont je ne sais rien.
Et puis je recommence après 2 ans.
A écrit un compilateur Scheme en C. Non seulement ai-je dû apprendre Scheme à l'intérieur et à l'extérieur, mais j'ai tout appris sur les compilateurs, comment le code est exécuté sur le matériel, comment fonctionnent les ramasse-miettes, entre autres.
Comme beaucoup d'autres l'ont dit, écrivez BEAUCOUP de code et assurez-vous d'apprendre des langages de quelques styles différents. Par cela, je veux dire ne vous limitez pas aux langues qui sont similaires. Par exemple, si vous connaissez Java alors l'apprentissage de C # ne sera pas trop difficile car il y a pas mal de similitudes (garbage collection automatique, etc.) mais l'apprentissage de c ++ après Java ou C # s'améliorera vos compétences beaucoup plus car si vous oblige à penser votre application différemment. Apprenez également à utiliser l'outil approprié pour le travail. Il est inutile d'écrire une simple transformation de fichier dans Java quand vous pouvez faire la même chose avec la moitié du code en Perl ou avec des outils standard comme awk
Faire des choses qui étaient un défi pour moi a le plus aidé
Dans mon expérience:
Travailler sur une variété de technologies et de programmes. La clé est de continuer à essayer de nouvelles choses, donc je suppose que la seule chose est de me mettre au défi de faire des choses que je n'ai pas faites!
J'ai lu Effective Java par Josh Bloch. Du jour au lendemain, j'étais un meilleur programmeur.
Beaucoup de gens ont dit de programmer, et je suis d'accord. Plus précisément, j'aime:
1) Faites des compétitions de programmation! Je viens de faire mon premier cet été et ça valait vraiment la peine (même si j'avoue, je ne l'ai pas fait de façon phénoménale). Cela vous oblige à travailler rapidement sur des problèmes intéressants. Google Code Jam est excellent pour cela.
2) Écrivez des algorithmes que je connais bien (les sortes sont géniales pour cela) dans des langues que je viens de comprendre en utilisant les fonctionnalités utiles de cette langue pour le faire. Il ne suffit tout simplement pas d'écrire un tri impératif en ML lorsque l'élégance vient de le faire fonctionnellement.
3) Parlez aux gens qui AIMENT des langues particulières de POURQUOI ils aiment ces langues. Plutôt que de choisir un côté dans le débat Perl/Python, je préfère parler à une personne de chaque côté de la raison pour laquelle ils aiment leur langue de prédilection et saisir les bits utiles pour référence future.
4) Lisez les blogs techniques. Vous en apprendrez beaucoup sur les différentes langues en lisant les blogs des personnes qui les connaissent. Bien sûr, cela s'applique à beaucoup plus que la programmation.
Bien sûr, ces choses ont tendance à faire plus pour faire de vous un meilleur programmeur et peuvent ou non vous aider avec le génie logiciel.
lire des articles de recherche [ACM, IEEE] sur des sujets qui vous intéressent
essayez de résoudre des problèmes difficiles; même si vous échouez, vous en tirerez des leçons
Compris mon style d'apprentissage (ou peut-être mon trouble d'apprentissage.)
J'ai découvert qu'écouter les gens parler est le moyen le plus difficile pour moi d'apprendre. Les cours, les podcasts et les vidéos sont donc le moins bon moyen d'apprendre et je ne perds pas mon temps à les essayer même si je peux l'aider. Je suis bien meilleur pour apprendre en lisant. J'ai donc acheté et lu beaucoup de livres et d'articles Web. (Vous savez. Un peu comme ce site.)
Tout comme il existe plus d'une façon de résoudre un problème, il y a plus d'une façon d'apprendre. Optimiser ce qui fonctionne pour moi a été le meilleur moyen pour moi d'améliorer mon métier.