Z pewnością zgadzam się z głównym założeniem przyjętej odpowiedzi, a biorąc pod uwagę, że po prostu nurkujesz na dobre, dając Erlangowi szansę, brzmi to tak, jakbyś prawdopodobnie miał całkiem dobre zrozumienie tego, jak się uczysz i po prostu potrzebował trochę troche w prawo kierunek, tak wyraźnie, że była to dla ciebie dobra odpowiedź ... Ale myślę, że podszedłbym do tego pytania nieco inaczej, ponieważ widzę, że ta odpowiedź wcale by mi nie pomogła; Zawsze koduję, by się uczyć! Oto moje myśli ...
(BTW, staram się pisać bardziej szczegółowo, powiedzmy, rozdziały w książce, i jestem pewien, że nie mogę tutaj całkowicie stłumić swoich instynktów , ale zamierzam spróbować innego rozwiązania; streszczę tutaj moje przemyślenia, a jeśli ktoś chciałby uzyskać więcej szczegółów na temat czegoś lub uważa, że coś, co mówię, jest mylące w tym formacie, postaram się jak najlepiej przypomnieć sobie przypomnienia o odpowiedziach ...)
Aby spróbować utrzymać się na zadaniu, oto moje zrozumienie podstawowych pytań zadawanych w PO; Ograniczę się do minimum, aby wyjaśnić ...
Najpierw szybkie odpowiedzi:
czy byłem w podobnej sytuacji? To było co najmniej podobne; Byłem na pierwszym miejscu, wykonując wiele różnorodnych projektów, które były ze sobą powiązane ... (CRM / Web / DB / Data Integration / etc.)
jak / dlaczego przeszedłem do funkcjonalnego? ” Widziałem kilka przykładów LINQ i chociaż zdecydowanie marzyłem o jakimś zintegrowanym, statycznie typowanym języku zapytań [ponieważ korzystałem głównie z języków o typie statycznym (głównie C ++, a później C # )] przez całą moją karierę ... Ale to było dość szybkie środowisko pożarowe, w którym się znajdowałem, i chociaż często zdarzyło mi się zobaczyć, co nadchodzi w przeszłości, nigdy tak naprawdę tego nie przemyślałem, więc nigdy nie przewidziałem, że to mógł / pozwoliłby na operacje na Plain Old Objects (lol!) równie łatwo; kiedy to zobaczyłem, wiedziałem, że muszę go mieć ... więc to jest powód i początek tego: skupiłem się na nauce zrozumienia LINQ .
Cztery myśli ... eeee, nie, to nie w porządku ...
Kiedy czytam odpowiedź Martijna Verburga , wzmianka o funkcjonalności biznesowej od razu przypomina mi o rozpoczęciu wdrażania kodu do wszystkiego, nad czym pracuję ... W zależności od tego, jak płytkie było to początkowe eksperymentowanie, mogłem odpowiedzieć inaczej, ale zakładając, że to tylko zanurzając swój duży palec u nogi, nie jestem pewien, czy miałem coś bezpośrednio do pracy (lub przyszłej pracy), która dostarczyłaby mi podniecenia / pasji, którą, jak sądzę, powinieneś prawdopodobnie mieć z powodu kilku pierwszych problemów, z którymi zaczniesz się uporać ...
Byłem uziemiony prawie całkowicie w statycznie typowanych językach + metaforach i wzorcach OOP + cokolwiek, co skończyło się przypadkowym owijaniem mózgu podczas rozwiązywania moich rzeczywistych problemów przez lata ... Chodzi o to, że jeśli w ogóle jesteś taki jak ja, prawdopodobnie masz dużo mózgu poświęconego rzeczom, które nie pomogą ci tak bardzo z LINQ / FP.
Myślę o tym jak o programowaniu czysto proceduralnym vs. OO: jest wiele rzeczy proceduralnych, których będziesz używać w OOP, ale ci, którzy przychodzą do C ++ z C bez priorytetowego traktowania grok / ken / "get" OO w końcu jest bardzo źle w C ++. Właściwie przeprowadziłem wywiad z wieloma (15+) długoletnimi twórcami oprogramowania i sterowników urządzeń, którzy naprawdę myśleli, że znają C ++, ale co najwyżej mieli bardzo podstawową / podręcznikową znajomość C ++, praktycznie nie rozumiejąc lub doświadczenie w OOP - ponieważ nigdy tak naprawdę nie robili OOP ... Pisali wielozadaniowe klasy singleton z elementami statycznymi i funkcjami statycznymi z pewną ilością klas niestatycznych / nie singletonowych, które były używane jako struktury.
I FP ma podobne, zadziwiające (dla tych, którzy nie wychodzą na paradygmacie) koncepcje i inne rzeczy, które się z tym zgadzają, i (chociaż uznałem, że hybrydyzacja wielu technik jest dla mnie idealna) rozumiem więcej i w miarę upływu czasu, dokładnie jak ograniczone było moje myślenie przed wprowadzeniem prawdziwych zdolności funkcjonalnych do mojego zestawu narzędzi; W przeszłości udało mi się wdrożyć wiele rzeczy w sposób, który był nieco bardziej kreatywny niż być może większości programistów OO, ale kiedy używam koncepcji, jak wcześniej moje myślenie było zahamowane ... Istnieje wiele klas problemów, które można rozwiązać w kilku wierszach, które zajmowały dużo czasu w C ++ / C #.
nagle znajdujesz się ...
We wpisie „Too Long”
Jesteś w labiryncie krętych „nie czytałem”, podobnie.
W niedalekiej przyszłości zobaczysz telekonferencję, która szybko się zbliża.
> zwięzłe
UH Huh. Pewnie. Ok, powiemy, że tryb „zwięzły” jest włączony.
W niedalekiej przyszłości zobaczysz telekonferencję, która szybko się zbliża.
> co to ma znaczyć?
Tylko mówię'. Nie musiałeś dziś rano coś robić?
W niedalekiej przyszłości zobaczysz telekonferencję, która szybko się zbliża.
> hej, czy to jest zaleta za tobą?
Co!? GDZIE?! [ucieka krzycząc]
> Przepraszam, nie rozumiem CO GDZIE, przeformułowanie?
[kontynuuje bieganie i krzyczenie, sarkazm niezauważony]
Więc ... Czego powinienem się nauczyć, drogi PSE, drogi PSE?
Osobiście zacząłem w C # z LINQ. Pozwoliło mi to przedstawić kilka pojęć naraz, a podczas gdy ciągle czytałem o FP i jego koncepcjach, a także o LINQ i relacjach między nimi, dałem mi krok naprzód, wciąż wykonując produktywną pracę. Dodałem kilka rzeczy na raz, zapytania danych szybko stały się dla mnie użytecznym narzędziem bez konieczności rozumienia tony.
Teraz, patrząc wstecz, żałuję, że nie byłam w stanie wykonać następnego projektu (rozwiązanego około rok później); Średnio zapoznałem się z F # (który, nawiasem mówiąc, dał mi świetny start w nauce ML (metaljęzyka) i jego innych pochodnych (np. OCaml .)
Zasadniczo myślę, że przyzwoita odpowiedź na „co” zależy od znalezienia dobrego parowania jakiegoś problemu programistycznego, który Cię interesuje, ale oczywiście musi się sparować z odrobiną FP, której chcesz się nauczyć ... (i możesz spłukać / powtórz / spień po wykreśleniu czegoś z listy ...) I oczywiście zawsze kończysz się uczeniem czegoś więcej niż najważniejszej rzeczy, którą postanowiłeś zrobić; na początku zrobiłem kilka kroków dla dzieci, ale potem skończyłem robić większe rzeczy i pozwalać mniejszym rzeczom wpaść na miejsce, kiedy to robiłem.
Po pierwsze, co unosi twoją łódź? Zwłaszcza na początku najlepiej jest mieć coś zabawnego i ekscytującego (dla Ciebie), dzięki czemu zainteresowanie pozostanie wystarczające, aby było dla ciebie opłacalne. Więc problemy z IOW do pracy i techniki, które rozwiązują te problemy ... LINQ i wbudowane zapytania danych na początku dla mnie. Rekurencja była dla mnie kolejna, w tym rekurencja ogona, kopię GodelEscherBach-ness tego; i czytałem o rekurencji ogona. W tym czasie rzeczy, nad którymi pracowałem, zostały zawieszone i skończyło się to dużym blokiem czasu, więc byłem w stanie utrzymać się przez długi czas. Łatwiej było z mniejszymi przerwami, ale ponieważ wybrałem rzeczy, które uważałem za zabawne, nie było tak trudne nawet z przerwą w pracy. :)
I chociaż nie wymyśliłem nic fajnego, o czym mogę powiedzieć, jak samoświadomy Program Kraba, udało mi się być w tym całkiem niezłym.
I ... Z czym mam się tego nauczyć, drogi PSE, drogi PSE, z czym?
Użyłem do tego różnych algorytmów, które i tak mnie interesowały, a także różnych rzeczy, zastanawiałem się, czy możesz to zrobić w F #, a kiedy zabraknie mi pomysłów, zajmę się takimi rzeczami jak 99 butelek piwa i Project Euler problemy ...
Jestem pewien, że możesz znaleźć wiele rzeczy, które Cię interesują, które dotyczą FP; oferuje wszystko, od ulepszeń do OOP, które pomagają ci streścić sprawy nieco bardziej zwięźle aż do zmiany sposobu, w jaki myślałeś o tym wcześniej, w kształt, którego nie rozpoznajesz i prawdopodobnie nie miałeś nawet modelu mentalnego do wyrażenia przed.
Ale ... W moim modelu jest dziura, droga PSE dziura ...
I dlatego ważne jest, aby, zwłaszcza na początku, ale tak naprawdę przez cały czas nauki (i czy nie zawsze jest to prawdą, gdy się czegoś uczysz?) Przynajmniej trochę czasu między problemami czytać rzeczy niezwiązane, ale wciąż FP i czas na odczytanie kodu źródłowego napisanego przez ekspertów, najlepiej rozwiązanie tych samych lub podobnych problemów; a także ich wyjaśnienia ...
I cały czas musisz wysilać swój mózg, aby zrozumieć to wszystko, nie z twojej starej perspektywy, ale z samego FP ... W pewnym momencie dla mnie kliknęło i ... rzecz, którą najlepiej mogę to powiązać staje się mniej lub bardziej biegły w języku niderlandzkim; w pewnym momencie udało mi się w wystarczającym stopniu postawić na sposób myślenia (zrobiłem to przez zanurzenie, co w zasadzie to tutaj opisałem; zanurzenie się w FP, zamiast próbować nauczyć się tego wyłącznie poprzez „książkowe uczenie się”…
I ostatecznie to zrobiłem; Udało mi się wszystko zinternalizować i przekręcić mózg, aż zaczęłam wyskakiwać z FP / LINQ, nawet bez konieczności tłumaczenia go z powrotem na OOP. (Tak, zrobiłem to; musiałem mieć coś do powieszenia na spódnicy. Kapelusz. Cokolwiek.)
Końcowe przemyślenia...
Mój, wygląda na to, że tracisz zdolność myślenia o swoim sygnaturze sprytnie
tytuły sekcji. Jaka szkoda.
Telekonferencja wciąż szybko się zbliża. Wydaje się teraz znacznie większy.
> tak, tak, cóż ... zwięzłe i wszystko inne. Widzę, że udało ci się zgubić tę grotę.
bliskie połączenie, to ... no cóż, jestem ter ... Och NIE, WSTĘP!
AAAAAAAHHHHHH !! [ucieka krzyczac, jeszcze raz]
Telekonferencja wciąż szybko się zbliża.
W pewien sposób przypomina Sir Lancyjohna Cleezewiza.
To już prawie koniec.
> hej, pospiesz się! Mam eksperyment z tobą! (i po-ta-to)
Oczywiście w Internecie można znaleźć mnóstwo informacji o FP. Najważniejsze jest, aby zrozumieć podstawowe pojęcia, a następnie nauczyć się je stosować. Na przykład dowiedz się o niezmienności i dlaczego jest to ważne / przydatne dla FP. Gorąco polecam nauczenie się trochę teorii, aby zgodzić się ze wszystkim, na przykład, jak czysty FP może być znacznie bardziej podatny na formalny dowód. To była siła napędowa przodka F #, ML. YMMV oczywiście możesz być osobą znudzoną łzami, w takim przypadku wiele przykładów, wiele prób i błędów, aby dowiedzieć się dokładnie, dlaczego zastosowane techniki są takie, jakie są, pomogą ci mieć to „Aha!” moment żarówki.
Więc na razie to zostawię. Mam nadzieję, że to komuś się przyda. Chciałem dowiedzieć się czegoś więcej na temat konkretnych rzeczy, ale na razie nie mam czasu. Mam nadzieję, że znajdę trochę czasu, aby szybko do niego wrócić, chociaż dla mnie to długi tydzień, więc prawdopodobnie będzie to przynajmniej weekend.
<3 „Przedstawiamy GRUEBOL, chwilową lukę; tylko do czasu ukończenia SnozzML. Powinno to być wkrótce; tym razem ogromna komisja pomaga mi”. --Grace Hopperwit Egghead, Famous Last Words , XX97 GUE <3