Образовательный портал «Кафедра онлайн» НИЯУ «МИФИ», Обнинск"

Главная » Рубрики » Блог студентов » Haskell: с чего начать?

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

А.Н. Гришкин, магистрант ИАТЭ НИЯУ «МИФИ», Обнинск 

Представлен вводный курс для начинающих пользователей Haskell. С чего стоит начать, приступая к изучению языка Haskell?

Haskell — функциональный язык программирования со строгой типизацией и поддержкой ленивых вычислений. Весьма популярен в академической среде и имеет меньшую популярность как прикладной язык программирования. Язык нельзя отнести ни к чисто интерпретируемым, ни к компилируемым; существуют как интерпретаторы (например, HUGS), так и компиляторы (например GHC, Glasgow Haskell Compiler) для Haskell.
Главными отличительными особенностями языка принято считать:

  • Чистоту (referential transparency);
  • Отложенные вычисления (lazyness);
  • Строгую типизацию;
  • Поддержку монад.

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

Вот общий алгоритм захода в эту тему.

0 этап — Введение. Haskell? Чо из себя представляет?

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

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

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

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

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

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

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

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

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

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

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

  • Сильные стороны Haskell
  • Причины, по которым многим нравится Haskell
  • Чем хорош HUGS
  • Why Haskell just works?, Why Haskell matters? + презентация к ним
  • Why functional programming? Why Haskell?
  • Why should you want to learn Haskell?
  • Experience Report: Haskell in the «Real World» — Curt J. Sampson
  • Why Haskell is Kinda Cool
  • Why Haskell?
  • Почему Haskell годный язык программирования (презентация)
  • Haskell?
  • Why People Aren’t Using Haskell
  • Изучай Haskell ради Добра!

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

И только что-то поняв для себя, можно начинать качать вводные книги по теме, например собранные вот здесь. На русском, в качестве вводной книги рекомендуется начать с очень удачной «14 занимательных эссе о языке 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

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

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

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

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

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

По материалам blogerator.ru

1 комментарий

Похожие публикации
 
 

1 комментарий

  1. blogerator.ru содрал этот текст у одного доцента МГУ, далее Гришкин соответственно содрал текст у блогератора.
    Но это не отменяет ценности исходного текста. Господа магистранты, изучайте Хаскель и тонкие места Питона! Да пребудет с вами успех!

 
 

Вы можете оставить комментарий

 





 
 

Выполните простое задание (антиспам). Картинки можно сибирать приблизительно, без точной подгонки фрагментов.


 
 
 

Наверх