Pull to refresh

Выбор языка (Haskell vs Go)

Programming *Haskell *Go *
Translation
Original author: Honza Pokorny
Перевод статьи о вопросе выбора языка и компромиссе сложности и продуктивности.

Предупреждение: это разглагольствование.

Недавно я сделал очередной большой шаг вперед на своём пути просвещения в Хаскеле. Наконец-то я вижу, как много различных частей мозаики Хаскеля гармонично складываются воедино. На этом моменте, я почувствовал, что готов идти вперёд и писать полезные программы. Я прочёл исходный код web-фреймворка Scotty и был приятно удивлён тем, что я прекрасно понимал, как он работает. Я полностью влюблён в Хаскель. Мне нравится, что он заставляет тебя думать. Ты не просто открываешь текстовый редактор и начинаешь ударять по клавишам, чтобы написать программу на Хаскеле. Я люблю то, что Хаскель поощряет обобщения и абстракции. Одним из «эврика»-моментов в моём пути было понимание всех последствий того, почему функция типа a -> a имеет только одну реализацию. Я подсел на возможность запустить программу в первый раз и знать, что она заработает (после борьбы с компилятором целую вечность). Я думаю, что монады и линзы — очень умные вещи. Да по многим критериям, Haskell — идеальный язык программирования.

И у меня заняло 4 года прийти к этому.

Я привык так разочаровываться в нём, что я брал перерывы на недели или месяцы, просто потому что я не видел смысла продолжать дальше. Но я всегда возвращался. И сейчас, я наконец-то прибыл туда где я есть. Я бы сказал, что я хаскеллист среднего уровня. Разумеется, что я думаю о том, чтобы написать на Хаскеле несколько программ на работе, что будет достаточно легко, учитывая нашу сервис-ориентированную архитектуру.

Я также игрался с Purescript — это диалект Хаскеля, который компилируется в Javascript. По многим параметрам, Purescript намного лучше Хаскеля, потому что у него нет того исторического багажа. Но общаясь с моим коллегой, который не знает Purescript, о том, чтобы начать использовать его в нашей кодовой базе, я понял всю тяжесть того, что я просил его выучить. Это, конечно, звучит здорово — сказать «Давайте перепишем это на Purescript» и ожидать, что кто-то вернется после выходных, выучив его достаточно хорошо, при том, что у меня самого это заняло 4 года.

Другой отличный пример это open source сообщество. Если вы выбрали Хаскель для вашего open source проекта, вы будете продуктивны, сможете безопасно рефакторить код, писать мало кода — но как много людей захотят выучить Хаскель, чтобы внести свой вклад в ваш проект или сделать фикс?

Многие из моих друзей по Хаскелю любят высмеивать язык Go. Я и сам не раз это делал. Имейте ввиду, у этого языка объективно очень плохой дизайн. Обработка ошибок, отсутствие генериков, ужасный менеджер пакетов, абсурдная система типов, эта штука range и так далее. Это практически полная противоположность Хаскелю.

И при всём этом, Go оказывается гораздо более популярным, чем Хаскель, если верить GitHub. Внезапно, на Go уже написано так много потрясающих проектов, вроде Docker, InfluxDB, etcd, consul, prometheus, packer и многих других. В отличие от Хаскеля, если вы попросите коллегу выучить Go за одни выходные, они вернутся с небольшой программой, которую они уже смогли написать на нём. Почему-то безусловно более плохой инструмент используется массами, чтобы создавать крутые вещи.

Что мы должны из этого вынести? Выбор языка программирования имеет значение. Программирование — это социальная деятельность. Похоже, «меньше фич» равняется «проще освоить». Обобщение и инновации в языках программирования, похоже, выходят из моды. Создавать программы, которые решают реальные задачи оказывается более важным, чем использовать острый топор. Мы почти наверняка предпочтём худший инструмент, которым легко пользоваться без надобности читать инструкцию. Мы скорее предпочтём щелкнуть фото своим смартфоном, чем учиться, как пользоваться профессиональной зеркальной камерой.
Tags:
Hubs:
Total votes 37: ↑18 and ↓19 -1
Views 19K
Comments Comments 81