work-site/fr/h4life.org
2018-09-22 23:48:58 +02:00

116 lines
5.7 KiB
Org Mode
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#+TITLE: Haskell for Life
#+LANGUAGE: fr
#+ATTR_HTML: :alt en anglais :class lang-lifted
[[file:../en/h4life.org][file:../content/imgs/en.png]]
#+ATTR_HTML: :alt return home :class home
[[file:home.org][file:../content/imgs/home.png]]
Le but de ce cours de courte durée est de familiariser les étudiants
avec le modèle de calcul derrière un langage fonctionnel de haut
niveau et grand public. Le cours se focalise plutôt sur l'acquisition
de connaissances pratiques. Grâce à ce cours, les étudiants seront
capables de résoudre des problèmes pratiques de programmation de
complexité moyenne en écrivant du code Haskell idiomatique et en
utilisant l'écosystème riche de librairies propre à ce langage.
Ce cours vise un public large, le seul prérequis étant une expérience
de programmation superficielle dans un des langages populaires :
(C/C++, Java, C#/.NET, Python, etc.).
L'activité essentielle pour l'enseignement de ce cours est la
démonstration de sessions interactives de Haskell. Le processus
d'enseignement sera donc directement dirigé par le retour de la part
des étudiants.
Le cours consiste en 4 parties, dont les 3 premières définissent
quelques notions essentielles, alors que la dernière fournit des
exemples de programmation parallèle et concurrente. Une partie peut
être enseignée sur plusieurs séances de 2 heures ; c'est notamment le
cas de la première partie qui devrait probablement être traitée en
deux temps pour faciliter l'apprentissage. À la fin du cours les
étudiants peuvent soumettre un projet ; les étudiants ayant réussi à
soumettre un projet peuvent se voir accorder 2 ECTS.
Les dispositifs de ce cours ainsi que les explications dans le code
source sont en anglais.
Ce cours suit approximativement le merveilleux livre [[http://book.realworldhaskell.org/][Real World
Haskell]].
#+ATTR_HTML: :alt image de la licence Creative Commons Attribution Alone :class ccby
[[https://fr.wikipedia.org/wiki/Licence_Creative_Commons][file:../content/imgs/ccby.png]]
Les matériaux de ce cours sont distribués sous la [[https://fr.wikipedia.org/wiki/Licence_Creative_Commons][licence Creative
Commons Paternité]].
* Introduction
Cette partie introduit les idées fondamentales derrière la
programmation fonctionnelle ; il s'agit des fonctions de première
classe et des fonctions d'ordre supérieur. Le typage strict et
statique en Haskell est présenté et comparé aux autres stratégies de
typage que l'on retrouve dans d'autres langages de
programmation. Quelques éléments essentiels de la syntaxe sont
expliqués, y compris la syntaxe pour la définition de types de
données simples.
Les diapositives de cette partie se trouvent [[file:../content/courses/h4life/h4life-01.pdf][ici]]. Les exemples
présentés sont [[file:../content/courses/h4life/h4life-funcs.hs][ici]].
* Classes de types
Cette partie définit les classes de types en Haskell et les compare
aux classes et aux types dans d'autres langages de
programmation. Quelques différences subtiles sont mises en avant
pour éviter toute confusion.
Les diapositives de cette partie se trouvent [[file:../content/courses/h4life/h4life-02.pdf][ici]]. Les exemples
présentés se trouvent [[file:../content/courses/h4life/h4life-types.hs][ici]] et encore [[file:../content/courses/h4life/h4life-typeclasses.hs][ici]]. Le premier de ces fichiers
contient des caractères Unicode ; il faut donc bien choisir
l'encodage de l'affichage (Unicode ou UTF-8).
* Monades
Dans cette partie les monades sont présentées comme des outils pour
l'élimination des aspects répétitifs d'un calcul. Dans un premier
temps, les monades =Maybe= et =List= sont décrites. Ensuite, un
aperçu des monades =Reader=, =Writer=, et =State= est proposé.
Les diapositives de cette partie se trouvent [[file:../content/courses/h4life/h4life-03.pdf][ici]]. Les exemples
présentés se trouvent [[file:../content/courses/h4life/h4life-monads.hs][ici]].
* Parallel and Concurrent Programming
Cette partie décrit quelques techniques de base pour la
programmation parallèle et concurrente en Haskell. Dans un premier
temps, les annotations pour la programmation parallèle sont
présentées. Ensuite, une façon de lancer des fils d'exécution
parallèle est décrite, ainsi que les stratégies de synchronisation
par des variables partagées en exclusion mutuelle. Un scanner de
ports rudimentaire est développé pour une démonstration pratique de
ces techniques.
Les diapositives de cette partie se trouvent [[file:../content/courses/h4life/h4life-04.pdf][ici]]. L'implémentation
du tri rapide présentée dans le cours est [[file:../content/courses/h4life/h4life-sorting.hs][ici]]. Le code du scanner de
ports se trouve [[file:../content/courses/h4life/h4life-scanner.hs][ici]].
[[file:../content/courses/h4life/marlow-tutorial.pdf][Ce tutoriel]] (en anglais) sur la programmation parallèle et
concurrente en Haskell par Simon Marlow donne (beaucoup) plus de
détails.
* Sites d'enseignements
J'ai enseigné ce cours à [[http://www.tucs.fi/][Turku Center for Computer Science]] (janvier
2016), à [[https://www.pentalog.com/locations/chisinau-nearshore-delivery-center/][Pentalog Chișinău]] (décembre 2016), ainsi qu'à la [[http://fcim.utm.md/][faculté
d'informatique de l'Université technique de Moldavie]] (décembre
2016).
La consigne de l'examen pour la version du cours que j'ai enseignée
à Turku Center for Computer Science se trouve [[file:../content/courses/h4life/h4life-exam.pdf][ici]].
* Local Variables :noexport:
# Local Variables:
# org-link-file-path-type: relative
# eval: (auto-fill-mode)
# ispell-local-dictionary: "fr"
# End: