#+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 retourner à l'accueil  :class home
[[file:index.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: