Курс, който взех в колежа, наречен Основи на езика за програмиране, ме запозна с Haskell и не мина много време, докато бях напълно очарован от този език. Това беше първият ми вкус на парадигмата на функционалното програмиране и всичко, което правех, ми се стори като решаване на загадка. Haskell ме накара да се почувствам умен и въпреки че програмирането не трябва да е всичко решаване на загадки, определено е забавно да се чувстваш умен. Един ден преди урока приятел, който споделяше моя ентусиазъм (и който знаеше, че харесвам разработването на интерфейс), ми каза, че трябва да проверя Elm. Търсих „Elm“ и след като Google разбра, че искам езика, а не „West Elm“, намерих пътя до техния уебсайт и до уеб браузъра wysiwyg. Веднъж ми беше трудно да обърна внимание на моя клас на Haskell, защото бях толкова заинтересован да разбера (и сравнявам) Elm.

В крайна сметка завърших и започнах работа в AppNexus и за целите си в работата се съсредоточих върху Elm за една четвърт и прочетох Learn You a Haskell for Great Good за една четвърт — и двете, за да науча по-добре функционалното програмиране. Но нека бъдем честни, това беше, за да начеша този сърбеж, който имах за тези езици. Или поне така започна. Без да знам, учех Haskell и Elm за страхотен JavaScript.

В моята работа използваме React и Redux — когато за първи път започнах да уча Redux, ми беше наистина трудно главно поради езика около него. Какви по дяволите бяха редуктори и диспечери и защо действията не предприемат действия? Имената нямаха смисъл за мен и нямаха смисъл за мен, така че ми беше трудно да се опитвам да запазя всичко правилно в главата си. Изучаването на Elm беше наистина ценно за мен поради тази причина, защото архитектурата на Redux беше вдъхновена от архитектурата на Elm. Redux има actions, които се изпращат до reducers, които променят state на вашето приложение; Elm има messages, които се изпращат до updates, които променят model на вашето приложение. Изучаването на този модел с избора на дума, който Elm използва, за разлика от Redux, ми помогна изключително много. Можех да разбера какво е message и не бях объркан защо не предприема действия. Update е дума, която използвам в личния си речник много повече от reduce. Честно казано, state и model бяха доста 50/50 за мен.

Преминаването през Learn you a Haskell всъщност ми помогна да опозная lodash по-добре. Когато научих повече за основните функции на библиотеката на Haskell, щях да проверя lodash и да се опитам да разбера неговия еквивалент. Понякога дори пишех урока по Haskell на псевдо-javascript, само за да пробвам различни шапки, докато уча. Haskell помогна на lodash reduce наистина да щракне. Беше ми трудно да си спомня тази функция и защо да я използвам, но след това, когато правех урок, включващ сгъване, разбрах "Хей, това е намаляването!" Това е още един пример, при който изборът на дума повлия на моето разбиране — „сгъване“ ме кара да мисля за това, когато леко смесвате нещата при готвене, така че имах онзи визуален знак, за да си спомня как се казва, докато reduce всъщност не ми дава този знак за памет.

В по-широк мащаб работата с Elm и Haskell ми помогна да бъда по-съзнателен в JavaScript. Тъй като и двата езика са доста минимални в скобите, започнах да се фокусирам повече върху четливостта и да отбелязвам какво харесвам, какво не харесвам и какво изглежда най-ясно. Бях по-наясно със страничните ефекти и как можем да поддържаме функциите възможно най-чисти. Типовите системи станаха още по-мои, отколкото преди. И накрая току-що научих как да мисля функционално и как да държа тези функционални инструменти в обсег, за да могат да бъдат част от мускулната памет.

Част от това спрях и започнах да се чудя какво изобщо правя и защо. Не е като да пиша на Haskell всеки ден. Написах scrabblizer, който приема съобщение и го превежда в кода на emoji на scrabble за slack, но това е всичко. Но тогава просто си припомних, че 1) го правя, защото просто наистина смятам, че тези езици са забавни и 2) те ме учат на уроци, които мога да взема другаде.

Сега не казвам, че ВИЕ трябва да излезете и да научите Haskell и Elm за страхотен Javascript. Научете езиците, които искате да научите — обърнете внимание на уроците, които са агностик на езика и имайте предвид, че изборът на определени думи ще щракне по-добре за някои хора пред други. Ако изучавате някакъв странен език, помислете за моделите, които използвате и как техният избор на думи би могъл да бъде по-добър или как той помага на вашия умствен модел. Езиците имат определени атрибути, вградени и това ще промени начина, по който подхождате и разбирате проблемите.

Първоначално публикувано на https://hugheskatie.github.io/2017/08/24/Learn-You-a-Hask-Elm-for-Great-JavaScript/ (редактирано в движение)