Wpis z mikrobloga

#naukaprogramowania #programowaniefunkcyjne #programowanie

###################

# WSTĘP

###################

Tym razem będzie (prawie) sam zbiór materiałów, bo nie jestem na tyle kompetentny w dziedzinie programowania funkcyjnego żeby wnieść coś twórczego do tematu.

Będzie jednak więcej języków za jednym razem - kolejność przypadkowa.

Nie wrzucam wszystkich materiałów jakie istnieją. Starałem się wybrać te które wiem, że są dobre, te które są polecane jako dobre lub te które wyglądają jakby były dobre.

###################

# JAK SIĘ NIE UCZYĆ

###################

Tylko czytając książki/kursy, tylko oglądając screencasty/prelekcji lub tylko klepiąc kod.

###################

# JAK SIĘ UCZYĆ

###################

Najlepiej połączyć wszystkie 3 rzeczy (czytanie książek/kursów, oglądanie materiałów video i kodowanie przykładowych projektów) razem żeby nauka była różnorodna i możliwie ciekawa.

###################

# CZĘŚĆ WSPÓLNA

###################

Zbiór pomysłów na projekty:

https://warosu.org/data/g/img/0441/94/1410874830625.png

https://github.com/karan/Projects

Strony z zadaniami i zagadkami algorytmicznymi, poćwiczą twoje myślenie i niejednokrotnie optymalizację kodu. Miłe oderwanie od innej nauki. Uwaga - nie przesadzać, bo wpadniesz w złe praktyki i spiralę przedwczesnej optymalizacji.

http://pl.spoj.com/

http://codeeval.com/

https://www.hackerrank.com/

http://www.codechef.com/

https://www.reddit.com/r/dailyprogrammer

https://projecteuler.net/problems

http://www.amazon.com/Purely-Functional-Structures-Chris-Okasaki/dp/0521663504/ - książka o strukturach danych dedykowanych do programowania funkcyjnego - dla dociekliwych

###################

# Haskell

###################

Haskell to najpopularniejszy czysto-funkcyjny język na świecie, jak również drugi (po Scali) najpopularniejszy język funkcyjny. Słynny między innymi z zastosowań w nauce, finansach i obliczeniach, oraz z posiadanie jednego z najbardziej zaawansowanych (i najlepszych) kompilatorów kiedykolwiek stworzonych.

https://en.wikipedia.org/wiki/Haskell_(programming_language)

http://www.haskell.org/haskellwiki/ - źródło linków i wiedzy wszelakiej - centrum języka

KSIĄŻKI - Dostępne za darmo

http://learnyouahaskell.com/chapters - Learn You a Haskell for Great Good! wydawnictwa NoStarch

http://book.realworldhaskell.org/read/- Real World Haskell wydawnictwa O'Reilly

http://chimera.labs.oreilly.com/books/1230000000929/index.html - Parallel and Concurrent Programming in Haskell wydawnictwa O'Reilly

https://en.wikibooks.org/wiki/Haskell - wikiksiążka o Haskellu

KSIĄŻKI

http://www.amazon.com/gp/product/0201882957/ - Haskell: The Craft of Functional Programming (3rd Edition) od wydawnictwa Addison-Wesley

http://www.amazon.com/gp/product/1430262508/ - Beginning Haskell od wydawnictwa Apress

http://www.amazon.com/gp/product/0521692695/ - Programming in Haskell od wydawnictwa Cambridge Press

KURSY

http://shuklan.com/haskell/index.html - kurs University of Virginia

http://www.cis.upenn.edu/~cis194/lectures.html - kurs University of Pennsylvania

https://www.fpcomplete.com/school - wiele kursów, tutoriali i innych materiałów w jednym miejscu od firmy FP Complete

KURS MOOC (jak Coursera)

https://www.edx.org/course/delftx/delftx-fp101x-introduction-functional-2126 - Kurs wprowadzjący do programowania funkcyjnego (autor ten sam co filmów z Channel9)

TUTORIALE

http://lisperati.com/haskell/ - szybki tutorial z komiksowymi ilustracjami

https://www.haskell.org/haskellwiki/Hitchhikers_guide_to_Haskell - Hitchhikers guide to Haskell krótki kurs na HaskellWiki

https://www.haskell.org/haskellwiki/Roll_your_own_IRC_bot - wprowadzenie w Haskella polegające na napisaniu własnego bota IRC

https://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours - nauka Haskella polegająca na napisaniu własnego interpretera języka Scheme, najtrudniejsze z przytoczonych wprowadzeń

http://yannesposito.com/Scratch/en/blog/Haskell-the-Hard-Way/ - Learn Haskell Fast and Hard to krótki tutorial polecany tu i ówdzie

SCREENCASTY / PRELEKCJE za darmo

http://channel9.msdn.com/Series/C9-Lectures-Erik-Meijer-Functional-Programming-Fundamentals - Podstawy programowanie funkcyjnego od Channel 9 Microsoftu

https://www.youtube.com/playlist?list=PLxj9UAX4Em-Ij4TKwKvo-SLp-Zbv-hB4B - Haskell from Scratch, seria pokazująca (między innymi) kodowanie praktycznych programów

https://www.youtube.com/watch?v=3bjXGrycMhQ - Historia Haskella

A Taste of Haskell czyli wprowadznie dla ludzi już będących programistami:

http://www.slideshare.net/oscon2007/os-peytonjones - Slajdy (niezbędne bo nie widać ich na nagraniach)

https://www.youtube.com/watch?v=jLj1QV11o9g - Część 1

https://www.youtube.com/watch?v=IqXTUbdLig0 - Część 2

https://www.youtube.com/playlist?list=PLxj9UAX4Em-Lz5btngxMVZxf_B44GETVz - Haskell Deconstructed czyli seria analizująca/omawiająca źródła różnych otwarto-źródłowych programów napisanych w Haskellu

https://www.youtube.com/watch?v=b9FagOVqxmI - Haskell Amuse-Bouche od Google Tech Talks pokazuje (mniej więcej) co Haskell potrafi i dlaczego jest warty uwagi

SCREENCASTY płatne

Haskell Fundamentals od Pluralsight - dwuczęściowy kurst uczący Haskella od podstaw

http://www.pluralsight.com/courses/haskell-fundamentals-part1

http://www.pluralsight.com/courses/haskell-fundamentals-part2

POZOSTAŁE

http://dev.stephendiehl.com/hask/ - to właściwie zbiór (bardzo wielu) porad które warto znać na takim czy innym etapie nauki Haskella

http://tryhaskell.org/ - 5 minutowe intro do Haskella w całości odbywające się w przeglądarce

http://www.haskellcast.com/ - podcast poświęcony Haskellowi

http://www.reddit.com/r/haskell - reddit haskella

###################

# Elixir

###################

Elixir to bardzo młody język - pojawił się w 2012 roku. Bardzo dynamicznie się rozwija i nabiera tempa. Niedawno wyszła pierwsza naprawdę stabilna wersja. Oparty jest o niezawodną wirtualną maszynę Erlanga (BEAM). Jeżeli chcemy bawić się we wróżenie, to wróżę mu świetlaną przyszłość.

Ze względu na swój wiek ilość materiałów jest mocno ograniczona.

Funfact - programiści Elixiru są nazywani Alchemikami (Alchemists)

https://en.wikipedia.org/wiki/Elixir_(programming_language)

http://elixir-lang.org/ - centrum języka

gp/product

KSIĄŻKI / KURSY - Dostępne za darmo

http://elixir-lang.org/getting_started/1.html - oficjalny kurs języka

http://chimera.labs.oreilly.com/books/1234000001642/index.html - zbiór ćwiczeń dla programistów Elixiru

KSIĄŻKI

http://www.amazon.com/gp/product/1937785580/ - Programming Elixir wydawnictwa Pragmatic Programmers

http://www.amazon.com/gp/product/dp/1449369995/ - Introducing Elixir wydawnictwa O'Reilly

http://www.manning.com/juric/ - Elixir in Action wydawnictwa Manning (w trakcie tworzenia - wczesny dostęp)

KSIĄŻKI - (jeszcze) nie dostępne

http://elixir-for-rubyists.com/ - Elixir for the Functional Rubyist

http://www.exotpbook.com/ - The Little Elixir and OTP Guidebook

SCREENCASTY I INNE

http://www.pluralsight.com/courses/meet-elixir - krótki, płatny, kurs przygotowany przez samego twórcę języka

http://elixirsips.com/ - zbiór screencastów uczących eliksiru i wielu najbardziej popularnych bibliotek (garść darmowych, większość dostępna za opłatą)

http://www.elixirdose.com/ - seria artykułów o samym eliksirze i różnych jego bibliotekach

https://www.youtube.com/watch?v=41PvAPSX0wg - Introduction to Elixir: a New Language on the VM - przedstawienie języka przez jego twórcę

https://www.youtube.com/watch?v=5kYmOyJjGDM - All Aboard The Elixir Express! - 3-godzinne warsztaty Elixiru

http://www.reddit.com/r/elixir - Reddit języka

###################

# Erlang

###################

Erlang to język zaprojektowany do tworzenia programów które "nigdy nie padają". Stworzony przez firmę Ericsson na potrzeby runku telekomunikacyjnego - jest na tym rynku popularny do dziś.

https://en.wikipedia.org/wiki/Erlang_(programming_language)

http://www.erlang.org/ - centrum języka

KSIĄŻKI dostępne za darmo

http://learnyousomeerlang.com/content - Learn You Some Erlang for Great Good! - czyli od zera do programisty Erlanga

http://chimera.labs.oreilly.com/books/1234000000726/index.html - zbiór ćwiczeń dla programistów Erlanga

http://www.erlang-in-anger.com/ - Erlang in Anger to książka o diagnozowaniu, naprawianiu i dbaniu o kod

http://www.erlang.org/download/erlang-book-part1.pdf - Concurrent Programming in ERLANG - o programowaniu współbieżnym w Erlangu

https://github.com/esl/erlang-handbook/raw/master/output/ErlangHandbook.pdf - kolejne zwięzłe przedstawienie Erlanga

http://pl.scribd.com/doc/44221/Thinking-in-Erlang - bardzo krótkie wprowadzenie do Erlanga

KSIĄŻKI

http://www.amazon.com/gp/product/193778553X/ - Programming Erlang Second Edition - książka twórcy samego Erlanga wydawnictwa Pragmatic Programmers

http://www.amazon.com/gp/product/1449331769/ - Introducing Erlang - krótkie wprowadzenie do Erlanga wydawnictwa O'Reilly

http://www.amazon.com/gp/product/0596518188/ - Erlang Programming - dogłębne wprowadzenie do Erlanga wydawnictwa O'Reilly

http://www.amazon.com/gp/product/1933988789/ Erlang and OTP in Action wydawnictwa Manning

SCREENCASTY I INNE

http://shop.oreilly.com/product/0636920020240.do - Erlang by Example - seria screencastów prezentujących język Erlang na przykładach

http://vimeo.com/erlang/videos - zbiór bardzo różnych materiałów video dotyczących Erlanga

https://www.youtube.com/user/ErlangSolutions/videos - zbiór materiałów firmy Erlang Solutions

http://trigonakis.com/blog/series/introduction-to-erlang/ - seria wpisów wprowadzających do Erlanga

http://www.tryerlang.org/ - spróbuj Erlanga w przeglądarce

https://www.reddit.com/r/erlang/ - reddit poświęcony językowi

###################

# Clojure

###################

Implementacja LISPa na wirtualnej maszynie Javy (JVM). To najpopularniejszy dialekt LISPa na świecie i łatwo integruje się z rzeczami napisanymi w Javie.

https://en.wikipedia.org/wiki/Clojure

http://clojure.org/ - centrum języka

KSIĄŻKI I KURSY dostępne za darmo

http://www.braveclojure.com/ - Clojure for the Brave and True - przystępna książka ucząca Clojure

https://github.com/clojure-cookbook/clojure-cookbook - darmowa wersja książki Clojure Cookbook wydawnictwa O'Reilly

http://mooc.cs.helsinki.fi/clojure - kurs Clojure Uniwersytetu w Helsinkach

http://java.ociweb.com/mark/clojure/article.html - Clojure - Functional Programming for the JVM - Krótkie wprowadzenie do programowania funkcyjnego w Clojure

http://www.unexpected-vortices.com/clojure/brief-beginners-guide/ - A Brief Beginner’s Guide To Clojure - zwięzłe wprowadzenie do Clojure dla początkujących

http://daly.axiom-developer.org/clojure.pdf - bardzo rozbudowana książka

http://data-sorcery.org/contents/ - Data Sorcery with Clojure - o Data Science przy pomocy Clojure

KSIĄŻKI

http://www.amazon.com/gp/product/1617291412/ - The Joy of Clojure, Second Edition - bardzo dogłębna książka o języku Clojure wydawnictwa Manning

http://www.amazon.com/gp/product/1934356867/ - Programming Clojure Second Edition - wprowadzenie do Clojure wydawnictwa Pragmatic Programmers

http://www.amazon.com/gp/product/1449394701/ - Clojure Programming - wprowadzenie do Clojure wydawnictwa O'Reilly

http://www.manning.com/rathore2/ - Clojure in Action, Second Edition (w trakcie pisania - wczesny dostęp) wprowadznie do Clojure wydawnictwa Manning

http://www.amazon.com/gp/product/1430272317/ - Practical Clojure to wprowadzenie do programowania funkcyjnego w ogóle i Clojure w szczególe od wydawnictwa Apress

SCREENCASTY (płatne)

http://www.pluralsight.com/courses/functional-programming-clojure

http://www.pluralsight.com/courses/clojure-fundamentals-part-one

http://www.pluralsight.com/courses/clojure-concurrency-tutorial

http://shop.oreilly.com/product/0636920030409.do - Clojure Inside Out od O'Reilly

INNE

https://www.youtube.com/watch?v=SYeDxWKftfA - Uncle Bob prezentuje Clojure

https://www.youtube.com/user/ClojureTV/videos - zbiór różnych video o Clojure

https://www.reddit.com/r/Clojure/ - reddit języka

###################

# Scala

###################

Prawdziwie hybrydowy język łączący programowanie funkcyjne i obiektowe czym podbił sobie serca wielu programistów. Łatwo "mieszalny" z Javą. Określany mianem najpopularniejszego języka funkcyjnego na świecie.

https://en.wikipedia.org/wiki/Scala_(programming_language)

http://www.scala-lang.org/ - centrum języka

KSIĄŻKI dostępne za darmo

http://www.artima.com/pins1ed/ - Programming in Scala, First Edition - pełnoprawna książka ucząca programowania w Scali

http://www.scala-lang.org/docu/files/ScalaByExample.pdf - Scala By Example - jak w tytule, Scala w przykładach

http://danielwestheide.com/scala/neophytes.html - The Neophyte's Guide to Scala to nauka Scali nie od samego zera

KSIĄŻKI

http://www.informit.com/store/scala-for-the-impatient-9780321774095 - Scala for the Impatient - zwięzła nauka Scali od wydawnictwa Addison-Wesley

http://www.amazon.com/gp/product/0981531644/ - Programming in Scala Second Edition - książka krok po kroku ucząca programowania w Scali wydawnictwa Artima

http://www.amazon.com/gp/product/1617290653/ - Functional Programming in Scala - nauka programowania funkcyjnego z użyciem Scali wydawnictwa Manning

http://www.amazon.com/gp/product/1935182706/ - Scala in Depth - książka prezentująca dogłębne zagadnienia takie jak najlepsze praktyki i wzorce wydawnictwa Manning

http://www.amazon.com/gp/product/1935182757/ - Scala in Action wprowadzenie do Scali od wydawnictwa Manning

http://www.amazon.com/gp/product/1449339611/ - Scala Cookbook czyli zbiór gotowych fragmentów kodu i porad jak rozwiązywać popularne problemu w Scali

http://shop.oreilly.com/product/0636920033073.do - Programming Scala

Second Edition czyli wprowadzenie do Scali dla już w czymś programujących wydawnictwa O'Reilly (w trakcie pisania - wczesny dostęp)

http://shop.oreilly.com/product/0636920030287.do - Learning Scala to nauka programowania funkcyjne ze Scalą od zera od wydawnictwa O'Reilly (w trakcie pisania - wczesny dostęp)

http://www.apress.com/9781484202333 - Beginning Scala Second Edition to wprowadzenie do Scali dla początkujących od wydawnictwa Apress (w trakcie pisania - wczesny dostęp)

KURS MOOC

https://www.coursera.org/course/progfun - Functional Programming Principles in Scala uczący programowania funkcyjnego przy pomocy Scali

TUTORIALE

http://docs.scala-lang.org/tutorials/ - A Tour of Scala - oficjalny tutorial Scali

http://naildrivin5.com/scalatour/ - Another Tour of Scala - inny przewodnik po Scali

https://twitter.github.io/scala_school/ - Scala School! - lekcje Scali od Twittera

http://www.scala-lang.org/docu/files/ScalaTutorial.pdf - A Scala Tutorial for Java programmers - Króciutki tutorial wprowadzający do Scali napisany z myślą o programistach Javy

http://aperiodic.net/phil/scala/s-99/ - 99 ćwiczeń dla programistów Scali

SCREENCASTY (płatne)

http://www.pluralsight.com/courses/scala-getting-started - Podstawy Scali od Pluralsight

http://shop.oreilly.com/product/0636920036128.do - Learning Scala Programming - kurs video od Infinite SKills

http://www.informit.com/store/scala-fundamentals-livelessons-video-training-downloadable-9780321927743 - Scala Fundamentals czyli nauka scali od podstaw od wydawnictwa Addison-Wesley

INNE

https://www.youtube.com/watch?v=P8jrvyxHodU - przedstawienie różnych części Scali przez jej twórcę

https://www.reddit.com/r/scala/ - reddit języka

###################

# Lisp - Common Lisp

###################

Lisp to pradziadek, dziadek i ojciec wielu innych funkcyjnych języków programowania. Posiada niezliczoną liczbę dialektów w tym Clojure (opisany wyżej) i Common Lisp będące tymi najpopularniejszymi.

https://pl.wikipedia.org/wiki/Lisp

https://pl.wikipedia.org/wiki/Common_Lisp

http://common-lisp.net/ - centrum języka prowadzone przez Fundację Common Lisp

Najpopularniejszymi darmowymi kompilatorami (implementacjami) Common Lisp są:

CLISP - https://en.wikipedia.org/wiki/CLISP

SBCL - https://en.wikipedia.org/wiki/Steel_Bank_Common_Lisp

KSIĄŻKI dostępne za darmo

http://www.gigamonkeys.com/book/ - Practical Common Lisp darmowa wersja książki wydawnictwa Apress

http://learnlispthehardway.org/book/ - Learn Lisp The Hard Way - książka do nauki Common Lisp od podstaw - wersja Alpha intensywnie modyfikowana

http://clqr.boundp.org/download.html - Common Lisp Quick Reference - przerośnięty Cheet Sheet do języka Common Lisp

https://www.cs.cmu.edu/~dst/LispBook/book.pdf - Common Lisp - A Gentle Introduction to Symbolic Computation czyli wprowadzenie do Common Lisp oparte na obliczeniach

http://psg.com/~dlamkins/sl/contents.html - Successful Lisp: How to Understand and Use Common Lisp - książka raczej dla już w czymś programujących

KSIĄŻKI

http://www.nostarch.com/lisp.htm - Land of Lisp to bogato ilustrowana i przystępna książka ucząca programowania na przykładach prostych gier.

http://www.amazon.com/gp/product/0133708756/ - ANSI Common Lisp - dogłębnie o Common Lisp od wydawnictwa Prentice Hall

TUTORIALE

http://www.lisperati.com/casting.html - Casting SPELs IN LISP krótki tutorial wprowadzający do LISP (uwaga - korzysta z komercyjnej wersji Common Lisp - Allegro Common Lisp od Franz Inc.)

INNE

https://www.youtube.com/watch?v=VeAdryYZ7ak - Practical Common Lisp od Google Tech Talks

https://www.reddit.com/r/lisp/ - reddit wszystkich dialektów

https://www.reddit.com/r/common_lisp - reddit Common Lisp

###################

# F Sharp

###################

F# to język funkcyjny dla platform .NET i Mono stworzony przez Microsoft. Jak łatwo się domyślić, świetnie współpracuje z gotowymi elementami napisanymi dla tych platform nawet w innych językach.

https://en.wikipedia.org/wiki/F_Sharp_(programming_language)

http://fsharp.org/ - centrum języka

KSIAŻKI I TUTORIALE dostępne za darmo

http://www.tryfsharp.org/Learn - tutoriale i materiały prosto od Microsoftu

http://fsharpforfunandprofit.com/ - zbiór artykułów o F#

http://fsharp.org/videos/1 - zbiór video dotyczących F#

https://en.wikibooks.org/wiki/F_Sharp_Programming - wikiksiążka o F#

http://www.syncfusion.com/resources/techportal/ebooks/fsharp - zwięźle o F# (w pola można wpisać praktycznie cokolwiek co pozwoli nam zassać książkę)

KSIĄŻKI

http://www.amazon.com/gp/product/1593275528/ - The Book of F# wprowadzenie do F# od wydawnictwa NoStarch

http://www.amazon.com/gp/product/1449320295/ - Programming F# 3.0 - wprowadzenie do F# od wydawnictwa O'Reilly

http://www.amazon.com/gp/product/1430246502/ - Expert F# 3.0 - książka dogłębnie traktująca o F# od wydawnictwa Apress

SCREENCASTY

http://www.pluralsight.com/courses/fsintro - Introduction to F# - seria Screencastów uczących od zera F#

http://www.pluralsight.com/courses/functional-architecture-fsharp - A Functional Architecture with F# - jak w tytule, uczy architektury funkcyjnej na przykładzie F#

http://www.pluralsight.com/courses/fsharp-functional-data-structures - F# Functional Data Structures czyli nauka struktur danych na przykładzie F#

INNE

https://channel9.msdn.com/Tags/fsharp - różne materiały video od Channel9

https://www.reddit.com/r/fsharp/ - reddit języka

###################

# OCaml

###################

Objective Caml - OCaml To najpopularniejsza implementacja języka Caml z rodziny języków ML. Wspiera programowanie funkcyjne, imperatywne i zorientowane obiektowo. Mimo bardzo małej popularności ma bardzo wierną i stałą grupę programistów która dba o rozwój języka i dodatkowych bibliotek.

https://en.wikipedia.org/wiki/OCaml

https://ocaml.org/ - centrum języka

KSIĄŻKI I TUTORIALE dostępne za darmo
  • 51
@Analityk: Programowanie funkcyjne to zupełnie inne podejście do programowanie niż takie tradycyjne programowanie obiektowe na przykład. W czystym programowaniu funkcyjnym działasz jakby wszystko było funkcjami matematycznymi. Jest coś na wejściu, jakieś przetwarzanie w środku i coś na wyjściu. Nie ma modyfikowania zmiennych globalnych, jakichś zewnętrznych stanów i innych rzeczy które nazywane są "Side Effects". Takie wymuszenia pozwalają inaczej myśleć o zadaniach, skupiać się bardziej na danych. Języki funkcyjne zwykle w prostszy
@aseeon: Haskell to najlepszy język na świecie, a "Learn You a Haskell for Great Good" jest naprawdę super, tylko jak już człowiek dotrze do monad, to głowa eksploduje.

Z drugiej strony F# jest bardzo przyjemny, szczególnie jako język skryptowy. Zwięzłość tych języków jest powalająca, ale niestety mają bardzo stromą krzywą poznawczą.
@okkszakaraka: To że coś tam potrafi to go nie czyni językiem funkcyjnym. Na tej samej zasadzie Python wspiera paradygmat programowania funkcyjnego ale nikt go takim nie nazywa. Jako ciekawostka, czy też dodatkowe możliwości dla ludzi już w Perlu programujących - super. Ale uczyć się Perla dla programowania funkcyjnego to nieporozumienie :)

To jak otwieranie wina nożem, no teoretycznie można, ale po co skoro jest korkociąg.

P.S. Nawet w perlu troszkę kiedyś