Quels sont les concepts mathématiques de base qu’un bon développeur doit connaître?

Depuis que j’ai terminé mes études dans une très petite école en 2006 avec un programme mal formé et dépassé (je suis un étranger et je ne connaissais pas mieux l’école à l’époque), j’ai réalisé que beaucoup de concepts de base me manquaient. perspective mathématique et logicielle qui sont principalement les fondements d’autres concepts supérieurs.

C’est-à-dire que j’ai essayé d’écouter / regarder les didacticiels ouverts du MIT sur l’ introduction aux algorithmes, mais j’ai rapidement compris qu’il me manquait plusieurs concepts mathématiques pour mieux comprendre le cours.

Alors, quels sont les concepts mathématiques de base qu’un bon ingénieur en logiciel devrait connaître? Et quels sont les livres / sites possibles que vous me recommanderez?

Math pour les programmeurs . Une bonne lecture

L’algèbre booléenne est fondamentale pour comprendre les structures de contrôle et la refactorisation. Par exemple, j’ai vu de nombreux bugs causés par des programmeurs qui ne connaissaient pas (ou ne pouvaient pas utiliser) la loi de deMorgan. Comme autre exemple, combien de programmeurs reconnaissent immédiatement que

if (condition-1) { if (condition-2) { action-1 } else { action-2 } else { action-2 } 

peut être réécrit comme

 if (condition-1 and condition-2) { action-1 } else { action-2 } 

Les mathématiques discrètes et la combinatoire sont extrêmement utiles pour comprendre les performances de divers algorithmes et structures de données.

Comme mentionné par Baltimark, l’induction mathématique est très utile pour raisonner sur les boucles et la récursivité.

La théorie des ensembles est la base des bases de données relationnelles et du SQL.

À titre d’analogie, permettez-moi de souligner que les charpentiers utilisent couramment diverses techniques d’étape de la technique pour construire des choses comme les toits et les escaliers. Cependant, une connaissance de la géomésortinge vous permet de résoudre des problèmes pour lesquels vous n’avez pas de règle empirique. C’est comme apprendre à lire via la phonétique plutôt que la reconnaissance visuelle d’un vocabulaire de base. 90 +% du temps il n’y a pas beaucoup de différence. Mais lorsque vous vous trouvez dans une situation inconnue, il est TRES agréable d’avoir les outils nécessaires pour trouver la solution vous-même.

Enfin, la rigueur / précision requirejse par les mathématiques est une préparation très utile à la programmation, quelle que soit la technique spécifique. Encore une fois, bon nombre des bogues de la programmation (ou même des spécifications) que j’ai vus au cours de ma carrière ont des idées vagues sur leur cause.

Je voudrais aller avec les champs que Landon a déclaré:

Mathématiques discrètes, algèbre linéaire, combinatoire, probabilités et statistiques, théorie des graphes

et append une logique mathématique.

Cela vous donnerait une emprise sur la plupart des domaines de CS. Si vous voulez aller dans des domaines spéciaux, vous devez vous plonger dans certains domaines, notamment:

 Computer graphics -> Linear Algebra Gaming -> Linear Algebra, Physics Computer Linguistics -> Statistics, Graph Theory AI -> Statistics, Stochastics, Logic, Graph Theory 

Par ordre d’importance:

  • Compter (nécessaire pour les boucles)
  • Addition, soustraction, multiplication, division.
  • Algèbre (vraiment nécessaire pour comprendre l’utilisation des variables).
  • Algèbre booléenne, logique booléenne et binary.
  • Exposants et logarithmes (c.-à-d. Comprendre la notation O (n)).

Tout ce qui est plus avancé est généralement spécifique à un algorithme ou à un domaine. Selon les domaines qui vous intéressent, les éléments suivants peuvent également être pertinents:

  • Algèbre linéaire et sortinggonomésortinge (visualisation 3D)
  • Mathématiques discrètes et théorie des ensembles (conception de bases de données, conception d’algorithmes, conception de compilateurs).
  • Statistiques (enfin, pour les applications statistiques et / ou scientifiques / économiques. Peut-être aussi utile pour la conception d’algorithmes).
  • Physique (pour les simulations).

Comprendre les fonctions est également utile (ne vous souvenez pas du terme mathématique pour ce domaine), mais si vous savez programmer, vous le ferez probablement déjà.

Mon sharepoint vue est le suivant: un enfant de dix ans devrait connaître suffisamment de mathématiques pour pouvoir comprendre la programmation. Il n’y a pas vraiment beaucoup de mathématiques requirejses pour la compréhension de base des choses. Tout dépend de la logique, vraiment.

“Proof by induction” est un concept mathématique de base à connaître pour les programmeurs.

Notation Big O dans l’parsing générale des algorithmes et en relation avec les collections standard (sorting, insertion et suppression)

Pour un calcul discret, voici une série de 20 conférences de l’Université Arsdigita. Chacun dure environ une heure et vingt minutes.

Commencez avec ce que nous appelons les gens du CS “mathématiques discrètes”. Le calcul et l’algèbre linéaire peuvent aussi s’avérer très utiles car ils vous permettent d’accéder à de nombreux domaines d’application. Une fois ces trois notions maîsortingsées, optez pour la théorie des probabilités. Celles-ci vous permettront d’accéder à 95% (je l’ai fait) de domaines d’application.

Les mathématiques concrètes couvrent la plupart des sujets principaux. Un bon livre sur les mathématiques discrètes, comme les mathématiques discrètes de Rosen et ses applications , comblera toutes les lacunes.

Je pense que cela dépend de votre concentration. Il y a quelques années, j’ai acheté la série d’Art of Computer Programming de Donald Knuth. Après avoir regardé les livres, j’ai réalisé à peu près tout ce qui est des preuves de calcul. Si vous êtes intéressé par le développement de vos propres algorithmes génériques et de leurs preuves, alors je vous recommande de comprendre les livres ci-dessus, car c’est ce à quoi vous faites face dans ce monde. D’un autre côté, si vous ne voulez / devez utiliser que des routines de sorting / recherche / arborescence / etc …, la notation O au minimum, le calcul booléen et l’algèbre générale seront corrects. Si vous avez affaire à la 3D, alors la géomésortinge et le sortingg sont aussi.

J’ai tendance à être plus utile que de faire des preuves, et même si je pense avoir fait des choses intelligentes au fil des ans, je ne me suis jamais assis et j’ai développé une nouvelle routine de sorting. Le meilleur conseil que je puisse donner est d’apprendre ce dont vous avez besoin dans votre domaine, mais exposez-vous à des niveaux plus élevés pour savoir qu’il existe et combien il y a à apprendre, vous n’obtiendrez pas beaucoup de croissance.

Je dirais la logique booléenne. ET, OU, XOR, PAS. En tant que programmeur, j’ai trouvé cela plus souvent que le rest des concepts mathématiques.

L’algèbre et les statistiques de base sont de bons points de départ et le fondement de nombreux autres domaines.

Voici un exemple simple qui me déconcerte quand je vois des développeurs qui ne le comprennent pas:
– Ordre des opérations

Le chapitre 1 de “L’art de la programmation informatique” vise à fournir exactement cela.

Il y avait un livre qui a été recommandé … le titre était quelque chose comme Concrete Mathematics. C’était recommandé dans quelques questions.

De retour à l’école, certains de mes instructeurs ont dit que pour les applications professionnelles, tout ce que vous devez savoir, c’est append, soustraire, multiplier et diviser. Toutes les autres formules que le demandeur connaîtra et vous informeront de ce qui est nécessaire. Maintenant, réalisez que c’est pour le financement des rapports et des écoles axées sur les applications. À ce jour, cela a été vrai pour moi. Je n’ai jamais eu besoin de savoir plus que cela.

Consultez le livre Foundations of Computer Science
Ce livre est écrit par: Al Aho et Jeff Ullman et le livre entier est disponible en ligne.

C’est ce que les auteurs disent dans leur préface sur le but de ce livre:

Fondements de l’informatique couvre des sujets souvent divisés
entre un cours de mathématiques discret et une séquence de deuxième niveau en informatique
science dans les structures de données. Nous avons voulu sélectionner le mathématique
les fondations avec un œil sur ce dont l’utilisateur a vraiment besoin, plutôt que
ce qu’un mathématicien pourrait choisir. ”

un site pour parfaire les mathématiques: http://www.khanacademy.org/

Mes connaissances en mathématiques sont vraiment médiocres (géologue de formation), mais j’ai suivi un cours de mathématiques discret au lycée et je les utilise tous les jours en tant que programmeur. C’est probablement la classe la plus précieuse que j’ai prise dans toute ma formation en ce qui concerne mon métier actuel.

Mathématiques discrètes
Algèbre linéaire
Combinatoire
Probabilité et statistiques
La théorie des graphes

  • Algèbre de Boole
  • Set Theory
  • Mathématiques discrètes

Eh bien, cela dépend de votre objective. Comme quelqu’un l’a dit, l’algèbre linéaire, la combinatoire, la probabilité et la statistique et la théorie des graphes sont importantes si vous voulez résoudre des problèmes difficiles. La croissance asymptotique des fonctions (notation bit-oh) est très importante. Vous devrez également maîsortingser les sommations et les séries si vous avez besoin d’parsingr des algorithmes plus complexes (voir l’annexe sur Cormen & autres Intro to Algorithms).

Même si vous êtes dans “Java for the enterprise” ou “PHP côté serveur”, vous trouverez quelques complexités de statistiques et d’algorithmes (donc combinatoires, d’induction, de sommations, de séries, etc.) utiles lorsque votre patron veut que vous obteniez le serveur pour travailler plus vite, et l’ajout de nouveau matériel ne semble pas aider. 🙂 Je suis passé par là une fois.

  • Algèbre de Boole
  • Set Theory

Pourquoi est-ce que tout le monde inclut la probabilité et les statistiques dans la liste d’or sans mentionner le calcul? On ne comprend pas ce que sont les probabilités et les statistiques sans au moins une connaissance pratique des limites, des dérivés, des intégrales et des séries. Et dans l’ensemble, le calcul (avec l’algèbre linéaire) est le cheval de bataille de toutes les mathématiques.

Je pense que les algorithmes et la théorie ont une grande importance. Être capable de trouver une solution rapide et correcte est ce qui différencie les bons programmeurs du rest. En outre, être capable de prouver votre algorithme (en utilisant des techniques de preuve standard – induction, contradiction, etc.) est tout aussi important.

Oui, je dirais qu’une compréhension de base de l’induction aide à comprendre ce que n représente dans les algorithmes. Certaines structures logiques et discrètes sont également utiles.

Les probabilités et les statistiques sont très utiles si vous devez faire quelque chose qui ressemble à un apprentissage automatique.

Je couvre l’essentiel dans mon article de blog ” Computing Your Skill ” où je discute du fonctionnement de l’algorithme TrueSkill de Xbox Live.