Quelle est la chose la plus efficace que vous avez faite pour améliorer vos compétences en programmation?

876

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.

Oded
la source
18
Pratique, pratique, pratique. Et ne soyez jamais satisfait de la première chose qui vous vient à l’esprit.
Mark Ransom
2
+1 pour Mark Ransom ... La difficulté vient lorsque vous n'êtes toujours pas satisfait de la centième chose qui vous vient à l'esprit!
Stimul8d
5
Ne pas perdre mon temps sur le site de Programmers Stack Exchange m'a aidé à améliorer énormément mes compétences en codage.
Job le
3
@ Mark Trapp en quoi cela n'est-il pas constructif?
Droitier
1
@WTP - Lisez la description. "Cette question ne convient pas à notre format de questions-réponses." - en tant que personne qui a posé cette question, je suis d'accord. Il a été demandé à des moments plus détendus.
Oded

Réponses:

753

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. ;)

cranley
la source
41
Je sais que cela semble vraiment gratuit et potentiellement une prostitution de réputation, mais si vous sépariez ces points en un par réponse, les gens pourraient voter avec lesquels ils sont d’accord, ce qui permet une "solution" plus précise du vote final.
117
Regardez comment les gens intelligents gèrent les erreurs - c'est là que j'ai le plus à apprendre d'eux
82
s'il s'agit d'une liste dans un ordre particulier, ne devrait-elle pas être une liste non ordonnée plutôt qu'une liste ordonnée? : P
Jon W
3
Je suis d'accord avec mmyers - ce n'est pas parce que vous êtes en désaccord avec quelqu'un que vous les ignorez. En fait, c'est l'inverse - pour ne pas être d'accord avec eux, vous leur prêtez attention.
Cristián Romo
15
Je ne suis pas en désaccord avec tout ce que Joel dit, je pense qu'une grande partie du temps, il a des choses intéressantes à dire. Mon commentaire était la langue dans la joue. Je suis d'accord avec Joel pour beaucoup de choses, mais environ une fois par mois, il me fait secouer la tête et me demande "Quoi? Es-tu sérieux ?!". Ce que j'aime, car je trouve que ce sont les choses les plus difficiles qui me forcent à vraiment vérifier ma position et ce que je crois.
557

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.

Craig Trader
la source
224
"Homme de tous les métiers, maître de tous, bien que souvent meilleur qu'un maître de l'un." -Adam Savage
jms
9
Excellent conseil, en hausse voté. La "technologie orpheline" de mon passé était mon Atari 8 bits, qui avait perdu face au C64. Je suis cependant parvenu à la même conclusion: pour citer Heinlein, "la spécialisation est destinée aux insectes".
17
Il y a toujours des compromis à faire et il ne reste que 86 400 secondes dans une journée. Vous devrez décider de la façon dont vous voulez les dépenser. Dans mon cas, j'ai choisi de passer des heures supplémentaires (au-delà de mes heures de «travail») pour apprendre des choses que je pensais être intéressantes ou qui allaient être en demande à l'avenir; vous devrez faire vos propres choix.
Trader Craig
74
"La spécialisation est pour les insectes." - Heinlein
Kelly S. French
31
Où est votre badge "Généraliste"? ^^
Arnis Lapsa le
459

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.

Ville Laurikari
la source
54
Cela fonctionne généralement dans les deux sens. En tant que "Aaron", je suis maintenant entré dans quelques entreprises et j'ai constaté qu'une fois que les autres codeurs étaient sous tension, ils commençaient à me donner de l'argent et à m'encourager à redoubler d'efforts. Très bonne publication!
28
+1 pour "Aaron a toujours parlé de la façon dont je ne devrais jamais m'arrêter à la première version opérationnelle, mais refactoriser et affiner jusqu'à ce que le code soit élégant"
17
"ne jamais s'arrêter à la première version de travail" ??? - Quand es-tu censé faire le reste de ton travail? :)
4
J'ai essayé d'être Aaron, parfois ça marche, mais parfois je me trompe. "Ceux qui ne peuvent pas apprendre de l'histoire sont condamnés à le répéter." Il est bon de garder l'esprit ouvert à de nouvelles idées, mais il est mauvais d'écouter ceux qui ont déjà commis les erreurs pour vous. Tout le monde a besoin de scepticisme, car nous apprenons en posant des questions sur nous-mêmes et sur les autres.
27
Le problème est que trop de gens pensent qu'ils sont "Aaron"
cinqoTimo
257

Deux choses:

  1. Lire le code écrit par différentes personnes.
  2. Ecrire la documentation pour le code écrit par d'autres personnes.

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.

Swati
la source
42
ET l'un des meilleurs moyens d'apprendre ce qu'il ne faut pas faire :)
AviD
9
Vous pouvez voir comment ils font quelque chose. Peut-être le font-ils mieux que vous?
4
J'ai dû puiser dans un projet très ancien et totalement non documenté, le documenter, y corriger quelques bugs et le transférer vers un nouveau système. J'ai beaucoup appris et tout n'était pas ce qu'il ne fallait pas faire. Bien que j'ai appris la valeur des commentaires.
Et pendant que vous écrivez la documentation, écrivez peut-être quelques cas de tests unitaires (s'ils n'existent pas). Ensuite, vous saurez également comment utiliser le code.
Dhable
Tellement vrai que c'était la partie la plus difficile de mon travail depuis longtemps.
199

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.

Ken
la source
30
Le triste fait que la majorité des gens n'exercent pas ou même ne s'étirent pas de façon régulière est un énorme problème dans le monde d'aujourd'hui.
Sneakyness
5
J'étendrai ceci, si je peux, à n'importe quelle excursion physique. Parfois, quand je n'ai pas fait beaucoup de travail manuel pendant un moment, je commence à avoir envie de fatigue physique. C'est un peu roman quand on est tellement habitué à être mentalement drainé et ça vous aide à sortir lorsque vous pensez vous-même en rond.
Stimul8d
1
oui c'est le gros problème aujourd'hui. Nous n'avons pas le temps, surtout au Pakistan, où les heures de travail sont beaucoup plus
longues
2
+1 pour me rappeler de faire plus d'exercice.
SingleNegationElimination
Je trouve qu'un sport est une grande motivation - pour moi, c'est le basket-ball.
Adel
181

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.

utilisateur13276
la source
4
Je suis d'accord. Mettre les mains dans le cambouis dans un projet a probablement été le plus gros contributeur à mon amélioration. ; )
Mike Grace
1
Exactement. Le meilleur moyen de devenir un meilleur codeur est de coder. Vous pouvez apprendre tout ce que vous voulez dans les livres, les podcasts et les collègues, mais vous devez l’appliquer avant de bien le comprendre. Code plus, et code plus de choses différentes. Parce que vous apprenez peu en répétant le même vieux tour.
Choisir des projets stimulants et intrigants à faire. Je pense que la lutte pour surmonter en dehors de votre zone de confort accélère vraiment vos compétences. Ils ne sont pas allés sur la lune parce que c'était facile.
Kim Jong Woo
172

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.

Bill le lézard
la source
1
Je peux en témoigner.
1
Un instructeur à l'université m'a parlé de l'ouverture quand j'étais encore étudiant. Je suis resté près d'un an (à temps partiel) après avoir obtenu mon diplôme.
Bill the Lizard
29
Comme l'écrit Douglas Adams dans "Holistic Detective Agency" de Dirk Gentley: "Le mieux est d'essayer de l'expliquer à quelqu'un d'autre. Cela vous oblige à régler cela dans votre esprit. Et plus votre élève est lent et sombre, plus plus vous devez décomposer les choses en idées de plus en plus simples. "
2
Trop vrai. Enseigner la photographie fait de moi un meilleur photographe. Pas beaucoup d'un codeur tho :(
gars de CAD
9
mutuo ista fiunt, et homines dum docent discunt - Seneca
135
  1. 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).

  2. 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

callingshotgun
la source
Je ne peux qu'être d'accord; "projet animal dans une langue précédemment inconnue" est bon, je peux confirmer
Très bonne suggestion d'apprendre quelque chose de familier à moitié.
Excellente suggestion "quelque chose que vous avez l'expérience + quelque chose que vous n'avez pas"! Merci
sica07
J'ai besoin d'un animal de compagnie maintenant.
Adel
118

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. .

poisson de pêche
la source
16
Je dois te voter juste pour ramener de merveilleux souvenirs! Peut-être que j'ai même déchiré un peu :)
Charlie Flowers
3
Je traduis encore mentalement C / C ++ en langage assembleur 68K. C'est incroyable de voir comment cela vous aide à écrire du code efficace pour n'importe quelle plate-forme.
Bob Murphy
1
Ah, le 6502, ramène de bons souvenirs. J'ai tellement appris avec l'assembleur sur cette puce.
5
CHAQUE étudiant en programmation devrait avoir une connaissance approfondie de l'assembleur au début de ses études!
2
J'ai fait la même chose en tant que jeune. Il a vraiment appris le fonctionnement des ordinateurs, plus que ne le permet une langue de haut niveau.
CAD bloke
110

En regardant les vieilles choses que j'ai écrites et en réalisant à quel point elles étaient mauvaises.

Grant Johnson
la source
Je soutiens que ... je peux à peine lire certaines de mes vieilles affaires.
Unkwntech
28
Quand je passe en revue mes vieilles affaires, je ressens un besoin presque irrésistible de supprimer tout le fichier. Parfois tout le répertoire.
Christopher Mahan
+1 pour l'objectivité. Examiner votre ancien code ne vous dira pas comment vous améliorer, mais seulement si vous avez amélioré et comment - ou inversement, si vous ne l'avez pas fait.
J'ai fait ceci - j'ai écrit tout l'interprète de script dans VB6, je l'ai écrit sur deux ans; il pouvait faire des fenêtres, gérer leurs événements, etc. Il était devenu si grand et incontrôlable que je ne pouvais plus rien ajouter sans tout casser. C'était la dernière chose que j'ai écrite avant d'abandonner la programmation de livres sur la programmation. Maintenant je suis bien meilleur ouf . En relisant ce projet monstre, je réalise à quel point je suis loin.
Carson Myers
3
@ Christopher Mahan: Et dans les très mauvaises occasions, tout le volume.
Thanatos
93

Lis

  • des livres, pas seulement des sites Web
  • pour l'amélioration personnelle, pas seulement pour le dernier projet
  • sur l'amélioration de votre commerce, pas seulement sur la dernière technologie
  • Lire le code, pas seulement que vous travaillez.

Il suffit de développer l'appétit pour la lecture.

lamcro
la source
2
De plus, je commençais à me demander où était ce choix.
Thanatos
87

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.

Fishtoaster
la source
8
Si vous voulez vous améliorer, il n'y a rien de mieux que de le faire.
Jeff Siver le
4
+1 - Cela me rappelle Finding Forrester : "La première clé pour écrire, c'est ... pour écrire"
Wizard79
2
Il n'y a pas d'autre réponse. Vous ne pouvez pas vraiment savoir que vous savez ce que vous faites tant que vous n'avez pas écrit un tas de code non trivial et que vous vous en êtes tenu au bout de quelques itérations de produit avec les gars de l'entreprise et les clients. Vous ne savez pas / vraiment / quelle est la qualité de votre code jusqu'au moment de le modifier pour répondre aux nouvelles exigences.
Blucz
1
La meilleure chose que j'ai faite pour améliorer ma programmation a été d'obtenir un emploi.
Matt Ellen
1
Je suppose que la question implique "en dehors de la programmation" ...
UncleZeiv
81

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.

Christopher Cashell
la source
7
Et il a probablement moins de compétences parce que certaines de ses connaissances sont devenues obsolètes ..
72

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.

baudtack
la source
11
un mélange des deux est en fait ce qui fonctionne le mieux pour moi; lire le code d'autres personnes et le refactoriser pour le rendre plus lisible est un excellent exercice
Bien lire le code bien sûr ... et le comprendre. Et le modifier, ou écrire des tests pour cela.
4
Lire du code est intéressant, mais il ne vous échappe pas tant que vous ne le faites pas.
Vous devez le faire pour l'apprendre. C'est comme faire du vélo ...
70

Pair-programmé avec des gens très divers et d'opinion

Frontières de la santé
la source
La seule "expérience" que j'ai avec la programmation en binôme est le temps que j'ai pour aider mes collègues. Je programme beaucoup plus heureux quand il y a une autre personne avec moi pour discuter des problèmes que je rencontre et comment je vais les résoudre.
Mhitza
67

Les choses de base qui m'ont aidé en tant que programmeur:

  • Appris Toucher Taper.
  • J'ai appris à surmonter la timidité et à poser des questions.

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.

Nasir
la source
15
Toucher La frappe est la compétence la plus importante. Les plus grands crimes en matière de programmation ont été commis par ceux qui essayaient de sauver quelques frappes au clavier.
5
Cela bat toutes les autres réponses, à mon avis. Taper vous fait gagner beaucoup de temps, ce qui signifie que vous pouvez passer plus de temps à saisir le code et à l’essayer. Cela signifie que vous pouvez taper les exemples dans un livre au lieu de simplement hocher la tête, de passer à autre chose et d'oublier. Vouloir être programmeur avec hunt-and-peck revient à vouloir être pianiste de concert en chatouillant les ivoires avec les pieds.
Kyralessa
2
J'ai vu des gens frapper 15 flèches pour récupérer une commande à 2 caractères. Assez triste. C'est comme des enfants sans IDE ... complètement incompétents.
7
Pour être contraire, je n'ai jamais appris à toucher au type. J'ai essayé d'apprendre une fois, mais j'ai tout de suite commencé à ressentir de la douleur dans les poignets. Les poser sur le bureau pour prendre les bonnes positions des mains faisait pression sur le très important canal carpien. Je pense donc que mon choix a au moins des avantages ergonomiques. Et cela fait si longtemps que je ne jette un coup d’œil que par intermittence sur le clavier, donc pas de perte de productivité réelle. De toute façon, je ne passe pas la plupart du temps à saisir des caractères, mais à lire du code et à trouver le meilleur moyen de résoudre les problèmes lorsqu'ils se présentent.
Eloff
2
Les positions des mains ne sont pas importantes - l’important est que vous puissiez taper sans avoir à regarder. Sur mon ordinateur portable, je ne repose pas mes poignets.
56

Contribuer à / participer à des projets open-source était de loin la plus grande chose pour moi.

utilisateur13643
la source
53

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.

  1. É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.

  2. 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.

typicalrunt
la source
Vrai. Vous pouvez tester votre version finale (jusqu'à maintenant) en laissant un groupe de personnes que vous savez être non techniques l'essayer et entendre leurs commentaires (en étant sûr de choisir celles qui ne diront pas "c'est bien!", Car cela ne vous aide pas du tout.)
48

Schéma appris.

évêque
la source
Ouais, c'était le grand pour moi aussi. La dactylographie au clavier et la programmation par paire étaient également significatives.
46

Écrire du code et beaucoup de celui-ci.

Oded
la source
Nous commençons tous à écrire du code merdique. Si vous écrivez assez et que vous y travaillez, vous irez mieux. Les examens de code aident, mais le meilleur moyen consiste à examiner votre propre code.
Lecture du code et beaucoup de celui-ci.
Stefan
3
Lire et écrire beaucoup de code ... L'open source est une aubaine pour nous;)
Oded
45

Apprendre les expressions régulières.

Vhaerun
la source
Je viens de le faire il y a quatre mois, lorsque j'ai commencé à apprendre le perl! Ma capacité à utiliser vim et unix dans le ciel général a explosé! Incroyable.
Sixtyfootersdude
Les expressions régulières ne sont pas seulement utiles, elles vous amènent également à penser différemment.
Tikhon Jelvis
+1 Complètement d'accord. Je suis surpris de surprendre les gens en faisant souvent des choses assez basiques dans vi, sed ou grep.
39

Concurrence dans les concours d'algorithmes TopCoder .

Paul Reiners
la source
14
Je trouve TopCoder un peu problématique. Bien, cela vous permet de mieux penser aux algorithmes, mais vous êtes obligé de travailler avec un style incorrect (tout le code d'une classe) et sous la pression du temps, vous ne pourrez donc probablement pas commenter et tester. Peut-être que Project Euler est le meilleur choix.
3
Vous n'êtes pas obligé de travailler avec un mauvais style; vous pouvez avoir autant de cours que vous le souhaitez. En outre, vous feriez mieux de tester si vous voulez réussir de manière cohérente, car une solution qui échoue dans un cas unique ne génère aucun point.
2
@hstoerr - sans oublier le fait que les concurrents sont récompensés pour avoir rendu leur code difficile à lire (leur solution est plus difficile à contester)
Shane Fulmer
7
(désolé si cela semble offensant) Je trouve des gens qui n'aiment pas Topcoder (ou d'autres concours similaires) qui tentent d'inventer les raisons pour lesquelles ils feront de vous un mauvais programmeur. C'est ok si vous ne les aimez pas. Mais inventer des raisons fallacieuses n’est pas utile à mon humble avis. Aucun concurrent sérieux à TC ne dissimule intentionnellement du code (c'est en fait un motif de disqualification s'il est attrapé). Je vois beaucoup de gens qui ne concurrencent pas écrivent du mauvais code tout le temps. Les concours d’algorithmes n’ont pas pour objectif d’enseigner de bonnes habitudes de codage (apprenez-le ailleurs), mais visent plutôt à enseigner / développer quelque chose de beaucoup plus profond.
MAK
2
TopCoder est un moyen de vous montrer à quel point vous pourriez devenir meilleur.
38

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.

Magsol
la source
36

Quitte mon dernier travail.

mihn
la source
2
moi aussi! (besoin de plus de caractères ...)
6
Si vous pouviez nous dire pourquoi, cela pourrait même être une réponse. ;-)
2
Soutenir un projet réalisé avec un framework interne (basé sur EJB2) n'était pas mon idée du plaisir. Pas de nouvelles choses, juste de la merde. Et la perspective d'un nouvel emploi n'est pas meilleure. :(
mihn
Été là, fait ça.
Allbite
+1 Bonne chance pour décrocher un emploi qui ne soit pas une impasse.
Tomek Szpakowicz le
29

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.

Bill K
la source
29

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.

Qui sont ces gens "ils" et où "vivent-ils"?

Harold Bamford
la source
28

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.

kabado
la source
28

Constamment apprendre et pratiquer ce que vous apprenez.

Au moyen de:

  1. 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.

  2. 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.

Brian R. Bondy
la source
10
+1 pour mentionner des livres. Une grande expérience ne vaut pas grand chose si tout est dépensé pour faire les choses de la mauvaise façon.
mbillard
27

C'est généralement mon ordre chronologique d'apprentissage de toute nouvelle technologie:

  1. 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.

  2. 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 .

  3. 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)

  4. 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.)

  5. 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. :-)

rpattabi
la source
24

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.

Rob
la source