Tweλve days of in-depth, hands-on, real-world functional programming with Haskell

Despre workshop

Ne bucurăm să te anunțăm că pentru vara lui 2015 pregătim a treia ediție a acestui curs practic, care se va desfășura pe parcursul a 6 weekend-uri, câte 4 ore pe zi (mai precis între orele 13:30-17:30).

Ediția 2015 va avea loc în perioada 27 iunie - 2 august, în zilele de weekend, la Facultatea de Automatică și Calculatoare din cadrul Universității Politehnica din București, în sala EG306.

Cursul practic "Tweλve days of functional programming" se adresează în principal studenților de anul 1 de la facultatea de Automatică și Calculatoare a Universității Politehnica din București.

Vom folosi ca pretext construirea de jocuri simple (2048, TicTacToe, Snake, Pacman, Bejeweled, Reversi, Tetris, Conway's Game of Life) pentru a învăța limbajul de programare Haskell în totalitatea lui, folosind ca model mental segregarea clară a logicii pure (I/O-free) a jocului pe de o parte, de interfața-utilizator (game-logic-free) pe de altă parte. Acest model mental al "zidului chinezesc" dintre programarea pură și cea impură, odată însușit, îți va fi de folos în viitor, ajutându-te să proiectezi în limbajul tău de programare preferat, soluții robuste la probleme complexe.

Deși studenții de anul 1 vor avea cel mai mult de câștigat de pe urma acestui curs, sunt și lucruri pe care cei care au trecut deja de cursul de paradigme de programare le pot învăța în plus, în special pe tematicile:

  • parsarea datelor primite în format JSON
  • salvarea stării unei aplicații în MongoDB
  • traversarea cu ajutorul bibliotecii "lens" a arborescențelor stufoase de date
  • multi-threading / concurrency / software transactional memory
  • testarea "altfel" a unei componente software, cu ajutorul bibliotecii "QuickCheck", prin definirea proprietăților abstracte, intrinseci, care definesc în mod unic comportamentul algoritmului
  • proiectarea unui data API care să fie "correct by construction", deci care să garanteze încă de la compilare respectarea cu strictețe a invarianților specificați
  • etc.

Workshop-ul este gratuit, însă numărul de locuri este limitat.


Structura workshop-ului

Day One
(27.06.2015)

What is Haskell?
Why Should I Learn Haskell?
History
Tools

Functions
Basic Functions
Pure Functions
Recursion
Lists
List Functions
Tuples
Pattern Matching
Guards
case
let..in and where
Whitespace
Lazy Evaluation
Thunks and Infinite Lists

Higher Order Functions
Functions as Values
Partial Application / uncurry
map
filter
Folds / Scans / Unfolds
zipWith
Lambda Expressions
Infix Operators, Prefix Notation
Prefix Functions, Infix Notation
Day Two
(28.06.2015)

Types
Haskell's Type System
Exploring Types in GHCi
Explicit Types
Type Inference
When To Use Explicit Types
Polymorphism
Typeclass Constraints
Avoiding Errors with the Maybe Type
Error Handling with the Either Type

Custom Types
Type Synonyms
newtype
Records
Algebraic Data Types
Type Constructors
Data Constructors
Parameterized Types
Day Three
(04.07.2015)

Typeclasses
Typeclass Instances
Instances for Parameterized Types
Deriving Typeclass Instances
Defining Typeclasses
Subclasses

I/O
Hello World
I/O Actions
Do Blocks
I/O Values
The return Function
Some Useful I/O Actions
Organizing Your Programs (Functional Core, Imperative Shell)
Day Four
(05.07.2015)

HackDay
Pacman in Haskell (A Simplified Console Game)
Day Five
(11.07.2015)

Graphics
The Gloss Library
Pacman in Haskell with a GUI
Day Six
(12.07.2015)

Topics: To Be Determined
Day Seven
(18.07.2015)

Topics: To Be Determined
Day Eight
(19.07.2015)

Advanced Topics #1
Functors
Applicative Functors
Day Nine
(25.07.2015)

Advanced Topics #2
Monads
The Lens Library
Combinator Parsing
Idiomatic Haskell Coding Style
Day Ten
(26.07.2015)

Topics: To Be Determined
Day Eλeven
(01.08.2015)

Topics: To Be Determined
Day Tweλve
(02.08.2015)

Topics: To Be Determined

Cursanți

Cursanții vor fi anunțați aici cel târziu cu 2 zile înainte de începerea workshop-ului. Te așteptăm să te înscrii!

Contact

Poți iniția o conversație cu noi aici.


Credits

(organizatori și prezentatori, în ordine alfabetică):
Lucian Mogoșanu, Dan Șerban.