Zamknięte. To pytanie jest
nie na temat . Obecnie nie przyjmuje odpowiedzi.
Komentarze
Odpowiedź
Ponieważ potrzebujesz praktycznego język:
Zauważ, że Haskell i Lisp są używane częściej niż inne w przemyśle, chociaż ostatnio zainteresowano się Clojure i F #.
Ale spójrz, co się stanie, gdy dodamy Scheme do miksu:
Hmm, czy nie wygląda teraz tak bardzo jak język akademicki, prawda?
Właściwie powyższy wykres jest prawdopodobnie kłamstwem; słowo „schemat” może pojawić się w pomocy poszukiwane reklamy w innych kontekstach niż języki programowania. 🙂
Oto kolejny wykres, który jest prawdopodobnie (trochę) bardziej reprezentatywny:
Jeśli chcesz poznać naprawdę odważny dialekt schematu, zajrzyj na Rakieta.
Komentarze
Odpowiedź
Jeśli chcesz nauczyć się programowania funkcjonalnego, lepiej będzie, jeśli najpierw nauczysz się języka Haskell, a następnie użyj dowolnego języka. Możesz nauczyć się programowania funkcjonalnego, używając innych języków, ale nadal pozwalają one na kod imperatywny i zorientowany obiektowo. Jeśli napiszesz prawdziwy program w Haskell, szybciej nauczysz się programowania funkcjonalnego, ponieważ inne paradygmaty nie będą dostępne do wykorzystania.
Po napisaniu programu Haskell będziesz mieć narzędzia takie jak monady i techniki jak kodowanie bez punktów w wybranym języku. Koncepcje wydają się szczególnie dobrze odwzorowywać na Schemacie.
Komentarze
Odpowiedź
Właściwie, gdybyś był w stanie zaimplementować w Scheme dość złożony system, byłbyś dość pożądane w firmach, w których prawdopodobnie chciałbyś pracować. Wcześniej w mojej karierze spotkałem studentów, którzy wykonali sporo pracy w Scheme i jedyny raz było to niekorzystne, gdy nie byli w stanie wyjaśnić swojej pracy lub nie rozumieli jej wystarczająco dobrze, aby zaimplementować podstawowe dane struktury i algorytmy w rozsądnym czasie. Zawsze pozwalam kandydatom odpowiadać na takie pytania w ich preferowanym języku; spotkałem ludzi, którzy uważali, że są najlepsi w Scheme, którym udało się sporo zmagać z rzeczami, które powinny być łatwe, jak dodanie elementu do połączonej listy, co mnie zdziwiło.
Ale gdybyś był w stanie „zrozumieć” Schemat na tyle dobrze, aby napisać nawet przeciętną aplikację internetową, byłby to co najwyżej całkiem niezły punkt sprzedaży poważne firmy programistyczne.
Gdybyś przeprowadzał rozmowę kwalifikacyjną w sklepie typu „blub” i programiści myśleli, że jesteś dziwny z powodu twojej biegłości w Scheme, Haskell lub F #, prawdopodobnie nie chciałbyś tam pracować. W większości przypadków kompetentni programiści mają wybór koncertów, więc nie przejmuj się „praktycznością”, chyba że jedyne opcje, jakie możesz sobie wyobrazić w przyszłości, to korporacje. Pracuj nad tym, by być kompetentnym, elastycznym i rozwiązywać problemy.
W collegeu nie chodzi o praktyczność. Chodzi o stworzenie bezpiecznego środowiska do odkrywania i uczenia się. W rzeczywistości jest to przydatne, nawet jeśli skończysz pisać zwykłe oprogramowanie do końca swojej kariery.
Biorąc to pod uwagę, nie zgadzam się ” nie rozumiem, dlaczego tak szybko chciałbyś ograniczyć się do tylko jednego z tych wyborów. Możesz łatwo zrozumieć wszystkie cztery języki w około 4 tygodnie, a następnie wybrać jeden, aby skoncentrować się na tym, który najlepiej pasuje do Twoich aktualnych zachcianek. Następnie Wróć do innej opcji i spróbuj zastosować coś podobnego. Przejdź do czegoś bardziej złożonego i ponownie rozważ opcje. Eksperymentowanie jest dobre. O ile nie próbujesz zarabiać na życie w przyszłym miesiącu, nie musisz zostałem specjalistą.
Pisałem trochę w Scheme, F #, Emacs Lisp i Common Lisp i czytałem przynajmniej trochę Haskella, przynajmniej od czasu do czasu w ciągu ostatnich kilku lat. Nie mogę powiedzieć, żebym był ekspertem w żadnym z nich, ale każda wyprawa do tych języków przyniosła mi korzyści we wszystkich innych językach, w których pracuję zawodowo (C #, Java, Ruby, a czasami Boo, Perl i Python). Ciekawość pomoże ci zbudować bardziej trwałą i satysfakcjonującą karierę niż cokolwiek innego.
Komentarze
Odpowiedz
Przez jakiś czas zagłębiłem się w Haskell, ale doszedłem do wniosku, że był on trochę zbyt akademicki. Bardzo trudno było zrobić cokolwiek praktycznego. W czysto funkcjonalnym języku rzeczy takie jak IO po prostu nie pasują do modelu, więc musisz zajmować się monadami. Zdecydowałem, że będę musiał poświęcić ogromną ilość czasu, aby być ledwo kompetentnym, więc poszedłem dalej .
Zrobiłem Scheme na studiach. Może wydawać się to trywialne, ale wszystkie te pareny naprawdę są rozpraszające / denerwujące. Trudno do tego wrócić po użyciu języków takich jak Python.
Ostatnio mam poznajemy język F #. Jest funkcjonalny, ale może też być imperatywny i zorientowany obiektowo, kiedy chcesz. To, wraz z możliwością korzystania z dowolnych bibliotek .NET, umożliwia łatwe mieszanie czystych części funkcjonalnych z bardziej praktycznymi rzeczami, takimi jak GUI, IO i networking. Możesz uzyskać samodzielną wersję F #.
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=effc5bc4-c3df-4172-ad1c-bc62935861c5&displaylang=en
Komentarze
Odpowiedź
Rok lub dwa lata temu oceniałem wszystkie główne języki funkcjonalne z punktu widzenia poszukiwania praktycznego funkcjonalnego języka programowania ogólnego przeznaczenia.
Ostatecznie wybrałem Clojure , który następnie okazał się doskonałym wyborem.
Ogólnie mówiąc, najważniejsze powody to:
-
Ekosystem biblioteczny – aby język był użyteczny, potrzebujesz dostępu do dobrych bibliotek. Bycie na JVM oznacza, że masz łatwy dostęp do największej biblioteki open source i ekosystemu narzędzi, więc wybranie języka JVM było z pragmatycznego punktu widzenia oczywistością. Scala również tutaj wysoko uzyskał.
-
Makro-metaprogramowanie – ten aspekt Lispa zawsze do mnie przemawiało, zwłaszcza, że spodziewałem się generować sporo kodu. Bardzo doceniam argumenty przedstawione w krótkim eseju Paula Grahama „ Beating the A Average ”. Wszystkie różne Lispy uzyskały tutaj dobre wyniki.
-
Wydajność była „dobra wystarczy ”- Clojure jest zawsze kompilowany i korzysta z zalet optymalizatora JVM JIT i doskonałego GC. Jak zawsze, użycie języka funkcjonalnego wiąże się z pewnym narzutem, ale w przypadku Clojure było jasne, że przy odrobinie wysiłku każdy z nich może zbliżyć się do prędkości Java (Clojure obsługuje prymitywy Java i opcjonalne statyczne typowanie w sytuacjach, w których tego potrzebujesz). Szacuję, że Clojure działa 2-5 razy wolniej niż to, co można osiągnąć dzięki zoptymalizowanemu kodowi Java lub C ++, co jest zgodne z tym, co widzisz w błędnych testach porównawczych i spodziewam się, że z czasem ta luka jeszcze się zmniejszy. Ponadto łatwo jest po prostu napisać kod szczególnie wrażliwy na wydajność w czystej Javie i wywołać go z Clojure.
-
Współbieżność – Clojure ma dość wyjątkowe i wydajne podejście do współbieżności, szczególnie w przypadku współbieżności wielordzeniowej. Trudno to wyjaśnić, ale ten film wideo jest doskonały , aby przedsmakować zasady. Myślę, że Clojure ma obecnie najlepszą odpowiedź na trudne pytanie „jak zarządzać współdzielonym, współbieżnym i zmiennym stanem w funkcjonalnym języku programowania?”.
-
Projekt języka – Clojure to IMO bardzo dobrze przemyślany projekt języka. Przykłady obejmują literały wektorów [] i map {} oprócz zwykłych nawiasów Lispa, użycie niezmiennych trwałych struktur danych, wspieranie lenistwa w całym języku poprzez abstrakcję sekwencji i zapewnienie programiście różnorodnych ortogonalnych funkcji do rozwiązywania różnych problemów . Zobacz sztukę abstrakcji i proste, łatwe .
-
Społeczność – zawsze subiektywne, ale podobało mi się to, co widziałem w społeczności Clojure. Postawa była bardzo pomocna, konstruktywna i pragmatyczna. Nacisk kładziony jest na „załatwione sprawy”, co może odzwierciedlać fakt, że wielu ludzi z Clojure (w tym sam Rich Hickey) wywodzi się z budowania złożonych systemów korporacyjnych. Fakt, że społeczność Clojure ma silne powiązania ze społecznością Java, był ważny dla przekonania mnie, że Clojure nie ryzykuje utknięcia w „niszy”.
Gdybym miał wymienić kilka drobnych wad Clojure, byłyby to:
-
Pisanie dynamiczne – często jest to zaleta pod względem produktywności, ale średnio myślę, że zamieniłbym to na silniejsze sprawdzanie typu i wnioskowanie. Przeważnie zostaje to złagodzone przez posiadanie dobrego zestawu testów automatycznych, ale jeśli lubisz swoje typy statycznie sprawdzane przez kompilator, to Haskell lub Scala mogą być bardziej twoją filiżanką herbaty.
-
Nowatorskie rozwiązania – Clojure rozwija się bardzo szybko i tak dzieje się wiele innowacji – wadą tego jest to, że jest dużo eksperymentów, niektóre biblioteki i narzędzia są wciąż niedojrzałe, a od czasu do czasu pojawiają się przełomowe zmiany między głównymi wersjami Clojure, na które trzeba mieć oko.
Ogólnie rzecz biorąc, nie sądzę, abyś pomylił się z Clojure, jeśli chcesz mieć doskonały i pragmatyczny nowoczesny język funkcjonalny!
Komentarze
Odpowiedź
To wygląda na to, że odrobiłeś swoją pracę domową, więc prawdopodobnie już to wiesz, ale Scheme jest dialektem Lispa, tak jak Common Lisp. Jeśli lubisz wiele rzeczy w Scheme, ale nie podoba ci się jego akademicki charakter, wypróbuj Seplenienie. Według indeksu TIOBE jest to 13. najpopularniejszy język w porównaniu do schematu na pozycji 26.
Niewiele z języków, które znasz wspomniane pojawiają się na opisach stanowisk, które ostatnio widziałem, chociaż może to być tylko mój mały zestaw próbek. Osobiście będę się uczyć języka Haskell, chociaż nie spodziewam się, że będę używać tego języka bezpośrednio w pracy. Koncepcje programowania funkcjonalnego są dla mnie bardziej wartościowe dla przyszłych projektów programów niż bezpośrednia zbywalność samego języka.
Komentarze