Какой функциональный язык программирования выбрать при изучении структур данных и алгоритмов?
А теперь полная формулировка вопроса.
Я программирую на C# около 3-х лет.
В один прекрасный момент захотелось поподробнее изучить структуры данных и алгоритмы.
Изучая, программирую решения задач и реализовываю освоенные алгоритмы самостоятельно. Делать это на C# стало ужасно скучно (я это сразу осознал) и в связи с этим захотелось изучить новый язык программирования.
В целом, исключая C#, знаком с С++ и VB6.
Хочется ознакомиться с какой-то другой (не императивной) парадигмой программирования. В контексте изучения структур данных и алгоритмов я подумал, что логичнее будет изучить язык поддерживающий функциональное программирование. Но таких языков великое множество.
Отдельно хотелось бы коснуться F# и выделить его главный недостаток для меня: это язык из платформы .NET, а мне хотелось бы изучить язык не принадлежащий к этой платформе (причина проста: не хочется класть все яйца в одну корзину).
Однако, я не против услышать аргументы за F#, если Вам хотелось бы настоять на рекомендации изучать именно его.
Собственно, рекомендую Scheme в комплекте с книгой «Structure and Interpretation of Computer Programs» (Структура и Интерпретация Компьютерных Программ aka SICP) за авторством Харольда Абельсона и сотоварищей. Если читать внимательно и выполнять хотя бы часть заданий, то очень неплохо освоить можно функциональное программирование, и на изучение функциональных языков уйдёт на порядок меньше времени. Если хочется более актуального языка, то Haskell или Erlang.
(чуть офтоп) есть так же одноименный курс лекций Berkeley. «Structure and Interpretation of Computer Programs»
Доступен в удобном формате на <известном всем ресурсе>. И через iTunes. webcast.berkeley.edu/series.html#c,d,Computer_Science
Если хочется хардкорно функционального подхода — то без сомнения haskell, но его изучение — весьма не простое занятие. Erlang легче, и по мне так понятнее, тем более что на нем легче писать вещи, не оторванные от мира сего=)
OCaml — тот же F#, только без CLR и чуть кривше.
Clojure — не такой марсианский как остальные Лиспы, но все равно интересно.
В идеале — Haskell.
Если интересно поковыряться в коде на F#, то github.com/jaredpar/VsVim.
Я не понял вашего предубуждения против F# — это почти тот же OCaml (программы OCaml полностью валидны в F#) — а Окамл — это очень нормальный функциональный язык, предшественник многих современных да и сам не отсталый.
Если вам нужен полный хардкор — то только Хаскелл. Ничто не сравнится с ним по современности и точности следованяи парадигмы.
Если заработать деньги — тогда лучше Эрланг. Но вообще идея заработать деньги на ФЯ весьма труднореализуема. Лисп тоже используется, но мне не понравился его внешний вид. Слишком много скобок, моя душа этого не выдерживает.
Поддерживаю, если подходить с позций
а) отойти от .Net платформы
б) реально полезное и относительно востребованное == «можно увидеть в вакансиях больше 2х упоминаний на 10 страниц объявлений» :)
На выбор — Си, Перл (особенно!), Питон. Можешь попробовать Пролог, весьма своеобразный язык программирования. Лучше всего попробуй несколько языков, а потом углубленно изучай понравившийся или тот который более удобен для решения твоих задач.
Судя по популярность языков, единственным функциональным языком в топе является Lisp.
Меня, всё-таки, не в последнюю очередь интересует возможность заработать хоть какие-то деньги на изучаемом языке.