Présentation de la programmation à un mathématicien [fermé]


30

Je suis actuellement programmeur, j'ai presque 16 ans et j'ai à peu près réduit ma carrière à quelque chose impliquant un diplôme en informatique ou en génie électrique (je sais qu'ils sont très différents mais cette question concerne mon ami) mais mon ami n'est pas si sûr.

Il est très intéressé par les mathématiques et il est très bon dans ce domaine et je pense qu'il apprécierait la programmation , mais il ne veut pas l'essayer ( modifier , il est prêt à essayer , mais n'a jamais fait auparavant). Quelqu'un peut-il me donner des suggestions pour un langage ou un outil qu'il pourrait essayer de programmer (à un niveau raisonnablement basique, je suppose) pour résoudre des problèmes de mathématiques ou impliquer une sorte de mathématiques?

Comme je le dis, il aime beaucoup les mathématiques, mais je pense qu'il aimerait la programmation, le problème est que je ne veux pas qu'il soit rebuté par des choses qui ne sont pas pertinentes aux niveaux d'introduction tels que l'allocation de mémoire et al. Je sais que c'est très important, mais le fait est que je veux qu'il apprenne un peu de programmation avec les mathématiques, alors j'espère que s'il est suffisamment intéressé, il pourra commencer à apprendre la programmation en tant que programmation.

Edit: ce n'est pas qu'il ne soit pas du tout intéressé - plus qu'il n'a pas activement exploré la région auparavant, peut-être parce qu'il n'en est pas informé. Je ne voudrais pas le forcer à faire quelque chose qu'il ne veut pas, je vois cela comme un petit coup de pouce pour qu'il puisse en apprendre davantage sur la programmation. S'il ne l'aime pas - assez bien, je ne peux pas contrôler cela et je ne veux pas, mais s'il s'avère en profiter - cette poussée aura été la bonne chose.


17
Pourquoi voulez-vous pousser votre ami dans une direction qui ne l'intéresse pas?
HLGEM

3
Pour mémoire, beaucoup de programmeurs avec qui j'ai travaillé ont des diplômes en mathématiques. En plus de cela, ils sont assez bons.
AngryBird

1
Je suis d'accord avec @HLGEM. Je détesterais que quelqu'un me pousse vers des mathématiques pures et théoriques. De même, ceux qui voudraient ce truc le détesteraient s'ils étaient poussés vers le truc ennuyeux appliqué.
Job

4
Pour mettre les choses en perspective - vous avez 16 ans. Vous n'êtes pas programmeur, vous êtes un étudiant qui a fait de la programmation. Votre ami n'est pas un mathématicien, c'est un étudiant qui aime (et a appris un peu) les mathématiques. Bien que j'aime la réponse de @ perl.j, je pense que vous êtes peut-être trop ambitieux à ce sujet.
Joel Etherton

2
@ perl.j: Jusqu'à ce que quelqu'un ait le diplôme nécessaire pour montrer le "domaine d'études principal" requis comme preuve, il n'est pas mathématicien. Même quelqu'un à l'université dont la majeure est les mathématiques n'est pas encore un mathématicien.
Joel Etherton

Réponses:


60

Logo de mathématiques

Si vous voulez une langue "mathématique", Haskell est votre meilleur ami (pour votre meilleur ami). Vous pouvez facilement créer de nouvelles fonctions sans tracas. C'est la meilleure recommandation linguistique que je puisse vous donner pour votre ami. Voici quelques liens:

Mathematica

Wolfram's Mathematica est un autre intérêt qu'il pourrait avoir.

Mathematica is a computational software program used in scientific, engineering, and mathematical fields and other areas of technical computing. It was conceived by Stephen Wolfram and is developed by Wolfram Research of Champaign, Illinois.

Bien que cela coûte cher, cela en vaut la peine. Voici quelques liens:

Des algorithmes

Les algorithmes sont importants pour tout programme, mais votre copain devrait commencer par ceux-ci lorsqu'il se familiarise avec une langue. Voici quelques liens supplémentaires:

J'espère que cela t'aides! Si vous avez des questions ou des commentaires, n'hésitez pas à commenter! Soit dit en passant, tous ces liens visent à libérer des ressources. Si vous voulez un livre imprimé, j'ai quelques recommandations, laissez un commentaire!



2
Je suis majeur en mathématiques et je peux recommander Haskell comme génial du point de vue mathématique. J'aime aussi lire certains trucs théoriques qui vont avec, beaucoup plus que la plupart des langues.
Theo Belaire

2
S'il apprend Haskell, il peut même passer plus tard à Agda , un langage typé de manière appropriée pour faire des preuves.
Peter C

4
@ SK-logic Comment pouvez-vous dire cela? Les mathématiques consistent à apprendre de nouveaux systèmes logiques et à en raisonner (n'oubliez pas que les mathématiciens ont inventé la machine de Turing). Vous pensez honnêtement que quelqu'un qui peut gérer les mathématiques ne peut pas gérer l'idée de mutation variable? Et mon point est, pour faire quelque chose d'aussi simple que la mutation variable dans Haskell nécessite une monade de magasin! Dire que c'est plus facile que x = x + 1ridicule.
JeremyKun

2
@Bean, c'était en fait ma première réaction à une déclaration d'affectation (et je ne connaissais rien d'autre que les équations linéaires primitives des mathématiques à l'époque). Depuis lors, j'ai vu la même réaction à plusieurs reprises. J'ai délibérément essayé d'introduire des concepts de programmation fonctionnelle à ceux qui n'avaient aucune expérience en programmation, passant progressivement à l'impératif. C'était toujours facile d'abord, et tout ça "WTF?!?" les regards n'ont toujours commencé qu'avec l'introduction des concepts impératif et POO.
SK-logic

18

La programmation fonctionnelle et les langages de la famille ML ou Haskell ont tendance à bien convenir à l'esprit des mathématiciens.


Très vrai! Des listes infinies et tout ce qui est génial pour les esprits mathématiques.

14

S'il se spécialise en mathématiques, il finira sans aucun doute par faire un peu de programmation, sinon dans des langages de bas niveau comme C ++, puis dans des langages de niveau supérieur, spécifiques aux mathématiques, comme Maple ou Mathematica selon ce qu'il fait.

De plus, selon son domaine de recherche, il pourrait finir par faire des mathématiques appliquées ou des analyses statiques, qui nécessiteront toutes deux une programmation importante. Il ferait mieux de s'habituer à la programmation maintenant, peu importe ce qu'il décide.


1
Vous pouvez également essayer d'introduire Python dans son esprit avec Sage ( sagemath.org ).
Anton Barkovsky,

Voici un autre langage spécifique aux mathématiques de niveau supérieur: math.uiuc.edu/Macaulay2
RyanTM

Je vous suggère juste de lui permettre de découvrir la programmation. Quand il y est exposé et qu'il sera certainement obligé de faire quelque chose qui l'oblige à faire quelque chose dans un langage mathématique spécifique, il l'aimera ou le détestera. S'il l'aime quand cela se produit, il pourra sélectionner les langues qui lui conviennent le mieux. Ce n'est pas que vous ne devriez pas aider votre ami, s'il n'a montré aucun intérêt, alors vous devriez le laisser tomber.
Ramhound

12

Apprenez-lui Haskell. C'est une langue où l'on peut penser comme en mathématiques:

  • Une fonction est quelque chose qui mappe l'entrée à la sortie
  • Les articles sont évalués au besoin
  • Inférence de type et système de type fou
  • Syntaxe pratique
  • Grande communauté (par exemple sur StackOverflow )
  • Monades

Je vous suggère de lui montrer http://learnyouahaskell.com , l'un des meilleurs tutoriels pour Haskell.


11

En tant que personne qui a étudié les mathématiques (j'ai un BS en mathématiques pures et je viens de recevoir ma maîtrise en mathématiques appliquées / statistiques) et j'ai réalisé plus tard le plaisir / l'aspect pratique / l'importance de la programmation plus loin dans ma carrière, j'apprécie vraiment cette question. J'aimerais avoir un ami comme vous il y a 10 ans pour me pousser vers la programmation.

Vous devriez tous les deux consulter Project Euler . Qu'Est-ce que c'est?

Project Euler est une série de problèmes de programmation mathématique / informatique difficiles qui nécessiteront plus que de simples connaissances mathématiques pour être résolus. Bien que les mathématiques vous aideront à arriver à des méthodes élégantes et efficaces, l'utilisation d'un ordinateur et de compétences en programmation sera nécessaire pour résoudre la plupart des problèmes.

Bien que ce ne soit pas une suggestion spécifique à un langage, ce serait une grande motivation pour commencer la programmation (surtout s'il y a déjà un intérêt pour les mathématiques). Les problèmes commencent très facilement et facilement accessibles mais deviennent rapidement très délicats et / ou difficiles. Un bon défi et une bonne motivation que vous apprécierez tous les deux.

Quant à la langue à utiliser, j'ai de l'expérience avec C ++, R, Matlab et Mathematica qui sont tous excellents et largement utilisés dans la communauté mathématique. Mais plus spécifiquement, je suggère fortement d' apprendre Python qui est très utile pour les mathématiques mais qui n'est pas aussi limité aux mathématiques que certains autres (au cas où il voudrait plus d'options plus tard dans la vie). Il est facile de démarrer avec Python, mais il y a des tonnes de choses à apprendre. Il est également gratuit contrairement à certains autres. C ++ pourrait également être un bon choix, mais pourrait avoir plus d'obstacles dès le début.


+2 pour Project Euler, allait ajouter un commentaire sur la question principale jusqu'à ce que je voie votre réponse. OP et son ami devraient définitivement se mêler de ça.
cobaltduck

10
  • Pour les mathématiciens, le plus grand allumage est les algorithmes. Votre ami doit commencer à les implémenter en Python (son convivial).

  • Les environnements informatiques numériques comme MATLAB seront utiles pour les manipulations matricielles, le traçage des fonctions et des données, la mise en œuvre d'algorithmes.


10

Cela dépend du domaine des mathématiques qui l'intéresse.

S'il est plus dans l'algèbre abstraite ou la combinatoire, il aimerait probablement Haskell car le système de type complexe permet la programmation directe d'une variété de mathématiques. L'ATS pourrait également être une option.

Je recommanderais Learn You a Haskell for a Great Good pour un tutoriel d'introduction et des structures de données purement fonctionnelles pour les algorithmes.

S'il est plus dans l'analyse matricielle, les équations différentielles ou les systèmes dynamiques, je recommanderais Matlab , NumPy ou Octave . APL via Dyalog pourrait également être intéressant; bien que je ne l'aurais pas commencé là-dessus. Les recettes numériques , en C ++, peuvent être adaptées pour servir de bon guide aux algorithmes.

S'il veut faire des statistiques, alors R est le choix naturel.


5

Je suis un étudiant diplômé en mathématiques et j'ai fait mon premier cycle en informatique. Je tiens un blog intitulé Math ∩ Programming dans lequel j'explore les applications des mathématiques à la programmation (et vice versa), et je dois admettre que je trouve la plupart des aspects moins mathématiques de l'informatique plutôt secs et sans inspiration (en gros, mon opposition à tous les hacks ridicules qui entrent dans la programmation de systèmes dans mon expérience dans l'industrie).

D'un autre côté, sur mon blog, je regarde des problèmes comme la reconnaissance faciale (un peu d'algèbre linéaire), les méthodes de chiffrement, les machines de Turing et les automates cellulaires, les modèles de prédiction de l'activité des tueurs en série, les moteurs de recherche et un tas d'autres concepts mathématiques . La meilleure partie est que j'arrive à mettre en œuvre les idées et les miennes!

Pour amener votre ami à aimer la programmation comme le reste d'entre nous, trouvez-le vraiment intéressantprojet. L'aspect programmation ne restera pas sans son travail vers un produit qu'il trouve beau. En ce qui concerne les langues, je recommande Mathematica, Racket (un dérivé de Scheme très convivial mais toujours puissant), Python et Haskell. Mathematica est probablement le meilleur, car il peut implémenter sélectivement ses propres fonctions mathématiques et utiliser les bibliothèques intégrées de Mathematica pour terminer le projet (par exemple, écrire une fonction qui calcule les coefficients de Fourier, puis utiliser Mathematica pour effectuer le reste de l'analyse, par exemple filtrage, génération d'images, etc.). Même les sujets de base comme l'intégration donnent des projets fascinants (différentes règles de quadrature, l'intégration de Monte Carlo, une transition en douceur vers l'apprentissage automatique avec de grands ensembles de données).

En outre, il semble que beaucoup de réponses ici proviennent de personnes qui ne font pas de mathématiques ou qui n'ont pas utilisé les langues qu'elles suggèrent pour faire des logiciels mathématiques. La raison pour laquelle les gens recommandent Haskell est parce qu'elle se rapproche le plus possible d'une implémentation littérale de la théorie des catégories et correspond bien à certaines définitions mathématiques de certains concepts de base. Mais si votre ami est proche de votre âge, alors il n'est pas prêt pour la théorie des catégories mathématiquement (cette maturité est plus ou moins inutile jusqu'à la fin des études, et méchante à enseigner), et en tant que première langue, Haskell a le plus raidecourbe d'apprentissage des langues proposées (peut-être que Prolog est plus raide). J'ai utilisé Haskell pour implémenter un compilateur Javascript, et je me suis retrouvé avec un très beau morceau de code élégant, mais pour des choses intuitives comme la mutation variable, vous devez déjà vous plonger dans des monades non triviales.

Python et Mathematica seront beaucoup plus conviviaux et Mathematica a la courbe d'apprentissage la plus superficielle simplement parce que toutes les bibliothèques sont regroupées dans une interface utilisateur agréable avec une documentation impressionnante (appuyez simplement sur F1!). D'un autre côté, il y a un livre dont j'ai entendu parler (mais pas lu) qui fournit à la fois une transition vers les mathématiques avancées et une introduction à Haskell simultanément . Il semble avoir des critiques positives sur Amazon, alors vous voudrez peut-être le vérifier. Il peut passer à des langages comme C # et Java s'il veut faire des trucs de l'industrie, mais plus probablement il n'aura jamais besoin d'entrer dans cette jungle (et beaucoup de trucs de mathématiques de l'industrie sont de la pure Matlab de toute façon).

Mais comme je l'ai dit, avec le bon projet, l'apprentissage de la langue devient une joie, quel que soit le projet.


3

Si votre ami aime la logique formelle et trouve l'intelligence artificielle intéressante, il aimerait peut-être jeter un œil à Prolog .

Avec ce langage, vous énoncez vos prédicats (hypothèses initiales, "faits") et règles d'inférence ("relations"), puis posez des questions.

Prolog part ensuite et détermine si la question peut être répondue en utilisant uniquement les faits et les relations donnés, et si oui, vous donne la réponse.

Alors vous lui dites que "Tom est un chat" et "tous les chats sont des animaux" et vous demandez "est-ce que Tom est un animal?" et vous obtiendrez la réponse "vrai".

Ou vous pouvez lui demander de "lister tous les animaux que vous connaissez" et vous obtiendrez la liste des articles "tom".

Bien sûr, la syntaxe est un peu plus compliquée que cela, mais vous avez l'idée générale.


Prolog est frustrant proche de la logique du premier ordre, mais vraiment incompatible, car il n'a aucun moyen de distinguer "non prouvé" et "faux". C'est un langage soigné à certains égards, mais je ne le pousserais pas sur un mathématicien et l'appellerais une logique de programmation.
David Thornley

Ne pouvez-vous pas simplement tester la négation?
Bill Michell

2

La meilleure façon d'encourager votre ami à l'essayer pourrait être de lui faire commencer à programmer sans trop penser au fait qu'il programme.

Une fois qu'il est prêt à traiter davantage de "programmation", vous pouvez à la fois commencer avec le même livre et apprendre la programmation à partir d'une base plus mathématique. Deux de mes livres préférés actuels sont:

SICP est librement consultable sur le site Web de MIT Press .

Si votre ami a une inclinaison mathématique, Lisp ne présentera aucune difficulté et vous évite d'avoir à apprendre une syntaxe particulière. Je pense que Lisp est plus facile à apprendre que Haskell.


1

Je suis d'accord avec le Haskell, mais d'un point de vue pratique, il devrait également apprendre une langue sur une machine abstraite largement utilisée. Je veux dire un langage JVM ou un langage .NET bien sûr.

Il y a des langues sur ces plateformes qui sont un peu plus intéressantes que les langues phares. Sur la JVM, jetez un œil à Clojure et Scala. Sur la plate-forme .NET, jetez un œil à F #.

Il y avait aussi un langage .NET de Microsoft Research appelé c-omega qui était très intéressant, mais ce n'était qu'un projet de recherche.


1

Matlab est couramment utilisé pour la programmation mathématique et scientifique. C'est un langage basé sur un script, pas difficile à apprendre et tous les problèmes de mémoire sont cachés à l'utilisateur.

Le génie logiciel et le génie électrique peuvent être combinés en génie informatique.


0

Si votre ami ne veut pas essayer la programmation, je ne vois pas pourquoi vous voulez forcer le problème. Je pense que la clé pour être programmeur est d'être disposé à apprendre, et s'il ne veut pas apprendre, la programmation n'est probablement pas pour lui

Mais cela étant dit, votre meilleur pari pourrait être de créer vous-même un petit programme et de le lui montrer. Peut-être laisser certaines parties inachevées et voir si vous pouvez l'intéresser à vous aider à le terminer. Je sais pour moi, les algorithmes et la logique derrière un programme sont beaucoup plus intéressants que d'écrire la syntaxe, alors essayez peut-être de lui faire vous aider avec la logique du programme, puis vous allez coder la chose et lui laisser voir le résultats de celui-ci.

S'il montre un intérêt pour le code source, montrez-lui comment écrire ses propres trucs. Personnellement, je pense que la langue elle-même n'a pas d'importance tant qu'elle est facile à apprendre et a beaucoup de documentation.


0

Il existe une bibliothèque mathématique gratuite et une communauté autour de Python. Je commencerais par "Sage", il devrait vraiment aimer l'utiliser et apprendra la programmation en Python par ailleurs.


0

Je pense que vous devriez montrer à votre ami différentes variantes, comme:

  • C
  • LISP / Scheme
  • DE BASE
  • bourne-shell
  • Prolog

Je pense que C et LISP sont de bons points de départ, montrant que différentes langues peuvent être mieux adaptées à différentes tâches. Je ne crois pas à utiliser Haskell ou Erlang pour tout.

Le code machine (ou assembleur) pour un simple processeur peut aussi être intéressant. J'ai toujours été heureux d'avoir commencé avec le code machine sur mon premier C64 . ( MOS 6510 ) Expérience pratique difficile à obtenir en tant qu'adulte avec un temps limité à "gaspiller".


Je dois être en désaccord. Pourquoi un jeune enfant, intéressant en mathématiques, serait-il attiré par le code machine? Et pourquoi C? L'assemblage suppose beaucoup trop de connaissances sur les processeurs. C fait également de nombreuses exigences qu'il vaut mieux laisser à quelqu'un qui veut apprendre une programmation sérieuse: pointeurs, registres, portée, types. Pour une première introduction à la programmation pour une telle personne, quelque chose qui se concentre sur des algorithmes ou sur des applications d'idées mathématiques (probabilité, aléatoire, simulations), est bien mieux. Python, Lisp / Forth, Basic même. Bourne-shell ?? Pourquoi? ...
Assad Ebrahim

0

Pour moi, la programmation commence par vouloir "faire quelque chose", un "et si?" question:

  • "Je voudrais créer mon propre site Web", alors renseignez-vous sur HTML, etc.

  • "Je déteste devoir cliquer sur X ou voir Y sur ce site Web à chaque fois que je visite. N'y a-t-il pas un moyen d'automatiser cela?" Vous en apprendrez plus sur les bookmarklets ou sur l'écriture d'extensions de navigateur.

  • «Je veux cataloguer toute ma musique et aucun des outils que j'ai vus ne le fait comme je le souhaite», vous apprenez donc les bases de données.

  • "Je veux faire le suivi des dépenses de mon Math Club", vous en apprendrez plus sur les feuilles de calcul, les macros de programmation ou peut-être même les bases de données.

Pour que le lecteur soit vraiment là, le problème sous-jacent doit venir de lui . J'essaierais de trouver un problème qu'il veut résoudre, puis je choisirais un outil / langage / système qui lui permettrait d'automatiser / programmer la solution.


-2

Haskell et Mathematica sont la voie à suivre, à mon avis. La plupart des langages fonctionnels sont également bons pour les mathématiques. Python est également bon, consultez la documentation mathématique .

Ce module est toujours disponible. Il donne accès aux fonctions mathématiques définies par la norme C.

Ces fonctions ne peuvent pas être utilisées avec des nombres complexes; utilisez les fonctions du même nom du module cmath si vous avez besoin de la prise en charge de nombres complexes. La distinction entre les fonctions qui prennent en charge les nombres complexes et celles qui ne le sont pas est faite car la plupart des utilisateurs ne veulent pas apprendre autant de mathématiques que nécessaire pour comprendre les nombres complexes. La réception d'une exception au lieu d'un résultat complexe permet de détecter plus tôt le nombre complexe inattendu utilisé comme paramètre, afin que le programmeur puisse déterminer comment et pourquoi il a été généré en premier lieu.

Les fonctions suivantes sont fournies par ce module ...

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.