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?
@which rand(10,10)\rand(10)
#\(A::AbstractArray{T,2} where T, B::Union{AbstractArray{T,1}, AbstractArray{T,2}} where T) in Base.LinAlg at linalg\generic.jl:805
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.