devstyle.pl - Blog dla każdego programisty
devstyle.pl - Blog dla każdego programisty
0 2 minut

DevTalk#06 – O programowaniu funkcyjnym z Michałem Łusiakiem


05.01.2015

michal_lusiakOd 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!


Montaż odcinka: Krzysztof Śmigiel.
Ważne adresy:

Linki:

Tretton37

 


Muzyka wykorzystana w intro:
“Misuse” Kevin MacLeod (incompetech.com)
Licensed under Creative Commons: By Attribution 3.0
http://creativecommons.org/licenses/by/3.0/

Nie przegap kolejnych postów!

Dołącz do ponad 9000 programistów w devstyle newsletter!

Tym samym wyrażasz zgodę na otrzymanie informacji marketingowych z devstyle.pl (doh...). Powered by ConvertKit
Powiadom o
reVis

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!

trackback

O programowaniu funkcyjnym z Michałem Łusiakiem

Dziękujemy za dodanie artykułu – Trackback z dotnetomaniak.pl

Radush
Radush

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

Daniel Turczanski

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 :)

siararadek
siararadek

Ż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#.

Antek
Antek

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.

Łukasz
Łukasz

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… Czytaj więcej »

Jan Koprowski
Jan Koprowski

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… Czytaj więcej »

Michał

@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 :)

Łukasz
Łukasz

@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ś… Czytaj więcej »

Dawid Kowalski

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… Czytaj więcej »

Marek
Marek

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… Czytaj więcej »

Sławek Sobótka

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ą… Czytaj więcej »

Michał

@Ł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 :)

Tomek
Tomek

@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ę… Czytaj więcej »

Bogusz
Piotr Lazy<Developer> Perak

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/

Michał

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ę!

Grzegorz Gierlik

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)… Czytaj więcej »

Piotr Lazy<Developer> Perak

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

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.

Moja książka „Zawód: Programista”

Facebook

Zobacz również