Comment devenir un grand programmeur

par Amy M Haddad

Qu’est-ce qui distingue les très grands programmeurs ?

Photo de David Rangel sur Unsplash

Comme nous le savons tous, les grands programmeurs construisent des fonctionnalités, des sites Web, des applications et autres choses du genre incroyables. Mais qu’ont-ils en commun ?

Dans mes recherches, il ne s’agit pas seulement de connaître très bien un langage ou d’avoir un parcours éducatif particulier. C’est que les programmeurs vraiment talentueux ont maîtrisé les fondamentaux. Cette base est ce qui leur permet de construire de grandes choses et de proposer des idées révolutionnaires.

Pensez à une pyramide. Elle a une grande base, mais devient progressivement plus petite et plus mince vers le sommet. L’apprentissage des principes fondamentaux de la programmation forme cette base. Tout décolle à partir de là.

Alors, quels sont ces fondamentaux ? D’après mon expérience et les programmeurs dont j’ai étudié les antécédents, je vois les fondamentaux de la programmation comme une approche en deux parties.

Problem Solver Extraordinaire

D’abord, vous devez être un résolveur de problèmes efficace. C’est un point de départ important puisque la programmation consiste à résoudre des problèmes.

Bien qu’il existe de nombreuses façons de résoudre un problème, il y a quelques parties du processus qui se démarquent pour moi. Les programmeurs qui sont également de grands résolveurs de problèmes distillent un problème à son essence, afin d’identifier leur objectif global et de commencer un problème avec un but. Ensuite, ils décomposent chaque problème en petites parties gérables – attaquant chaque partie à tour de rôle, et parfois en termes visuels en dessinant une image pour la rendre « du monde réel ».

Le processus est plus difficile qu’il n’y paraît. Lorsque j’ai commencé à programmer, je me suis heurté à un mur : comme beaucoup d’autres, je n’ai jamais appris à résoudre des problèmes à l’école ; c’est une compétence qui ne s’enseigne pas facilement. En cours de mathématiques, on me donnait une série de problèmes et je me lançais, et c’est ce que j’ai fait quand j’ai commencé à programmer. Sans surprise, je tournais inutilement en rond et je me heurtais à des blocages sur les problèmes les plus simples.

Les choses ont commencé à changer lorsque j’ai commencé à apprendre le processus de résolution de problèmes, et comment résoudre efficacement les problèmes. Je commence maintenant un problème avec intention. Je dois remercier le livre de George Polya, How to Solve It, pour ce petit conseil.

J’ai adapté certaines des idées de Polya à la programmation, comme la compréhension du problème. « Le problème doit être compris », écrit Polya. Cela implique d’être capable de « pointer les principales parties du problème, l’inconnu, les données et la condition. » Pour chaque problème, je sors une feuille de papier et j’écris les réponses à ces questions : qu’est-ce que je résous ou essaie de trouver ? (inconnu) ; qu’est-ce qu’on me donne ? (données) ; et quelles sont les contraintes ou les détails dont je dois être conscient ? (condition).

Comprendre le problème peut sembler évident, mais l’évidence est facilement négligée. Plus d’une fois, j’ai consacré des heures à un problème pour me rendre compte bien plus tard que j’avais manqué un petit détail, mais critique, dans l’énoncé du problème. Écrire les détails du problème me ralentit mentalement et m’aide à réfléchir à ce que je dois faire exactement, ce qui est la moitié de la bataille.

À partir de là, je fais un plan, ce qui est une autre des suggestions de Polya. C’est logique. J’écris un plan avant d’écrire un article. Un artiste fait une esquisse de la peinture avant de travailler sur la peinture elle-même. Un constructeur utilise des dessins et des plans pour construire une maison. Il en va de même pour la programmation. Au lieu de me précipiter pour faire, je dois commencer par réfléchir à ce que je me propose de faire et établir un plan d’attaque.

Il y a plusieurs façons de procéder. Parfois, j’expose les étapes que je dois suivre dans un ordre numérique : d’abord faire ceci, ensuite faire cela. D’autres fois, je visualise le problème. Lorsque j’ai appris les boucles for, j’ai sorti une poignée d’amandes et j’ai fait une itération physique dans le tas. C’est un exemple idiot, mais il m’a aidé à réfléchir au problème.

Je vais aussi faire des images ou des diagrammes. Pour un problème récursif, je vais dessiner un diagramme de ce qui se passe à chaque appel récursif jusqu’à ce que j’atteigne le cas de base. Presque toujours, cependant, je trouve un moyen de simplifier le problème pour le rendre plus facile à gérer et pour m’aider à repérer un modèle. Par-dessus tout, l’objectif pour moi est d’entrer dans un problème avec un but, et de maintenir ce sens du but tout au long.

Malgré les plans les mieux faits, les problèmes sont toujours difficiles et je reste toujours bloqué. Devenir un grand résolveur de problèmes prend du temps ; c’est une compétence sur laquelle je travaille encore et qui en vaut vraiment la peine. C’est une différence que vous pouvez voir.

Lorsque je lis du code écrit par un grand résolveur de problèmes, il est propre et facile à comprendre. Les variables sont bien nommées. Les fonctions sont courtes et nettes. Chaque ligne de code a un but spécifique ; les fioritures sont supprimées. La clarté du code reflète le processus de réflexion du programmeur : Je peux lire le programme de haut en bas et savoir exactement ce qui se passe. C’est une grande résolution de problèmes, et c’est ce que je m’efforce d’atteindre.

Et votre ordinateur ?

L’apprentissage de l’informatique est le deuxième fondamental de la programmation. J’ai récemment commencé à apprendre l’informatique, et j’aime ça parce que je vais au-delà du niveau de surface. Je vais « dans les coulisses » pour apprendre ce qui se passe lorsque j’utilise une fonction intégrée, par exemple. J’en apprends également sur la mémoire et le temps d’exécution, parmi de nombreux autres sujets. En bref, j’apprends pourquoi un ordinateur fait les choses qu’il fait.

Savoir le « pourquoi » améliore mes connaissances contextuelles et fait de moi un programmeur plus informé. En conséquence, je suis plus réfléchi avec le code que j’écris. Maintenant que je connais un peu le temps d’exécution, par exemple, j’opterai pour une recherche binaire au lieu d’itérer à travers chaque élément d’une liste.

Cela enrichit également ma compréhension du fonctionnement des concepts de base de la programmation. Par exemple, je travaillais sur un problème récursif et je n’obtenais pas la solution que j’avais prévue. Après un examen attentif, j’ai appris pourquoi : cela avait à voir avec l’exécution de la pile d’appels, une idée qui m’aurait échappé il y a seulement quelques mois.

Ou prendre des cours. J’ai lutté immensément avec les classes pendant le plus longtemps, et j’étais terrifié à l’idée d’en utiliser une. Je savais comment écrire une classe, mais je n’étais pas sûr quand et pourquoi je l’utiliserais. Cela a changé lorsque j’ai appris ce qui se passe réellement dans mon ordinateur lorsque je crée des instances et appelle des méthodes. J’ai fini par comprendre, une fois que j’ai eu un certain contexte. Pour la récursion comme pour les classes, l’informatique a comblé les lacunes de mes connaissances.

Trop souvent, les fondamentaux sont mis de côté. Les progrès peuvent être lents, et les gens ont tendance à choisir des trucs plus « amusants » pour travailler quand on leur donne l’option. C’est une honte. Les programmeurs qui maîtrisent les fondamentaux semblent coder avec confiance : ils savent le « comment » et le « pourquoi » de leurs choix de programmation, ce qui améliore leur travail et renforce leur crédibilité auprès des autres.

Plus, une solide maîtrise des fondamentaux facilite l’apprentissage de nouveaux langages et technologies. Par exemple, prendre le temps de vraiment comprendre les concepts de base comme l’itération, la récursion et l’abstraction avec un langage sera utile lors de l’apprentissage d’un autre. En termes simples, il y a beaucoup à gagner et peu à perdre en maîtrisant les fondamentaux.

Je suis un écrivain (amymhaddad.com), et un programmeur débutant.

Laisser un commentaire