Quels sont les concepts mathématiques de base qu’un bon développeur devrait connaître ?[fermé]

StackOverflow https://stackoverflow.com/questions/52176

Question

Depuis que j'ai obtenu mon diplôme d'une très petite école en 2006 avec un programme mal conçu et dépassé (je suis étranger et je ne connaissais pas de meilleure école à l'époque), j'ai réalisé que j'avais raté beaucoup de concepts de base d'un perspective mathématique et logicielle qui sont pour la plupart les fondements d'autres concepts supérieurs.

C'est à dire.J'ai essayé d'écouter/regarder le didacticiel ouvert du MIT sur Introduction aux algorithmes mais je me suis vite rendu compte qu'il me manquait plusieurs notions mathématiques pour mieux comprendre le cours.

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

Était-ce utile?

La solution

Autres conseils

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 Baltimark l'a mentionné, 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 de SQL.

Par analogie, permettez-moi de souligner que les charpentiers utilisent régulièrement diverses techniques empiriques pour construire des éléments tels que des toits et des escaliers.Cependant, une connaissance de la géométrie vous permet de résoudre des problèmes pour lesquels vous ne disposez pas d'une règle empirique « standardisée ».C'est comme apprendre à lire via la phonétique plutôt que par la reconnaissance visuelle d'un vocabulaire de base.Dans plus de 90 % des cas, il n’y a pas beaucoup de différence.Mais lorsque vous êtes confronté à une situation inconnue, c'est TRÈS agréable d'avoir les outils nécessaires pour trouver la solution vous-même.

Enfin, la rigueur/précision requise par les mathématiques est une préparation très utile à la programmation, quelle que soit la technique spécifique.Encore une fois, la plupart des bugs de programmation (ou même de spécifications) que j'ai vus au cours de ma carrière sont dus à une réflexion bâclée.

J'irais avec les champs déclarés par Landon :

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

et ajoutez une logique mathématique.

Cela vous donnerait une maîtrise sur la plupart des domaines de CS.Si vous souhaitez vous lancer dans des domaines particuliers, 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:

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

Tout ce qui est plus avancé que cela 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 trigonométrie (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 des applications statistiques et/ou scientifiques/économiques.peut-être également utile pour la conception d'algorithmes).
  • Physique (pour les simulations).

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

Mon point est :Un enfant de dix ans devrait connaître suffisamment de mathématiques pour pouvoir comprendre la programmation.Il n’y a pas vraiment besoin de mathématiques pour comprendre les choses de base.En fait, tout est question de logique.

La « preuve par induction » est un concept mathématique de base que les programmeurs doivent connaître.

Notation grand O en analyse générale d'algorithmes, et en relation avec des collections standards (tri, récupération, insertion et suppression)

Pour les mathématiques discrètes, ici est un superbe ensemble de 20 conférences de l'Université Arsdigita.Chacune dure environ une heure et vingt minutes.

Commencez par ce que nous, les utilisateurs de CS, appelons les « mathématiques discrètes ».Le calcul et l’algèbre linéaire peuvent également s’avérer très utiles car ils vous permettent d’accéder à de nombreux domaines d’application.Une fois que vous maîtrisez ces trois éléments, optez pour la théorie des probabilités.Ces 4 vous permettront d'acquérir des compétences dans 95 % (c'est moi qui l'ai inventé) des domaines d'application.

Mathématiques concrètes couvre la plupart des sujets majeurs.Un bon livre sur les mathématiques discrètes, comme celui de Rosen Mathématiques discrètes et ses applications, comblera les éventuelles lacunes.

Je pense que cela dépend de votre concentration.Il y a quelques années, j'ai acheté l'ensemble Art of Computer Programming de Donald Knuth.Après avoir regardé les livres, j'ai réalisé que presque tout n'était que des preuves de calcul.Si vous souhaitez développer vos propres algorithmes génériques et leurs preuves, je vous recommande de pouvoir comprendre les livres ci-dessus, car c'est ce à quoi vous auriez affaire dans ce monde.D'un autre côté, si vous souhaitez/devez uniquement utiliser divers tris/recherches/arborescences/etc...les routines puis la grande notation O au minimum, les mathématiques booléennes et l'algèbre générale conviendront.Si vous avez affaire à de la 3D, alors la géométrie et le trig également.

J'ai tendance à être plus du côté de l'utilisation que de faire des preuves, et même si j'aimerais penser que j'ai fait des choses intelligentes au fil des ans, je ne me suis jamais assis et n'ai jamais développé une nouvelle routine de tri.Le meilleur conseil que je puisse vous donner est d'apprendre ce dont vous avez besoin pour votre domaine, mais exposez-vous à des niveaux plus élevés pour savoir que cela existe et combien il y a encore à apprendre, vous n'obtiendrez pas beaucoup de croissance autrement.

Je dirais la logique booléenne.ET, OU, XOR, PAS.J'ai découvert qu'en tant que programmeur, nous l'utilisons plus souvent que le reste des concepts mathématiques.

L'algèbre de base et les statistiques sont de bons points de départ et constituent la base de nombreux autres domaines.

En voici une simple qui me laisse perplexe lorsque je vois des développeurs qui ne la comprennent pas :
- Ordre des opérations

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

Il y avait un livre qui avait été recommandé… le titre ressemblait à Concrete Mathematics.Cela a été recommandé dans quelques questions.

De retour à l'école, l'un de mes instructeurs disait que pour les applications commerciales, tout ce que vous devez savoir savoir additionner, soustraire, multiplier et diviser.Pour toutes les autres formules, le demandeur connaîtra et vous informera de ce qui est nécessaire.Sachez maintenant qu’il s’agit du financement d’une école axée sur les rapports et les applications.Jusqu’à ce jour, cela est resté vrai pour moi.Je n’ai jamais eu besoin d’en savoir plus.

Vérifiez le livre Fondements de l'informatique
Ce livre est écrit par :Al Aho et Jeff Ullman et l'intégralité du livre est disponible en ligne.

Voici ce que disent les auteurs dans leur préface à propos du but de ce livre :

"Fondements de l'informatique couvre des sujets que l'on trouve souvent divisés
entre un cours de mathématiques discrètes et une séquence de deuxième année en informatique
la science dans les structures de données.Notre intention a été de sélectionner le modèle mathématique
fondations en gardant un œil sur ce dont l'utilisateur d'ordinateur a réellement besoin, plutôt que
ce qu'un mathématicien pourrait choisir.

un site pour se rafraîchir en Maths :http://www.khanacademy.org/

Ma formation en mathématiques est vraiment médiocre (géologue de formation), mais j'ai pris un Mathématiques discrètes classe au lycée et j'utilise les concepts tous les jours en tant que programmeur.C'est probablement le cours le plus précieux que j'ai suivi dans toute ma formation en ce qui concerne ma profession actuelle.

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

  • Algèbre de Boole
  • Théorie des ensembles
  • Mathématiques discrètes

Eh bien, cela dépend de votre objectif.Comme quelqu'un l'a dit, l'algèbre linéaire, la combinatoire, les probabilités et statistiques et la théorie des graphes sont importants si vous souhaitez résoudre des problèmes difficiles.La croissance asymptotique des fonctions (notation bit-Oh) est très importante.Vous devrez également maîtriser les sommations et les séries si vous devez travailler sur l'analyse d'algorithmes plus complexes (voir l'annexe sur Cormen&others Intro to Algorithms).

Même si vous aimez "Java pour l'entreprise" ou "PHP côté serveur", vous trouverez certaines statistiques et complexités algorithmiques (d'où la combinatoire, l'induction, les sommations, les séries, etc.) utiles lorsque votre patron souhaite que vous obteniez le serveur. pour travailler plus rapidement, et l'ajout de nouveau matériel ne semble pas aider.:-) J'ai vécu ça une fois.

  • Algèbre de Boole
  • Théorie des ensembles

Pourquoi tout le monde inclut-il les probabilités et les statistiques dans la liste d’or sans mentionner le calcul ?On ne peut pas comprendre ce que sont les probabilités et les statistiques sans au moins une connaissance pratique des limites, des dérivées, 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 tous mathématiques.

Je pense que les algorithmes et la théorie sont d'une grande importance.Être capable de proposer un jeûne, et correct La solution est ce qui différencie les bons programmeurs des autres.De plus, ê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 vous aide à comprendre ce que n représente dans les algorithmes.Certaines structures logiques et discrètes sont également utiles.

Probabilités et statistiques sont très utiles si jamais vous devez faire quelque chose qui ressemble à de l'apprentissage automatique.

Je couvre les bases dans mon "Calculer vos compétences" article de blog dans lequel je discute du fonctionnement de l'algorithme de classement et de mise en relation TrueSkill de Xbox Live.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top