Просмотров: 18954

Haskell: с чего начать?


Я думаю, что все постоянные читатели моего блога знают, что я являюсь умеренно-горячим приверженцем функционального программирования. Не то чтобы обо всем другом и слышать ничего не хочу — нет, просто я всегда ратую за разнообразие, возможности выбора, дискуссию и постоянный поиск лучшего, а значит, в конечном счете, за некую эволюцию методологий разработки. Культ личности мне также неприятен, как и культ отдельной методологии программирования, потому что в перспективе это однозначный путь к застою и маразму.

Продолжая эту просветительскую работу, я бы хотел остановиться сегодня на Haskell — замечательном функциональном языке программирования. Мне уже трижды прислали один и тот же вопрос: с чего начать (продолжить) изучать Haskell?

Наверное, пора дать короткий ответ-совет. Вот общий алгоритм захода в эту тему от меня.

0 этап — Введение. Haskell? Чо за хрень?

Хорошо известный в среде рекрутеров программистов парадокс, часто называемый как «Парадокс питона», и он формулируется примерно так:

Если компания выбирает в качестве основного языка программирования некий малораспространенный эзотерический язык программирования, то у такой компании наибольшие шансы получить самых лучших программистов на рынке. Почему? Дело в том, что наняться в такую «странную компанию» захотят в первую очередь те программисты, для которых изучение нового не проблема; те, для которых малоизвестное и труднодоступное не является препятствием; и, наконец, те, у кого достаточно высокая самооценка, чтобы предлагать себя в таких заведомо жестких условиях.

И главное: есть два типа программистов: те, кто учатся, чтобы получить хорошую работу, и они всегда выбирают мэинстрим, ибо это значительно повышает их шансы на трудоустройство; и те — кому просто нравится учиться чему-то новому, развиваться, и они всегда выбирают самое лучшее, что зачастую далеко не самое выгодное, как делают их коллеги-карьеристы. Итак, Парадокс питона утверждает, что начиная разработку на передовой экзотике, вы подобно пылесосу притянете вторую категорию программеров (верно и обратное, насчет компаний предлагающих работу).

Могу привести в качестве отвлеченного примера полностью аналогичного скрытного таргетирования фокус-групп с заданными свойствами, историю из своей недавней юности. Когда я ещё учился, у нас был припод "со странностями", который демонстративно при изложении матанализа никогда не обращал внимание на правую сторону аудитории. То есть в аудитории было два ряда — левый и правый, — и вот он читает лекцию, объясняет что-то, но при этом НИКОГДА не смотрит на правый ряд — всё внимание только на студентов с левого ряда. Также и с ответами на вопросы — правого ряда для него не существовало. Оттуда он ни-че-го не слышит.

В результате, с течением длительного времени я заметил интересную вещь: в нашей группе произошла автоматическая самоидентификация и фрагментация на тех, кому матанализ нужен и интересен (и они сразу занимали места на левом ряду, приняв правила этой странной игры), и тех — кому это нафиг не нужно, и они спешили занять места справа, ибо тут они были предоставлены сами себе. Эта сортировка произошла сама-собой, без каких-то дополнительных чрезвычайных усилий со стороны. Для препода, как я понял его мотивацию, это было очень удобно — он не тратил свои силы на посторонних в сущности людей, а сразу создавал условия для концентрации своих сил и внимания на тех, кому были нужны его знания. Для студентов-троечников — это тоже было выигрышной ситуацией.

Парадокс питона — это один из тех факторов, который делает тоже самое: он выделяет целевые группы среди программистов. Но это происходит не лобовыми методами (опросы, интервью, менеджмент), а гораздо более эффективными — косвенными, где возможность для «пускания пыли в глаза» гораздо меньше.

И всё это я рассказал лишь для того, чтобы вы не боялись изучать что-то новое и необычное, пусть это поведение и покажется вам иногда иррациональным. Есть вещи, которые мы делаем не ради денег, но для нашего саморазвития и нарабатывания скиллов, которые, в конечном счете, побочно решат проблему с зарабатыванием даже ещё более эффективно. Не беда что большинство пишет на PHP, путь это не будет для вас психологическим тормозом на пути изучения чего-то нового и важного для вас, например, того же Haskell. Поймите, что есть большая разница между тактикой и стратегий, и именно поэтому долгосрочные инвестиции всегда оказываются гораздо более выгодными.

Будем надеяться, что этими баснями я хотя бы отчасти снял внутренний тормоз у некоторых людей, от которых я слышал реакцию типа: «Haskell? Да кому он нафиг нужен?»

1 этап — ответ на вопрос «зачем тебе это надо?»

Для начала изучения нового языка стоит захотеть этого, для чего нужна настоящая мотивация. Как, например, для того, чтобы тебе встать, прямо сейчас одеться и сесть в трамвай, чтобы доехать до противоположного конца города — нужна серьезная мотивация и аргументация для такого энергоемкого поступка.

Сделать это «просто так» почти невозможно. Не верите — проверьте! Одна из причин, из-за чего все так плохо учились во времена моего обучения на физмате, заключается, по моему мнению в том, что довольно сложно понять зачем тебе нужна в повседневной жизни квантовая физика или некоторые пункты специальной теории относительности. Перед тем как предлагать такую груду рафинированно-абстрактных знаний, хорошо бы сначала изучающему загрузить в голову некую стоящую модель, в контексте которой ЭТО знание было бы ему полезным, необходимым и интересным. В данном случае оценки, диплом и прочие социальные ништяки наоборот полностью убивают ценность и прикладной характер этих знаний в глазах обучаемого.

Возвращаюсь к намеченной теме — я считаю, что начинать изучать новый язык программирования нужно ровно тогда, когда сформирована смысловая база для этого. Иначе говоря, в этом появляется свой субъективный, но емкий смысл. Я категорически против, когда ЭТО делают «потому что это круто» или тем более потому что «нужно получить в зачетке 5».

Итак, этап первый — поиск этого самого смысла для себя. Это должен сделать каждый сам, могу лишь дать некие отправные точки, вот их примеры:

2 этап — начинаем с основ

И только что-то поняв для себя, можно начинать качать вводные книги по теме, например собранные вот здесь. На русском, в качестве вводной книги я бы рекомендовал начать с очень удачной «14 занимательных эссе о языке Haskell и функциональном программировании». Конечно, при изучении любого языка нужен подручный справочник по нему, например вот этот: «Справочник по языку Haskell» от Душкина.

Haskell

Сухая академическая теория, для тех кто любит тщательность проработки деталей, доступна в одноименных книгах «Функциональное программирование» от Кубенского (все примеры в ней на писаны на Haskell), и «Функциональное программирование» — от Хендерсона.

После чего можно прочитать эту совсем свежую книжку Learn You a Haskell for Great Good!: A Beginner’s Guide (мне очень нравится издательство No Starch Press, все их книжки супер — как по содержанию, так и по критерию «нескучности изложения»). Вторая английская хорошая книга — опять для новичков: Haskell: The Craft of Functional Programming (2nd Edition).

3. Этап — поиск глубины и чувства нового языка

Третья стадия, — это уже копание вглубь. Тут я предлагаю немножко поломать традиционные шаблоны (а я это ох как люблю делать) и перейти к принципиально другому формату подачи информации: это не только разнообразит задачу изучения языка, но и задействует новые, доселе не активированные участки вашего головного мозга (особенно напряжем ваше растащенное программистское левое полушарие). Я имею в виду отличную видео-лекцию по Haskell от очень умного дядьки с английскими корнями.

Вот её выходные данные:

The Functional Programming Using Haskell course
(Language: English)
35 hours | 1280×720 | XviD — 1326Kbps 
25.00fps | Mp3 — 96Kbps | 20.06 GB

Haskell

Выкачать эту большую видео-лекцию можно вот тута. Советую поспешить, пока возмущенные правообладатели не сбежались и не прибили этот редкий архив нафиг (update: таки да, прибили его: аминь. Предлагаю всем заинтересованным воспользоваться этой мега-ссылкой).

4. Завершающий этап — практика

Поиск наиболее подходящей и вдохновляющей вас практической задачи — это тема отдельного поста, — где мне бы хотелось привести немного ярких примеров из жизни известных программистов-доходяг, поэтому пока отложим мои пояснения по этому заключительному этапу на время в сторону.

Haskell

Вот, примерно такой вот, отчасти очевидный для многих алгоритм я хотел дать всем желающим изучить Haskell, и не только. Дерзайте!

И в заключение немного юмора для приверженцев других языков программирования:

Haskell — священный язык программирования, дарованный шаманам Бубенлэнд их верховным божеством Комонада как универсальное средство для общения и духовного очищения, подходящее как божественным сущностям, так и (некоторым) простым смертным, переболевшим тяжёлыми стадиями интеллекта. Из-за своего происхождения язык всегда был функционально чист. В среднем обучение Haskell’у начинается в 10-12 лет. Своевременное начало обучения гарантирует, что вы достигнете третьего уровня Силы уже к 75 годам. Не стоит откладывать на следующую жизнь то, что можно по крайней мере начать в этой.

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru pikabu.ru blogger.com liveinternet.ru livejournal.ru google.com bobrdobr.ru yandex.ru del.icio.us

Подписка на обновления блога → через RSS, на e-mail, через Twitter

3 комментария

Следите за комментариями по RSS
  1. Александр

    Здравствуйте!

    Набрел на вашу запись случайно. Позвольте, пропиарю свое руководство "Haskell Quest Tutorial" (рус.): http://habrahabr.ru/blogs/Haskell/120590/

    Мне кажется, с него очень хорошо начинать изучение Haskell.

    Еще есть страничка на xgu.ru, где собрана коллекция ссылок на материалы по Haskell: http://xgu.ru/wiki/Haskell .

    Надеюсь, будет полезно.

    С уважением,

    Александр Гранин

  2. Спасибо вам, Игорь, за статью, и вам, Александр, за ссылку на хороший материал!

    Да, сейчас я пишу на "мейнстриме" - PHP, но некая смысловая база для изучения ФП в целом и Хаскелля в частности - сформировалась. Поэтому сейчас (почти неделю как) активно занимаюсь поиском адекватных материалов для изучения основ и установки/настройки всего, что надо для этого в системе.

  3. занятно! бодрит! вдохновляет!

Оставьте комментарий!

Не регистрировать/аноним

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Зарегистрировать/комментатор

Для регистрации укажите свой действующий email и пароль. Связка email-пароль позволяет вам комментировать и редактировать данные в вашем персональном аккаунте, такие как адрес сайта, ник и т.п. (Письмо с активацией придет в ящик, указанный при регистрации)

(обязательно)


⇑ Наверх
⇓ Вниз