La capacité à résoudre des problèmes est-elle la compétence la plus importante qu’un programmeur doit avoir ? Si oui, pourquoi la plupart des livres de programmation informatique ne se concentrent pas sur cette compétence ?


Les compétences en résolution de problèmes sont très importantes pour la programmation. Notez que les compétences de résolution de problèmes ne sont pas'les mêmes que, disons, travailler des puzzles Sudoku ou travailler des casse-têtes. La résolution de problèmes est ce qui vous fait passer de "Quelque chose ne va pas mais je'suis pas sûr de quoi" à "OK, tout'fonctionne maintenant."

Les compétences en résolution de problèmes sont particulièrement nécessaires lors du débogage. Brian Kernighan souligne que le débogage est au moins deux fois plus difficile que la programmation. Et que faites-vous pendant que vous déboguez ? De la résolution de problèmes. Vous'passez de "Mon programme ne'fonctionne pas et je'ne sais pas pourquoi" à "Mon programme'fonctionne correctement."


Mais voici'le truc : à part certaines techniques spécifiques au domaine comme l'utilisation d'un débogueur ou d'assertions ou autres pour circonscrire un bug, la résolution de problèmes elle-même n'est pas une compétence spécifique à la programmation. Vous apprenez généralement des stratégies de résolution de problèmes en faisant, et aucun cours ne va faire les choses pour vous. Vous devez résoudre les problèmes vous-même.

Maintenant, certains disent que les compétences de résolution de problèmes ne peuvent'tre enseignées. Je ne suis pas d'accord. Bien sûr, elles ne seront't être enseignées dans un cours magistral avec un tableau blanc et un devoir à la maison sorti d'un livre de texte. Certaines compétences, comme le raisonnement de base et la déduction, peuvent être enseignées de cette façon, bien sûr. Mais il'y a beaucoup de subtilités au-delà de cela.

Ces subtilités peuvent être captées au fil du temps, en contexte. C'est là qu'un bon mentor peut vous apprendre pas mal de choses. Si vous'êtes bloqué sur un problème, mais que vous avez un bon mentor, il peut pousser votre processus de pensée dans la bonne direction à vous permettre de résoudre quand même le problème. C'est le moment de prêter attention (a) à la façon dont vous êtes resté bloqué et (b) aux idées qui vous ont permis de vous en sortir. Si vous en tirez des enseignements, félicitations, vous avez amélioré vos compétences en matière de résolution de problèmes. Maintenant, lavez, rincez, répétez.

Mon diplôme est en génie électrique. Tout en obtenant mon baccalauréat's, j'ai eu un total de 9 semestres de cours de laboratoire. 5 laboratoires d'EE, et 4 laboratoires de sciences. Les cours d'EE comptaient 2 heures de crédit chacun si je me souviens bien ; les laboratoires de sciences comptaient pour 1 heure de crédit chacun en plus du 3CR pour le cours magistral. Donc, plus de 10 % de mes heures de crédit provenaient des laboratoires.

Et que vous apprennent les laboratoires ? Ostensiblement, ils aident à renforcer le matériel en vous faisant mettre en œuvre une expérience ou un projet qui emploie les principes. Mais, à moins que vous'soyez extraordinairement chanceux, vous'passerez une quantité significative de temps à comprendre pourquoi la théorie ne'correspond pas tout à fait à la pratique. C'est là que vous pouvez vraiment affiner vos compétences en résolution de problèmes, souvent en apprenant des TA du laboratoire qui étaient là il n'y a pas longtemps eux-mêmes.

En programmation, ce'est pas différent, autre que plus de code, moins de fils. Vous avez besoin de programmer. Vous avez besoin de vous mettre par-dessus la tête et d'apprendre à sortir de l'eau et à nager jusqu'au rivage.

La programmation n'est pas différente.