Sujets ou domaines mathématiques qui augmentent les compétences en programmation informatique? [fermé]

14

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 areaseront 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.

Charitoo
la source
1
Je suis surpris que StackOverflow ait déclaré que cette question était hors sujet. De mon point de vue (un programmeur à la retraite), cette question devrait être l'une des questions les plus importantes pour SO.
scaaahu
1
StackOverflow est vraiment plus sur des problèmes de programmation spécifiques. Ce serait mieux sur CSEducators, et peut avoir travaillé sur SoftwareEngineering.
Nat
1
Nous avons déjà posé des questions comme celle-ci, et elles ont toutes le même problème: elles sont trop larges et trop subjectives. La seule réponse consensuelle est: tout cela .
Raphael
@Raphael Tout d'abord, je respecte la décision de Mod. Cependant, je voudrais poser une question au nom du PO. Y a-t-il une façon d'améliorer la question afin qu'elle puisse être rouverte? S'il n'y a aucun moyen de l'améliorer, y a-t-il un autre SE que le PO peut aller poser cette question? (De toute évidence, le PO a déjà essayé SO et je sais que cela peut ne pas convenir à Academia SE car il n'est pas étroitement lié à Academia.)
scaaahu
Les questions qui demandent des solutions formelles à des problèmes spécifiques seraient bien. Les questions des conseils d'étude ne conviennent généralement pas au format SE; la raison proche "basée sur l'opinion" s'applique à tous les sites!
Raphael

Réponses:

19

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é:

  • Cryptographie : si vous êtes intéressé par la sécurité, le hachage, les signatures numériques et autres, assurez-vous d'apprendre une théorie des nombres, une théorie des groupes, une théorie des champs, une théorie des courbes elliptiques, etc.
jmite
la source