In-Depth, Hands-On, Real-World
Functional Programming Workshop

Despre workshop

Ne bucurăm să te anunțăm că pentru primăvara lui 2018 pregătim a patra ediție a acestui curs practic, care se va desfășura pe parcursul a 6 weekend-uri, câte 4 ore pe zi (orarul precis și locul desfășurării vor fi anunțate prin mesaj privat doar candidaților admiși).

Ediția 2018 va avea loc în perioada martie - mai, în zilele de weekend, într-o sală din incinta Universității Politehnica din București.

Programării funcționale îi este dedicată o jumătate de semestru, pe repede-nainte, într-o perioadă aglomerată, cu multe teme și parțiale, timpul alocat nefiind suficient pentru ca modul de gândire funcțional să devină a doua ta natură.

Cursul de față vine în completarea orelor de la facultate, punând accent pe rezolvarea într-o manieră funcțională, folosind funcții pure, valori imutabile și liste infinite (evaluate lazily), a unei varietăți de tipologii de probleme care apar frecvent în practică în activitatea unui software engineer.

Participarea la acest curs presupune cunoștințe foarte bine fundamentate de algoritmi / structuri de date și cunoașterea la nivel avansat a cel puțin unui limbaj de programare. De aceea am atașat un set de două probleme de programare prin a căror rezolvare poți demonstra că te afli în segmentul-țintă al acestui curs. Problemele sunt obligatorii pentru admiterea la curs.

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


Înscriere la ediția 2018

Am dat startul la înscrieri.
Va trebui să rezolvi două probleme de programare (  [1]   [2]  ), după cum am menționat mai sus.

Pentru înscriere, completează, te rugăm, acest formular, doar după ce ai rezolvat problemele.

Dacă ai întrebări generale legate de înscriere, lasă un comentariu aici.

Termenul-limită pentru trimiterea soluțiilor la cele două probleme va fi 18 februarie 2018, la ora 23:59. Cursanții admiși vor primi confirmare prin mesaj privat cel târziu pe 21 februarie 2018, la ora 23:59.

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 despre workshop aici.


Miscellaneous

Instructor: Dan Șerban.