Як познайомити свою команду з функціональним стилем кодування?


10

У мене ситуація, коли більшість людей у ​​моїй групі походять з об'єктно-орієнтованого фону програмування і мало розуміють функціональне програмування. Навіть основи, як закриття.

Будь-які пропозиції щодо того, що може бути хорошим способом познайомити їх з функціональним стилем кодування? Багато кодування, яке ми робимо, можна скоротити, якщо робити функціональний спосіб для наших конкретних випадків.

Я вже дав пару презентацій про функціональні та кодуючі парадигми. На жаль, ми не використовуємо належну функціональну мову програмування, як Haskell (в основному застарілий код знаходиться на C, C ++, Java), тому нам потрібно робити все, що там є.


11
Перш ніж запитати як, запитайте чому . Ви працюєте над проблемами, які можна легше вирішити у функціональному стилі, ніж об’єктно-орієнтований стиль? OO працює дуже добре для багатьох речей (тому це було настільки успішно) і не так добре для інших. З вашого запитання, це просто звучить на зразок "Я хочу робити наш код у функціональному стилі тільки тому, що я вважаю, що функціональне програмування це здорово, навіть якщо у нас немає мови, яка це підтримує, і команда не знає, як зробити це!" Це дуже погана ідея. Пам'ятайте, правильний інструмент для правильної роботи.
Мейсон Уілер

2
@MasonWheeler: Я знаю, для чого нам потрібен функціонал. Не в курсі мови місяця річ. Занадто стара для цього.
Fanatic23

1
Припустимо, хтось знає Haskell, чи можете ви змусити його працювати у вашій системі?
JeffO

4
Схоже, що функціональне програмування вирішує проблему, яку не має ваша команда. Вони знають, як кодувати C, C ++ Java, які не є природними кандидатами для функціонального програмування (реалізація закриттів є просто жахливою на цих мовах).
Джеймс Андерсон

Відповіді:


8

Лука Болоньєзе зробив цю фантастичну презентацію, де представив функціональне програмування (представляти F #), використовуючи приклад кави, який справді чудовий і багато допоміг мені познайомити функціональне програмування з друзями та колегами.

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


ця презентація фантастична .. тим більше, що її дарує вампір !! ЛОЛ!! j / k .. хлопці отримали харизму ..
hanzolo

7

Чи кодують ваші колеги поза роботою?

Зважаючи на те, що ви не робите жодної ПП у вашій компанії, то примусити кого-небудь вивчити нову мову / парадигму, коли вони нічого не роблять за межами своїх прямих робочих завдань, буде майже неможливим.

Якщо вони є, то знайдіть цікаві проекти, які їм сподобаються, пов'язані з функціональним програмуванням, і покажіть їх. Ви не в змозі призначити зміни, тож вам доведеться сіяти насіння, якщо це буде цікаво на особистому рівні. Ось як мене з цим познайомив - найкращий друг, який зі мною працює.

Крім цього, більшість людей пишуть власні інструменти, щоб полегшити невеликі завдання. Спробуйте написати деякі з них функціональною мовою. Кожен, хто хоче побачити код, буде підданий (сподіваємось / можливо) красі коду і, ймовірно, запитає вас про це, коли це з'явиться. Це можливість продати ідею.

Пам’ятайте, є функціональні мови, які працюватимуть на вашому стеці (масштабування / закриття обох працює на JVM). Це не "чисто функціонально", як Haskell, але це хороший старт у тривалу дорогу.

Якщо у вас є контроль над наймом, наймайте людей, які мають певний функціональний досвід (або принаймні зацікавлені у функціональному програмуванні).

І нарешті ... ви можете опинитися в неправильній компанії, якщо ви захоплені написанням функціонального коду. Ви не збираєтесь змінювати те, як вся ваша компанія пише програмне забезпечення - особливо якщо вони заробляють гроші, а ще більше, особливо не за досить короткий проміжок часу.

Це все про продаж його дияволам ... управління - це зовсім інший звір.


2

Перехід від імперативного до чистого функціонального програмування - це велика зміна з крутою кривою навчання. Я б запропонував спробувати менш швидкий перехід, і в такому випадку у вас є багато варіантів. Наприклад, Python підтримує розуміння списків та генераторні вирази , Ruby підтримує функції вищого порядку за допомогою блоків коду тощо. Оскільки ви згадали Java, якщо всі ви маєте фон Java та хочете повну функціональну підтримку програмування, ви можете спробувати Scala .


2

Найміть (або змусьте найняти начальника) функціонального програміста

Врешті-решт, це піде на решту вашої команди.

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


2

Якщо функціональне програмування дійсно полегшить життя у ваших випадках, я пропоную виділити один такий випадок і продемонструвати вашим колегам рівнозначні реалізації як в OO, так і в функціональних мовах.

Якщо різниця в складності настільки ж широка, як ви кажете, то це має говорити само за себе.


2

+1 до faif для згадування Скали: це почалося як коментар до цієї відповіді, але стало занадто великим ...

Мені хотілося дізнатися щось про функціональне програмування (походить від C / C ++, деяких Python та іржавої Java); Я спробував пірнати на глибокому кінці з Ocaml, а потім Haskell та Just Not Not Get It. Тоді я спробував Scala і виявив, що я дозволяю почати використовувати функціональні речі в комфортному середовищі OOP / Java-ey, де я міг легко повернутися до звичного імперативного стилю, коли функціональний підхід ухилявся від мене. Дехто може скаржитися на "багатопарадигму", "гібридну" природу мови, означає, що ти ніколи не змушений тягнути себе до "чистого функціоналу", але я б сказав, що це означає, що ти можеш бути прагматичним щодо речей і знаєш, що ти будеш вміти легко робити справжні речі якось, коли потрібно.

Через пару років (і пізніше 200+ рішень проекту Euler Scala у Scala) зустріч з функціоналом безумовно вплинула на мій Python (набагато більше використання карт, фільтрів, зменшення, лямбда, itertools, списків розуміння та передачі функцій навколо, ніж я ' я коли-небудь замислювався раніше) і в меншій мірі C ++: можливо, трохи більше спроб використовувати функціональні відстеження STL, але головний вплив - мені набагато зручніше використовувати карту TBB / зменшити конструкції, і дуже подобається, як використання незмінюваності може приборкати складність у багатопотоковому коді.

Тож особисто, якби я був тобою, я би робив справу про те, щоб внести Scala до свого розвитку світу Java, бажано, показавши кілька прикладів того, щоб надзвичайно щось спростити і отримати корисні вимоги. Що буде далі - все, що стосується "відстоювання" нових ідей та рушійних змін ... що здається, це може бути набагато більшою проблемою.


1
@timeday Дуже добре сказано. Я хлопці з Java / OO. Я підхопив Скалу рік тому. І мені було досить складно вивчити FP. Я займаюся трохи за раз і сиджу з цим. Я не намагаюся все це отримати одразу.
хаотична рівновага

1

Я хотів би порекомендувати поступовий підхід із використанням Scala. І я б рекомендував почати з книги творця Scala "Програмування в Scala, 2-е видання" . Ця книга є FANTASTIC тим, що повільно представляє одне (FP) функціональне програмування за допомогою Scala. І показуючи рух у напрямку ФП, він не відкидає ОО. Насправді це використовує це. Я зараз роблю свій другий прохід через це.

В основному, Scala дозволяє робити Java / OO "без крапки з комою". І тоді можна спробувати трохи FP без необхідності ходити цілу свиню. Наприклад, навчаючи себе робити FP, я, як правило, зосереджуюсь на референтній прозорості на рівні методу класу, але нехай у моїх методів є стільки варіацій, незмінності та імперативності, як це потрібно для мене, щоб зробити перший пропуск на реалізація. Потім я зосереджуюсь на повільній переробці кожного методу, щоб перемістити його до чистого ПП. А також я використовую дочірній сайт для StackOverflow, CodeReview, щоб отримати допомогу в моєму переході до мислення та мислення. Ось приклад нещодавнього допису, який я зробив, роблячи це дуже.

У будь-якому випадку, удачі у вашій FP-поїздці. :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.