Généralement, les programmeurs informatiques mathématiciens ou ayant une formation en mathématiques sont très bons en termes d'algorithmes et de programmation informatique en général.
Ce que je ne dis pas:
Les mathématiques sont nécessaires pour être un bon programmeur informatique. Les mathématiques sont nécessaires pour la programmation. Les bons mathématiciens sont de bons programmeurs et vice versa
Ce que je dis
J'aimerais apprendre quelques mathématiques parce que je crois que cela fera de moi un meilleur programmeur. Quels domaines / sujets de mathématiques m'aideront à devenir un meilleur programmeur? Les réponses au formulaire math topic - corresponding cs area
seront appréciées.
NB: J'ai demandé ceci sur StackOverflow où il a été déclaré hors sujet. Je veux l'apprendre pendant mon temps libre comme je l'ai fait avec la programmation informatique. Merci d'avance.
la source
Réponses:
Ainsi, il existe de nombreux domaines des mathématiques qui sont pertinents pour la science de la CS, mais pour la programmation en particulier:
La théorie des graphes : c'est la grande. Les graphiques et les arbres sont partout. Réseaux, cartes, chemins dans les jeux vidéo. Même des choses comme la résolution d'un cube Rubiks peuvent être modélisées comme un algorithme graphique et résolues avec A *.
Mathématiques discrètes : outre la théorie des graphes, la connaissance de ce domaine en général est utile. Il est plein de preuves par induction, qui sont très utiles pour comprendre la récursivité, ce qui est très utile en programmation, en particulier avec les structures de données. Connaître les ensembles, le comptage, l'inclusion-exclusion, la logique booléenne, etc. peut être utile de temps en temps.
Théorie des types: sans surprise, la connaissance de la théorie des types aide à comprendre la programmation dans les langages typés, et plus largement, à utiliser les types comme moyen de garantir certaines propriétés d'exactitude. Connaître la théorie du sous-typage vous aide à comprendre la covariance et la contravariance dans les langages de type Java. Connaître des choses comme le polymorphisme paramétrique est évidemment utile lors de l'apprentissage d'un langage de type lourd comme Haskell ou Purescript, mais des langages comme Scala, TypeScript et Rust sont de plus en plus répandus dans l'industrie, et les types sont à leur cœur.
Si vous prenez celui-ci à son extrême, vous obtenez des choses comme Coq et Agda et Idris, qui peuvent être utilisées pour prouver des propriétés de correction extrêmement précises sur les programmes.
Calculabilité et théorie de la complexité : savoir quand un problème est insoluble ou NP-difficile, est utile, car vous ne perdrez pas des heures à creuser la tête pour un moyen rapide de le faire. De même, connaître certaines des théories des algorithmes d'approximation, de la tractabilité à paramètres fixes ou des algorithmes exponentiels à base basse peut vous aider lorsque vous avez vraiment besoin de résoudre un problème NP-difficile.
Théorie des automates: de nombreux problèmes peuvent être modélisés avec différentes machines à états, il est donc utile de comprendre leurs propriétés.
Il existe également des domaines spécifiques au domaine:
Statistiques: si vous faites du machine learning ou du big data, c'est un must.
Algèbre linéaire / calcul vectoriel : ces deux éléments sont importants pour l'apprentissage automatique, les graphiques, les simulations ou le traitement d'image / audio.
Théorie du réseau : si vous travaillez avec des compilateurs ou que vous optimisez un programme, celui-ci revient tout le temps. Points fixes partout!
Théorie des catégories: pas nécessaire de coder, mais utile pour tout ce qui est profondément ancré dans la théorie des types.
Edit: ne peux pas croire que j'ai oublié:
la source