Je viens de commencer un diplôme en développement logiciel. En ce moment, nous commençons avec la base Java et autres (donc vous pouvez dire tout en bas) - ce qui est bien, je n'ai aucune expérience de programmation à part savoir comment faire "Hello World "en Java.
Je n'arrête pas d'entendre que les mathématiques sont pertinentes pour le codage, mais comment est-il ainsi? Quels exemples généraux montreraient comment les mathématiques et la programmation vont de pair ou dépendent l'une de l'autre?
Je m'excuse de ma question est vague, je commence à peine à avoir une idée approximative du genre de monde dans lequel j'entre en tant qu'étudiant singe code ...
Tout d'abord: je suis un mathématicien - un professionnel (en ce sens que je suis payé pour faire des mathématiques). 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 à https://tex.stackexchange.com/q/451/86 et ma réponse) et rien de ce genre cela m'amènerait normalement sur ce site (en effet, je me suis inscrit ici pour poster cette réponse après avoir vu un lien vers celui-ci dans la salle de chat TeX).
Le résumé de ma réponse est: Les mathématiques sont la programmation .
J'ai récemment donné un cours de mathématiques à un groupe d'étudiants non mathématiques. C'était la section de programmation. Je pensais que c'était fantastique! Enfin, j'allais pouvoir enseigner les mathématiques à des gens qui avaient déjà compris les idées de base et qui avaient déjà une boîte à outils rudimentaire pour faire des mathématiques. J'ai été incroyablement déçu quand j'ai demandé combien d'entre eux avaient réellement écrit un programme et obtenu une réponse quelque part entre 0 et 1.
Avant de continuer, je devrais clarifier certaines choses. Il existe des domaines des mathématiques qui se rapportent directement à la programmation et concernent l'évaluation des algorithmes et la classification des langages et similaires. Je ne parle pas de ceux-là. Il existe également un programme qui essaie de traduire toutes les mathématiques dans un langage formel qui peut être évalué par un ordinateur. C'est un peu plus près de ce dont je parle, mais quand même se concentrer sur cela manquerait l'essentiel de ce que j'essaie de dire. Les mathématiques que je fais et la programmation que je fais sont presque totalement indépendantes du sujet. La connexion entre eux est à un niveau différent.
Je voudrais commencer par le commentaire sur la question principale:
Si cela fait des mathématiques, alors toute l'activité humaine est une forme de mathématiques. Si tel est le cas, le calcul Word n'a pas de sens utile, car il ne peut pas être utilisé pour distinguer une activité d'une autre.
Oui, ça fait des maths. Mais "maths" est toujours un mot utile parce que, 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 manière mathématique . Parfois, ce sont des mathématiques "hard core": formulation de définitions, démonstration de théorèmes. Parfois non. Parfois, il écrit de petits programmes stupides pour que mes enfants puissent apprendre l'orthographe.
Voici ce que les mathématiques m'aident lorsque je programme:
Abstraction C'est probablement la compétence transférable la plus importante des mathématiques. Par cela, je veux dire la capacité de supprimer toutes les choses 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, ce serait ça : La possibilité de changer son 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 horribles et à des complications horribles), mais c'est beaucoup plus applicable que cela. Au fond, c'est l'idée que, simplement parce que quelque chose vous a été présenté d'une manière, cela ne doit pas être la façon dont vous travaillez avec. Cela sépare la 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 rendre quelque chose utile ou efficace . Si j'ai une liste de vecteurs et qu'il est plus efficace de les stocker comme une liste de coordonnées x et une liste de coordonnées y, qu'il en soit ainsi .
Forme versus fonction En partant 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 particulière est la chose . Pour citer à nouveau mal 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 qui me viennent à l'esprit.
Maintenant, il y a probablement beaucoup de réactions (négatives) à ce que j'ai écrit jusqu'à présent. L'un sera "Ce n'est pas des maths, c'est juste du bon sens." (ou mauvais sens) auquel je me réfère à ma remarque ci-dessus souscrivant au sentiment que "toute activité humaine est une forme de maths". Un autre sera "Ce n'est pas le type de calcul voulu dans la question". C'est presque certainement vrai et ici j'ai en fait beaucoup plus de sympathie avec la personne qui a dit "Au moins, je n'ai pas touché aux maths depuis 10 ans". Il ou elle a tort, bien sûr, ils font des mathématiques depuis 10 ans parce que chaque fois qu'ils ont écrit un programme ils faisaient des mathématiques . Ils ne s'en sont tout simplement pas rendu compte. Et nous arrivons ici au point de savoir pourquoi j'ai été ravi de la possibilité (malheureusement non réalisée) d'enseigner les mathématiques à des étudiants qui étaient déjà programmeurs.
J'utilise en fait 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'ai été légèrement amusé de me retrouver à coder des quaternions! Mais bien sûr, les mathématiques impliquées étaient insignifiantes par rapport aux mathématiques que je fais quand je travaille. C'était du "dos d'enveloppe". Ce type de maths, alors je suis d'accord avec le sentiment que vous le prenez quand vous en avez besoin, et si vous avez besoin de quelque chose de plus compliqué que ce que vous pouvez trouver sur Wikipédia, alors vous trouvez un vrai mathématicien pour le faire pour vous. Cependant, pour que vous puissiez le ramasser quand vous en avez besoin, vous devez avoir appris quelque chose . Cette chose n'est peut-être pas quelque chose que vous utilisez réellement, mais avoir appris que quelque chose rend d'autant plus facile de ramasser ce que vous utilisez réellement plus tard dans la vie. C'est donc là que je ne suis pas d'accord avec Coder: vous devez apprendre certaines mathématiques si vous voulez utiliser des mathématiques et vous devez l'apprendre du côté mathématique (ce qui ne veut pas dire prouver des théorèmes, soit dit en passant).
Et donc finalement au "Mathematics is Programming". Vous pouvez apprendre toutes ces choses en étant un bon programmeur. Et si vous avez appris ces choses, vous trouverez les mathématiques beaucoup plus faciles parce que vous comprendrez que lorsque nous parlons d'un vecteur dans un espace vectoriel, ce n'est qu'une instance de la classe Vector
ce qui signifie que nous pouvons faire toutes les choses que Vector
fait à cette instance: ajouter, soustraire, mettre à l'échelle, etc. C'est pourquoi j'aimerais enseigner les mathématiques aux programmeurs. Mais, parlant en tant que mathématicien, je dirais que le premier de ceux-ci, "Abstraction", est plus facile à apprendre en mathématiques qu'en programmation parce que les mathématiques sont la poursuite de l'abstraction. Chaque fois que nous voyons un comportement, notre formation consiste toujours à demander "Qu'est-ce qui fait que cette chose se comporte de cette façon? Et si je prenais une autre chose similaire, se comporterait-elle de la même manière? Quelle proportion de cette chose est-ce que je devrais perdre pour qu'il arrête de se comporter comme ça? " (Pousser cela à l'extrême conduit à des "mathématiques mille-pattes" - recherchez le terme). Mais nous ne faisons pas cela avec (juste) des objets "du monde réel" (quels qu'ils soient), nous le faisons avec des choses qui ont déjà été abstraites.
Cela a duré assez longtemps, alors laissez-moi terminer avec l'une des blagues classiques du mathématicien:
Un mathématicien et un physicien ont tous deux assisté à un séminaire sur un nouveau modèle impliquant un espace à 24 dimensions. Ensuite, ils en ont discuté et le physicien a fait la remarque suivante: "C'était vraiment difficile. Je veux dire, comment peut-on visualiser l'espace à 24 dimensions?" ce à quoi le mathématicien a répondu: "Oh, c'est facile. Il suffit de visualiser l'espace à n dimensions puis 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é d'opinions. Celles-ci ont maintenant été supprimées par un modérateur, étant entendu que j'essaierais de les intégrer (ou d'y 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 sur cette page, je ne peux que conclure qu'il y a un énorme malentendu sur ce qu'est réellement les mathématiques. De plus, je ne me sens pas assez compétent pour l'expliquer. Heureusement, quelqu'un s'est déjà lié à Lockhart's Lament donc je vais en différer l'explication. Bien que j'aurais pu le dire différemment (en grandissant dans un environnement scientifique, j'aurais mis davantage l'accent sur la nature expérimentale des mathématiques), je ne pense pas que je pourrais le dire mieux .
Je pense toujours pouvoir ajouter quelque chose. En plus des malentendus sur ce qu'est la mathématique , il y a aussi des malentendus sur ce que signifie "faire des mathématiques". Je vois deux positions presque contradictoires:
Les mathématiques concernent les équations et les formules. Il n'est donc pas nécessaire de l'étudier car Wikipedia existe (c'est presque l'inverse de le défi apocryphe d'Euler à 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 à peu près aussi complet qu'un sophisme ... insérez le sophisme préféré ici).
Bien que les deux positions se contredisent, elles se retrouvent au même endroit: il est inutile qu'un programmeur apprenne des mathématiques - et certainement pas d'un mathématicien! Après tout, que savent-ils sur quoi que ce soit? Tout ce qu'un programmeur a vraiment besoin de savoir peut être trouvé sur Wikipedia, ou cribé à quelqu'un d'autre.
Ci-dessus, je me suis décrit comme un programmeur culte de la cargaison. Je parie que la plupart d'entre vous ont eu un petit rire privé et se sont dit: "Ah oui, je parie que je sais à quoi ressemblent vos programmes alors.". Vous vous êtes probablement senti un peu suffisant et supérieur (bien que je sois sûr que vous vous sentiez mauvais de vous sentir suffisant et supérieur).
Ce que j'ai décrit ci-dessus est Cargo Cult Mathematics.
Donc, quand je dis que vous devez apprendre un peu de mathématiques pour comprendre comment les mathématiques fonctionnent, je le dis exactement pour la même raison que si vous voyiez un peu de code que j'avais écrit: "Combien plus facile votre vie serait si vous arrêtez de couper et coller du code de StackOverflow et que vous apprenez un peu comment 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 il se trouve que Don Knuth est en ville et a 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 compensent à coup sûr le montant qu'elles connaissent!
Et c'est ce que sont les mathématiciens . Nous sommes les gens qui écrivent la langue réelle, qui écrivent ensuite les bibliothèques que vous utilisez. Bien sûr, vous n'avez pas pour savoir comment prouver un théorème - vous n'allez pas écrire une bibliothèque! Mais si vous savez un peu comment nous pensons, cela pourrait vous aider à comprendre pourquoi nous avons écrit la bibliothèque comme nous l'avons fait, et si vous comprenez que cela pourrait vous aider à mieux l'utiliser.
Il y a un juste milieu entre rechercher des équations sur Wikipédia et prouver la conjecture de Poincaré, tout comme - pour se référer à la lamentation de Lockhart - il y a un juste milieu entre "Je ne sais pas vraiment grand chose sur l'art, mais je sais ce que j'aime" et étant Monet, et entre "Où est la clé" TOUT "?" et être Don Knuth. Si vous êtes encore à l'université, vous avez une opportunité incroyable d'apprendre des gens qui sont des experts dans leur domaine et qui - pour une raison quelconque - sont prêts à passer leur temps à vous l'expliquer.
L'autre point que je voulais développer un peu était pourquoi en tant que programmeur, vous ne devriez pas avoir peur d'apprendre un peu plus de mathématiques. Ce n'est 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. Beaucoup de gens sont confus par de simples déclarations comme "Soit n un nombre naturel ...". Ou "Laissez 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 monnaie courante dans la programmation. Apprenez à traduire une déclaration mathématique dans un programme et vous trouverez beaucoup plus facile de garder une trace de quoi.
La nature de la preuve. Si vous avez déjà écrit un test ou écrit un programme à utiliser par quelqu'un d'autre, vous comprenez le cœur des preuves. Lorsque vous faites cela, vous devez savoir que quel que soit l'utilisateur insère, vous pouvez y faire face (insérez ici la référence xkcd obligatoire). C'est tout une preuve! Une démonstration que quel que soit le "utilisateur/univers" met, la déclaration tiendra. Les expérimentateurs se pencheront sur le "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 + Shift + ÅØÆ 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 c'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 les programmeurs" où le but n'était pas d'enseigner "Les mathématiques que les programmeurs devraient connaître" mais "les mathématiques que tout le monde devrait connaître, mais optimisées pour les programmeurs" . Mais je ne connais probablement jamais assez la programmation pour l'écrire - à moins que quelqu'un ne propose de collaborer avec moi!
Je vais le laisser là. Probablement, si je réfléchissais davantage, je changerais ce que j'ai écrit; j'espère que je l'expliquerais mieux. Dans un mois, je pourrais même être en désaccord avec certaines parties. Si quelqu'un souhaite discuter davantage ou commenter autrement, il vaut probablement mieux ne pas le faire dans les commentaires ici. Vous savez où me trouver .
Ils ne sont pas que étroitement liés. Pour la programmation, il est important de connaître les mathématiques, en particulier les branches relatives, par exemple, aux performances des algorithmes, mais le simple fait qu'il n'y a pas de branche des mathématiques qui vous dira que les singletons sont une mauvaise idée horrible, par exemple, ou quand privilégier l'héritage plutôt que la composition, ou si vous allez vraiment avoir besoin de cette flexibilité, et ne pas vous répéter, et des dizaines d'autres nécessités de programmation de base.
Mathématiques pourrait être capable d'exprimer ce que fait votre programme, mais il ne peut certainement pas vous dire la manière la plus maintenable, lisible par l'homme et réalisable.
Les mathématiques et la programmation sont liées de deux manières.
La première est que les mathématiques peuvent être utilisées pour raisonner sur les programmes informatiques. Il peut aider à répondre à des questions telles que "Comment le temps d'exécution de mon programme changera-t-il au fur et à mesure que les données d'entrée changeront?", "Mon programme est-il garanti de trouver une réponse à mon problème?", "Mon programme est-il aussi efficace qu'il pourrait l'être? "," Comment réorganiser mon programme pour le rendre plus rapide ou utiliser moins de mémoire? ". Vous abordez généralement des sujets comme ceux-ci dans les cours de la division supérieure sur la théorie du calcul, la conception d'algorithmes et la conception de langages informatiques.
La deuxième façon dont les mathématiques et les programmes sont liés est que la programmation est utilisée pour résoudre des problèmes mathématiques. Ceci est important car de nombreux problèmes de la "vie ordinaire" peuvent être refondus en tant que problèmes mathématiques puis résolus (peut-être approximativement) sur un ordinateur. Ces types de sujets apparaîtront dans une certaine mesure dans presque tous vos cours, mais en particulier dans les cours de mathématiques discrètes et de modélisation mathématique.
Deux exemples spécifiques où une formation en mathématiques est importante pour l'informatique sont:
1) Bases de données relationnelles où calcul relationnel est utilisé.
Le calcul relationnel se compose de deux calculs, le calcul relationnel Tuple et le calcul relationnel de domaine, qui font partie du modèle relationnel pour les bases de données et fournissent un moyen déclaratif de spécifier les requêtes de base de données. Ceci, contrairement à l'algèbre relationnelle qui fait également partie du modèle relationnel, mais fournit un moyen plus procédural pour spécifier les requêtes.
L'algèbre relationnelle peut suggérer ces étapes pour récupérer les numéros de téléphone et les noms des librairies qui fournissent un exemple de livre:
Join book stores and titles over the BookstoreID. Restrict the result of that join to tuples for the book Some Sample Book. Project the result of that restriction over StoreName and StorePhone.
Le calcul relationnel formulerait une manière descriptive et déclarative:
Get StoreName and StorePhone for supplies such that there exists a title BK with the same BookstoreID value and with a BookTitle value of
Un exemple de livre.
L'algèbre relationnelle et le calcul relationnel sont essentiellement logiquement équivalents: pour toute expression algébrique, il existe une expression équivalente dans le calcul, et vice versa. Ce résultat est connu sous le nom de théorème de Codd.
Le domaine suivant est intelligence artificielle (AI) et apprentissage automatique .
Pour un exemple d'utilisation, jetez un œil à la classe CS 373 d'udacity: PROGRAMMATION A ROBOTIC CAR .
Description: Ce cours, dispensé par l'un des plus grands experts en IA, vous apprendra les méthodes de base en intelligence artificielle, notamment: l'inférence probabiliste, la vision par ordinateur, l'apprentissage automatique et la planification, le tout en mettant l'accent sur la robotique. De nombreux exemples et affectations de programmation appliqueront ces méthodes dans le contexte de la construction de voitures autonomes. Vous aurez l'occasion de visiter, par vidéo, les principaux laboratoires de recherche dans le domaine et de rencontrer les scientifiques et les ingénieurs qui construisent des voitures autonomes à Stanford et Google.
Prérequis: L'instructeur assumera une solide connaissance de la programmation, toute la programmation sera en Python. La connaissance des probabilités et de l'algèbre linéaire sera utile.
SEMAINE 1:
Bases de probabilité Localisation de voitures avec filtres à particules
SEMAINE 2:
Gaussiens et probabilité continue Suivre d'autres voitures avec des filtres de Kalman
SEMAINE 3:
Traitement d'image et apprentissage automatique Recherche d'objets dans les données des capteurs
SEMAINE 4:
Planification et recherche Déterminer où conduire avec la recherche A * Trouver des itinéraires optimaux avec une programmation dynamique
SEMAINE 5:
Contrôles Contrôle de la direction et des vitesses avec PID
SEMAINE 6:
Assembler le tout Programmer une voiture autonome
SEMAINE 7:
Examen final examen testant vos connaissances
Pour le développement d'applications scientifiques, la programmation de jeux, les systèmes en temps réel, les systèmes de simulation et de telles applications, les mathématiques sont effectivement nécessaires. Après tout, la programmation utilise les mathématiques et les sciences pour résoudre des problèmes. En revanche, pour programmer une application qui capture les informations des utilisateurs pour les enregistrer dans votre base de données, ne nécessite aucun niveau élevé de mathématiques. Néanmoins, tous les programmeurs bénéficieraient de la théorie des nombres de base, de l'algèbre, de la théorie des ensembles de base et de l'analyse numérique élémentaire.
Du côté des praticiens des mathématiques, différents sujets en mathématiques (ainsi que de nombreuses autres branches scientifiques) pourraient bénéficier de manière significative de la programmation.
Je pense que plus que toute autre chose, c'est le similitude du processus de pensée utilisé qui fait que les deux semblent si similaires.
Par exemple, les deux sont extrêmement logiques. Si vous suivez le même ensemble d'étapes ou la même formule, vous obtiendrez toujours le même résultat. Par exemple, 1+1
sera toujours égal à 2
, et set a = 1
signifie a
sera toujours égal à 1 (jusqu'à ce que vous le définissiez sur autre chose)
Un autre exemple est la nécessité de penser spatialement. En mathématiques, j'ai constaté que je devais souvent tenir des chiffres dans ma tête et visualiser ce que je faisais. Comme exemple très simple, je décomposerais les problèmes mathématiques pour que quelque chose comme 13x13
devient 13x10 + 13x3
, ce qui est beaucoup plus facile à utiliser pour mon cerveau, et je dois garder cette trace 13x10=130 + 13x3=39
, donc 130+39 = 169
. Cette même capacité à visualiser quelque chose d'invisible ou à décomposer un problème en problèmes plus petits est souvent appliquée à la programmation.
Je pense donc que bien que vous n'ayez pas besoin d'avoir une formation mathématique pour programmer, où les mathématiques sont définies comme effectuant des calculs avec des nombres, vous devez avoir un processus de pensée et une compréhension similaires à ce que vous utiliseriez pour résoudre des problèmes mathématiques.
Je suppose qu'à ce jour, vous avez appris des éléments de calcul et une trigonométrie . Et vous appelez cela Mathématiques. C'est comme appeler une paire de jambes "un être humain".
Le calcul a peu à voir avec la programmation et est plus étroitement lié à la physique et à l'ingénierie. Vous aurez besoin de physique pour moteurs de je et de calcul pour analyse statistique. (L'analyse statistique génère plus d'emplois qu'il est confortable d'admettre)
Pour nous, le calcul consiste davantage à relier la programmation au monde réel. Le calcul informatique est la branche qui étudie la gravité de cette relation jusqu'à présent. (spoiler: ça va plutôt mal, mais nous pouvons le contrôler indéfiniment )
La trigonométrie est un jack fou dans la boîte qui sort lorsque vous vous y attendez le moins, puis analyse du signal, génération audio et bien d'autres choses en dépendent.
Aller à travers Algèbre 101 et Logique 101 , étudier l'histoire de Pascal, Leibniz. (votre définition des mathématiques sera cependant changée pour toujours)
La programmation traverse de nombreuses disciplines académiques traditionnelles.
Les mathématiques, en particulier mathématiques appliquées, sont importantes pour la programmation car une grande partie de ce que nous demandons aux ordinateurs est de croquer les nombres. Comprendre les méthodes numériques et comment appliquer le calcul de manière efficace et appropriée est l'une des tâches quotidiennes de nombreux programmeurs.
Ici, je vais vous dire des choses pratiques où j'ai rencontré les mathématiques pour résoudre certains problèmes informatiques (en particulier dans le domaine Internet):
Un problème avec votre question est que les "mathématiques" et la "programmation" sont à la fois des sujets très larges et profonds sur lesquels il y a plus à savoir que n'importe qui pourrait maîtriser dans une vie (pas d'exagération). Je détiens personnellement une maîtrise en mathématiques. Pendant mon séjour à l'université, il semblait que plus j'en apprenais, moins j'en savais par rapport à mes pairs; c'était comme si je devenais moins intelligent au fil des ans. Lorsque j'ai présenté ma thèse de maîtrise à un groupe de professeurs, même la plupart d'entre eux semblaient peu familiers avec ce que j'avais étudié.
De même, je suis maintenant développeur d'applications Web pilotées par une base de données. Si vous me compariez à quelqu'un qui fait de la programmation en langage assembleur embarqué, vous pourriez penser de nous comme deux professionnels très talentueux, mais nous aurions une expertise très différente même si nous sommes tous les deux "programmeurs".
Au fur et à mesure que vous progressez dans votre étude des mathématiques supérieures (au-delà du calcul de première année), vous constaterez que les mathématiques inculquent une discipline de raisonnement abstrait qui vous sera utile lorsque vous programmez. Je pense que cette discipline est très importante parce que vous traiterez des préoccupations abstraites lors de votre programmation.
Bien sûr, dans la programmation de première année, vous en apprendrez probablement sur l'arithmétique des pointeurs. Vous écrirez des programmes courts pour illustrer ce concept et votre compréhension de la façon dont il conduit votre ordinateur à obéir à votre volonté. Cependant, apprendre comment fonctionne l'arithmétique des pointeurs dans l'abstrait ne vous aidera pas à utiliser des pointeurs dans un vrai programme. Quand vient le temps d'assumer un fouillis de 10 000 lignes de code et d'apporter des modifications à l'arithmétique du pointeur, vous devrez être en mesure de raisonner à un niveau très abstrait, de prendre des décisions stratégiques pour équilibrer les différentes préoccupations concernant la façon dont vos modifications affecteront le code.
En tant que programmeur, vous devez équilibrer la "lisibilité" de votre code, les performances de votre code, la facilité d'utilisation des programmes résultants, entre bien d'autres préoccupations. Vous devez être en mesure de faire des comparaisons très abstraites pour équilibrer ces préoccupations entre elles. Vous ferez plusieurs de ces comparaisons chaque jour. Je n'ai même pas commencé à gérer le temps. Vous raisonnerez de manière abstraite sur la probabilité que quelque chose que vous faites affecte votre capacité à effectuer vos tâches à temps, et encore une fois, vous prendrez de nombreuses décisions chaque jour qui affecteront votre travail.
Enfin, vous devez maintenir votre discipline philosophique pour pouvoir assimiler de nouvelles idées et concepts afin de pouvoir continuer alors que les anciennes méthodologies et pratiques tombent en désuétude. Encore une fois, vous devrez être en mesure d'évaluer les idées qui vous accompagnent et de faire une comparaison abstraite avec ce que vous savez déjà.
En bref, la programmation, comme la plupart d'entre nous le savent, n'a pas grand-chose à voir avec les mathématiques, comme la plupart d'entre nous le savent; mais quand on le regarde à un niveau abstrait, ils ont beaucoup en commun.
Les mathématiques décrivent (disons) une équation cubique.
Un algorithme décrit comment résoudre cette équation cubique.
Construire cet (ou n'importe quel) algorithme d'une manière qui peut être exécutée par une machine est programmation.
L'informatique est l'analyse de l'algorithme - son efficacité temps/espace théorique, les limites d'erreur, etc. Cela pourrait être considéré comme une branche des mathématiques. Notez cependant que l'informatique et la programmation ne sont pas en fait la même chose. Il est important d'avoir une base en informatique si vous voulez être un bon programmeur, car cela vous aide à mieux concevoir et raisonner sur les algorithmes que vous développez. Mais ce n'est pas une exigence.
Un bon programmeur peut ne pas être (en fait, souvent pas) un bon mathématicien, et vice versa. Ce sont des compétences identifiables distinctes.
J'ai vu beaucoup de questions sur ces types de forums à travers les années où le vrai problème résidait dans la mauvaise compréhension mathématique de l'affiche. Par exemple, toute personne ayant une bonne base en algèbre comprend que vous ne pouvez pas diviser par zéro. Mais j'ai vu beaucoup de questions où l'affiche ne comprenait pas cela et par la suite ne comprenait pas le message d'erreur qui disait essentiellement "vous ne pouvez pas diviser par zéro". J'ai vu beaucoup de questions où il était clair que l'affiche ne comprenait pas la logique de base. J'ai vu bien trop de questions où les concepts d'algèbre booléenne n'étaient clairement pas compris.
Ce n'est pas parce que vous n'écrivez pas de preuves mathématiques ou que vous ne résolvez pas directement des équations comme dans le manuel de mathématiques que vous n'avez pas besoin de comprendre les concepts qui les sous-tendent. Soit dit en passant, pendant de nombreuses années d'expérience de travail, je n'ai jamais rencontré un mauvais programmeur qui avait une solide compréhension des mathématiques.
Dans certains domaines, vous utilisez directement beaucoup de mathématiques, telles que la programmation de jeux, la programmation statistique, la programmation financière, certains systèmes embarqués. Dans certains de ces cas, on vous donne les équations dont vous avez besoin dans les exigences et parfois vous ne l'êtes pas. Cependant, même lorsque l'équation vous est donnée, la traduction de ces équations correctement en code de programmation nécessite que vous compreniez l'équation pour commencer.
Bien que vous puissiez vous débrouiller avec un peu plus que l'algèbre de base dans votre application CRUD de base, la plupart des problèmes les plus intéressants et des travaux plus avancés impliquent une compréhension mathématique. Alors pourquoi voudriez-vous vous limiter dès le départ en n'apprenant pas les mathématiques en profondeur?
Deux exemples qui me viennent immédiatement à l'esprit sont:
fonctions - L'idée d'appliquer une transformation aux variables d'entrée pour produire une variable de sortie est fortement enracinée dans les mathématiques. La notion de passer une fonction autour de as un paramètre à une autre fonction encore plus. En général, la notion de pensée abstraite associée à la programmation est assez proche des mathématiques.
bitMasks - Cette approche de programmation commune pour résoudre les problèmes nécessite au moins une compréhension de base de l'algèbre booléenne pour même saisir le concept.
Du point de vue des programmeurs: les mathématiques sont un sous-ensemble de la programmation.
Maths appliqués en programmation:
Lorsque vous travaillez avec des collections (tableaux, listes, cartes, etc.) dans la programmation, vous avez affaire à des implémentations réelles d'abstractions mathématiques.
Programmation sans maths:
Si vous faites println("Hello World")
, alors le fait que des calculs mathématiques soient utilisés pour calculer la position à l'écran, la longueur de la chaîne, etc., est vraiment peu pertinent.
Utilisation de la programmation pour les mathématiques:
L'implémentation des mathématiques et de la physique dans un langage de programmation permet des choses comme la conception assistée par ordinateur.
Je ne suis en aucun cas un expert en mathématiques! J'ai bien fait en HS Geometry, ce qui était logique pour moi. Je trouve que la programmation et la géométrie sont très similaires. La logique booléenne me lie très bien aux preuves géométriques.
Ensuite, il y a de petites choses comme savoir que vous pouvez contrôler le nombre de colonnes dans une ligne en utilisant l'opérateur de module.
Je suis fortement favorable à l'idée d'être un bon programmeur qui a un ami (ou un collègue/consultant) qui est un bon mathématicien.
Évidemment, si vous avez la chance d'avoir les deux compétences, courez avec!
La programmation est généralement basée sur un modèle qui est généralement un modèle mathématique.
Prenons un exemple de création d'une calculatrice hypothécaire. Pour cela, vous devez savoir quel est l'intérêt, ce qu'est un intérêt composé et ainsi de suite. Si vous ne comprenez pas les mathématiques sous-jacentes, alors quelqu'un d'autre doit vous fournir ces informations. Habituellement, c'est le travail du programmeur de tout faire. Vous pouvez toujours demander de l'aide si nécessaire.
Il existe un concept simple en mathématiques qui est largement utilisé en programmation. Par exemple les expressions, équation, variable, elles sont profondément utilisées en programmation. Si vous ne l'avez pas en mathématiques, vous n'êtes peut-être pas le meilleur programmeur.
Ayant des mathématiques solides, donnez-vous plus de choses pour vous modéliser votre travail. Cela fait finalement de vous un meilleur programmeur. Par exemple, vous voudrez peut-être dessiner une équation quadratique dans l'un de vos projets, de cette façon, vous apprendrez plus de choses simplement parce que vous êtes fort en mathématiques. Ou vous écrivez un programme pour trouver l'aire d'un cercle, vous donner plus d'expérience.
Dans ma courte carrière d'enseignant, j'ai constaté que si les étudiants n'avaient pas de formation en mathématiques, ils sont presque perdus lorsqu'ils font un problème financier. S'ils sont perdus au sujet du modèle, l'apprentissage de la langue elle-même devient plus difficile et honnêtement très frustrant.
Les actions de faire des mathématiques et 99% de la programmation ont très peu en commun. Les mathématiques ne sont pas nécessaires pour être un excellent programmeur. J'ai suivi plusieurs cours de niveau collégial en mathématiques, y compris, mais sans s'y limiter, des éléments d'algèbre linéaire en calcul I, II, III et plusieurs autres.
Je suis ingénieur logiciel depuis plus de 10 ans et je n'avais que rarement besoin d'utiliser autre chose que des mathématiques de base. Il y a quelques exceptions où les mathématiques sont nécessaires: comme les graphiques et d'autres domaines. Mais 99% de la programmation et du génie logiciel ne nécessitent pas de mathématiques. Cela nécessite une réflexion logique, des algorithmes, des POO, des fonctions, des problèmes de décomposition, etc.
1) En apprenant la programmation, vous rencontrerez un jargon technique (c'est-à-dire un algorithme). Pour analyser l'algorithme, il faut avoir une idée de la nature des fonctions polynomiales, logarithmiques et exponentielles.
2) Sur la base d'une application informatique, il faut avoir une idée des mathématiques discrètes et des mathématiques continues pour écrire une solution significative. On peut mieux comprendre cela en passant par de tels cours comme
---> Mathématiques pour l'informatique
---> Codage de la matrice: algèbre linéaire par le biais d'applications informatiques .
Pour un débutant, je pense que les langages typés dynamiques comme python
/scheme
sont les premiers meilleurs langages de programmation. Langages typés statiques comme Java
/C++
ne sont pas les meilleurs pour commencer. Un logiciel ouvert publié par "MIT/UOC-Berkeley/Stanford" peut vous guider mieux qu'un programme d'études collégiales ordinaire. Je te parie!!!
Cela dépend honnêtement du type de programmation que vous faites.
Si vous créez des applications Web légères avec une certaine logique, vous n'avez probablement pas besoin des cours de mathématiques plus avancés dont de nombreux diplômes ont besoin. Si vous travaillez avec des choses qui sont un peu plus gourmandes en processeur, vous aurez besoin de plus de calculs. Si vous travaillez avec n'importe quel domaine scientifique, vous voudrez vraiment garder vos références de calcul à portée de main.
Un autre endroit où vous aurez besoin de mathématiques est si vous voulez écrire des jeux. La seconde où vous voulez vous déplacer en diagonale, vous devrez commencer à faire des calculs minutieux afin de ne pas vous retrouver avec des personnages qui accélèrent si vous passez à un bloc vers le NE.
Cela dit, vous n'avez pas nécessairement besoin d'apprendre les mathématiques, puis d'apprendre la programmation. Il est parfaitement valable d'apprendre la programmation, puis de prendre des mathématiques avancées. J'ai commencé à coder avant de mettre le pied dans une classe Calc ou Trig et je me suis bien débrouillé. Quand j'ai commencé à apprendre les mathématiques avancées, j'ai trouvé que le codage m'a vraiment aidé, car je pouvais explorer le sujet plus en modifiant les variables dans un script rapide que je ne pouvais le faire avec un stylo et du papier.
Le fondement théorique de l'informatique (qui est plus qu'une simple programmation) est de nature mathématique. De la définition même de la calculabilité à l'analyse et l'expression d'algorithmes en passant par les spécifications des langages de programmation, tout repose sur une grande variété de mathématiques. Voir cette page Wikipedia pour un aperçu du type de calcul impliqué.
La plupart d'entre eux ne sont pas vraiment nécessaires pour savoir si tout ce que vous voulez faire, c'est du sling code. En ce qui concerne les mathématiques appliquées, à moins que vous n'entrez dans un domaine qui nécessite de sérieuses compétences en calcul numérique (simulations physiques détaillées, analyse de signal, analyse financière et prédiction, etc.), vous n'utiliserez probablement rien de plus complexe que l'algèbre de base quotidiennement.
Réponse simple; Les mathématiques vous font rapide. Bien sûr, vous pouvez rechercher sur Google/se/wikipedia vos problèmes de codage, mais faites suffisamment de calculs et vous n'en aurez pas besoin. Croyez-le ou non, le cerveau humain correctement formé est plus rapide que Google. De plus, plus vous en savez sur les mathématiques, plus vite vous serez en mesure de comprendre les résultats que google/se/wiki vous donne, et moins vous aurez besoin d'explorer pour comprendre ce que les gens vous disent. Dans le processus de résolution de vos problèmes de programmation, vous finirez par apprendre les mathématiques de toute façon, mais si vous vous concentrez sur les mathématiques, ce sera un processus beaucoup plus efficace.
Votre question est un peu comme un musicien de rock demandant pourquoi il aurait besoin d'une formation musicale formelle. Est-il possible de réussir sans cela? Sûr. Cela vous rend-il beaucoup plus dur à cuire si vous y allez? Absolument.
Réponse un peu plus compliquée - Lorsque les mathématiciens et les programmeurs utilisent le mot "solution" (pour les problèmes, c'est-à-dire les équations pas - c'est-à-dire pas les "racines") - ils signifient à peu près la même chose. Apprendre à résoudre des problèmes mathématiques vous aide à apprendre à résoudre des problèmes de programmation.
BTW - et aucune infraction destinée à qui que ce soit - quiconque dit qu'il est un bon programmeur mais qu'il déteste les mathématiques est un gros gros menteur. Ce qui s'est passé, c'est qu'ils ont été exclus des mathématiques formelles par un mauvais professeur ou un mauvais professeur d'université et depuis lors, ils ont l'impression de "ne pas être bons en mathématiques". Toute personne sans trouble d'apprentissage (c'est-à-dire toute personne capable d'apprendre une langue OO) est capable de tout jusqu'à Sophomore Calculus inclus.