Jak wprowadzić swój zespół w funkcjonalny styl kodowania?


10

Mam sytuację, w której większość osób w mojej grupie wywodzi się z programowania obiektowego z niewielkim zrozumieniem programowania funkcjonalnego. Nawet podstawy, takie jak zamknięcia.

Wszelkie sugestie dotyczące tego, co może być dobrym sposobem na wprowadzenie ich w funkcjonalny styl kodowania? Wiele kodowania, które wykonujemy, można skrócić, jeśli wykonamy funkcjonalny sposób dla naszych konkretnych przypadków.

Przeprowadziłem już kilka prezentacji na temat paradygmatów funkcjonalnych i kodowania. Niestety nie używamy właściwego funkcjonalnego języka programowania, takiego jak Haskell (w zasadzie starszy kod znajduje się w C, C ++, Java), więc musimy zrobić wszystko, co tam jest.


11
Zanim zapytasz jak, zapytaj dlaczego . Czy pracujesz nad problemami, które można łatwiej rozwiązać w stylu funkcjonalnym niż w stylu obiektowym? OO działa naprawdę dobrze dla wielu rzeczy (dlatego odniosło taki sukces), a nie tak dobrze dla innych. Z twojego pytania wynika, że ​​brzmi to trochę tak: „Chcę tworzyć nasz kod w funkcjonalnym stylu tylko dlatego, że uważam, że programowanie funkcjonalne jest fajne, nawet jeśli nie mamy języka, który go obsługuje, a zespół nie wie, jak to zrobić. zrobić to! ” To bardzo zły pomysł. Pamiętaj, właściwe narzędzie do właściwej pracy.
Mason Wheeler,

2
@MasonWheeler: Wiem, dlaczego potrzebujemy funkcjonalności. Nie w fajny język miesiąca. Na to za stary.
Fanatic23,

1
Załóżmy, że ktoś zna Haskella, czy możesz sprawić, by działał w twoim systemie?
JeffO,

4
Wygląda na to, że programowanie funkcjonalne rozwiązuje problem, którego Twój zespół nie ma. Wiedzą, jak kodować Java C, C ++, które nie są naturalnymi kandydatami do programowania funkcjonalnego (implementacja zamknięć jest w tych językach po prostu okropna).
James Anderson

Odpowiedzi:


8

Luca Bolognese wykonał tę fantastyczną prezentację, w której wprowadza programowanie funkcjonalne (aby zaprezentować F #) na przykładzie kawy, który jest naprawdę świetny i bardzo pomógł mi przedstawić programowanie funkcjonalne znajomym i kolegom.

Możesz także spojrzeć na rzeczywiste programowanie funkcjonalne Petricka, które jest moim zdaniem doskonałym sposobem na funkcjonalne myślenie.


ta prezentacja jest fantastyczna ... zwłaszcza, że ​​została podana przez wampira !! LOL!! j / k .. chłopaki mają charyzmę ..
hanzolo

7

Czy Twoi koledzy kodują poza pracą?

Biorąc pod uwagę, że nie robisz żadnych FP w swojej firmie, zachęcenie kogokolwiek do nauki nowego języka / paradygmatu, gdy nie robią nic poza bezpośrednimi zadaniami, będzie prawie niemożliwe.

Jeśli tak, to znajdź interesujące projekty, które im się podobają, związane z programowaniem funkcjonalnym i pokaż je. Nie jesteś w stanie nakazać zmiany, więc będziesz musiał siać nasiona, jeśli zainteresowanie na poziomie osobistym. W ten sposób zostałem przedstawiony - przyznany przez mojego najlepszego przyjaciela, który akurat ze mną pracuje.

Poza tym większość ludzi pisze własne narzędzia ułatwiające wykonywanie drobnych zadań. Spróbuj napisać niektóre z nich w funkcjonalnym języku. Każdy, kto chce zobaczyć kod, będzie narażony na (miejmy nadzieję / prawdopodobnie) piękno kodu i prawdopodobnie zapyta cię o to, kiedy to zrobi. To okazja do sprzedaży pomysłu.

Pamiętaj, że istnieją funkcjonalne języki, które będą działać na twoim stosie (zarówno scala / closure działają na JVM). Nie jest „czysto funkcjonalny” jak Haskell, ale to dobry początek długiej podróży.

Jeśli masz kontrolę nad zatrudnianiem, zatrudnij osoby, które mają pewne doświadczenie funkcjonalne (lub przynajmniej są zainteresowane programowaniem funkcjonalnym).

I na koniec ... możesz być w niewłaściwej firmie, jeśli pasjonujesz się pisaniem kodu funkcjonalnego. Nie zmienisz sposobu, w jaki cała firma pisze oprogramowanie - zwłaszcza jeśli zarabiają pieniądze, a tym bardziej, że nie w rozsądnie krótkim czasie.

Chodzi o to, żeby sprzedać go deweloperom ... zarządzanie jest zupełnie inną bestią.


2

Przejście z programowania imperatywnego na programowanie funkcjonalne jest dużą zmianą ze stromą krzywą uczenia się. Proponuję wypróbować mniej szybkie przejście, a w takim przypadku masz wiele opcji. Na przykład Python obsługuje interpretację list i wyrażenia generatora , Ruby obsługuje funkcje wyższego rzędu poprzez bloki kodu itp. Ponieważ wspomniałeś o Javie, jeśli wszyscy macie doświadczenie w Javie i chcecie pełnej obsługi programowania funkcjonalnego, możecie wypróbować Scalę .


2

Zatrudnij (lub poproś szefa o zatrudnienie) funkcjonalnego programistę

W końcu to zetrze resztę twojego zespołu.

Jak już wcześniej wspomniano, zachęcanie ich do pisania kodu w funkcjonalnym języku w czasie wolnym od pracy również nie zaszkodzi.


2

Jeśli programowanie funkcjonalne naprawdę ułatwi ci życie w twoich przypadkach, sugeruję wyodrębnienie jednego takiego przypadku i zademonstrowanie równorzędnych implementacji zarówno w OO, jak i językach funkcjonalnych dla twoich kolegów.

Jeśli różnica w złożoności jest tak duża, jak mówisz, to powinno to mówić samo za siebie.


2

+1 do faif za wspomnienie o Scali: zaczęło się jako komentarz do tej odpowiedzi, ale stało się zbyt duże ...

Chciałem nauczyć się czegoś o programowaniu funkcjonalnym (pochodzącym z C / C ++, trochę Pythona i zardzewiałej Javy); Próbowałem nurkować na głębokim końcu z Ocaml, a następnie Haskell i Just Didn't Get It. Potem wypróbowałem Scalę i odkryłem, że pozwala mi zacząć korzystać z funkcjonalnych rzeczy w wygodnym środowisku OOP / Java-ey, w którym mogłem łatwo wrócić do znanego imperatywnego stylu, gdy uniknęło mnie funkcjonalne podejście. Niektórzy mogą narzekać na „multiparadygmat”, „hybrydowy” charakter języka, co oznacza, że ​​nigdy nie musisz zmuszać się do „czystej funkcjonalności”, ale powiedziałbym, że oznacza to, że możesz być pragmatyczny i wiedzieć, że będziesz móc w jakiś sposób łatwo wykonać prawdziwe rzeczy, kiedy zajdzie taka potrzeba.

Kilka lat później (i ponad 200 rozwiązań Project Euler Scala w Scali później) spotkanie z funkcjonalnością zdecydowanie wpłynęło na moje Pythona (znacznie większe wykorzystanie mapy, filtrowania, zmniejszania, lambdas, itertools, list zrozumienia i przekazywanie funkcji niż ja ” d) w kodzie wielowątkowym.

Więc osobiście, gdybym był tobą, przedstawiłbym argumenty za wprowadzeniem Scali do twojego rozwoju w Javie, najlepiej pokazując niektóre przykłady tego ogromnie upraszczając coś i generując korzyści, o które się twierdzisz. To, co dzieje się później, zależy od całego „popierania” nowych pomysłów i wprowadzania zmian ... co wydaje się być znacznie większym problemem.


1
@timeday Bardzo dobrze powiedziane. Jestem facetem Java / OO. Scalę podniosłem rok temu. Nauka FP była dla mnie dość trudna. Robię trochę naraz i siedzę z tym. Nie staram się tego wszystkiego naraz.
chaotic3quilibrium

1

Chciałbym polecić stopniowe podejście przy użyciu Scali. I poleciłbym zacząć od książki twórcy Scali „Programowanie w Scali, wydanie 2” . Ta książka jest FANTASTYCZNA w powolnym wprowadzaniu do programowania funkcjonalnego (FP) za pomocą Scali. I pokazując przejście w kierunku FP, nie odrzuca OO. W rzeczywistości wykorzystuje to. Teraz robię to po raz drugi.

Zasadniczo Scala pozwala wykonywać Java / OO „bez średników”. A potem można wypróbować trochę FP bez konieczności chodzenia na całość. Na przykład, przygotowując się do wykonywania FP, zwykle skupię się na przejrzystości referencyjnej na poziomie metody klasowej, ale niech moje metody mają jednak tyle różnych wariantów, zmienności i imperatywności, ile jest mi potrzebne do pierwszego przejścia na wdrożenie. Następnie skupiam się na powolnym przerabianiu każdej metody, aby przenieść ją w kierunku czystego FP. Korzystam także z siostrzanej witryny StackOverflow, CodeReview, aby uzyskać pomoc w przejściu myślowo-myślowym. Oto przykład ostatniego postu, który napisałem, robiąc to właśnie.

Tak czy inaczej, powodzenia w podróży FP. :)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.