Изучение Haskell с целью изучения Scala - PullRequest
42 голосов
/ 29 сентября 2011

Я прочитал несколько вопросов, таких как Scala и Haskell, обсуждая достоинства обоих языков или то, что изучать, но я уже знаю, что хотел бы выучить Scala.Я был программистом Java в универе и сейчас в основном использую PHP.

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

Мне интересноЕсли было бы неплохо изучить Haskell как введение в функциональное программирование, поскольку оно чисто функциональное, так что я бы изучил его правильно, а не случайно, используя функциональные фрагменты в Scala, не зная, почему?

Я также хотел бы использовать Haskell для личных проектов и т. Д., Поскольку он выглядит великолепно, но я не вижу многих реальных применений этого, кажется, больше используется для академических вещей, поэтому я хочу изучить его, чтобы получитьзатем функциональное понимание переходит к Scala.

Ответы [ 6 ]

85 голосов
/ 29 сентября 2011

Говоря как человек, пришедший с Явы, и для которого Скала была наркотиком, ведущим в Хаскелл, я считаю, что это отличная идея (сначала изучите Хаскелл)!

Haskell концептуально намного более простой язык, чем Scala, и если ваша цель - научиться программировать функционально, вы не сможете помочь, если начнете с Haskell.По своему дизайну Scala поддерживает своего рода «унаследованный режим» кодирования, при котором вам на самом деле не нужно слишком сильно менять привычки Java (или PHP), если вы этого не хотите.Я думаю, что это стратегическое решение - и хорошее! - призвано повысить популярность среди приверженцев Java.

Но это не ты!Вы на самом деле заинтересованы в изучении чего-то нового ... так почему бы не пойти на все?Изучение функционального программирования в чистом виде, без беспорядка и соблазна регрессировать в старые привычки, кристаллизует концепции в вашем мозгу.

Затем непременно вернитесь в Scala и узнайте, чем он отличается от Haskell;и в одних отношениях он слабее, а в других сильнее, но тогда вы будете гораздо лучше понимать эти различия.

17 голосов
/ 29 сентября 2011

Я пришел в Scala из фона Java. Изначально я сосредоточился на Scala как на лучшей Java. Со временем я начал использовать все больше и больше функциональных концепций в Scala. В конце концов я достиг точки, когда я почувствовал, что мне нужно более четкое понимание функционального программирования. Именно в этот момент я ушел и изучил Хаскель.

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

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

17 голосов
/ 29 сентября 2011

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

Даже если выиди на Haskell, твои первые программы будут иметь менее «функциональное качество», чем более поздние, так как только практика улучшает это.При запуске Scala ваши первые программы будут «менее качественными», как ваши первые программы на Java или PHP, но с практикой вы улучшите их.Потратив время на несвязанные задачи, надеясь, что они МОГУТ помочь, это может привести к тому, что вы потеряете это время.

Сконцентрируйтесь на своей цели.Если это Scala, сделайте это.

ОБНОВЛЕНИЕ: Я полагаю , это может иметь отношение к вопросу.Это поднимает вопрос производительности (поставляет программное обеспечение) по сравнению с поиском «чистых знаний».

7 голосов
/ 29 сентября 2011

Риск того, что вы начнете напрямую со Scala, не играя сначала ни на одном чисто функциональном языке программирования, заключается в том, что вы, вероятно, будете слишком часто обращаться к процедурным решениям.

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

Чтобы лучше понять, что я имею в виду, взгляните на списки в Haskell, Scala и Scheme.

4 голосов
/ 06 октября 2011

Сначала я выучил Хаскель, а затем Скалу и никогда не сожалел. Вы получите более глубокое признание FP, если сначала изучите Haskell. Ваше понимание понятий, лежащих в основе FP, и того, почему они важны, будет отражено. Большая часть Scala взята из Haskell (IMHO). Это будет иметь больше смысла, когда у вас есть фон Haskell. Не уклоняйся! Ваши усилия будут вознаграждены.

0 голосов
/ 09 ноября 2011

Для себя я хочу изучать Scala и функциональное программирование; и, следовательно, просто я учу Scala. Мой учебный материал - Программирование Scala . После того, как я прочитал предыдущую главу о синтаксисе и прочем, я пропустил главу, посвященную вещам ОО, и перешел к главе 8, в которой рассказывается о функциональном программировании. Там я позволил себе бороться с ФП.

Я читаю этот скалярный код, который написан на языке FP, и анализирую это . Вы хотите изучить Scala для «... улучшения Java для личных проектов». и Haskell для вступления в FP. Итак, кажется, что в первую очередь вы хотите продуктивно работать с Java-проектом, а затем воспринимать FP как побочный эффект. Чтобы быть продуктивным, вы должны овладеть языком. Есть много, чтобы выучить и освоить язык, и единственный способ овладеть языком - это написать код на этом языке. Изучая / используя Scala, вы не сможете избежать FP, даже если захотите. Я читал блоги Scala (книга тоже), и авторы всегда изо всех сил пытаются объяснить, когда речь заходит о концепции FP. Вам не нужно беспокоиться о том, чтобы не схватить FP, следуя по маршруту Scala. Да, вы можете черпать вдохновение из Haskell, например this , когда изучаете Scala. Или, как указывал Крис Тернер выше, вы можете углубиться в большее количество FP, когда вы уже работаете со Scala.

Вы хотите пойти в точку А, почему бы не перейти в точку А напрямую? Если вы идете по маршруту точки B (Хаскель), вам придется отложить свою производительность, как упомянуто Pere Villega .

...