Slides paradigmes programmation

21
Créativité, contraintes et paradigmes (ça tape non ?) Raphaël Bellec

description

Slide de la conférence des Human Talks "Contrainte, créativité et paradigmes."

Transcript of Slides paradigmes programmation

Page 1: Slides paradigmes programmation

Créativité, contraintes et paradigmes

(ça tape non ?)

Raphaël Bellec

Page 2: Slides paradigmes programmation

Quel rapport avec l’informatique ?

Péréc, Queneau, Racine

Page 3: Slides paradigmes programmation

Question :

Page 4: Slides paradigmes programmation
Page 5: Slides paradigmes programmation

Qu’est-ce que c’est ?

Page 6: Slides paradigmes programmation
Page 7: Slides paradigmes programmation

Amie de la créativité ?

La page blancheL’espace vide à remplir

Page 8: Slides paradigmes programmation

A l’inverse...

Developpe publiquement des trésors de créativité...

Page 9: Slides paradigmes programmation

La contrainte ?

• Fixer un élément de la forme

• Un bras figé

• Des alexandrins

• Laisser le fond se construire l’idée venant.

Page 10: Slides paradigmes programmation

Livre : Element du monoïde libre composé sur l’alphabet et contraint par la

langue et les choix d’écriture

Contrainte : limitation de l’espace des solutions, intrisequement continu et

infini, lui donnant des points d’entrées

Page 11: Slides paradigmes programmation

retournons vers le code

Page 12: Slides paradigmes programmation

Une autre forme de poésie...

Page 13: Slides paradigmes programmation

parfois completementfor my $passion (@to_terminate){ map {my $body} ($through and $through); shift @me,'oh'..'so close to you!';}listen 'closer',$_ foreach $breath;kill $me,'with that little death';"What's the meaning of this rhyme"?'You will come to learn in' : time;if (our $little_code) {'is_run'};'Then the two'. $will_be.'as',1;

Page 14: Slides paradigmes programmation

Un programme

• La représentation d’un monde...

• Progressant à l’image de notre pensée...

• Influencée par le langage et surtout...

• Son paradigme

Page 15: Slides paradigmes programmation
Page 16: Slides paradigmes programmation

Les paradigmes• Objet : Héritage,

hiérarchie

• Fonctionnel : opérations unitaires, structure

• // : op simultannées, communication, synchronisation

• Systemes Experts : regles, ontologie, faits

• Typé algebriquement : types, nature des habitants du monde

• Logique : relation entre les éléments, faits, règles.

• Lazy - pure : monde pur, monde exterieur impur, structures infinies

• Par contraintes

• Brainfuck : > + .

Page 17: Slides paradigmes programmation

qsort [] = []qsort (x:xs) = qsort ys ++ x : qsort zs where (ys, zs) = partition (< x) xs

GENERIC INTERFACE ArraySort(Elem); PROCEDURE Sort(VAR a: ARRAY OF Elem.T; cmp := Elem.Compare); END ArraySort.GENERIC MODULE ArraySort (Elem); PROCEDURE Sort (VAR a: ARRAY OF Elem.T; cmp := Elem.Compare) = BEGIN QuickSort (a, 0, NUMBER (a), cmp); InsertionSort (a, 0, NUMBER (a), cmp); END Sort; PROCEDURE QuickSort (VAR a: ARRAY OF Elem.T; lo, hi: INTEGER; cmp := Elem.Compare) = CONST CutOff = 9; VAR i, j: INTEGER; key, tmp: Elem.T; BEGIN WHILE (hi - lo > CutOff) DO (* sort a[lo..hi) *)  (* use median-of-3 to select a key *) i := (hi + lo) DIV 2; IF cmp (a[lo], a[i]) < 0 THEN IF cmp (a[i], a[hi-1]) < 0 THEN key := a[i]; ELSIF cmp (a[lo], a[hi-1]) < 0 THEN key := a[hi-1]; a[hi-1] := a[i]; a[i] := key; ELSE key := a[lo]; a[lo] := a[hi-1]; a[hi-1] := a[i]; a[i] := key; END; ELSE (* a[lo] >= a[i] *) IF cmp (a[hi-1], a[i]) < 0 THEN key := a[i]; tmp := a[hi-1]; a[hi-1] := a[lo]; a[lo] := tmp; ELSIF cmp (a[lo], a[hi-1]) < 0 THEN key := a[lo]; a[lo] := a[i]; a[i] := key; ELSE key := a[hi-1]; a[hi-1] := a[lo]; a[lo] := a[i]; a[i] := key; END; END;  (* partition the array *) i := lo+1; j := hi-2;  (* find the first hole *) WHILE cmp (a[j], key) > 0 DO DEC (j) END; tmp := a[j]; DEC (j);  LOOP IF (i > j) THEN EXIT END;  WHILE i < hi AND cmp (a[i], key) < 0 DO INC (i) END; IF (i > j) THEN EXIT END; a[j+1] := a[i]; INC (i);  WHILE j > lo AND cmp (a[j], key) > 0 DO DEC (j) END; IF (i > j) THEN IF (j = i-1) THEN DEC (j) END; EXIT END; a[i-1] := a[j]; DEC (j); END;  (* fill in the last hole *) a[j+1] := tmp; i := j+2;  (* then, recursively sort the smaller subfile *) IF (i - lo < hi - i) THEN QuickSort (a, lo, i-1, cmp); lo := i; ELSE QuickSort (a, i, hi, cmp); hi := i-1; END;  END; (* WHILE (hi-lo > CutOff) *) END QuickSort; PROCEDURE InsertionSort (VAR a: ARRAY OF Elem.T; lo, hi: INTEGER; cmp := Elem.Compare) = VAR j: INTEGER; key: Elem.T; BEGIN FOR i := lo+1 TO hi-1 DO key := a[i]; j := i-1; WHILE (j >= lo) AND cmp (key, a[j]) < 0 DO a[j+1] := a[j]; DEC (j); END; a[j+1] := key; END; END InsertionSort; BEGINEND ArraySort.

qsort( [], [] ).qsort( [H|U], S ) :- splitBy(H, U, L, R), qsort(L, SL), qsort(R, SR), append(SL, [H|SR], S). % splitBy( H, U, LS, RS )% True if LS = { L in U | L <= H }; RS = { R in U | R > H }splitBy( _, [], [], []).splitBy( H, [U|T], [U|LS], RS ) :- U =< H, splitBy(H, T, LS, RS).splitBy( H, [U|T], LS, [U|RS] ) :- U > H, splitBy(H, T, LS, RS).

Page 18: Slides paradigmes programmation

L’interêt

• Pas dans le langage ! Ni les Frameworks

• Comprendre une nouvelle façon de penser

• Difficile et prend (un peu de temps)

Page 19: Slides paradigmes programmation

Ma liste...• C

• Ruby (faillotage)

• XSLT

• SQL

• CAML

• Scheme

• Prolog

• Erlang

• Un S.E.

• Contraintes (Oz, Prolog, minion, Gecode...)

• Plus tard : Haskell

• Pour comprendre vraiment (ou pas !) : Coq

Page 20: Slides paradigmes programmation

Références

• Pour les livres, j’ai laissé la couverture complète.

• Poeme l’oeuf, voir : http://www.digitalcraft.org/iloveyou/poetry.htm

• Feuille d’impot : Formulaire cerfa, auteur inconnu et souhaitant probablement rester anonyme.

• Je n’arrive pas à remettre la main sur les références du poème informatique «Paradigm». Toute aide est la bienvenue !

• Poème en PERL : http://www.perlmonks.org/?node_id=963133

• Codes sources : voir rosetta code.

Page 21: Slides paradigmes programmation

Notes importantes

• J’ai placé des langages pour exemple. Le plus important est le paradigme et il n’est pas toujours lié au langage.

• Plusieurs personnes m’ont dit detester XSLT lors de la conf. Je ne préconise pas de l’utiliser non plus... juste de l’avoir vu et surtout vu Xpath et XQuery.