Я в основному погоджуюся з відповіддю FrustratedWithFormsDesign , але ви також запитували, як вивчення нової парадигми допомагає розвивати навички. Я можу навести пару прикладів із власного досвіду.
Оскільки я вивчаю функціональне програмування, я набагато усвідомлюю, з якими поняттями, з якими я працюю, більш природно розглядаються як "об'єкти" (як правило, де мутація має сенс), а які більш природно розглядаються як незмінні "цінності" (я думаю, є важлива відмінність , торкаючись того, де OO має сенс порівняно, коли FP має сенс, але це лише моя думка).
Я помічаю, де мій код включає побічні ефекти, і я обережніше виділяти ці місця, роблячи більшість своїх функцій "чистими" функціями. Це значно покращує перевірку мого OO-коду.
Я більше усвідомлюю цикли у своєму представленні даних. (Наприклад, я не думаю, що ви можете написати функцію для перетворення зв'язаного списку в подвійно пов'язаний список в Haskell, тому ви помічаєте цикли трохи більше на цій мові.) Уникнення циклів зменшує кількість синхронізації вам потрібно виконати, щоб ваші структури даних були внутрішньо послідовними, полегшуючи навантаження на обмін цими структурами між потоками.
Я швидше покладаюся на рекурсію (рекурсивні циклічні конструкції схеми - речі краси). Дійкстра торкнувся важливості цього в Примітках про структуроване програмування - рекурсивні алгоритми дуже безпосередньо вказують на математичну індукцію, що, на його думку, є єдиним засобом інтелектуально довести наші петлі правильними. (Я не припускаю, що ми повинні доводити свій код правильним, але що чим простіше нам це зробити, тим більше шансів на те, що наш код правильний.)
Я швидше використовую функції вищого порядку. Доповідь Джона Х'юза, чому питання функціонального програмування має значення . Це підкреслює композиційність, яку ви отримуєте від використання функціональних методів програмування, функцій вищого порядку, що відіграють головну роль.
Крім того, що стосується відповіді Jetti , ви дізнаєтесь, що багато нових ідей ПП включено в новіші мови OO. І Ruby, і Python забезпечують багато функцій вищого порядку, я чув, як LINQ описується як спроба ввести підтримку монадних розумінь у C #, навіть у C ++ зараз є лямбда-вирази.