Czy powinienem wybrać funkcjonalny język programowania?

10

Ostatnio bardziej martwi mnie sposób pisania kodu. Po przeczytaniu kilku książek o wzorach projektowych (i jestem pewien, że ich nadgorliwa realizacja) zmieniłem sposób myślenia w stronę opisania tego, co się zmienia. Zazwyczaj zauważam, że piszę mniej interfejsów i bardziej zorientowany na metody kod, w którym uwielbiam umieszczać życie w starych klasach z predykatami, czynnościami i innymi zadaniami delegowanymi. Wydaje mi się, że często zmieniają się działania, więc je podsumowuję. Nawet często, choć nie zawsze, rozkładam interfejsy na jedną metodę, a następnie wolę użyć delegata do zadania zamiast zmuszania kodu klienta do utworzenia nowej klasy.

Więc chyba to mnie uderzyło. Czy zamiast tego powinienem programować funkcjonalnie?
Edycja: Mogę mieć błędne pojęcie o programowaniu funkcjonalnym.

Obecnie moim wybranym językiem jest C # i pochodzę z języka C ++. Pracuję jako programista gier, ale obecnie jestem bezrobotny.

Mam wielką pasję do architektury. Moje zalety to czysty, elastyczny, wielokrotnego użytku i łatwy w utrzymaniu kod. Nie wiem, czy zostałem otruty tymi sposobami, czy to na lepsze. Czy mam gorączkę refaktoryzacyjną, czy powinienem przejść dalej? Rozumiem, że może to być pytanie o „użyj odpowiedniego narzędzia do pracy” , ale chciałbym usłyszeć twoje przemyślenia.

Czy powinienem wybrać funkcjonalny język? Jednym z moich czynników strachu jest opuszczenie wygody Visual Studio.

Komunikat
źródło
Możesz wypróbować F #, jeśli opuszczenie programu Visual Studio stanowi przełom.
Adam Lear
To nie jest przełom. Po prostu nie próbowałem wielu innych alternatyw. Wydaje mi się, że trochę obawiałem się pracy bez inteligencji, refaktoryzacji lub podobnych narzędzi i mam taką koncepcję, że znów skończycie pisać kod w zwykłym edytorze tekstu.
Oświadczenie
Jestem obecnie bezrobotny ... czy nie powinno to być pierwsze, co należy naprawić?
Job
Przez chwilę próbowałbym pracować bez VS. Może się okazać, że praca w bardzo minimalistyczny sposób może być świetną zabawą.
Zachary K
@Tak, tak, ale ostatnio zostałem zaatakowany serią dość złych wydarzeń :) Zniszczyłem stopę (no cóż, nie koduję stopą, ale nadal ...) niedawno po opuszczeniu mojej starej pracy w wyszukaj nowy.
Oświadczenie

Odpowiedzi:

5

TAK

Uczenie się nowych rzeczy powinno być zabawą. A nauka nowego sposobu programowania powinna uczynić cię lepszym programistą. Sprawdź jeden z Haskell lub Erlang, oba są funkcjonalne, ale bardzo się różnią. Jeśli wybierzesz Haskell, znajdź kilka wykładów „Simona Paytona Jonesa” na youtube lub podcastach. Facet jest świetnym mówcą.

Zachary K.
źródło
1
Wybrałem tę odpowiedź z wielu powodów. @Zachary K mówi, że fajnie jest wyjść z pudełka znanego miejsca i mieć inną perspektywę. Nie powinienem bać się spróbować czegoś nowego. To nie koniec dni. Haskell to język, który kilka razy wcześniej przykuł moją uwagę w różnych dyskusjach. Nie wiem, czy potrzebuję funkcjonalnego języka, ale jak twierdzi @Toby Allen, jest to świetny sposób, aby zobaczyć, jak działają inne sposoby, i zgadzam się na to po wypróbowaniu UnrealScript. @ammoQ trochę mi to pomijało, ale nie miałem bardzo dobrej definicji mojego pytania. Nadal mam jego obawy.
Oświadczenie
Miło, że mogłem pomóc. Baw się dobrze
Zachary K
14

Święty * * * *. Nie ma srebrnej kuli. Schodzić. Odpręż się, weź głęboki oddech.

To, że masz narzędzie w przyborniku, nie oznacza, że ​​musisz go używać. Skoncentruj się na zadaniu, tj. Napisaniu działającego programu i dokonaj refaktoryzacji, gdy kod będzie brzydko pachniał. Nie zamykaj i nie streszczaj każdego najmniejszego szczegółu tylko dlatego, że może się to zmienić pewnego dnia w przyszłości. IMO naprawdę lepiej jest zacząć od razu, KISS i YAGNI i reagować na zmieniające się wymagania, kiedy się zmieniają .

Nie sądzę, aby ktokolwiek tutaj mógł powiedzieć, czy język funkcjonalny jest lepiej dostosowany do twoich potrzeb. Ponieważ nie powiedziałeś nam, nad czym pracujesz.

użytkownik 281377
źródło
Cóż, nie pracuję teraz nad niczym szczególnym. Jestem między pracą. Jestem / byłem programistą gier.
Oświadczenie z
3
Jest to niebezpieczna sytuacja dotycząca nadinżynierii. Brak terminu, brak zaległości, po prostu zbyt dużo czasu na obsesję na punkcie szczegółów.
user281377,
(Dużo zgadywania, ponieważ nie mam wyraźnego obrazu w głowie). Wydaje mi się, że moje „potrzeby” były bardziej odzwierciedlone w sposobie, w jaki wolę pisać kod. Nie znam się na programowaniu funkcjonalnym i myślę, że nazwa może mnie trochę oszukać. Po prostu czuję, że moje preferencje nie są tak bardzo zorientowane obiektowo, jak myślałem. Więc może powinienem czerpać przyjemność z pracy w innym paradygmacie?
Oświadczenie z
Tak, chyba tak jest. Obecnie jestem w fazie nauki, dlatego badam możliwości pisania w określony sposób. W pracy często nie było czasu na pisanie takiego kodu i trzeba przestrzegać kodeksu postępowania i utrzymywać spójny styl wśród programistów.
Oświadczenie
2
Jest absolutnie w porządku, gdy wypróbujesz wszystkie dostępne narzędzia, gdy jesteś już między zleceniami, ale obawiam się, że nie możemy powiedzieć, czy but pasuje.
user281377,
12

Możesz podnieść F # . Jest to język funkcjonalny .NET, który pozwoli ci korzystać z Visual Studio i ponownie wykorzystać dużą wiedzę .NET. Zespoły oczywiście integrują się ze złożeniami C # bezproblemowo (co pozwala łatwo łączyć C #, C ++ / CLI i F # w jednym projekcie). Obsługa F # pochodzi z VS Pro lub lepszej, ale nie jestem pewien, czy jest ona domyślnie włączona.

Matěj Zábský
źródło
Myślę, że istnieje dodatek dla F # w VS2008, ale jest on domyślny w VS2010.
apoorv020
F # działa nawet z darmową VS Shell.
SK-logic
6

IMO, warto wypróbować funkcjonalny język. Nawet jeśli nigdy nie użyjesz go bezpośrednio w wydanym produkcie, nauczenie się go prawie na pewno pomoże uzyskać nieco inne spojrzenie na programowanie. Nawet jeśli nadal będziesz wykonywać całe „prawdziwe” kodowanie w języku C #, jest całkiem spora szansa, że ​​pomoże ci to poprawić kod, który piszesz w języku C #.

Jak wspomnieli inni, oczywistym wyborem dla osób przyzwyczajonych do Visual Studio jest F #, który jest w zasadzie pochodną Ocaml / Caml / ML. IMO, to był dobry wybór ze strony Microsoft do wprowadzenia ludzi do programowania funkcjonalnego - jest to pełnoprawny język funkcjonalny, ale nie ma prawie tak obcej składni jak niektórzy (np. Podczas gdy języki oparte na Lisp mają prawdziwe zalety, początkujący prawie zawsze mają trudności z czytaniem).

Jerry Coffin
źródło
2

Tak, powinieneś.

Jeśli wybierzesz czysty, taki jak Haskell, nauczysz się nie tylko nowego języka, ale także nowego sposobu myślenia. Może ci to również pomóc w późniejszej pracy proceuralnej / OO.

F #, z drugiej strony, nie jest czysty, więc możesz łatwo ominąć to, co jest ważne w programowaniu funkcjonalnym. Możesz powiedzieć, że tak powiem, kontynuować pisanie programów proceduralnych, które mutują tutaj zmienną, wywoływać tam pewne efekty uboczne, tylko w składni F #.

Ingo
źródło
Zacząłem na tryhaskell.org :) Uczenie się nowych rzeczy jest ekscytujące.
Oświadczenie z
1

Jeśli już używasz c #, nie potrzebujesz nowego języka - dzięki połączeniu metod rozszerzenia, lambdas i ogólnych typów Func / Action dość łatwo jest napisać kod funkcjonalny w C # - w ten sposób możesz użyć stylu funkcjonalnego w algorytmy, w których ma to sens, bez konieczności zmiany całej aplikacji.

Tom Clarkson
źródło
1
Zawsze potrzebujesz innego języka. Nawet jeśli go nigdy nie używasz, nauka nowego języka jest świetnym doświadczeniem. Żaden język nie ma wszystkiego.
Toby Allen
Zawsze musisz się uczyć, ale nie zawsze musisz uczyć się innego języka. Korzyści płyną z nauki koncepcji programowania funkcjonalnego, a nie samego języka, i możesz to zrobić bez wychodzenia ze znanego środowiska i zmiany całego projektu. C # jest wystarczająco dobry, a pod względem praktycznym ogromną zaletą jest posiadanie tylko kodu funkcjonalnego w algorytmach, które faktycznie z niego korzystają.
Tom Clarkson,
Tak, wydaje mi się, że moja troska była bardziej stronnicza w stosunku do języków, które lepiej nadają się (syntaktycznie) do pracy z metodami / funkcjami w sposób, w jaki często pracuję podczas żartowania. C # oferuje wyrażenia lambda i to jest fajne samo w sobie, ale na przykład funkcja zwraca wartość bez żadnych parametrów, uzyskuje kod taki jak () => x, i być może istnieją bardziej przejrzyste sposoby postępowania.
Oświadczenie
+1 @Toby. Niedawno przejrzałem odniesienie do UnrealScript i zobaczyłem kilka interesujących rozwiązań językowych do pracy ze stanami i in. Przenosi się do C # pod względem myślenia o problemie i mają całkiem fajne rozwiązanie. Więc tak, wierzę, że nauczysz się wiele, kiedy wyjdziesz z piaskownicy i plądrujesz sąsiadów za cały piasek i zabawkę, którą znajdziesz :)
Oświadczenie