Aller enseigner aux étudiants de premier cycle un cours intitulé Introduction à la programmation informatique. Je suis un peu confus. En physique computationnelle, les scientifiques utilisent C / C ++ ou Python ou Fortran, CUDA etc ..... il est temps de construire leur base. Que dois-je utiliser? Je sais que vous pouvez apprendre un nouveau langage de programmation à tout moment de votre vie, mais c'est un choix plus sage pour moi de les élaborer tous les concepts de programmation de base et les concepts de POO plus tard.
python
c++
computational-physics
languages
Afnan Bashir
la source
la source
Réponses:
Tout d'abord, si vos étudiants de premier cycle sont comme les nôtres et n'ont eu aucune introduction préalable aux ordinateurs, attendez-vous à leur enseigner comment utiliser des trucs de base comme utiliser un éditeur approprié (c'est-à-dire pas MS Word), la ligne de commande, etc.
Je pense que la réponse dépend quelque peu de l'endroit où vous définissez l'objectif de votre cours (ou de ce que vous devez enseigner). Par exemple: Quelle est la pertinence du fonctionnement interne de l'ordinateur? Avez-vous besoin de classes et d'autres structures OOP avancées? Voulez-vous leur apprendre à produire des programmes efficaces ou êtes-vous heureux s’ils produisent des programmes de travail? N'oubliez pas non plus que vous aurez probablement besoin de tuteurs compétents.
Mais maintenant, quelque chose aux avantages et aux inconvénients des langues, je connais bien. Notez que cela provient principalement de mon expérience en tant que physicien informatique et que cela peut dépendre du domaine particulier, du groupe de travail, de l'université, etc.
Python
Je recommande généralement d'utiliser Numpy depuis presque le tout début et je suppose qu'il sera utilisé dans ce qui suit.
Avantages:
print
, Numpysavetxt
etloadtxt
, et peut-êtresys.argv
. Il peut être introduit à la volée et ne consomme pas beaucoup de temps de programmation.Désavantages:
C / C ++
Avantages:
Désavantages:
Les principaux avantages de C ++ sur C (cours, modèles) ne devraient pas être pertinents pour votre cours et ne le sont que pour des projets plus importants. Par conséquent, je choisirais C des deux, car il est plus concis.
Autres
Quelques commentaires sur les autres langues:
¹ Quel est le flux de travail standard au moins dans notre groupe.
la source
En 2014, j'aurais dit Python. En 2017, je crois de tout cœur que la langue pour enseigner aux étudiants de premier cycle est Julia.
L'enseignement est toujours un compromis. D'une part, vous voulez choisir quelque chose de suffisamment simple pour être facile à saisir. Mais deuxièmement, vous voulez enseigner quelque chose qui a du pouvoir, c'est-à-dire quelque chose qui peut grandir avec vous. Les langages dynamiques courants (Python / MATLAB / R) tombent tous facilement dans la catégorie 1 en raison de leur code passe-partout inexistant et de la facilité d'ouvrir un interprète et de cracher du code, tandis que C / C ++ / Fortran entrent dans la deuxième catégorie en tant que les langues avec lesquelles les principaux logiciels hautement performants du monde d'aujourd'hui ont été écrits.
Mais il y a des problèmes avec l'utilisation d'une langue qui ne capture pas complètement l'autre catégorie. Lorsque vous utilisez un langage comme Python, il résume bien des choses comme les types et le débordement d'entier. C'est bien pour enseigner l'informatique du premier semestre, mais comme vous voulez approfondir de plus en plus comment les choses fonctionnent réellement, le langage de Python est trop éloigné du métal sous-jacent pour être un bon outil d'enseignement. Mais C / C ++ / Fortran (ou Java ... j'ai d'abord appris Java ...) ont tous un coût de démarrage si élevé que la chose la plus difficile à apprendre est simplement de savoir comment configurer et
main
compiler les en- têtes , ce qui distrait de l'apprentissage du programme .Entrez Julia. Lorsque vous utilisez Julia pour la première fois, vous pouvez résumer l'idée des types et l'utiliser comme MATLAB ou Python. Mais comme vous voulez en savoir plus, il y a un "trou de lapin" de profondeur dans la langue. Puisqu'il s'agit vraiment d'une couche d'abstraction basée sur un système de type + plusieurs répartitions sur LLVM, c'est essentiellement "un moyen facile d'écrire du code compilé statiquement" (et les fonctions stables de type peuvent en fait être compilées statiquement). Cela signifie que les détails de C / C ++ sont également accessibles. Vous pouvez apprendre à écrire des boucles et des fonctions simples sans code passe-partout, puis à creuser dans les pointeurs de fonction. Les fonctionnalités de métaprogrammation de Julia vous permettent d'accéder directement à l'AST, et il existe des macros qui montrent chaque partie de la chaîne de compilation. En outre, en tant que Lisp, se prête à des styles de programmation fonctionnels. Et il a beaucoup de capacités de calcul parallèle. Des idées comme le typage paramétrique et la stabilité de type sont assez uniques et profondes dans Julia.
Si vous souhaitez étudier les langages de programmation eux-mêmes, vous pouvez apprendre les étapes de fonctionnement de la compilation en utilisant
@code_lowered
pour voir ce qu'est l'abaissement, voir le type-AST avec@code_typed
, voir LLVM IR avec@code_llvm
et enfin le code d'assemblage natif avec@code_native
. Cela peut être utilisé pour montrer quel est le coût des variables dynamiques et comment fonctionne exactement la "boxe variable", et ce billet de blog montre comment ces outils d'introspection peuvent être utilisés pour enseigner comment les optimisations du compilateur peuvent / ne peuvent pas se produire.Il n'y a pas seulement des idées en informatique et en génie logiciel à explorer, mais aussi des idées mathématiques riches. Étant donné que les bibliothèques principales de Julia sont écrites avec un typage générique à l'esprit, il est trivial de créer des opérateurs sans matrice et d'utiliser IterativeSolvers.jl pour effectuer GMRES en les utilisant. Vous pouvez utiliser des outils d'introspection comme
@which
pour vous montrer exactement comment tout a été mis en œuvre. Par exemple, comment ça\
marche?Cela me renvoie directement à la définition de \ . Il est implémenté dans Julia, donc quelqu'un qui connaît Julia peut alors apprendre l'algorithme et comment il fonctionne en identifiant les sous-types de matrice et en se spécialisant lorsque cela est possible (retombant dans l'élimination gaussienne). Étant donné que le code de Julia est sous licence MIT (et presque tous les packages sont sous licence MIT), les étudiants sont alors libres d'utiliser ces idées dans leur propre code (avec attribution) (lorsque le code est sous licence GPL, comme c'est le cas avec la plupart des packages MATLAB et R, ils doivent faire attention aux problèmes de licence!).
Étant donné que le noyau linguistique est construit avec une communauté open source très active, il existe également une riche ressource sur l'histoire du développement du langage: ses problèmes avec Github . Comprendre les questions linguistiques comme qu'est-ce qu'une transposition matricielle? peut être très instructif pour mieux comprendre ces objets mathématiques.
Mais enfin, à la fin, vous voulez apprendre à vos élèves à créer. Malheureusement, apprendre Python ou R ne signifie pas nécessairement que vous avez ce qu'il faut pour "développer Python / R" car la plupart des packages largement utilisés et bien optimisés contiennent une quantité substantielle de code C / C ++ / Fortran en eux afin pour obtenir des performances. Ainsi, pour que ces élèves puissent contribuer aux écosystèmes scientifiques de ces langues, ils devront éventuellement apprendre une autre langue à un moment donné. Bien que ce ne soit pas entièrement horrible, c'est sous-optimal maintenant que Julia existe. Étant donné que Julia à type stable est capable d'atteindre la vitesse de C / Fortran, la plupart des packages de l'écosystème Julia sont du code Julia pur. Apprendre Julia signifie que l'on a appris à développer Julia. Et puisque Base Julia est aussi principalement du code Julia (juste quelques primitives et l'analyseur ne l'est pas),
Cela dit, le choix de Julia présente certains inconvénients. D'une part, il est beaucoup plus récent que ces autres langues et il est donc un peu plus rare sur les ressources. Vous devrez créer vous-même de nombreux outils pédagogiques ou tirer des ressources du Web répertoriées sur le site Web de Julia . De plus, les détails de la langue ne sont pas encore bien définis, bien que la version 1.0 soit bientôt disponible (fin 2017). Et il est également très probable que vous, l'enseignant potentiel d'un cours à Julia, n'ayez pas beaucoup d'expérience avec la langue vous-même. Cependant, ce sont les types de problèmes qui disparaissent avec le temps, alors que les avantages de Julia que j'ai mentionnés ci-dessus sont beaucoup plus essentiels pour les langues elles-mêmes.
la source
Parlant en tant que premier cycle pas trop éloigné et en supposant que vous n'enseignez pas dans le département CS, je pense que ce serait un désastre d'initier les étudiants à la programmation informatique avec quelque chose comme C, C ++ ou Fortran (ou Dieu ne plaise pas CUDA), même si d'autres ont souligné qu'il s'agit probablement du statu quo de l'informatique scientifique.
Si vous vous attendez à enseigner le calcul scientifique aux étudiants et à les initier à la programmation dans le même cours, je parierais que c'est trop à couvrir dans un semestre à moins que vous ne vous en teniez à un langage interprété comme matlab ou python. D'après mon expérience, la plupart des cours d'informatique scientifique au premier cycle sont enseignés dans l'un de ces deux modes, et le python devient de plus en plus utile en tant que langage de niveau de production chaque jour, il a donc toujours une certaine utilité en tant que compétence pratique ( au-delà de l'enseignement des bases de la programmation, je veux dire).
Juste mes deux cents.
la source
C, C ++ et Fortran (répertoriés sans ordre particulier) sont les trois principaux langages de programmation utilisés pour les mathématiques et la physique computationnelles si vous souhaitez résoudre de gros problèmes sur les superordinateurs. Je pense que CUDA est considéré comme une bibliothèque qui est utilisée en conjonction avec d'autres langages pour accélérer le calcul GPU. Matlab et python sont parfaits pour apprendre à exécuter des diagnostics de sortie et à créer des modèles prototypes. Ils sont également plus faciles à apprendre et peuvent être meilleurs pour un cours où vous souhaitez passer à travers des vers d'algorithmes pour apprendre à programmer.
Ainsi, si votre cours porte uniquement sur la programmation, je choisirais C ++ ou, s'il s'agit de la première programmation des étudiants, Python. Ces deux langages ont une grande utilité en dehors du monde de l'informatique scientifique. Si le cours est centré sur l'apprentissage d'algorithmes pour résoudre des problèmes basés sur la physique, je pense que Matlab est sans aucun doute le gagnant.
la source
court: Tenez compte du fait que le calcul scientifique est lui-même compliqué. Voulez-vous vraiment que le langage de programmation entre en jeu?
Les mathématiques utilisent l'abstraction pour résoudre des problèmes qui ne peuvent pas être résolus par l'intuition. Les concepts ont donc tendance à être abstraits. C'est pourquoi il n'est pas trivial de comprendre quels concepts encapsuler. Dans le calcul scientifique, les exemples habituels pour des classes comme "Animal" "Véhicule" sont plutôt inutiles. Cela est vrai pour la programmation orientée objet, mais je pense que la reproduction de concepts abstraits sur un ordinateur n'est pas non plus triviale dans la programmation impérative.
C'est pourquoi je crois qu'ici nous avons affaire à deux efforts différents: la programmation, d'un côté, et le calcul scientifique, de l'autre. Au niveau du premier cycle, où les étudiants viennent de milieux hétérogènes, vous pouvez finir par enseigner deux choses différentes en même temps.
Si votre objectif est d'enseigner l'informatique scientifique, je pense que c'est déjà assez difficile. Avoir une barrière supplémentaire en tant que langage de programmation (nous convenons tous que C ++ nécessite une formation) démotiverait une bonne partie des étudiants, c'est pourquoi je suggère d'aller avec python.
Si votre cours est "Introduction à SC", je pense que python a le meilleur rapport résultat / effort.
PS: maintenant nous avons des ordinateurs plutôt bons, nous n'avons pas vraiment besoin de rechercher l'efficacité au niveau du premier cycle.
la source