Devrais-je poursuivre l’informatique si je suis mauvais en mathématiques ?


Il y a deux questions différentes ici, et deux problèmes différents pour chaque question. Ceux-ci ont besoin de déballage.

Les questions, comme plusieurs personnes l'ont déjà souligné, sont le besoin de mathématiques pour la programmation et pour l'informatique. Les enjeux, pour chaque question, sont de savoir si l'on a besoin des maths pour obtenir un diplôme dans le domaine et pour pratiquer dans le domaine.


Pour l'informatique, la réponse est assez simple. L'informatique est une discipline académique qui dépend fortement de divers types de mathématiques : probabilités et statistiques, logique, etc. Vous n'irez pas loin dans cette discipline sans mathématiques, que ce soit en termes d'éducation ou de pratique. (Vous pourriez être en mesure de travailler dans quelques branches de celle-ci sans utiliser directement les mathématiques, et en ayant seulement besoin de la discipline structurelle que je discute ci-dessous, mais vous aurez du mal à arriver à ce point en premier lieu.)


Pour la programmation, il'est certainement le cas que la pratique courante actuelle de la programmation a relativement peu de dépendance aux mathématiques. Il existe également de nombreuses façons d'obtenir une éducation qui vous mènera à ce point : probablement pas un diplôme universitaire typique en informatique (les exigences en calcul et en mathématiques discrètes sont susceptibles de vous assommer), mais peut-être une formation en ligne ou par le biais de programmes comme CIS (informatique et sciences de l'information) - en plus, bien sûr, de l'auto-éducation.


Pour être un programmeur fort et réussi, cependant, je crois que vous avez besoin de quelque chose, et c'est si fortement corrélé avec les mathématiques formelles qu'il est souvent confondu avec elles, mais les deux ne sont pas identiques. Les gens utilisent des expressions telles que "sophistication mathématique" ou "pensée mathématique", ce qui ne fait qu'accroître la confusion (car elles semblent toutes deux liées d'une manière ou d'une autre aux "mathématiques"). Laissez-moi donc lui donner un nom différent : le structuralisme.

Lorsque vous programmez, vous créez et maintenez des structures. Ces structures ont des dépendances et des relations qui doivent être maintenues dans le temps (les deux notions de temps : pendant qu'une source de programme s'exécute, et pendant que la source de programme évolue elle-même). Par conséquent, la programmation exige la capacité de penser clairement à travers les structures, ainsi que de comprendre les propriétés des structures (par exemple, les relations un à plusieurs, leurs tailles et la façon dont les tailles augmentent, la capacité de remplacer une structure par une autre, etc.) Un grand nombre de supports de programmation - des systèmes de types à UML aux langages de spécification et plus encore - sont conçus pour aider les programmeurs à suivre et à faire évoluer ces structures.

Certains programmeurs peuvent utiliser des outils très sophistiqués pour faire ce genre de conception et de maintenance structurelle (par exemple, je contribue à enseigner un cours appelé "Logique pour les systèmes" qui porte sur l'utilisation de langages et d'outils d'analyse avancés pour justement cette tâche). À ce stade, la programmation ne semble pas seulement mathématique, il peut être difficile de même distinguer les deux.

Mais tout bon programmeur s'engage dans ce type de réflexion structurelle, qu'il utilise des mathématiques fantaisistes pour cela ou non. Lorsque vous écrivez des contrats ou des contraintes d'intégrité de base de données ou toute autre déclaration descriptive de ce type qui n'est pas directement liée à l'exécution du program'me, vous faites une déclaration structurelle. Une hiérarchie complexe de types ou de classes reflète ce type de pensée. Même lorsque vous écrivez des scénarios de test et que vous vous demandez "Ai-je couvert l'espace ?", ou que vous vous engagez dans une revue de code qui explique pourquoi certaines structures de données ont été choisies, vous pensez structurellement. C'est inévitable. En effet, un bon test d'un programmeur est de remonter son code et de le questionner sur ses structures et de voir à quel point il peut articuler ses choix.

Le truc, c'est que ce genre de pensée structurelle est profondément mathématique. (Une définition des "mathématiques" que j'aime est "les propriétés structurelles des objets imaginaires"). Quelqu'un qui peut bien travailler de manière structurelle - et il devra le faire, je crois, pour avoir une carrière à long terme dans l'informatique s'il est encore jeune aujourd'hui - a une clarté de pensée et d'organisation qui, selon moi, n'est pas très différente de ce dont on a besoin pour réussir dans de nombreux types de mathématiques. Bien sûr, il y a plus à faire des maths, comme trouver des idées intelligentes qui s'avèrent être des aperçus clés pour prouver des propriétés, et celles-ci ont plus ou moins d'analogues en programmation (selon le type de programmation que vous faites).

La ligne de fond n'est donc pas de demander si vous pouvez penser mathématiquement. Il s'agit plutôt de se demander si vous pouvez penser de manière structurelle. Si vous le pouvez, vous aurez probablement du succès en tant que programmeur, et peut-être même en tant qu'informaticien. Si vous ne le pouvez't, alors j'imagine que vous aurez beaucoup plus de mal à survivre et à réussir.