В связи со вчерашней дискуссией всплыла интересная тема. В принципе, надо бы спросить гуру функционального подхода, вроде
juan_gandhi, но вопрос, скорее, на общую сообразительность.
Как кудесники монад и эндофункторов объясняют нормальным людям работу их софта? «Иди читай код, болван!» работает только на программистах. Да и то, только на тех, которые не умеют правильно посылать.
Устаревшие методы позовляют нормально коммуницировать если не с обитателями отдела маркетинга, то с людьми, способными думать.
- Идентификатор заказа состоит из полей Число, Время, Источник Запроса, Путь Получения и Уникальный Номер. Для таблицы мы группируем записи по времени с интервалом час и подсчитываем среднее для Пути Получения.
- Менеджер Задач ожидает прихода сигналов. Если сигнал А приходит раньше Б, выполнение продолжается. Если Б не приходит в течении заданного промежутка времени, ситсема снова посылает запрос. Если Б приходит раньше А, Менеджер Задач выдаёт ошибку и переходит в состояние ожидания перезапуска.
- Когда пользователь нажимает на кнопку, окно получает фокус ввода и меняет цвет на синий.
...
Примеры не очень красивые, но для демонстрации принципа сойдут и такие. Главное, всё, что происходит в софте, можно пояснить на простом человеческом языке, причём терминами, понятными специалистами в пердметной области.
Если что-то сложное для простого текста, то это можно нарисовать. И поток управления, и структуру классов, и пути ветвления в зависимости от различных условий для бизнес-процессов.
Чтобы не усложнять задачу, представим, что мы руководим группой Очень Крутых функциональных программистов, которые сделали Крутую Программу. Теперь мы сидим в переговорной комнате вместе с заказчиками и пытаемся всеми доступными средствами объяснить, что же такое замечательное они от нас получат. При этом, заказчики должны во-первых, понять, а во-вторых, заметить те мелочи, которые не соответствуют требованиям и особенностям конкретного применения.
Как кудесники монад и эндофункторов объясняют нормальным людям работу их софта? «Иди читай код, болван!» работает только на программистах. Да и то, только на тех, которые не умеют правильно посылать.
Устаревшие методы позовляют нормально коммуницировать если не с обитателями отдела маркетинга, то с людьми, способными думать.
- Идентификатор заказа состоит из полей Число, Время, Источник Запроса, Путь Получения и Уникальный Номер. Для таблицы мы группируем записи по времени с интервалом час и подсчитываем среднее для Пути Получения.
- Менеджер Задач ожидает прихода сигналов. Если сигнал А приходит раньше Б, выполнение продолжается. Если Б не приходит в течении заданного промежутка времени, ситсема снова посылает запрос. Если Б приходит раньше А, Менеджер Задач выдаёт ошибку и переходит в состояние ожидания перезапуска.
- Когда пользователь нажимает на кнопку, окно получает фокус ввода и меняет цвет на синий.
...
Примеры не очень красивые, но для демонстрации принципа сойдут и такие. Главное, всё, что происходит в софте, можно пояснить на простом человеческом языке, причём терминами, понятными специалистами в пердметной области.
Если что-то сложное для простого текста, то это можно нарисовать. И поток управления, и структуру классов, и пути ветвления в зависимости от различных условий для бизнес-процессов.
Чтобы не усложнять задачу, представим, что мы руководим группой Очень Крутых функциональных программистов, которые сделали Крутую Программу. Теперь мы сидим в переговорной комнате вместе с заказчиками и пытаемся всеми доступными средствами объяснить, что же такое замечательное они от нас получат. При этом, заказчики должны во-первых, понять, а во-вторых, заметить те мелочи, которые не соответствуют требованиям и особенностям конкретного применения.
no subject
Date: 2016-12-07 10:53 am (UTC)Но по-моему так же и объясняют - "когда пользователь нажимает на кнопку, окно получает фокус ввода и меняет цвет на синий". Логика программы остается такой же, просто в коде она выражена другими идиомами.
Ну 60 лет назад заметили, что при работе с массивами очень часто возникает паттерн "изменить индекс, и если меньше N, то поделать дела, если нет, остановиться" и оформили его в виде конструкции for.
no subject
Date: 2016-12-07 11:52 am (UTC)"Всё сделано точно также, только через жопу"
Вопрос был именно про логику выполнения в коде. Потому что у программистов часто программа делает не то, что они думают, она делает.
no subject
Date: 2016-12-07 11:58 am (UTC)В этом отношении т-щ Паронджанов с его "иконами" и прочей примитивной визуаплизацией прямой алгоритмики выступает просто аватором божества. Уже потому что прямая алгоритмика обычно лучше воспринимается ЛПР. А уж в графической форме тем более.
no subject
Date: 2016-12-07 12:14 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2016-12-07 01:20 pm (UTC)no subject
Date: 2016-12-07 12:24 pm (UTC)В представленной ситуации придется умалчивать о функциональной специфике, переводя ее на человеческий.
Какая-нибудь проверка на непустоту результата пересечения двух множеств будет озвучена как "если А входит в Б"
no subject
Date: 2016-12-07 12:29 pm (UTC)no subject
Date: 2016-12-07 12:41 pm (UTC)Просто (к вопросу о зазнайках) именно в области ФП зазнаек сегодня фатально много. Подавляющее большинство.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:Вот. Именно.
Date: 2016-12-07 01:08 pm (UTC)"Мэнеджэры... ну, тупые-е-е!".
Заказчики? А, это те кто не хотят платить мнохо денех на развитие ФП.
Конечные пользователи... а это вообще кто такие?
И вообще... если вы не знаете что такое "монада", хотя они везде... с таким недоумком даже разговаривать не о чем. %)))
Re: Вот. Именно.
Date: 2016-12-07 01:12 pm (UTC)no subject
Date: 2016-12-07 01:55 pm (UTC)Даже в OOП это проблема, а в ФП максимум делают проверку входных данных.
А обратная задача - по ФП коду понять требования практически не реализуемая, уровень абстракций убивает все конкретику напрочь.
no subject
Date: 2016-12-07 02:24 pm (UTC)no subject
Date: 2016-12-07 03:16 pm (UTC)no subject
Date: 2016-12-07 02:20 pm (UTC)Для этого же и пишут разные DSL-и. Главное чтобы был адекватный начальник, который не позволит скатиться ему в веселые мап-редьюсы, а будет держать в скучнычных императивных рамках
no subject
Date: 2016-12-07 03:59 pm (UTC)no subject
Date: 2016-12-07 04:06 pm (UTC)no subject
Date: 2016-12-07 05:37 pm (UTC)Одно плохо - мало кто это все читает :-(
no subject
Date: 2016-12-07 06:24 pm (UTC)no subject
Date: 2016-12-08 02:33 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From: (Anonymous) - Date: 2018-11-09 10:30 am (UTC) - Expandno subject
Date: 2016-12-08 06:08 pm (UTC)Исходя из предположения, что заказчики не цепляются к синтаксису и вопросам вида "почему вы не взяли Java, ведь все пишут на ней), то я описываю работу программы так же, как она декомпозируется на функции - тут мы грузим из SQL данные в список хэшмапов, тут их группируем-фильтруем-объединяем, тут добавляем параметры. Рисуется это в виде последовательности преобразований над наборами данных.
В принципе, я вместе с бухгалтерией их отчеты так и проектировал. переводя то что они рассказывают - в наборы правил в коде.
Меня больше интересует вопрос - что именно хотят узнать заказчики, заглядывая в кишки программы? Обычно границы применимости и соответствие ТЗ должны бизнес-аналитики записывать и прочие тестеры проверять, зачем результат потом описывать заказчику, если он ТЗ соответствует?
no subject
Date: 2016-12-08 07:10 pm (UTC)Насчёт же магических бизнес-аналитиков... Во-первых, такие звери в природе не водятся, а во-вторых, заказчиком вполне может быть человек, способный поставить задачу и разобраться в софте.
no subject
Date: 2016-12-08 07:23 pm (UTC)Если подобная заменяемость - это важная фича софта, то да, можно объяснить, что мы используем некий обобщенный алгоритм, меня его конкретные реализации.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2016-12-10 02:33 am (UTC)Монады и любые другие высокоуровневые абстракции у меня там внутре в конце концов всегда для структурирования кода и прозрачной инфраструктуры хендлинга недефолтных (или дефолтных, но чрезвычайно сложных) сценариев. Специалисту по программированию постараюсь объяснить как есть, чтобы было понятно как это потом развивать, модифицировать и сопровождать, и почему именно такой способ организации кода позволяет существенно уменьшить количество неудобосопровождаемого кода (конечно, в ущерб низкому порогу вхождения, но мы не поп-музыкой занимаемся, чтобы низкий порог вхождения ставить превыше всего). Всем остальным это не нужно и, как правило, не интересно.
no subject
Date: 2016-12-10 10:57 am (UTC)Тогда это свистки и колокольчики, которые надо выкидывать, потому что они будут мешать дизайну высокого уровня.
инфраструктуры хендлинга недефолтных (или дефолтных, но чрезвычайно сложных) сценариев.
Пардон, это был человеческий русский? :-D
Фигня в том, что именно в этих преобразованиях из человеческий в "способ организации кода" и прячутся самые мерзкие ошибки.
no subject
Date: 2016-12-10 11:34 am (UTC)> Пардон, это был человеческий русский? :-D
Нет, это было объяснение тому, кого я счёл за специалиста по программированию.
> Фигня в том, что именно в этих преобразованиях из человеческий в "способ организации кода" и прячутся самые мерзкие ошибки.
Разумеется. Потому что в преобразовании из “человеческий” в “программа” спрятана вся нетривиальная работа программиста. За пределами этого только ремесленная часть на стороне кода и коммуникативная часть, на стороне заказчика. Вопрос не в том переводить ли с человеческого на тот или иной формальный, а в том, на какой и как. Мне, если честно, глубоко непонятно, почему именно вы против какого-то одного конкретного класса абстракций. Вам же не приходит в голову критиковать меня за то, что когда я пишу код для регулирования подачи смазки, я пользуюсь бесовскими методом Чебышева и теоремой Хана-Банаха? Бесовское использование циклов вместо православных меток тоже вроде как вам не претит, а от слова функтор почему-то корёжит, будто это что-то существенно другое. Странно, ей богу.
(no subject)
From:(no subject)
From:(no subject)
From: