pondělí 9. září 2013

Functional Programming Principles in Scala - 3. běh

16. září začíná již třetí běh online kurzu Functional Programming Principles in Scala (dále budu z pohodlnosti zkracovat na ProgFun). Nejprve si poslechněme pár slov přímo od vedoucího kurzu, kterým není nikdo jiný než Dr. Martin Odersky, autor Scaly:



Progfun je tedy webový kurz organizovaný vyučujícími ze švýcarského École Polytechnique Fédérale de Lausanne (EPFL), kterého se může zadarmo zúčastnit každý (já osobně absolvoval druhý běh běžící letos na jaře). Konkrétně měly jeho první dvě iterace dohromady přes 100 000 účastníků, z nichž cca 20% je dokončilo. To se sice může jevit jako malé procento, ale je to více než dvojnásobek hodnoty obvyklé u podobných online kurzů. A to přesto, že účast v kurzu nic nestojí a není ani nijak závazné ho dokončit (pouze nedostanete "certifikát"). Důvodem pravděpodobně bude jednak v současné době poměrně žhavé téma a jednak velmi kvalitní obsah i organizace kurzu.


Důkladný úvod do FP


ProgFun tedy trvá 7 týdnů, z nichž je každý zaměřen na jednu konkrétní oblast funkcionálního programování. Detailní popis najdete v sylabu, ale v kostce se postupně probírají rekurze, funkce jakožto hodnoty, neměnné objekty, pattern matching, funkcionální listy a kolekce a nakonec líné vyhodnocování a streamy. Ke každému tématu přísluší vždy několik kratších video přednášek přímo od Oderskyho, jež v součtu dají zhruba délku jedné standardní 90minutové přednášky.

Jako feedback od studentů směrem k učitelům pak slouží domácí úkoly, které ověří vaše pochopení látky daného týdne. Zpravidla nejsou moc rozsáhlé, mají předem jasně danou strukturu a pořadí, ve kterém se při implementaci postupuje, a vyžadují spíše trochu zamyšlení nad daným problémem a technikou, nicméně se dá říct, že obtížnost i časová náročnost postupně trochu stoupá. Odevzdávání a kontrola řešení probíhá automaticky: Pomocí sbt (scalovská obdoba Mavenu) projekt z příkazové řádky zkompilujete, otestujete přiloženými unit testy a následně jednoduše odevzdáte na server kurzu, kde se podrobí důkladnějšímu automatickému testování a během několika minut se výsledné body objeví ve vašem profilu na webu. Celkem máte na odevzdání 5 pokusů, přičemž jako výsledný se bere ten s nejlepším dosaženým skóre.


Ryzí funkce == ryzí zlato?


Body za úlohu jsou kromě korektnosti programu (tj. splnění potřebných unit testů) založené z menší části také na správném programovacím stylu. Tím není samozřejmě myšleno správné odsazování, jmenné konvence a podobné podružné věci. Použitý style checker kontroluje, zda vaše programy jsou ryze funkcionální, tzn. že nikde nepoužíváte cykly, měnitelné (nefinální) proměnné a měnitelné (mutable) datové struktury. Ne, nedělám si legraci, opravdu to je možné a nejen to, dokonce to jde velmi dobře. Cykly nahradíte rekurzí nebo higher-order funkcemi, immutable kolekce jsou stejně dobře použitelné jako jejich mutable bratříčci a co se týče final proměnných (ve Scale nazývaných vals) - dnes už i nejeden javista jistě pochopil, že znovu přiřazovat do proměnné je vlastně potřeba docela zřídka.

Tento "eye-opener" (to že je možné se na programy dívat jinak než jen ryze imperativně) je dle mého názoru jedna z nejcennějších věcí, které tento kurz nabízí. Psát krátké, stručné, a přesto srozumitelné programy, u kterých si nemusíte lámat hlavu nad tím, co všechno se může jak a kdy měnit, která změna je závislá na čem atd., je jednoduše osvěžující. Samozřejmě že reálné aplikace s nějakým stavem pracovat ve výsledku vždy musí, ale naučit se ho minimalizovat tam, kde není potřeba, vám velmi zlehčí váš programátorský život, a to i v případě, že programujete v obyčejné Javě (což už kdysi psal i Joshua Bloch).

I v samotných přednáškách se objeví řada velmi zajímavých myšlenek - za všechny například způsob, jak implementovat boolean a logické operace nad ním pouze pomocí objektů a jejich metod, čili bez do jazyka zabudovaných primitivních typů, hodnot a operátorů. Případně obdobným způsobem realizovat přirozená čísla. V reálném světě se samozřejmě takováto řešení kvůli efektivitě nepoužívají, ale už jenom přemýšlet nad takovýmito problémy je velmi podnětné a naučí vás dívat se na věci z trochu jiného úhlu.

Ať už se chcete naučit základy Scaly přímo od jejího autora, pochopit, o čem že to je to v poslední době vzývané (a přesto ideově překvapivě staré) funkcionální programování, anebo se jen stát o něco lepším programátorem, určitě ProgFun zkuste. Nic za to nedáte (doslova!) a navíc:


Functional programmers have more fun.

PS: V listopadu pak začíná první iterace navazujícího kurzu týkajícího se konkurentních a distribuovaných systémů jménem Principles of Reactive Programming.