Penser pour être un bon programmeur [fermé]

10

Je programme depuis 15 ans avec un diplôme non-CS. La principale raison pour laquelle je me suis lancé dans la programmation était que j'aimais apprendre de nouvelles choses et les appliquer à mon travail. Et j'ai pu trouver et corriger les erreurs de programmation et leurs causes plus rapidement que les autres. Mais je ne me trouve jamais un gourou ou un expert, peut-être à cause de mon majeur non-CS. Et quand j'ai vu de grands programmeurs, j'ai remarqué qu'ils sont très bons, bien meilleurs que moi bien sûr, pour résoudre les problèmes.

L'une des compétences que j'ai trouvées bonnes au milieu de ma carrière est de penser aux exigences et aux tâches dans un ordre inverse et abstrait. De cette façon, je peux voir ce qui est vraiment nécessaire pour que je me passe de détails et trouver rapidement des parties de solution qui existent déjà.

Je me demande donc s'il existe d'autres compétences de réflexion pour être un bon programmeur. J'ai suivi les questions et réponses ci-dessous et j'ai lu certains des livres recommandés là-bas. Mais je ne pouvais pas vraiment choisir de bonnes méthodes directement applicables à mon travail de programmation.

Quels livres non programmés un programmeur doit-il lire pour développer ses compétences en programmation / réflexion?

/software/44654/skills-and-habits-to-develop-to-be-good-at-programming-im-a-newbie

Tae-Sung Shin
la source

Réponses:

10

Merci pour les pointeurs sur les questions existantes. Les réponses à ces questions sont plutôt différentes de ce que je comprends que vous vouliez. Je vais vous donner quelques suggestions de ma propre expérience. Mon diplôme est en physique, est-ce que je suis arrivé sur le terrain avec des lacunes autour de la formalité, de l'exactitude / vérification, de l'analyse des algorithmes, de la programmation dynamique, des systèmes de base de données et, dans une large mesure au début, de la sélection des structures de données et des algorithmes. Les lacunes les plus évidentes (par exemple, les structures de données et les algorithmes), j'ai fermé tôt mais je lis toujours des livres dans ce domaine, pour approfondir ma compréhension, voir des présentations alternatives et rafraîchir ma mémoire. (J'ai environ 40 ans, donc les livres fonctionnent pour moi :)

Voici une liste de lecture (dans aucun ordre particulier autre que l'ordre qui leur est venu à l'esprit).

  1. Programmation des perles (Jon Bentley)
  2. Plus de perles de programmation (Jon Bentley)
  3. L'art de la programmation informatique (Donald Knuth)
  4. Algorithmes en C ++ (Robert Sedgewick)
  5. Le manuel de conception d'algorithmes (Steven Skiena)
  6. La pratique de la programmation (Kernighan et Pike)
  7. Éléments de programmation (Stepanov)
  8. Comment le résoudre (Polya)
  9. Structure et interprétation des programmes informatiques (Abelson et Sussman)

J'ai aussi beaucoup tiré parti de l' écriture de code solide lorsque je l'ai lu au milieu des années 90. Mais ce n'est pas dans la liste car il n'a pas vraiment de lien avec les compétences de réflexion en tant que telles (il s'agit plus de concevoir des API pour minimiser les risques d'utilisation incorrecte accidentelle - ou du moins, c'était ma principale conclusion).

J'ai aussi beaucoup tiré parti de Gödel, Escher, Bach (Hofstadter) à l'adolescence, mais c'est déjà mentionné dans les réponses aux questions que vous avez déjà posées. C'est un livre à lire pour le plaisir, plutôt que directement pour développer ses compétences en informatique.

Je travaille avec un assez grand nombre de programmeurs talentueux et, presque universellement, ils sont fans de Programming Pearls . Je souhaite certainement que davantage de candidats que j'ai interviewés aient lu le chapitre 4 de ce livre.

James Youngman
la source
4

Première; pour une discipline donnée, il y aura toujours quelqu'un de bien meilleur d'une manière ou d'une autre. Ne vous inquiétez pas pour cette partie.

Alors; un diplôme CS est agréable et tout cela, et les connaissances théoriques qu'il vous donne sont certainement utiles, mais cela ne signifie nullement que quelqu'un est un bon programmeur. Certains des meilleurs programmeurs sont autodidactes, et croyez-moi, le monde est plein de diplômés CS qui ne pouvaient pas programmer leur sortie d'un sac en papier humide. Alors ne vous inquiétez pas non plus pour cette partie.

Quant à ce qu'il faut pour devenir un bon programmeur: je pense que deux choses sont essentielles. La première est que vous devez être en mesure d'aborder les problèmes de manière strictement formelle et de penser à un certain niveau d'abstraction. Si vous comprenez les pointeurs et la récursivité, vous êtes probablement bon sur ce front. L'autre est le dévouement et la persévérance. Comme tout autre métier, la programmation prend des dizaines de milliers d'heures de pratique dédiée et ciblée à maîtriser, cela ne se fait pas du jour au lendemain. Il faut au moins dix ans pour atteindre la maîtrise, d'une manière ou d'une autre. Si vous êtes passionné, mettre les heures, se concentrer et trouver de nouveaux défis sera facile; si vous ne l'êtes pas, je suppose que c'est toujours possible, mais ce ne sera pas une balade agréable.

tdammers
la source
2

Rappelez-vous chaque fois que vous commencez à apprendre le langage de programmation. Apprenez d'abord le concept et testez-le immédiatement, cela signifie le faire pratiquement une fois que vous faites cet exercice, vous n'oublierez pas les concepts et son utilisation.

Ensuite, la "pratique parfaite" est bien connue et elle s'applique également ici en programmation. Plus vous jouez avec le code, exécutez le code, lisez le code existant pour le corriger, vous ne deviendrez pas un bon programmeur mais gr8.

Chitrank Dixit
la source
0

Il y a deux livres hors programmation qui, je pense, sont cruciaux.

Le premier est "Lady or the Tiger", de Raymond Smullyan. Il s'agit d'un grand ensemble de puzzles logiques qui comprend sournoisement une sorte de tour de la théorie des automates. Des trucs chouettes.

Le second est "Godel, Escher, Bach: An Eternal Golden Braid" de Douglas Hofstadter, qui vous fait réfléchir sur la récursivité et la théorie du langage.

Si vous voulez de bonnes habitudes pour un débutant, lisez "Modèles d'apprentissage" par Hoover et "Le nouveau manuel de survie des programmeurs" par Carter. Ces deux livres expliquent comment développer vos compétences et comment développer votre carrière. Ils adoptent des approches différentes, mais ils fonctionnent bien ensemble.

philosodad
la source
0

Je suis intéressé par la façon dont vous évaluez les compétences des autres programmeurs.

Je pense que des connaissances spécifiques et applicables créent des résultats beaucoup plus impressionnants que les compétences générales. Si vous avez déjà beaucoup de contexte et que vous avez peut-être déjà vu des problèmes similaires auparavant, vous pourrez peut-être trouver la cause d'un problème très rapidement. Si vous savez déjà comment utiliser un ensemble d'outils applicables, vous pourrez peut-être créer des solutions très rapidement. Si vous ne possédez pas déjà ces connaissances, mais que vous possédez les compétences nécessaires, il vous faudra plus de temps pour acquérir les connaissances dont vous avez besoin. Si c'est le cas, vous prenez plus de temps pour parcourir plus de distance, ce qui ne signifie pas nécessairement que vous êtes plus lent.

Bien sûr, si vous pouvez acquérir des connaissances et apprendre à utiliser des outils qui vous aideront plus tard, cela vous donnera un avantage. Je trouve qu'apprendre un peu sur une grande variété de sujets aide ici, car ils finissent par se chevaucher plus que ce à quoi je m'attendais, et juste savoir où chercher les informations dont vous avez besoin peut gagner beaucoup de temps. Mais c'est peut-être juste moi.

Vincent Povirk
la source
0

Vous aimez apprendre de nouvelles choses et pouvez corriger rapidement les erreurs. Cela signifie que vous avez les deux éléments clés pour devenir un gourou: l'enthousiasme et la capacité. Mais vous pensez que vous ne vous trouvez jamais un expert, peut-être avez-vous besoin de deux choses de plus: la concentration et le temps. Par exemple, lorsque Linus Torvalds a sorti Linux pour la première fois en 1991, personne ne le considérait comme un gourou. Il travaille toujours sur Linux tous les jours et vous pouvez voir son journal de fusion depuis le référentiel Git du noyau Linux de nos jours. Son objectif fait de lui le gourou le plus célèbre dans le domaine Linux. Le temps est un concept abstrait, cela signifie se tenir à jour, acquérir de l'expérience grâce à une pratique constante, partager ses connaissances avec d'autres personnes et s'améliorer avec le recul.

J'ai la même situation avec toi. Je programme depuis 15 ans avec un diplôme non-CS (degré EE), et je suis toujours confus par mon énorme écart avec le gourou dans mon domaine. Mais j'ai le rêve de devenir un gourou et j'ai commencé à participer à un projet open source. Les compétences de réflexion proviennent de la pratique et de l'expérience. Certains livres peuvent être utiles, mais leur signification est principalement pédagogique. Les capacités de réflexion qui vous appartiennent proviennent de votre propre expérience. Commençons à partir de maintenant!

Apprenez tous les jours
la source