Haskell vs. programowanie proceduralne w świecie rzeczywistym [closed]

W dzisiejszych czasach poważnie zajmuję się programowaniem funkcjonalnym.

Chociaż jestem bardzo podekscytowany Haskell i możliwościami, które wydaje się oferować, teraz widzę, że to zajmie mi trochę czasu, aby się uczyć. W tak pytanie na Jak nauczyć Haskell odpowiedź stwierdza, że to zajmie miesiące, jeśli nie lata, aby faktycznie "opanować" to.

Teraz znam C, PHP, jakieś rzeczy zorientowane obiektowo itp. I powiedziano mi, że Haskell nie jest zbytnio używany w " the real świat", czy lepiej będzie mi poprawić swoje umiejętności w zwykłych językach, które znam? Czy Haskell jest wart walki?

W tym pytaniu na dlaczego ludzie myślą, że programowanie funkcyjne złapie wniosek wydaje się być taki, że programowanie funkcyjne "złapie". Ale na pewno programowanie proceduralne pozostanie na szczycie, prawda?

EDIT: keparo ładnie wyjaśnia moje pytanie do: W przeciwieństwie do języków proceduralnych, czy warto będzie dla mnie studiować Haskella i funkcjonalne paradygmaty programowania?

Author: Community, 2009-06-21

13 answers

Haskell nie jest tak trudny, jak ludzie lubią się całować, aby się uczyć. Haskell otwiera dla Ciebie nowy świat, o którym nie wiedziałeś, że istnieje. Nauka jest równie cenna jak każdy inny język. Możesz nie znaleźć pracy wymagającej od Ciebie programowania Haskell, ale czy to naprawdę oznacza, że język nie jest wartościowy?

Haskell nauczy cię wielu nowych rzeczy i pokaże Ci, jak jeszcze lepiej programować w językach, z którymi pracujesz. W wolnym czasie możesz tworzyć własne projekty z nim.

Haskell nie jest zbyt często używany w" realnym świecie", jeśli zdefiniujesz" realny świat "jako"generator gotówki". Więc jeśli to jest twój cel, to może będziesz musiał przemyśleć cele: p

Poza tym nie podoba mi się ta część odpowiedzi "jak się uczyć Haskella". Opanowanie każdego języka, nie tylko Haskella, zajmuje miesiące lub lata. W zależności od tego, jak zdefiniujesz "master". Mogę używać Haskell do całkiem dobrego stopnia wydajności i uczę się go dopiero od miesiąca, a ja nawet powoli.

 49
Author: Rayne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-22 04:56:34

Jeśli nic innego, zmiana sposobu myślenia, którą oferuje Learning Haskell, pomoże Ci, gdy będziesz musiał wrócić do używania tych języków proceduralnych, które nadal są używane w miejscu pracy.

Paradygmat funkcjonalny zaczyna przenikać do różnych głównych aplikacji i języków - nawet C++ będzie dodawał (kaleką) lambda w C++0x.

Możesz również przyjrzeć się niektórym językom hybrydowym, takim jak Scala lub OCaml. Scala jest używana na Twitterze, a OCaml jest używany na Jane ' s Street w platformie finansowej.

 18
Author: aneccodeal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-21 19:37:35

Prawdopodobnie nie powinieneś oczekiwać, aby używać Haskell gdziekolwiek prawie tak często, jak język rodziny C w profesjonalnych Ustawieniach. Jeśli pytanie brzmi, czy warto studiować Haskella i paradygmaty programowania funkcyjnego, odpowiedź brzmi tak. Możesz zastosować swoją wzbogaconą wiedzę o programowaniu do całej swojej pracy.

 10
Author: keparo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-21 19:34:55

Nauczyłem się Haskella, ponieważ był to zdecydowanie najlepszy język funkcjonalny, który wypróbowałem ze Scali, Clojure, OCaml i Scheme, ale nie spodziewałem się, że użyję go do pracy.

Jak się okazuje, jest on idealny do tego rodzaju prac dorywczych, które są zbyt małe dla zespołu i byłyby zbyt czasochłonne w Javie. Do tej pory używałem go do migracji danych ad-hoc tj. mangling Eksport CSV do innego formatu, konwersje wsadowe XML (HXT jest bardziej zwięzły i wydajniejszy niż XSLT), screen-skrobanie z Internetu i oprogramowania szacowanie projektu, w tym modelowanie ryzyka przy użyciu monad prawdopodobieństwa i tworzenie optymalnych wykresów Gantta za pomocą backtracking. Jest to cała prawdziwa praca, która wymagała wykonania, której nawet nie próbowałbym wykonać w Javie, ponieważ byłoby to przedsięwzięcie wielodniowe.

Teraz używam go zamiast Excela do czegokolwiek niejasno matematycznego, ponieważ jest trochę więcej wysiłku, aby utworzyć listę wartości w Haskell source w edytorze tekstu, niż jest to, aby wpisać je do Excela. Raz w haskell, mogę wtedy zrobić wszelkiego rodzaju magii jak backtracking, rozkład prawdopodobieństwa itp. tego Excela nie da rady. Jeśli potrzebuję Wykresu, to wypluwam wartości jako CSV (2 linie kodu) i ładuję je do Excela.

Jedynym minusem jest to, że to trwa kilka miesięcy, aby uzyskać biegły, ale warte wysiłku IMHO.

 8
Author: Andrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-14 22:07:38

W przeciwieństwie do języków proceduralnych, czy warto będzie studiować Haskella i paradygmaty programowania funkcyjnego?

Jeśli posiadanie rozszerzonego zestawu umiejętności jest cenne, to: tak.

Jedną z zalet, które możesz wybrać: programowanie równoległe i współbieżne. Języki proceduralne z przeszłości zwykle nie mają jasnego pojęcia o skutkach ubocznych, w wyniku czego pisanie w nich równoległych programów jest trudne do poprawnego wykonania. Języków funkcyjnych (w szczególności tych, które ograniczają efekty uboczne, takie jak Haskell) mają o wiele więcej do powiedzenia na temat produktywnego programowania równoległego.

Posiadanie tej umiejętności w rękawie nie zaszkodzi.
 7
Author: Don Stewart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-21 21:34:42

Widzę, że programowanie funkcyjne może być plusem w środowisku produkcyjnym, jeśli jest bardzo łatwe w użyciu przez niefunkcyjny kod. MS też to widziało, gdy wymyślili F # chyba.

Ponieważ oba kompilują się do IL, możesz poradzić sobie z problemami, które wymagają funkcjonalnego podejścia Funkcjonalnego i bardzo łatwo korzystać z tych rozwiązań w swoim kodzie proceduralnym.

W ten sposób Kod funkcjonalny może łatwo znaleźć swoją drogę w środowisku produkcyjnym trochę na czas

Dlatego też, a ponieważ baza użytkowników MS jest tak duża, domyślam się, że jeśli F# nie złapie się w niedalekiej przyszłości, to Haskell też tego nie zrobi.

 5
Author: Peter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-21 19:40:22

Myślę, że warto walczyć. pomoże Ci zrozumieć, jak problemy są rozwiązywane, a nie tylko jak działa komputer.

Może jednym szczególnym problemem jest sam Haskell - jako język czysto funkcjonalny, jest to trochę "hardcore", co z drugiej strony może nawet komplikować rzeczy.

Programowanie funkcyjne zamiast tego może być niezwykle przydatne w bardzo pragmatyczny sposób - wiele języków oo / imperatywnych zawiera teraz elementy funkcyjne z tego powodu (Linq, funkcje anonimowe, wartości tylko do odczytu, wskaźniki/delegaty funkcji, wnioskowanie typu): możesz skoncentrować się na tym, co powinno być zrobione, co pozwala wyrażać więcej za pomocą mniejszego kodu (co jest jeszcze mniej podatne na błędy).

Języki nie czysto funkcjonalne (Standardowe języki funkcjonalne), takie jak Scala lub F#, mogą być łatwo zintegrowane z istniejącymi projektami Java lub. NET, dzięki czemu można łączyć zalety obu paradygmatów tam, gdzie są potrzebne. Dla typowych zalet języków funkcyjnych, zobacz to wątek . Wystarczy pomyśleć o niezwykle potężnym parsowaniu (monadic Parser combinators / Parsec ) lub programowaniu współbieżnym, które jest możliwe w językach funkcyjnych, a zobaczysz, jak przydatne są.

 5
Author: Dario,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:22:39

W przeciwieństwie do języków proceduralnych, czy warto będzie studiować Haskella i paradygmaty programowania funkcyjnego?

Nie, chyba że chcesz być nieszczęśliwy. Łukasz Plant mówi w Dlaczego nauka Haskell/Python czyni cię gorszym programistą :
Więc nauka Pythona i Haskella mnie zdemoralizowała i zachęciła mnie napisać kod, który jest dziwaczny i trudny do zrozumienia...

(to nie jest do końca żart.)

 4
Author: Curt J. Sampson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-24 19:15:03

Poszerzanie horyzontów pomaga być lepszym programistą bez względu na to, jakiego języka używasz w danej chwili. Na przykład po napisaniu makr Lispa nigdy nie spojrzysz na programowanie w ten sam sposób. Gdy zaczniesz myśleć w kategoriach Haskella, znajdziesz się w komponowaniu funkcji i pragnąc zamknięcia w mniej zaawansowanych językach.

Sądząc po dobroci w C# , takich jak lambda, type inference, closures, i tak dalej , Nauka Haskell da ci nogę na jutrzejszej krawędzi w głównych językach.

 2
Author: Greg Bacon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:52:46

Niektórzy ludzie lubią programowanie w Haskell. Jeśli możesz wybrać swoje środowisko, a przyjemność jest brana pod uwagę, to może powinieneś wskoczyć.

Wielu programistów nie jest w stanie wybrać swoich narzędzi i przyjemność nie jest czynnikiem ich wyborów. Wiele z nich korzysta z C/Java / etc w swoim miejscu pracy dla "core project source", ale także wybiera lub musi używać Pythona dla "skryptów", takich jak build-scripts with SCons, innych skryptów, które generują kod Java / etc, testowanie systemy, dowody pojęć, itp.. A w innych miejscach Python jest również używany w "core project".

Za 8 lat to będzie Haskell, a nie Python, który "przyjdzie do ciebie". Ale możesz przyjść do tego wcześniej.

 1
Author: yairchu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-21 19:49:59

Możesz połączyć użycie programowania funkcyjnego i Bądź pragmatyczny wobec języka.

Wszystkie nowoczesne języki skryptowe s. a. JavaScript lub Lua pozwalają na korzystanie z paradygmatu funkcjonalnego.

 1
Author: akauppi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-30 11:27:43

Koncepcja funkcjonalna jest coraz mocniejsza. Zwróć uwagę na gwałtowny wzrost aktywności i zainteresowania Rubim. Zauważyłem też ostatnio nieco większe zainteresowanie JavaScript poza zwykłym językiem skryptowym przeglądarki. Możesz wyprzedzić grę, nurkując teraz, choć zainwestowany czas może się nie opłacić w tym roku lub w przyszłym.

To zależy od Twojego ogólnego planu gry. Czy interesuje Cię programowanie jako cel sam w sobie, czy jako środek do celu? Jeśli to ten pierwszy, Zaszalej z Haskellem. Jeśli to drugie, trzymać z mainstreamowymi językami "zatrudnialnymi". Poczekaj, aż Haskell wystartuje, a potem rzuci się.

 1
Author: Ethan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-07 18:49:39

Dlaczego proceduralne i nie zorientowane obiektowo, nie widziane proceduralne używane przez wiele lat poza C.

Wybrałbym Javę lub C#. Nie ma znaczenia, które obie płacą dobrze, a umiejętności są wymienne z innymi językami o podobnych poglądach, takimi jak python, Ruby i JavaScript.

Haskell jest wart czasu i wysiłku, chociaż jest bardzo akademicki, niektóre banki z niego korzystają, chociaż wiele w Europie i WIELKIEJ BRYTANII przenoszą bazę kodu do F#.

Nie sądzę, aby FOP poruszał się z dużymi prędkościami komercyjnymi. Ale techniki zdecydowanie pojawiają się w głównych językach pobytu. Szczególnie w przypadku wielordzeniowych układów scalonych i tworzenia równoległego kodu na nich.

 0
Author: WeNeedAnswers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-25 02:29:28