Сколько времени вы потратили, чтобы иметь хорошее представление о Haskell? - PullRequest
16 голосов
/ 20 сентября 2010

Я знаю, что этот вопрос может показаться глупым, но я изучаю (по крайней мере, пытаюсь) Haskell около 4 дней. Я уже закончил читать http://learnyouahaskell.com/, и теперь я вкладываю время в: Путь к Хаскеллу к логике, математике и программированию , и для меня все стало действительно сложно. У меня нет опыта в функциональном программировании, только некоторые базовые знания по Лиспу.

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

После 4 дней работы с Python я мог бы написать сложные сценарии (не «pythonic», но они работали). После 4 дней в Хаскеле я ... почти пустой.

Любые предложения о том, как улучшить мои функциональные навыки? Сколько времени вам понадобилось, чтобы полностью понять Haskell?

Ответы [ 7 ]

13 голосов
/ 20 сентября 2010

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

Большая сложность изучения Хаскелла - это (очень крутая ИМО) кривая обучения. Есть много разных взаимосвязанных вещей, которые вам нужно выучить, прежде чем вы начнете продуктивно работать с языком, и, поскольку они взаимосвязаны, трудно понять их без хотя бы нескольких месяцев опыта. Я советую придерживаться этого, и если вы думаете, что чего-то не понимаете или что-то происходит глубже, вы, вероятно, правы. Если вы не можете понять это сейчас, просто идите и вернитесь к этому через месяц или около того. В конце концов вы достигнете достаточного прогресса на нескольких фронтах, чтобы все стало ясно.

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

4 голосов
/ 20 сентября 2010

Ну, через 2 года я все еще не до конца понимаю все о Хаскеле.Я могу писать "продвинутые" программы (примерно через 2-3 месяца после начала изучения Haskell), но люди продолжают придумывать новые вещи для изучения, что является частью забавы Haskell:)

Какза то, как лучше всего учиться, я всегда люблю учиться на практике.Просмотрите код того, что вас интересует на Hackage (что-то не слишком большое), а затем попытайтесь реализовать что-то подобное самостоятельно (или подмножество).Выберите проект, в который вы можете добавлять более сложные слои со временем.

3 голосов
/ 20 сентября 2010

Я учился в университете с тяжелым хаскеллом (Утрехт), и мне очень понравился Хаскелл, поэтому я прошел следующие курсы, в которых использовался Хаскелл:

  • Вступительный ФП (семестр)
  • Грамматика и разбор с Haskell (семестр)
  • Реализация языков программирования (семестр)
  • Общее программирование (семестр)
  • Разработка программного обеспечения (2 месяца)
  • Расширенное функциональное программирование (2 месяца)

Я также был ТА (помощником учителя), помогавшим с практическими занятиями по ознакомлению и внедрению. И я написал свой M.Sc. на (универсальный) Haskell.

Так что это кажется ужасным, но я получил "FP" где-то на полпути во вступительном курсе. В моем случае мне помогло хорошее знание математики, поэтому я уже привык разбивать задачи на простые функции. Что касается написания реальных программ, то написание программ на Go на Haskell было забавным упражнением для обучения работе с монадами (графический интерфейс был в TclHaskell, тьфу!)

3 голосов
/ 20 сентября 2010

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

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

Как сумасшедший может развить что-то вроде монад ???

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

Кстати, у меня ушло 2 месяца, чтобы понять основы, я начал в феврале 2010 года. Но мне потребовалось еще 4 месяца, чтобы понять некоторые более сложные мысли, такие как параметры функций и возникающие эффекты (особенно монада State была чудом, пока Я нашел хорошее описание на SO, как IO работает - точно так же;), но везде я вижу совершенно новое мышление.

3 голосов
/ 20 сентября 2010

После 150-часового курса функционального программирования в университете мы прошли

  • Функции сортировки
  • Создание бинарного дерева
  • Использование / запись таких функций, как карта, фильтр, почтовый индекс
  • .. возможно, что-то забыл

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

2 голосов
/ 20 сентября 2010

Я ни в коем случае не эксперт по Haskell, но у меня есть два предложения:

  • Потратьте время, чтобы поиграть с чистым лямбда-исчислением (или даже ски, если вы храбры). По сути, Haskell позволяет вам делать то же самое, немного более удобно и безопасно для типов
  • Попробуйте решить общие проблемы, например, от Проект Эйлера . Но не останавливайтесь на достигнутом, попробуйте сравнить ваш код с решениями других людей.

Приведенные оценки от 1 до 3 месяцев для изучения основ кажутся мне реалистичными.

1 голос
/ 20 сентября 2010

Пройдет некоторое время, прежде чем Haskell начнет обретать смысл. У меня второй месяц обучения Хаскелу, и это моя вторая попытка за последние два года. На этот раз я начал с Маленького Схемера. Потом я посмотрел видео Гизеля. Чтение RWH в первый раз было катастрофой, но теперь это имеет смысл, так что, надеюсь, через 6 месяцев это станет яснее. Код, который я могу написать на Хаскеле, гораздо более лаконичен.

Суть в том, держись, это займет время, но оно того стоит. Кстати, IRC #haskell - отличный ресурс, который поможет вам освоиться.

Мой совет, найдите небольшой проект по программированию и прогрызите его в Haskell. Не беспокойтесь о том, чтобы написать это способом Хаскели. Просто начни делать это на Хаскеле ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...