Функциональное программирование считается вредным

NB: Это старая статья (2020). Всё могло поменяться с момента публикации.


Среди фронтендеров всё большее распространение получают вредные идеи функционального программирования.

(Для тех, кто не распознал отсылку названия: GOTO Considered Harmful)

Не поймите меня неправильно, в малых дозах идеи функционального программирования безопасны. Да, если можно сделать функцию чистой без особых усилий — давай, сделай её чистой. Да, код, использующий Array.prototype.map, зачастую читается проще, чем код с циклами for. Нет, это не означает, что нужно нырять с головой в академичные идеи того, как должно работать программирование, тем более — фронтенд.

В академических кругах основной показатель «крутости» — количество публикаций. Из Хаскелля можно извлечь много статей, поэтому это прекрасный язык для своих целей, но он не сделает ваш код автоматически более хорошим и полезным. На джаваскрипте легко написать полезные приложения, поэтому его в таких сообществах чураются: он слишком приземлённый.

Что лучше, redux-saga или redux-observable? Неправильный вопрос, лучше работающее полезное приложение. Время, потраченное на споры о преимуществах номинативной системы типов, лучше потратить на полезные активности: сделать фичу, уменьшить время билда, сходить в зал потягать штангу, почитать книгу.

Фронтенд любого мало-мальски сложного приложение интерактивен и не является чистой функцией JSON → HTML. На попытки превратить его в такую функцию потрачено огромное количество усилий. В React хуки useEffect и useRef необходимы, чтобы примирить это несоответствие, давая способ «вырваться наружу».

Ни один инструмент не даст десятикратного прироста производительности. Лучшие программисты могут использовать не самые лучшие инструменты. Make it work, make it right, make it fast.

Попытки выбрать идеальный инструмент приводят к байкшеддингу. Фокус на чем угодно кроме пользы и дедлайнов неизбежно приводит к технической мастурбации и паттернам.

Если бы что-то из этого действительно помогало, ПО бы сдавалось всегда в срок, не падало в продакшене, и было удобным. Но оно не помогает даже настолько, чтобы компенсировать время, потраченное на обсуждения.

Этот пост написан для меня, если я вдруг захочу снова вписаться в ненужные дискуссии.

Тим опубликовал