Меню:


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

Если вы будете заказывать что-то из перечисленных тут книг, то просьба пользоваться соответствующими ссылками — это помогает мне покупать новые книги и пополнять обзор литературы (Предупреждение: иногда цены на ozon.ru сильно отличаются от цен в других магазинах, поэтому можете сравнить цены с помощью http://findbook.ru/, или заглянуть на сайт издательства).

Введение

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

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

Литература на русском языке

В 70-80-е гг. в СССР было выпущено достаточно большое количество литературы, касающейся функционального и декларативного программирования. Список книг включает не только переводные книги, но и книги и учебники отечественных авторов, работавших в данных областях. В 90-е годы издание такой литературы практически сошло на нет, но в последние годы эта ситуация стала исправляться — появились переводы хороших зарубежных книг1, а также вышло несколько книг русскоязычных авторов, в том числе и учебники, разработанные специально для вузов2, описанных ниже.

В 2009 году начал издаваться научно-практический журнал "Практика функционального программирования", в котором публикуются статьи на разные темы, связанные с ФП, включая обзоры языков и техник функционального программирования и т.п. Также в рамках журнала ведется проект Библиотечка ПФП в рамках которого производится перевод известных статей по функциональному программированию.

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

Общие вопросы ФП

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

"Функциональное программирование" (Харрисон/Филд)

В 1993 году издательство "Мир" выпустило перевод достаточно известной книги Functional Programming, написанной Петером Харрисоном (Peter G. Harrison) и Антони Филдом (Anthony J. Field) в 1988 году. На русском языке она называется "Функциональное программирование" (ISBN 5-03-001870-0).

Данная книга начинается с рассмотрения функций как таковых и использования функций высшего порядка, а также рассматривает виды вычислений, используемые при функциональном стиле программирования. Для демонстрации приемов программирования в книге вводится язык Hope. Помимо Hope, кратко описываются и другие языки программирования: Lisp, Miranda, FP.

За введением в ФП (функциональное программирование) следует основная часть книги, посвященная вопросам реализации языков программирования, начиная с основ лямбда-исчисления, системы вывода и проверки типов, вопросов интерпретации и компиляции кода, представления данных, сборки мусора, и заканчивая вопросами оптимизации программ (преобразование кода во время компиляции, оптимизация ленивого вычисления данных и т.п.).

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

"Введение в функциональное программирование" (Харрисон)

Данный проект является переводом курса Introduction to Functional Programming Джона Харрисона (John Harrison). Этот курс может использоваться для быстрого ознакомления с основами ФП и семейством языков ML. Он содержит в себе как описание теоретических основ ФП (от лямбда-исчисления до систем типов), так и примеры применения парадигм ФП для решения конкретных задач.

В данном курсе используется язык программирования Caml Light3, входящий в семейство языков ML. По мере прохождения данного курса читатель получает набор знаний, необходимый для освоения данного языка и написания на нем достаточно сложных программ.

Перевод может использоваться как основа курса лекций по ФП — помимо конспектов лекций (lecture notes) в нем содержатся переводы всех сопутствующих слайдов. Последняя версия перевода может быть загружена с сайта проекта.

"Структура и интерпретация компьютерных программ"

В 2006 году был выпущен перевод на русский язык классического учебника MIT по основам программирования "Структура и интерпретация компьютерных программ" (Structure & Interpretation of Computer Programs, SICP). Перевод был выполнен Георгием Бронниковым.

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

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

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

Учебные курсы проекта "Интуит"

Среди учебных курсов проекта "Интуит" имеется несколько курсов, которые посвящены вопросам функционального и декларативного программирования. Некоторые из них предлагают теоретическое изложение принципов ФП, другие посвящены конкретным языкам программирования. Эти курсы могут стать хорошим подспорьем при изучении ФП, поскольку материал рассчитан на людей, только начинающих знакомиться с соответствующими темами. Практически все курсы содержат задачи и упражнения, выполняя которые можно приобрести практический опыт применения полученных знаний.

В настоящее время опубликованы следующие курсы (материалы некоторых курсов доступны также в печатном виде — книги можно заказать с сайта проекта):

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

"Типы в языках программирования" (Пирс)

Эта книга является переводом известной книги Types and Programming Languages Бенджамина Пирса (Benjamin C. Pierce). В книге рассматриваются различные аспекты использования типов в языках программирования: математические основы, различные типовые системы, вывод типов и т.п.

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

Другие книги, имеющие отношение к ФП

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

О конкретных языках

Наряду с книгами, описывающими общие вопросы программирования на функциональных языках и математические основы лямбда-исчисления, в СССР и России издавались и книги по конкретным функциональным и декларативным языкам программирования. Достаточно широко представлена информация о языках Lisp, Haskell, Prolog и других.

Lisp

Языку Lisp, являющемуся самым старым функциональным языком, в СССР было посвящено несколько публикаций (хотя их не так много, по сравнению с языком Пролог).

В 70-х гг. было выпущено сразу несколько книг по Лиспу:

В 1990 году вышел в свет широко известный двухтомник "Мир Лиспа", являющийся переводом одноименной книги финских авторов Э. Хювёнен и И. Сеппянен. В первом томе содержится описание языка Common Lisp, включая типы данных и наиболее часто используемые функции, ввод и вывод данных, обработку символьных данных и т.п. Кроме того, часть первого тома посвящена введению в методы ФП: использование рекурсии, функций высшего порядка, замыканий и макросов. Второй том содержит введение в другие методы программирования — логическое и объектное, описание среды программирования Лисп, а также большое количество примеров программ на этом языке, включая простой интерпретатор Лиспа.

Из более современных книг стоит упомянуть книги, выпущенные в рамках проекта Интуит, перевод ANSI Common Lisp (также доступный в электронном виде по свободной цене) а также книги, которые планируется выпустить в скором времени.

Clojure

Книг о Clojure опубликованных на русском языке не было достаточно долгое время. Эта ситуация была исправлена выпуском в 2013-м году книги Программирование в Clojure которая является переводом Clojure Programming издательства O'Reilly. Перевод был сделан очень хорошо, так что можно рекомендовать эту книгу для тех, кто пока не совсем хорошо владеет английским языком, но заинтересовался Clojure.

Существует также неофициальный перевод 2-го издания книги Programming Clojure. Пока непонятно - будет ли он издан на бумаге, но электронная версия пока доступна.

Кроме того, на русском языке опубликовано несколько статей — Язык программирования Clojure, опубликованная в рамках проекта IBM developerWorks, и статья Clojure, или «Вы все еще используете Java? Тогда мы идем к вам!», опубликованная в 4-м номере журнала "Практика функционального программирования" (более свежая версия этой статьи доступна на моем сайте).

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

Логическое программирование и язык Пролог

За последние тридцать лет в СССР (а затем и в России) было выпущено достаточно большое количество книг на темы логического программирования и искусственного интеллекта вообще и языка Пролог в частности (особенно много их было издано в 80-х гг.). Этот далеко не полный список включает следующие книги:

Haskell

В настоящее время количество русскоязычных материалов по языку Haskell относительно невелико. Только в последние годы стали появляться книги об этом языке (упомянутые далее в статье книги Р. Душкина и Н. Рогановой, курсы проекта "Интуит") и появились энтузиасты, работающие над переводом англоязычных книг и статей на русский язык в целях популяризации Haskell среди русскоязычных программистов.

Книги о Haskell Романа Душкина

В 2006—2007 гг. Роман Душкин, читавший в МИФИ в 2001—2006 гг. курсы по ФП, выпустил две книги, посвященные языку программирования Haskell.

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

Стоит отметить, что книга содержит достаточно большое количество математики и написана суховатым языком, что делает ее излишне теоретизированой с точки зрения программиста-практика и затрудняет восприятие. Кроме того, в книге не так много примеров, которые показывали бы применимость языка в повседневной разработке (если сравнивать с книгой Real World Haskell, которая является хорошим образцом в этом деле). Еще одной вещью, затрудняющей чтение книги является качество издания — верстки самой книги и бумаги, на которой она напечатана.

Вторая книга этого же автора называется "Справочник по языку Haskell" и является дополнением к первой. Книга предназначена для читателей, уже знакомых с основами языка Haskell, поэтому она не должна рассматриваться как учебник по этому языку. Она содержит краткое описание синтаксиса языка Haskell, основных типов данных, а также (что важно!) основные приемы программирования на этом языке — использование различных видов рекурсии, функций высшего порядка и анонимных функций, защитных выражений и т.д.

Основная часть книги посвящена стандартным библиотекам, входящим в состав Hugs98 & GHC: начиная с Prelude и включая основные библиотеки (Control, System, Data, Text). Для каждой библиотеки приводится описание определенных в ней типов, классов и функций. Приводимые в справочнике определения функций могут использоваться в качестве примеров по написанию "правильного" кода на Haskell и являются хорошим подспорьем в работе.

В ноябре 2009 года была выпущена (при поддержке проекта "Практика функционального программирования") еще одна книга Романа Душкина. Она называется "Практика работы на языке Haskell" и рассматривает инструментальные средства языка Haskell, такие как компиляторы и интерпретаторы Hugs и GHC, поддержку разработки в среде Eclipse, различные утилиты (hlint, darcs, cabal и другие) и различные библиотеки: Parsec, для разработки парсеров, HaskellDB для работы с базами данных, разработки сетевых и графических приложений. По каждой из подсистем дается небольшое описание и примеры использования.

В 2011-м году была выпущена еще одна книга — "14 занимательных эссе о языке Haskell и функциональном программировании", в электронном виде она доступна бесплатно с сайта автора. А в 2012-м году, вышло продолжение этой книги: Другие 14 эссе о языке Haskell и функциональном программировании - серьёзные.

"Функциональное программирование" (Роганова)

В 2002 году Институт ИНФО издал учебное пособие Н.А. Рогановой под названием "Функциональное программирование". В данном пособии основной упор делается на практическое применение ФП для решения конкретных задач (автор выбрала задачи обработки структур данных и различные математические задачи). В нем практически нет теории, изобилующей математикой, что отличает его от других учебников по ФП. Все вводимые понятия иллюстрируются примерами на языке Haskell, который описан достаточно подробно, поэтому данное учебное пособие можно рассматривать в качестве начального по данному языку.

К недостаткам пособия можно отнести то, что отсутствие материала по теоретическим основам ФП (лямбда-исчисление и т.п.) требует изучения дополнительных материалов (которые, к сожалению, не указаны в списке литературы). Кроме того, в части описания языка Haskell мало внимания уделено таким вопросам, как ввод/вывод данных, разбор данных и т.п.

Перевод книги "Learn You a Haskell for Great Good!"

Весной 2012-го года, издательство ДМК-Пресс выпустило перевод известного учебника по языку Haskell: Learn You a Haskell for Great Good!". Перевод называется Изучай Haskell во имя добра!, а исходный код черновиков перевода можно найти в отдельном репозитории.

Учебник по Haskell Антона Холомьёва

Антон Холомьёв написал (хотя работа все еще продолжается) учебник по Haskell, который описывает не толькосам язык, но и теоретические основания лямбда-исчисления, теории категорий и то, как это все связано с Haskell. Исходный текст учебника и версия в формате PDF доступны в репозитории на github.

Учебное пособие по Haskell Григория Макеева

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

Переводы документации

М. Ландина и В. Роганов в 2005 году выполнили перевод The Haskell 98 Report — основного документа, который определяет синтаксис языка Haskell, а также состав основных библиотек этого языка. Перевод этого документа доступен с сервера haskell.ru как в варианте для печати, так и в online-версии.

Денис Москвин сделал перевод хорошо известного учебника по языку Haskell — Gentle Introduction To Haskell. Данный учебник описывает основные возможности языка Haskell и наиболее часто используемые функции стандартных библиотек, включая ввод и вывод, и может использоваться для изучения основ языка. Перевод учебника доступен с сервера RSDN и состоит из двух частей — часть 1 и часть 2.

Семейство языков ML

О семействе языков ML (Standard ML, Objective Caml, Caml Light) на русском языке существует сравнительно немного литературы. В качестве небольшого введения в программирование на языке Caml Light можно использовать курс лекций "Введение в функциональное программирование", описанный выше.

Кроме того, существует незаконченный перевод книги Developing Applications With Objective Caml — переведено 11 глав, описывающих сам язык OCaml и базовые библиотеки, их можно использовать в качестве учебника по данному языку.

Также имеется почти полный перевод документации к OCaml 3.10, который содержит достаточно хорошее описание самого языка, библиотек и утилит.

Весной 2011-го года, в издательстве "Символ-Плюс" под названием Программирование на F# вышел перевод книги Programming F#, выпущенной издательством O'Reilly. Данная книга описывает 1-ю версию языка, хотя в данный момент уже доступна вторая версия, со многими улучшениями.

Издательство "ДМК Пресс" также участвует в выпуске литературы по функциональному программированию. В апрелее 2011-го года, там была выпущена книга Дмитрия Сошников Функциональное программирование на F#, которая представляет собой небольшое введение в этот язык, без глубокого погружения в лямбда-исчисление и синтаксис языка, но охватывает основные практические вопросы применения этого языка. Особенно полезной является 7-я глава, которая содержит решения конкретных задач, от математических вычислений, до веб-программирования, графики и программирования для Windows Phone 7.

Erlang

Весной 2012-го года издательство ДМК-Пресс выпустило перевод книги Erlang Programming под названием Программирование в Erlang, но пока неизвестно - будет ли эта книга доступна в электронном виде.

Scala

Еще одним проектом издательства ДМК-Пресс является перевод книги Scala for the Impatient, который вышел под названием SCALA для нетерпеливых. Перевод сделан достаточно хорошо и эту книгу можно использовать для быстрого ознакомления с языком. А больше книг про Scala вы найдете ниже в разделе англоязычной литературы.

Планируется выпустить

В последнее время ведется работа над переводом на русский язык книги Practical Common Lisp. Книга содержит достаточно подробное введение в язык Common Lisp и содержит большое количество практических примеров, которые помогают начать использование этого языка в повседневной работе. Работа над переводом находится в заключительной стадии, а переведенный материал доступен на сайте проекта.

Еще одна группа энтузиастов начала работу над переводом знаменитой книги On Lisp Пола Грема (Paul Graham). Вы можете помочь в улучшении этого материала путем вычитки переведенных глав или присоединившись к переводу текста.

Англоязычная литература

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

Общие вопросы ФП

В данном списке собраны книги, посвященные общим вопросам разработки ПО на функциональных языках, а также теоретическим вопросам ФП:

Больше книг вы можете найти на страницах проекта Free Tech Books.

Реализация языков программирования

Вопросы реализации функциональных языков программирования рассматриваются в некоторых описанных выше книгах, посвященных теории ФП, но кроме этого, существуют книги, посвященные исключительно вопросам реализации таких языков программирования:

Обзоры разных языков, включая функциональные

Имеется несколько книг, которые посвящены различным подходам к программированию, проиллюстрированные разными языкам программирования, включая функциональные. Сюда можно отнести следующие книги:

ФП для программистов на других языках

В последнее время было опубликовано несколько книг, посвященных функциональному программированию и ориентированных на программистах на "традиционных" языках, таких как Java, C# и другие. Сюда можно отнести:

Конкретные языки ФП

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

Достаточно хорошее введение в конкретные языки функционального программирования можно найти в книге Seven Languages in Seven Weeks издательства Pragmatic Bookshelf. В книге описываются основы программирования на 7 языках (Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell), показываются базовые концепции и небольшие примеры. На мой взгляд этого может быть достаточно чтобы понять — захотите ли вы продолжать изучать конкретный язык программирования.

Haskell

Среди публикаций, посвященных языку Haskell, я хотел бы отметить следующие:

Кроме напечатанных книг и учебников, имеются и материалы, доступные online. К наиболее интересным можно отнести:

Erlang

Книга Programming Erlang. Software for a Concurrent World, написанная Джо Армстронгом (Joe Armstrong), долгое время являлась практически единственным доступным печатным изданием, посвященным языку Erlang, поскольку выпущенная ранее книга "Concurrent Programming in Erlang" стала уже библиографической редкостью (в интернете можно найти первую часть этой книги). "Programming Erlang" описывает Erlang простым языком и знакомит читателя с его основным функционалом. Кроме самого языка, книга описывает более сложные темы: базы данных, использование OTP и т.п. Осенью 2013-го года издательство планирует выпустить 2-е издание этой книги.

В 2009-м году издательство O'Reilly выпустило книгу Erlang Programming, описывающую как сам язык, так и инфраструктурные вопросы, включая OTP, программирование графических приложений, test-driven разработку, отладку и т.д. Эта книга более подробная чем книга Армстронга.

Кроме того, издательство O'Reilly в начале 2013-го года выпустило книгу Introducing Erlang, которая должна служить кратким введением в сам язык и основные концепции OTP. Дополнением для этой книги является Études for Erlang являющяяся сборником упражнений, не включенных в основную книгу.

Книга Erlang and OTP in Action, выпущена издательством Manning осенью 2010 года, и посвящена практическим аспектам использования OTP, а также вопросам использования Erlang'а с библиотеками на других языках программирования. Предполагается, что читатель уже немного знаком с языком Erlang.

Весной 2012-го, издательство O'Reilly выпустило небольшую книгу Building Web Applications with Erlang: Working with REST and Web Sockets on Yaws

Успех книги Learn You a Haskell for Great Good! привел к созданию аналогичного проекта и для языка Erlang: Learn You Some Erlang for Great Good!. Онлайн версия книги также бесплатно доступна на сайте проекта.

В 2012-м году, издательство Springer выпустило необычную для них книгу: Handbook of Neuroevolution Through Erlang, которая описывает как Erlang был использован для построения нейронных сетей (neural networks).

Кроме того, планируется выпуск следующих книг, посвященных как самому языку Erlang, так и применению его в конкретных задачах:

Caml & Objective Caml

Вопросам программирования на языке Objective Caml (OCaml) посвящено несколько книг.

Технический отчет The ZINC experiment: an economical implementation of the ML language, написанный Xavier Leroy в 1990 году, представляет собой подробное описание реализации языка ML и может быть интересен тем, кто интересуется внутренним устройством Caml & OCaml.

А осенью 2013-го года, издательство O'Reilly планирует издать книгу Real World OCaml которая должна стать таким же популярным введением в язык OCaml как и Real World Haskell стал для языка Haskell. Текст книги в электронном виде также доступен на отдельном сайте.

F#

В настоящее время языку F# посвящено достаточно большое количество книг.

Foundations of F#, выпущенная в 2007-м году, описывает основы языка и показывает разные методы программирования на нем, включая создание пользовательских интерфейсов и работу с базами данных. В конце 2009-го года вышла новая версия этой книги, под названием Beginning F#.

Книга Expert F# 3.0 в свою очередь посвящена более сложным вопросам применения F# для разработки программ, таким как взаимодействие с кодом, написанным на других языках, использование библиотек .Net, разбор данных, асинхронное программирование и т.д.

F# for Scientists является версией книги "OCaml for Scientists", адаптированной для языка F#, и содержит информацию по разным аспектам применения F# в "научном программировании" — визуализации данных, работе с базами данных, обработке данных и т.д.

В октябре 2009-го года издательство O'Reilly выпустило книгу Programming F#, которая содержит описание актуальной версии языка F#, начиная с рассмотрения основ функционального и объектно-ориентированного программирования на данном языке, использование библиотек платформы .Net, метапрограммирование с помощью доступных средств платформы, а также использование возможностей языка для асинхронного и параллельного программирования. Кроме этого, в приложениях приводится информация об имеющихся библиотеках для обработки и визуализации данных. В 2012-м году, было выпущено 2-е издание этой книги, которое описывает F# 3.0.

Кроме того, издательство O'Reilly выпустило еще одну небольшую книгу посвященную разработке на F#: Building Web, Cloud, and Mobile Solutions with F#.

В конце 2009-го года, издательство Manning опубликовало книгу Functional Programming for the Real World: With Examples in F# and C#, которая описывает декларативный подход к разработке программ, и иллюстрирует его с помощью примеров на языках F# и C#. Данная книга может быть интересна для программистов, имеющих опыт разработки для платформы .Net, и желающих ознакомиться с разными подходами к разработке программ.

Flying Frog Consultancy также выпустило книгу Visual F# 2010 for Technical Computing, которая описывает версию F#, поставляемую в составе Visual Studio 10.

А летом 2010-го года в издательстве Wrox вышла книга Professional F# 2.0.

Также, через Амазон можно купить в электронном виде книгу Friendly F# (Fun with game programming), которая знакомит с F# на примере разработки игр.

А издательство Manning планирует выпустить в 2013-м году книгу F# Deep Dives, которая описывает использование F# для решения конкретных задач.

Среди свободных ресурсов стоит отметить книгу The F# Survival Guide, которая содержит достаточно полную информацию об основах функционального программирования и самом языке F#. Еще одним полезным ресурсом может оказаться сайт F# for fun and profit.

Книга F# for C# Developers издательства Microsoft Press является введением в язык F# для разработчиков которые уже умеют опыт разработки на языке C# и платформе .Net.

Standard ML

По языку Standard ML также выпущено достаточно большое количество книг:

Несколько книг посвящены изложению стандарта языка. К ним можно отнести книги The Definition of Standard ML и The Standard ML Basis Library, которые содержат подробную информацию о языке и стандартной библиотеке.

Lisp

Кроме описанных ранее русскоязычных книг по языку Lisp, существует большое количество книг на английском языке, посвященных Lisp и его диалектам:

Осенью 2010-го года, издательство No Starch Press выпустило еще одну книгу по Lisp — Land of LISP: Learn to Program in LISP, One Game at a Time!. Кроме того, у книги есть отдельный сайт, где можно найти более подробную информацию о книге.

Всеволод Дёмкин долгое время интервьюировал известных разработчиков на Commom Lisp, и сейчас эти итервью доступны в виде отдельной книги - Lisp Hackers. Interviews with 100x More Productive Programmers, доступной бесплатно в электронной форме.

Издательство O'Reilly планировало выпустить книгу о Common Lisp под названием "Lisp Outside the Box", и несколько глав уже доступно для чтения на сайте проекта, но он был прекращен. Как видно из оглавления, в книге планировалось рассмотреть широкий круг вопросов — от основ Common Lisp, до разработки приложений для веб и десктопа, а также работы с конкретными библиотеками и средами разработки.

Scheme

По языку программирования Scheme также выпущено несколько книг, в настоящее время можно купить следующие из них:

Книги описывают как сам язык, так и различные аспекты его использования. Эти книги могут использоваться как справочники по языку и являются хорошим дополнением к книгам Structure and Interpretation of Computer Programs и How to Design Programs, в которых язык Scheme использован для примеров.

Летом 2013-го года выпущена книга Realm of Racket посвященная языку Racket (бывший PLT Scheme). На создание этой книги сильно повлиял выход книги "Land of Lisp (автор этой книги также соавтор Realm of Racket).

Prolog

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

Также имеется ряд свободно доступных ресурсов имеющих отношение к Prolog и логическому программированию:

Scala

Язык Scala становится достаточно популярным, и начал использоваться в коммерческих проектах, таких как Twitter, LinkedIn, и других. По данному языку существует достаточно большое количество литературы на английском языке:

К изданию планируются следующие книги:

Кроме книг и веб-сайтов, для Scala начали создаваться и онлайн-курсы, такие как http://www.scalacourses.com/ или Functional Programming Principles in Scala который проводится самим автором языка. Основное преимущество этих курсов заключается в наличии заданий и возможности получения ответов на свои вопросы на форумах.

Clojure

Clojure — недавно появившийся Lisp'ообразный язык программирования для Java Virtual Machine (JVM). В отличии от других реализаций, он не совместим полностью ни с Common Lisp, ни с Scheme, а реализует свое подмножество Lisp. Отказ от совместимости с другими реализациями, позволил реализовать некоторые интересные вещи, как неизменяемость данных, неявную параллелизацию кода, очень простую модель конкурентного программирования и другие вещи, при этом обеспечивая возможность двухстороннего взаимодействия с кодом на Java.

В 2009-м году в серии Pragmatic Programmers вышла книга Programming Clojure. Эта книга представляет собой достаточно хорошее введение в язык, описывая основные возможности языка (версии 1.0, существовавшей на время выхода книги). Но в качестве справочника необходимо использовать соответствующий раздел сайта языка, поскольку в книге в основном дается описание концепций языка. Весной 2012-го года, вышло второе издание этой книги, которое было обновлено описанием новых возможностей языка.

В мае 2010-го года вышла книга Practical Clojure. The Definitive Guide, которая содержит описание всех возможностей языка в достаточно кратком изложении. Но при этом в книге отсутствует описание инфраструктурных вещей, таких как среды разработки, утилиты для сборки кода и т.д.

В 2011-м году, издательство Manning выпустило две книги про Clojure: Clojure in Action и The Joy of Clojure. Thinking the Clojure Way. Первая книга является введением в этот язык программирования, с разными примерами его использования, в то время как вторая книга ориентирована на людей уже знакомых с Clojure, но которые хотят научиться лучше программировать на этом языке (у меня в блоге есть более подробная рецензия на эту книгу). Издательство Manning также планирует выпустить 2-е издание этой книги.

Весной 2012-го года издательство O'Reilly выпустило книгу Clojure Programming авторами которой являются известные разработчики языка и различных библиотек. Книга представляет подробное описание самого языка и некоторых библиотек, рассказывает о его практическом применении.

Издательство Developer.Press выпустило небольшую книжку под названием Clojure Made Simple которая описывает самые основы языка — типы данных, функции и т.п. Правда в книге почти не упоминаются возможности в части конкуретного программирования.

Издательство Packt также не обошло Clojure своим вниманием и выпустило книгу Clojure Data Analysis Cookbook которая описывает как Clojure может быть использована для анализа данных, включая использование Incanter.

Издательство No Starch Press также должно выпустить книгу по Clojure под названием Meet Clojure.

Издательство O'Reilly решило издать еще одну книгу о Clojure - Clojure Cookbook, и каждый может принять участие в написании рецептов, которые будут включены в эту книгу.

Среди свободных источников информации можно отметить Clojure Notes, который использовался в курсе обучения Clojure и книгу Clojure Programming, создаваемую в рамках проекта Wikibooks. Также свободно доступна и Clojure-версия книги "Casting SPELs in Lisp".

Параллельно с Clojure, разрабатывается и язык ClojureScript, который позволяет вам разрабатывать веб-приложения выполняемые в броузере. Издательство O'Reilly выпустило небольшую книгу ClojureScript: Up and Running которая кратко описывает основные принципы разработки с использованием ClojureScript, включая информацию о существующих библиотеках.

Рекомендации

Если вы хотите познакомиться с принципами создания функциональных языков программирования, то на русском языке базовую информацию вы почерпнете из книг "Структура и интерпретация компьютерных программ", "Функциональное программирование", "Функциональное программирование. Применение и реализация" (Хендерсон) и "Реализация функциональных языков". Из книг на английском языке я могу порекомендовать книги, перечисленные в разделе "Реализация функциональных языков программирования".

Заинтересовавшиеся Common Lisp могут начать его изучение с книги Practical Common Lisp (существующей и на русском языке), которая даст информацию по основным аспектам языка. Более сложные аспекты работы с Lisp описаны в On Lisp, The Art of Metaobject Protocol, Lisp in Small Pieces и других англоязычных книгах.

Для обучения функциональному программированию на языке Haskell можно порекомендовать книгу Introduction to Functional Programming using Haskell Ричарда Бёрда. Для желающих узнать о практическом применении Haskell хорошим выбором будет книга Real World Haskell в которой приводятся практические примеры использования Haskell. Среди учебников можно отметить Yet another Haskell tutorial и A Gentle Introduction to Haskell 98 (также доступный на русском языке), ну и конечно Learn You a Haskell for Great Good!.

Для изучения Erlang я бы посоветовал начать либо с книги Erlang Programming от O'Reilly, либо с Erlang and OTP in Action, выпущенной в Manning — обе эти книги обеспечивают достаточно полное описание как самого языка, так и OTP.

Для изучения Scala вы можете выбрать несколько книг. Если вам хочется сразу начать программировать, то в этом случае посмотрите на Scala for the Impatient. Если же вам хочется начать с более глубого изучения языка, то в этом случае начните с Programming in Scala: A Comprehensive Step-by-step Guide. Ну а после этих книг, можете продолжить изучение с помощью Scala in Depth и других книг.

Для Clojure, наиболее актуальными книгами являются Clojure Programming (более детальная) и 2-е издание Programming Clojure. А вот после этих книг, я очень советую прочитать The Joy of Clojure. Thinking the Clojure Way — вы не пожалеете.

Для ознакомления с языками семейства ML существует достаточно много литературы. Выбравшим OCaml лучше начать с книги Introduction to Objective Caml, используя её вместе со справочником по языку, а потом переходить к Developing Applications with Objective Caml и другим книгам из списка выше. А изучение F# стоит начать с Expert F# 2.0 или Begining F# и продолжить с F# for Scientists.

Для Prologа выбор книг достаточно велик — начать можно с книги Братко "Программирование на языке Пролог для искусственного интеллекта", а затем переходить к книгам на английском языке, перечисленным выше.

Заключение

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


1. Очень часто они переводились силами энтузиастов функционального программирования.

2. Тут необходимо отметить серию учебников и учебных курсов проекта Интуит.

3. Хочется отметить, что ведется работа над версией курса лекций, адаптированной для языка OCaml, который является развитием Caml Light, но не полностью совместим с ним.

4. Это, к сожалению, беда многих советских и российских учебников.

5. Продолжение — continutation.

Last change: 04.09.2017 15:41

blog comments powered by Disqus