Сколько времени вы инвестировали, чтобы хорошо понять Хаскелл?
Я знаю, что этот вопрос может показаться глупым, но я изучаю (по крайней мере, пытаюсь) Хаскелл около 4 дней. Я уже закончил читать http://learnyouahaskell.com/, и теперь я инвестирую время в: Дорога Haskell к логике, математике и программированию, и все стало для меня очень сложным. У меня нет опыта в функциональном программировании, просто некоторые базовые знания в Lisp.
Несмотря на то, что я понимаю понятия, когда мне приходится писать не такой базовый код, есть полная темнота, и я не могу построить план в моей голове. Кажется, что есть много способов выполнить определенную задачу, но я не могу выразить себя.
Через 4 дня python я мог написать сложные скрипты (не "pythonic", но они действительно работали). Через 4 дня в haskell я... почти пустой.
Любые предложения по улучшению моих функциональных навыков?
Сколько времени вам потребовалось, чтобы полностью понять Haskell?
Ответы
Ответ 1
Примерно через 2 года есть некоторые части Haskell, которые я знаю очень хорошо (материалы Ptr, векторные библиотеки), некоторые области, которые я знаю достаточно, чтобы быть опасными (шаблон haskell), и другие, которых я не коснулся (веб-фреймворки, дженерики). В целом, однако, я думаю, что я хорошо понимаю язык.
Большая сложность обучения Haskell - это (очень крутая ИМО) кривая обучения. Есть много разных взаимосвязанных вещей, которые вам нужно изучить, прежде чем вы сможете быть продуктивными на этом языке, и потому что они взаимосвязаны, и трудно получить хорошее представление о них, не имея хотя бы нескольких месяцев опыта. Мой совет - держать на нем, и если вы думаете, что не понимаете чего-то, или что-то более глубокое происходит, вы, вероятно, правы. Если вы не можете понять это сейчас, просто двигайтесь дальше и возвращайтесь к нему через месяц или около того. В конце концов вы достигнете достаточного прогресса на нескольких фронтах, чтобы все стало ясно.
Как и любой язык, лучший способ добиться успеха - написать код. Это займет больше времени, потому что Haskell находится дальше от языков, которые вы уже знаете, но это того стоит.
Ответ 2
Хорошо, через 2 года я все еще не полностью понимаю все о Haskell. Я могу написать "продвинутые" программы (через 2-3 месяца после начала изучения Haskell), но люди продолжают придумывать новые вещи, чтобы узнать, что является частью удовольствия от Haskell:)
Что касается того, как лучше всего учиться, мне всегда нравится учиться. Просмотрите код чего-то, что вас интересует в Hackage (что-то не большое), а затем попытайтесь реализовать что-то подобное (или подмножество). Выберите проект, в котором вы можете продолжать добавлять более сложные слои со временем.
Ответ 3
После 150-часового курса функционального программирования в университете мы сделали
- Функции сортировки
- Создание двоичного дерева
- Использование/запись функций, таких как map, filter, zip
- .. возможно, что-то забыли.
Так что просто основы, которые я бы сказал, примерно через месяц полный рабочий день. Четыре дня - ничто... Я думаю, вам просто нужно написать больше кода, чтобы привыкнуть к функциональному программированию. Реализуя все, начиная с низа до вершины, делая более сложные вещи, когда вы приобретаете опыт.
Ответ 4
Я думаю, что кривая обучения Haskell очень странная. Вначале вы понимаете почти ничего - более странно, в большинстве случаев, когда вы хотите применить свои императивные знания (буферизация и т.д.), Вам говорят, что вы должны просто забыть что-нибудь об этом.
После этой фазы обычно появляется глава в вашей книге, где вас учат особым ароматам Haskell. По крайней мере, в этот момент ваш мозг должен лопнуть, и почти каждый думает:
Как сумасшедший может кто-то развить что-то вроде монадов???
Но как только вы так же поняли это, ничто не мешает вам понять все остальное, и вы скоро подумаете, насколько сложным и подробным императивным программированием было.
Кстати, мне потребовалось 2 месяца, чтобы понять основы, я начал февраль 2010 года. Но мне потребовалось еще 4 месяца, чтобы понять, что еще более трудный мыслит как функциональные параметры и результирующие эффекты (особенно монада State
была чудом до Я нашел хорошее описание на SO, как IO
работает - точно так же;), но я вижу совершенно новое мнение во всем мире.
Ответ 5
Я учился в университете Haskell-heavy (Utrecht), и мне очень понравился Haskell, поэтому я взял следующие курсы, которые использовали Haskell:
- Вводный FP (семестр)
- Грамматики и анализ с помощью Haskell (семестр)
- Реализация языков программирования (семестр)
- Общее программирование (семестр)
- Разработка программного обеспечения (2 месяца)
- Расширенное функциональное программирование (2 месяца)
Я также был ассистентом (помощником учителя), который помогал практическим занятиям в области внедрения и внедрения. И я написал свой M.Sc. on (Общий) Haskell.
Так что это кажется ужасным, но я "получил" FP где-то наполовину во вводном курсе. Наличие сильного математического фона помогло мне в этом случае, поэтому я уже привык к разложению проблем на простые функции. Что касается написания реальных программ, написание программы Go в Haskell было забавным упражнением, чтобы научиться работать с монадами (GUI был в TclHaskell, ugh!)
Ответ 6
Я ни в коем случае не специалист Haskell, но у меня есть два предложения:
- Потратьте время, чтобы поиграть с чистым лямбда-исчислением (или даже SKI, если вы храбры). В принципе, Haskell позволяет вам делать одни и те же вещи немного удобнее и безопаснее.
- Попробуйте решить общие проблемы, например. от Project Euler. Но не останавливайтесь на достигнутом, попробуйте сравнить свой код с другими людьми.
Данные оценки 1 ~ 3 месяцев, чтобы понять основы, кажутся мне реалистичными.
Ответ 7
Пройдет некоторое время, прежде чем Haskell начнет понимать. Я нахожусь на своем втором месяце обучения Haskell, и это моя вторая попытка за последние два года. На этот раз я начал с The Little Schemer. Затем я посмотрел видео Giesel. Чтение RWH в первый раз было катастрофой, но теперь это имеет некоторый смысл, поэтому, надеюсь, еще через 6 месяцев это будет яснее. Код, который я могу написать в Haskell, намного более краткий.
Внизу держится, это займет время, но это того стоит. BTW, IRС#haskell - отличный ресурс, который поможет вам ускориться.
Мой совет, найти небольшой проект программирования и грызть его в Haskell. Не беспокойтесь слишком много о том, чтобы написать это путь Хаскелли. Просто начните делать это Haskell..