Od razu po Nowym Roku wracamy z mocnym uderzeniem: na warsztacie tym razem znalazło się programowanie funkcyjne! Mój gość to Michał Łusiak – programista, prelegent, blogger. Możecie go znaleźć również na Twitterze: @mlusiak.
W temacie programowania funkcyjnego rozprawiamy o tym po co odchodzić od “standardowego” obiektowego podejścia, jakimi językami warto się zainteresować a nawet: jak zacząć z F# nie mając możliwości jego komercyjnego zastosowania w żywym projekcie. Pojawiają się też wzmianki o wielu interesujących narzędziach i bibliotekach.
Konkurs: firma Tretton37, w której pracuje Michał, sponsoruje książkę “Real-World Functional Programming“. Tak jak już bywało, otrzyma ją autor jednego z komentarzy pod niniejszym postem. Autora tego wybierze Michał, dzisiejszy Gość. Komentujcie, pytajcie, dzielcie się doświadczeniami!

Ważne adresy:
- zapisz się na newsletter
- zasubskrybuj w iTunes, Spotify lub przez RSS
- ściągnij odcinek w mp3
Linki:
- blog Michała (http://mlusiak.com)
- Michał na dotnetconf (https://www.youtube.com/watch?v=a-ce4aGZ18I)
- książka “Real-World Functional Programming” (http://www.amazon.com/Real-World-Functional-Programming-With-Examples/dp/1933988924)
- FSharper (https://github.com/jetbrains/fsharper)
- Visual F# Power Tools (https://visualstudiogallery.msdn.microsoft.com/136b942e-9f2c-4c0b-8bac-86d774189cff)
- FSunit (https://github.com/fsprojects/FsUnit)
- Mark Seemann – Look, no Mocks! Functional TDD with F# (Slides) (http://buildstuff14.sched.org/event/aa7f6cc493540537e900aed752810c2a#.VKlo_YdtHfw)
- FAKE – F# Make (https://github.com/fsharp/FAKE)
- F# Compiler Services (http://fsharp.github.io/FSharp.Compiler.Service/)
Functional Koans – F# (https://github.com/ChrisMarinos/FSharpKoans) - konferencja Lambda Days (http://www.lambdadays.org)
Muzyka wykorzystana w intro:
“Misuse” Kevin MacLeod (incompetech.com)
Licensed under Creative Commons: By Attribution 3.0
http://creativecommons.org/licenses/by/3.0/
Względem programowania funkcyjnego odnoszę wrażenie, że mam wyprany mózg obiektówka. Pomimo tego, ze konstrukcje językowe F# są dość klarowne i zrozumiałe, to przeskoczenie na realny projekt jest jakieś takie problematyczne. Trzeba próbować i próbować, aż furtka w głowie się otworzy, a trybiki ruszą. Nie ma innej rady!
O programowaniu funkcyjnym z Michałem Łusiakiem
Dziękujemy za dodanie artykułu – Trackback z dotnetomaniak.pl
Fajne naprawdę fajne. Nie ma takiego bullshitu typu “super nie można bez tego żyć”, “projekt bez tego to bad practice”. Szczerze i na temat. WINCYJ
Fajny podcast. Scala brzydkim językiem jest no ale chociaż dość popularnym – przynajmniej w Londku.
Wśród języków funkcyjnych Clojure to mój faworyt :)
Że dać się napisać cały projekt w F# przekonywał jeden z pracowników Credit Suisse na spotkaniu grupy .NET we Wrocławiu mówiąc, że 99% kodu u nich w jednym z dużych projektów jest napisany w F#. Mnie bardzo zainteresowało testowanie w F# bo z tego co widzę jest o wiele bardziej czytelniejsze niż testy w C#.
Bardzo ciekawy odcinek. Tylko dwie uwagi, Lisp jest językiem wieloparadygmatowym, z własną, skrajnie odmienną od znanej Javy czy C# implementacją obiektowości. Clojure natomiast nie jest implementacją Common Lispa na JVM, tylko nowym językiem.
Niestety trochę się zawiodłem na tym odcinku, ale to “na własne życzenie”. Na co dzień programuję za $$$ w języku funkcyjnym (akurat “źle” wspominana Scala) i spodziewałem się, że podejmiecie jakieś grube, zaawansowane tematy, a tymczasem po prostu sobie porozmawialiście, co zapewne biorąc pod uwagę medianę wiedzy słuchaczy na temat FP (tak “strzelam”), jest jak najbardziej uzasadnione. Do tego moja refleksja na koniec była taka, że jako początkujący chyba nie zainteresowałbym się po tym podcaście F#, bo trochę w treści zabrakło porządku. Chcąc uzyskać taki efekt (ale nie wiem czy takie było zamierzenie), wydaje mi się, że lepiej spisałoby się, gdybyście na… Read more »
Łukasz, Dzięki za linka do Coursera, uciekł mi w trakcie pisania posta :) Co do zawartości nagrania… DevTalk raczej nigdy nie będzie podcastem bardzo zaawansowanym technicznie. Powodów jest wiele, a trzy główne to: 1) zarówno ja jak i Gość musielibyśmy być ekspertami żeby sensownie mówić 2) słuchacze również musieliby być ekspertami żeby zrozumieć (i pojawia się problem: jak nie zanudzić ekspertów?) 3) słowem “mówionym”, bez pomocy tekstu/slajdów/rysunków bardzo trudno jest wytłumaczyć skomplikowane kwestie techniczne w zrozumiały sposób, szczególnie bez uprzedniego długiego przygotowania (przed nagraniem nie uzgadniam pytań z Gośćmi, czasami tylko udostępniam planowany szkic/”spis treści”, ale bez możliwości ingerencji) Celem… Read more »
W LISPie tak bardzo widać listy bo LISP to nic innego jak skrót od “LiSt ProcessIng”. Ale najbardziej podstawową jednostką, tak jak atom we wszechświecie, jest funkcja. W językach funkcyjnych nawet kolekcje, takie jak listy są implementowane za pomocą funkcji co bardzo wyraźnie widać w rachunku lambda przy opisywaniu czym jest para elementów. A lista to nic innego jak ciąg par, w których pierwszy element trzyma wartość a drugi “wskaźnik” na kolejną parę lub znak końca listy. Pattern Matching zaś przybiera formę switch-a tylko w niektórych językach. “Wypasiony switch” to jego implementacja – nie istota. Widać to świetnie na przykładzie… Read more »
@Daniel, widziałem Twoje posty o Clojure – sprawiły, że też się trochę zainteresowałem. Nie wiedziałem, że siedzisz teraz w Londynie. Tam jest bardzo fajna grupa F#-owa, jakbyś chciał się zainteresować ;) http://www.meetup.com/FSharpLondon/
@Łukasz podeszliśmy do rozmowy tak jak mówisz, trochę chaotycznie i powody też już wyjaśnił Maciek. Ja od siebie mogę dodać, że nie jestem też super doświadczony i dlatego też niektóre moje tłumaczenia były dość kulawe ;). Bardzo chętnie dowiedziałbym się gdzie i z czym pracujesz funkcyjnie. Dobrze jest wiedzieć, które firmy fajnie cisną ten temat. Możesz odpowiedzieć tutaj, albo jakoś na priv: michal@tretton37.com :)
@Maciek Dzięki za odpowiedź – tak jak napisałem zawiodłem się na własne życzenie, bo spodziewałem się więcej niż to faktycznie możliwe, “pretensji” więc nie mam :). Jedyne co na pewno dałoby się poprawić to pewne uporządkowanie, np. zaczęcie rozmowy od definicji FP i może np. porównania C# vs F#, przynajmniej w kluczowych cechach. W poprzednich odcinkach, np. nt. AoP takie wyjaśnienia wręcz “definicyjne” bardzo dobrze otworzyło rozmowę i np. ja – raczej zielony ludek w tym temacie od razu poczuł się pewniej. Co do “follow-upu” – bardzo chętnie, ale za jakiś jeszcze czas :) @Michał Dzięki w ogóle, że poruszyłeś… Read more »
Dobry odcinek ale chcialbym dodac troche wlasnych doswiadczen. Ciekawi mnie co jest potocznie rozumiane przez ‘duzy projekt’. Czy jest to solucja ze stu projektami, czy byc moze jeden serwis ktory ‘obsluguje’ baze danych z czterystoma tabelami ? Moim zdaniem pierwszej jak i drugiej sytuacji nalezy unikac i najprawdopodobniej jest to oznaka glebszych problemow. Jezeli natomiast ‘duzy projekt’ jej systemem z autonomicznymi serwisami ktore komunikuja sie w jakis luzny sposob przy uzyciu otwartych protokolow to nic nie stoi na przeszkodzie by nawet kazdy z nich napisac w innym jezyku. Ciekawy artykul o uzyciu Haskell w firmie ktorej reszta kodu byla napisana… Read more »
Jestem bardzo zawiedziony odcinkiem. To z powodu gościa. W komentarzach widzę, że inni nie. Może jestem zbyt wymagający, ale nie rozumiem po co zapraszać do rozmowy o F# kogoś kto jak sam mówi prawie nie ma doświadczenia w tym języku? Ma projekty rozkopane, bo mu się nie chce, ale zamierza “kontrybuować” w innych. W sumie to w F# nie pisze, no może testy, ale bardzo krótko i na razie w sumie nie wie, czy są fajne. Tylko tyle, że nazwy metod ładnie wyglądają. Nie za bardzo potrafi opowiedzieć o czymkolwiek w F#. Do tego taka osoba prowadzi prelekcje po całej… Read more »
Jam co prawda dżaważ, ale widzę, że komentatorzy podchodzą do tematu głębiej, więc pozwolę sobie dodać kilka myśli do przedyskutowania (abstrahując od nagrania, bardziej ogólnie o FP): 1. OO vs FP Widziałem wiele prezentacji na ten temat i niestety był tam zastosowany chwyt erytrystyczny Strawman (przedstaw wroga tak aby było łatwo po pokonać). Mamy zatem “abiektawe” programowanie, czyli encje anemiczne i serwisy, czyli Pascal, czyli proceduralne. I jest ono miażdżone przez FP. Moim zdaniem dobrze zrobione OO jest bardzo, bardzo blisko FP. Trzymając się: SOLID, GRASP i 4 zasad OO dochodzimy chcąc nie chcąc do kilku elementarnych wzorców, które są… Read more »
@Łukasz, będę i bardzo chętnie się spotkam :)
@Marek zajebiście (:P) cieszy mnie Twój komentarz, bo w głowie bardzo się z nim zgadzam. Też nie rozumiem, czemu Maciek mnie zaprosił ;) Jestem świadom, że są ludzie znacznie bardziej obyci z tematem i w żadnym miejscu nie twierdze że jestem w jakimkolwiek stopniu ekspertem. Raczej świeżym pasjonatem, ale nie sądzę, żeby to był powód aby ekscytacją się nie dzielić.
@Dawid, Sławek – bardzo ciekawe uwagi, dzięki za te komentarze :)
@Marek, pytanie tylko, co miałby wnieść do tej mimo wszystko poglądowej rozmowy ekspert? Pamiętam jak jakieś dwa lata temu trafiłem na “minicykl” Maćka dotyczący testowania. W kontekście mojej obecnej wiedzy mogę śmiało napisać, że wpisy te nie miały charakteru eksperckiego, ale pozwoliły mi zapoznać się z tematem i w konsekwencji stać się lepszym programistą. Właśnie dlatego jestem Maćkowi niesamowicie wdzięczny za to, co robi. Podobnie traktuję rozmowę z Michałem. Już sklonowałem FSharpKoans i zapoznaję się z F#. Odnośnie samego FP to zupełnie nie mam z nim doświadczenia w pracy nad “prawdziwymi” projektami. Muszę powiedzieć jednak, że ilekroć uda mi się… Read more »
@all: dzięki za takie wypasione komentarze, bardzo wartościowe i interesujące!
@Marek: ja się dowiedziałem czegoś nowego podczas rozmowy i z komentarzy wynika, że inni też… więc mission accomplished; być może będzie ciąg dalszy z kimś bardziej doświadczonym, zawsze czekam na zgłoszenia chętnych do wzięcia udziału
@Tomek: dzięki za miłe słowo ;)
Updated: DevTalk – Programistyczny głos w Twoim domu
http://groopmark.com/link/details/181/devtalk—programistyczny-glos-w-twoim-domu?cid=11
Skoro tutaj tylu F#-owców to to skorzystam :)
Dopiero zaczynam z F#. Nagrałem video z mojego pierwszego podejścia do String Calculator Kata w F#. Jestem pewien, że daleko temu kodowi do ideału. Będę wdzięczny za jakieś opinie i sugestie jak to można poprawić, napisać bardziej po F#-owemu.
https://writesoft.wordpress.com/2015/01/15/stringcalculator-kata-in-f-sharp-revision/
Maciek poprosił mnie, żebym dzisiaj rozstrzygnął konkurs.
A więc książka leci do Dawida Kowalskiego za rzeczowy komentarz z ciekawymi spostrzeżeniami, który fajnie rozszerza naszą rozmowę.
Dzięki wszystkim za dyskusję!
Ja też się trochę zawiodłem na tym odcinku :(. Swoją przygodę z F# zacząłem dawno temu. Przerobiłem parę tutoriali, napisałem parę drobnych programów. Wydaje mi się, że świetnym wprowadzeniem jest Project Euler — https://projecteuler.net/problems. Ja tak zrobiłem: https://github.com/ggierlik/FSharp.Euler.Problems. Proste (na początku) problemy i co więcej — wymarzone do funkcyjnej implementacji (rekursja, przetwarzanie list, pipelining). Jeżeli ktoś nie wie jak zacząć to Project Euler jest chyba dobry na start — szybko widać efekty. Z mojego doświdczenia: * parę problemów rozwiązałem w 5-10 minut, w paru liniach kodu i zadziałało od pierwszego razu (jeden od przeczytania do zaliczenia w ok. 3 minuty)… Read more »
Trochę tutaj chyba nakłamaliście :)
Genericsy nie były przeniesione z F# do C#. Powstawały już w 1999.
Również nie jest prawdą, że FAKE, Rake, Psake są nakładkami na MSBuild. MSBuild jest przez nie wykorzystywany tylko do zrobienia Builda (bo skrypt MSBuild-owy już macie – plik sln). I to jest wszystko do czego MSBuild się nadaje :)
@Grzegorz,
Dzięki za link do project euler, wygląda bardzo ciekawie!
Piotr,
Co do genericsów to nie mam pojęcia, nie wypowiadam się, ale co do MSBuild: zgadzam się kompletnie, że nadaje się tylko do “build” ;). I w tym sensie inne rozwiązania to nakładki, bo wykonują msbuildowe “build” :). Ja dostaję furii jak mam w MSBuild bezpośrednio skopiować jakieś pliki – nigdy nie potrafię zrozumieć jak działają jego mechanizmu include/exclude, zwykle inaczej niż bym się spodziewał.
Pluralsight (http://www.pluralsight.com/) ma ,,promocje” (https://www.codeschool.com/pluralsight?utm_source=pluralsight&utm_medium=homepage&utm_campaign=CodeSchool_acquisition) (kończy się 30.01) — udostępnia wszystkie kursy na 72h od czasu ,,użycia” promocji (jeżeli dobrze zrozumiałem). Działa też dla istniejących, nieopłaconych kont. Mają 3 kursy z F#. W sam raz na weekend.