Измените мое мышление при подготовке к функциональному программированию

9

При переходе к функциональному стилю программирования после процедурного и ООП, что мне нужно знать заранее об «этом новом способе мышления»?

Как вы готовитесь к погружению в мире FP и получаете его впервые?

Какие основы нужно выучить и вначале разобраться?

JohnDoDo
источник
2
Это слишком общее, имхо. Просто начни читать! Большинство книг и руководств по функциональному программированию в наши дни начинаются с ответов на ваш вопрос.
devmiles.com
Попробуйте, а затем задайте вопрос, если вы застряли на чем-то
Том Сквайр
@ Владимир Володин: Это было бы хорошо, но это не обязательно для каждой книги. Можете ли вы порекомендовать несколько хороших (желательно языковых)?
JohnDoDo
Вам не нужно погружаться . Вы можете попробовать лямбда-выражение на языке ООП, таком как c #, чтобы сгладить переход от ООП к FP.
TomCaps
4
Я думаю, что у вас есть это задом наперед. Попробуйте функциональное программирование, и ваш образ мышления изменится.
Кевин Клайн

Ответы:

10

Получите копию «Структура и интерпретация компьютерных программ» и проработайте первую главу «Построение абстракций с помощью процедур». Лучшее введение в функциональное программирование, которое я когда-либо имел.

РЕДАКТИРОВАТЬ: Если вы хотите что-то более сравнительное, попробуйте «Семь языков за семь недель» (отказ от ответственности: эта книга все еще в моем списке TODO).

Док Браун
источник
6

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

Joonas Pulakka
источник
4

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

Кевин Клайн
источник
3

FP основан на исчислении Ламдба. Вы должны знать это. Это хорошая отправная точка. Функции это все. Там нет понятия государства (хотя вы можете подделать его на более высоком уровне).

В ООП,

а = 1 а = а + 1

принято Не так в FP. Вы просто не можете присвоить переменной другое значение. Если вы хотите изучать FP в долгосрочной перспективе, изучите Haskell. Это самая чистая версия FP, и она довольно сложная (я только начал ее изучать), но все же стоит ее изучить.

Введение в функциональное программирование дает вам общее представление о том, что такое FP.

Два предостережения, хотя

  1. Если вы хотите изучать FP для рабочих мест, то там не так много вакансий. Процедурные и ООП все еще управляют рынком труда. Но FP может помочь вам в поиске новых способов решения проблемы.
  2. Компиляторы FP не слишком быстрые. Поскольку FP больше заботится о решении проблемы, вы не можете ожидать скорость C. Но все же вы можете выдать инструкции компилятору (в Haskell), чтобы ускорить процесс выполнения. Компромисс в том, что вы получаете много времени, сосредоточившись на программе, а не на пожарных ошибках.
Ubermensch
источник
8
«FP основан на исчислении lamdba. Вы должны знать это». Нет, ты не Знание лямбда-исчисления не обязательно для понимания функционального программирования, а для понимания императивного программирования необходимо знание машин Тьюринга (или сборки).
sepp2k
@ sepp2k Чтобы добиться успеха в FP с долгосрочной целью, я искренне верю, что изучение лямбда-исчисления необходимо. Вы можете изучать его без лямбда-исчисления, но изучение этого сделает вас лучше в FP.
Ubermensch
2
Конечно, в FP есть только то, что это состояние обычно неизменяемое, также я не уверен, что я согласен с утверждением о том, что компиляторы медленные
jk.
@jk. Конечно, у них есть состояние, но не оно в виде ОО (состояния могут быть включены в функции или как шаблоны соответствия и более тонкими способами). И неизменное состояние означает, что у вас есть только одно состояние. Вот почему функция всегда должна возвращать одно и то же значение. Что касается компиляторов, я не думаю, что они могут соответствовать C / C ++ с точки зрения чистой скорости, поскольку компилятор позаботится о шагах, необходимых для вычисления результата, вместо того, чтобы указывать порядок. FP имеет самое большое преимущество в снижении затрат на разработку и параллельных вычислений, а не просто в скорости процессора.
Ubermensch
3

Я стараюсь изо всех сил запомнить следующую мантру:

Данные в -> Преобразование данных -> Данные в

или

TransformData (данные в) -> данные в

Темная ночь
источник
1
Это должно быть TransformData (DataIn) -> DataOut
Ubermensch
:) как матра «Ввод данных, преобразование данных, выход данных» проще сказать: «Преобразование данных, открывающая скобка, ввод данных, закрывающая скобка, выход данных» Я шучу, я согласен с вами.
Темная ночь
Это просто дружеский комментарий, приятель. Спасибо за ответ.
Ubermensch
Я знаю, я просто шутил с тобой, без обид, на самом деле, думаю, я обновлю свою матру.
Темная ночь
Человек твой набор навыков довольно большой.
Ubermensch