Tout d'abord: je suis un mathématicien - un professionnel (en ce sens que je suis payé pour faire des maths). Je ne suis pas un programmeur. Je fais de la programmation, mais très certainement de la variété Cargo Cult (voir le premier commentaire de https://tex.stackexchange.com/q/451/86 et ma réponse) et rien de ce genre qui me mènerait normalement à cela. site (en effet, je me suis inscrit ici pour poster cette réponse après avoir vu un lien vers le forum de discussion TeX).
Le résumé de ma réponse est: Mathématiques, c'est la programmation .
J'ai récemment eu la chance d'enseigner un cours de mathématiques à un groupe d'élèves non mathématiques. Ils étaient la section de programmation. Je pensais que c'était fantastique! Enfin, j'allais pouvoir enseigner les mathématiques à des personnes qui comprenaient déjà les idées de base et qui possédaient déjà une boîte à outils rudimentaire pour les faire. J'ai été incroyablement déçu lorsque j'ai demandé combien d'entre eux avaient écrit un programme et obtenu une réponse entre 0 et 1.
Avant de continuer, je devrais clarifier quelques points. Il y a des domaines des mathématiques qui concernent directement la programmation et concernent l'évaluation des algorithmes et la classification des langages, etc. Je ne parle pas de ceux-ci. Il existe également un programme qui tente de traduire toutes les mathématiques dans un langage formel pouvant être évalué par un ordinateur. C’est un peu plus proche de ce dont je parle, mais même s’attarder à cela ne raterait pas l’essentiel de ce que j’essaie de dire. Les mathématiques que je fais et la programmation que je fais ne sont presque pas liées par sujet. La connexion entre eux est à un niveau différent.
Je voudrais commencer par le commentaire de la question principale:
Si cela fait des maths, alors toute activité humaine est une forme de maths. Si c'est le cas, le mot maths n'a pas de sens utile, car il ne peut pas être utilisé pour distinguer une activité d'une autre.
Oui, c'est faire des maths. Mais "maths" est toujours un mot utile car, comme le dit la chanson, "ce n'est pas ce que vous faites, c'est la façon dont vous le faites". Je dirais que je fais des maths quand j'approche quelque chose de façon mathématique . Parfois, il s’agit de mathématiques «noyau dur»: formuler des définitions, prouver des théorèmes. Parfois, ça ne l'est pas. Parfois, il écrit des petits programmes stupides pour que mes enfants puissent apprendre leurs mots orthographiques.
C'est ce que les mathématiques m'aident quand je programme:
Abstraction C'est probablement la compétence transférable la plus importante en mathématiques. J'entends par là la capacité de supprimer toutes les tâches inutiles et de se concentrer sur les propriétés importantes.
Perspective Si je ne pouvais choisir qu’une chose que tous mes élèves devaient apprendre, c’était la suivante: La possibilité de changer de point de vue en fonction du problème. Nous traitons généralement cela en algèbre linéaire avec des formules de changement de base (qui conduisent à des matrices épouvantables et à des complications affreuses), mais cela est beaucoup plus applicable que cela. Au fond, c’est l’idée que ce n’est pas nécessairement parce que quelque chose vous a été présenté de la même manière que vous l’utilisez. Cela sépare notre vision de la chose elle-même de la façon dont elle a été présentée. Cela peut être extrêmement pratique: il s’agit de faire quelque chose d’ utile ou d’ efficace. Si j'ai une liste de vecteurs et qu'il est plus efficace de les stocker sous la forme d'une liste de coordonnées x et d'une liste de coordonnées y, eh bien soit .
Formulaire par rapport à la fonction pilote sur de ce qui précède; si une chose peut être présentée de différentes manières, il n’est plus juste de dire qu’une présentation en particulier est la chose à faire. Citer encore une fois cette chanson: "Ce n'est pas ce que vous êtes, c'est ce que vous faites " qui compte.
Je pourrais continuer, mais ce sont ceux-là qui me viennent à l'esprit.
Maintenant, il y a probablement beaucoup de réactions (négatives) à ce que j'ai écrit jusqu'à présent. On sera "Ce n'est pas des maths, c'est juste du bon sens." (ou le mauvais sens) auquel je me réfère à ma remarque ci-dessus, partageant le sentiment que "toute activité humaine est une forme de calcul". Une autre sera "Ce n'est pas le type de maths visé dans la question.". C’est presque certainement vrai et, ici, j’ai beaucoup plus de sympathie pour la personne qui a déclaré: «Au moins, je n’ai pas touché au calcul depuis 10 ans». Il ou elle a tort, bien sûr, ils font des mathématiques depuis 10 ans, car chaque fois qu’ils écrivaient un programme, ils faisaient des mathématiques . Ils ne l'ont tout simplement pas compris.
En fait, j'utilise des "vrais maths" dans mes programmes. J'ai récemment codé un explorateur de formes 3D amusant qui impliquait l'utilisation de mathématiques pour comprendre les projections et autres transformations que je devais appliquer à mes données. J'étais légèrement amusé de me retrouver à coder des quaternions! Mais bien sûr, les calculs en question étaient triviaux comparés à ceux que je fais lorsque je travaille. C'était du "dos d'enveloppe". Ce type de calcul, je suis d’accord avec le sentiment que vous le récupérez quand vous en avez besoin, et si vous avez besoin de quelque chose de plus compliqué que ce que vous pouvez trouver sur Wikipedia, alors vous trouvez un vrai mathématicien pour le faire à votre place. Cependant, pour pouvoir le récupérer quand vous en avez besoin, vous devez avoir appris quelque chose. Ce n'est peut-être pas quelque chose que vous utilisez réellement, mais avoir appris que quelque chose le rend d'autant plus facile à comprendre ce que vous utilisez réellement plus tard dans la vie. C'est donc là je suis en désaccord avec Coder: vous avez besoin d'apprendre des mathématiques si vous allez jamais à utiliser les mathématiques et vous devez apprendre du côté mathématique ( ce qui ne veut pas dire théorèmes prouvant, par la voie).
Et donc finalement à la "Mathématiques est la programmation". Vous pouvez apprendre toutes ces choses en étant un bon programmeur. Et si vous avez appris ces choses, vous découvrirez que les mathématiques sont beaucoup plus faciles, car vous comprendrez que lorsque nous parlons de vecteur dans un espace vectoriel, il ne s'agit que d'une instance de la classe, Vector
ce qui signifie que nous pouvons faire tout ce que nous pouvons faire Vector
pour: cette instance: additionner, soustraire, mettre à l'échelle, etc. C'est pourquoi j'aimerais enseigner les mathématiques aux programmeurs. Mais, en tant que mathématicien, je dirais que le premier"Abstraction" est plus facile à apprendre en mathématiques qu'en programmation, car les mathématiques sont la poursuite de l'abstraction. Chaque fois que nous voyons un comportement, notre entraînement consiste toujours à nous demander: "Qu'est-ce qui le rend si comportemental de cette manière? Et si je prenais un autre produit similaire, se comporterait-il de la même manière? Dans quelle mesure est-ce que je devrais perdre pour que ça arrête de se comporter comme ça? " (Porter cela à l'extrême mène à la "mathématique des centipèdes" - rechercher le terme). Mais nous ne le faisons pas avec (seulement) des objets du "monde réel" (quels qu’ils soient), nous le faisons avec des choses qui ont déjà été abstraites.
Cela dure depuis assez longtemps, alors permettez-moi de conclure par l'une des blagues classiques des mathématiciens:
Un mathématicien et un physicien ont tous deux participé à un séminaire sur un nouveau modèle impliquant un espace à 24 dimensions. Après quoi, ils en ont discuté et le physicien a fait remarquer: "C'était vraiment difficile. Je veux dire, comment visualiser un espace de 24 dimensions?" à quoi le mathématicien a répondu: "Oh, c'est facile. Il suffit de visualiser l'espace n-dimensionnel et de définir n = 24.".
Ajouté le 2012-03-2
Il y a eu pas mal de commentaires sur cette réponse exprimant une variété de points de vue. Celles-ci ont maintenant été supprimées par un modérateur, étant entendu que j'essaierais de les incorporer (ou de leur répondre) dans ma réponse.
Cependant, je ne suis pas sûr de pouvoir le faire. En lisant ces commentaires et le reste de ce qui est écrit sur cette page, je ne peux que conclure à un énorme malentendu quant à ce que sont réellement les mathématiques. De plus, je ne me sens pas assez compétent pour l'expliquer. Heureusement, quelqu'un a déjà établi un lien avec la Lamentation de Lockhart, je vais donc reporter l'explication à cela. Bien que j'aurais pu l'exprimer différemment (ayant grandi dans un environnement scientifique, j'aurais davantage mis l'accent sur le caractère expérimental des mathématiques), je ne pense pas que je pourrais le dire mieux .
Je pense toujours que je peux ajouter quelque chose. En plus des malentendus quant à ce que les mathématiques est , il y a aussi des malentendus quant à ce que « faire des mathématiques » signifie. Je vois deux positions presque contradictoires:
Les mathématiques concernent les équations et les formules. Il n'y a donc pas besoin de l'étudier, car Wikipedia existe (c'est presque l'inverse du défi apocryphe d' Euler contre Diderot ).
Les mathématiques concernent les théorèmes et les définitions. Il n’est donc pas nécessaire de l’étudier car les programmes ne prouvent jamais rien (ce qui est une erreur aussi complète que ... insère l’erreur favorite ici).
Alors que les deux positions se contredisent, elles se retrouvent au même endroit: cela ne sert à rien qu'un programmeur apprenne des mathématiques - et assurément pas à un mathématicien! Après tout, que savent- ils de quoi que ce soit? Tout ce qu'un programmeur a vraiment besoin de savoir peut être trouvé sur Wikipedia ou cribbed à quelqu'un d'autre.
Ci-dessus, je me suis décrit en tant que programmateur de cargo. Je parie que la plupart d’entre vous ont un rire personnel et se sont dit: "Ah oui, je parie que je sais à quoi ressemblent vos programmes à ce moment-là". Vous vous êtes probablement senti un peu insatisfaisant et supérieur (même si je suis sûr que vous vous sentiez mal à propos de vous sentir mal et supérieur).
Ce que je viens de décrire ci-dessus est la mathématique du culte de la cargaison.
Alors, quand je dis que vous devriez apprendre un peu de mathématiques pour comprendre comment les mathématiques fonctionnent, je le dis pour la même raison que si vous aviez vu un peu de code que j'avais écrit: "Combien votre vie est plus facile! ce serait si vous vouliez arrêter de couper-coller du code de StackOverflow et en apprendre un peu plus sur la façon de le faire correctement. ".
La chose la plus importante, cependant, est que vous devriez l’apprendre des mathématiciens. Pourquoi Voici une analogie. Le langage que je connais le mieux est TeX. (Dit tout, vraiment!). Maintenant, supposons que je veuille en savoir un peu plus sur TeX et que, justement, Don Knuth soit en ville et ait proposé de donner des tutoriels sur TeX. Ou je pourrais simplement lire à ce sujet sur Wikipedia. Ou peut-être que c'est Perl et Larry Wall, ou C # (est-ce le bon?) Et Jon Skeet. Il se peut bien que ces personnes ne soient pas les meilleurs enseignants , mais elles le compensent sûrement du montant qu’elles connaissent!
Et c'est ce que sont les mathématiciens . Nous sommes les personnes qui écrivent la langue actuelle, qui écrivent ensuite les bibliothèques que vous utilisez. Bien sûr, vous n'avez pas besoin de savoir comment prouver un théorème - vous n'écrirez pas de bibliothèque! Mais si vous en savez un peu sur notre façon de penser, cela pourrait vous aider à comprendre pourquoi nous avons écrit la bibliothèque de la manière dont nous l’avons fait, et si vous comprenez que cela pourrait vous aider à en faire un meilleur usage.
Il y a un moyen terme entre regarder des équations sur Wikipedia et prouver la conjecture de Poincaré, tout comme - pour se référer à la plainte de Lockhart - il y a un juste milieu entre "je ne sais pas grand-chose sur l'art, mais je sais ce que j'aime" et étant Monet, et entre "Où est la clé" ANY "?" et être Don Knuth. Si vous êtes encore à l’université, vous avez alors une formidable opportunité d’apprendre auprès de personnes expertes dans leur domaine et qui, pour une raison quelconque, sont disposées à passer leur temps à vous l'expliquer.
L’autre point que j’aimerais développer un peu, c’est pourquoi, en tant que programmeur, vous ne devriez pas avoir peur d’apprendre un peu plus en mathématiques. Ce ne sont pas les connexions profondes, ni l'utilité. C'est que votre capacité à programmer un ordinateur peut vous aider directement à apprendre les mathématiques. Je veux juste en mentionner quelques-uns.
Comprendre les variables. Tant de gens sont déconcertés par de simples déclarations telles que "Soit n un nombre naturel ...". Ou "Laisser epsilon> 0". Il y a des endroits en mathématiques où il est important de se rappeler la portée d'une variable. Ce sont tous des lieux communs dans la programmation. Apprenez à traduire un énoncé mathématique dans un programme et vous constaterez qu'il est beaucoup plus facile de garder une trace de quoi.
La nature de la preuve. Si vous avez déjà écrit un test ou un programme destiné à être utilisé par quelqu'un d'autre, vous comprenez l'essentiel des preuves. Lorsque vous faites cela, vous devez savoir que tout ce que l'utilisateur insère, vous pouvez le gérer (insérer ici la référence obligatoire xkcd). C'est une preuve! Une démonstration que, quel que soit le "utilisateur / univers" mis en, la déclaration tiendra. Les expérimentateurs se diront "Si cela fonctionne dans des circonstances normales, c'est vrai", mais les programmeurs savent qu'il y a toujours ce gamin qui essaiera Alt + G + Maj + ÅØÆ juste pour voir ce qui se passe.
SEC. Désolé de vous en parler, mais nous l'avons inventé, pas vous. Nous ne "nous répétons pas" depuis des millénaires. C'est pourquoi j'ai une copie des éléments d'Euclid sur mes étagères et qu'elle est toujours utile .
Et il y a plus Si j'en savais un peu plus sur la programmation, j'écrirais un livre intitulé "Mathématiques pour programmeurs", dans lequel le but n'était pas d'enseigner "Les mathématiques que les programmeurs devraient connaître" mais "des mathématiques que tout le monde devrait connaître, mais optimisées pour les programmeurs" . Mais je n'en saurai probablement jamais assez sur la programmation pour l'écrire - à moins que quelqu'un ne propose de collaborer avec moi!
Je vais le laisser là. Probablement si je pensais plus, je changerais ce que j'ai écrit; j'espère que je l'expliquerais mieux. Dans quelques mois, je pourrais même être en désaccord avec certaines parties. Si quelqu'un souhaite argumenter davantage ou commenter autrement, il vaut probablement mieux ne pas le faire dans les commentaires ici. Tu sais où me trouver .