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.
Réponses:
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.
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!
la source
x = x + 1
ridicule.La programmation fonctionnelle et les langages de la famille ML ou Haskell ont tendance à bien convenir à l'esprit des mathématiciens.
la source
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.
la source
Apprenez-lui Haskell. C'est une langue où l'on peut penser comme en mathématiques:
Je vous suggère de lui montrer http://learnyouahaskell.com , l'un des meilleurs tutoriels pour Haskell.
la source
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?
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.
la source
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.
la source
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.
la source
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.
la source
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.
la source
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:
"Structure et interprétation des programmes informatiques" SICP (Abelson / Sussman)
"Land of Lisp: Apprenez à programmer en Lisp, un jeu à la fois!" (Barski) , enseigne la programmation à travers des exercices de programmation de jeux.
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.
la source
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.
la source
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.
la source
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.
la source
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.
la source
Je pense que vous devriez montrer à votre ami différentes variantes, comme:
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".
la source
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.
la source
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 .
la source