Size: a a a

Архитектура ИТ-решений

2021 February 28

I

Ivan in Архитектура ИТ-решений
elendili
Спасибо за развернутый комментарий)

Может, найдется ссылка на статью B. Meyer?
По ключевым словами находятся короткие статьи с упоминанием его книги на тысячу страниц “Object Oriented Software Construction”. В этих статьях упомянуто, что методы изменяющие состояние не должны возвращать результат, а функции, возвращающие результат, не должны изменять состояние. Полновесного рассказа о том, как это отражается на ФП vs OOP не видно (хотя направление, мне кажется, понятно).
- http://se.ethz.ch/~meyer/publications/functional/meyer_functional_oo.pdf

А тут на русском есть интервью с ним, где он тоже на эту тему говорит:
- https://sergeyteplyakov.blogspot.com/2014/05/interview-with-bertrand-meyer.html
источник

I

Ivan in Архитектура ИТ-решений
Ivan
- http://se.ethz.ch/~meyer/publications/functional/meyer_functional_oo.pdf

А тут на русском есть интервью с ним, где он тоже на эту тему говорит:
- https://sergeyteplyakov.blogspot.com/2014/05/interview-with-bertrand-meyer.html
По последней ссылке там, по всей видимости, опечатка в статье. Вероятно, имелась ввиду книга https://www.amazon.com/Beautiful-Architecture-Leading-Thinkers-Software/dp/059651798X , а не идеальная архитектура.
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Ivan
ТДД - это больше о дизайне, а не о тестировании. Есть у Kent Beck слова, где он говорит о том, что TDD - это не о тестировании. Тесты просто позволяют фокусироваться на одной обязанности, осуществлять поиск решения путем обобщения и триангуляции. Это снижает нагрузку на мозг и позволяет быстрей найти удачное решение.

В сериале "Is TDD Dead?" Kent Beck говорит о том, что 100%-е покрытие и не требуется. Покрытие должно быть достаточным для обретения уверенности. Более того, тесты должны облегчать рефакторинг, а не сковывать его, поэтому тесты не должны покрывать реализацию, иначе они превратятся в оковы.

По поводу парадигм - разные парадигмы имеют разные превосходства в разных контекстах. Есть у B.Meyer замечательная статья, в которой он пишет, что используя принцип CQS мы обретаем возможность пользоваться превосходствами обоих парадигм ситуативно, в зависимости от контекста, т.е. OOP отлично сочетается с FP.

Кстати, рассвет TDD пришелся на этап становления OOP, причем, в динамических языках. Возросший уровень косвенности и отсутствие современных статических анализаторов затрудняли навигацию в коде и разработку без TDD. Я застал времена, когда нужно было в консоли емакса объявлять переменную, чтобы её тип подхватился в буфере редактирования файла с Python-кодом. И я был одним из тех, кто добавлял в emacs типизацию (вернее, Type Hinting) для Python, в то время еще через docstrings. Это уже позже в Python появилась типизация через аннотации.

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

По личному опыту могу сказать, что при использовании TDD я отладчиком практически не пользовался. Да и вообще, если есть юнит-тесты, а не только ТДД, то потребность в отладчике сильно сокращается, и это хорошо, потому что время на написание тестов можно прогнозировать, в отличии от отладки. Кстати, в большинстве случаев время на написание тестов полностью перекрывается повышением темпов разработки, т.е. разработка с тестами получается даже быстрей. Пальцы работают больше, а голова меньше. Происходит просто перераспределение составляющих разработки.
Иван, спасибо за комментарий
источник

I

Ivan in Архитектура ИТ-решений
Gennadiy Kruglov
Иван, спасибо за комментарий
Any time)
источник

AK

Andrey Kuzmin in Архитектура ИТ-решений
Хай пиплы,  интересует свимлейн взаимодействия яндекс-розетки и прочих систем при реализации варианта использования - включение/выключение розетки по времени. Кто может поделиться?
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Ivan
ТДД - это больше о дизайне, а не о тестировании. Есть у Kent Beck слова, где он говорит о том, что TDD - это не о тестировании. Тесты просто позволяют фокусироваться на одной обязанности, осуществлять поиск решения путем обобщения и триангуляции. Это снижает нагрузку на мозг и позволяет быстрей найти удачное решение.

В сериале "Is TDD Dead?" Kent Beck говорит о том, что 100%-е покрытие и не требуется. Покрытие должно быть достаточным для обретения уверенности. Более того, тесты должны облегчать рефакторинг, а не сковывать его, поэтому тесты не должны покрывать реализацию, иначе они превратятся в оковы.

По поводу парадигм - разные парадигмы имеют разные превосходства в разных контекстах. Есть у B.Meyer замечательная статья, в которой он пишет, что используя принцип CQS мы обретаем возможность пользоваться превосходствами обоих парадигм ситуативно, в зависимости от контекста, т.е. OOP отлично сочетается с FP.

Кстати, рассвет TDD пришелся на этап становления OOP, причем, в динамических языках. Возросший уровень косвенности и отсутствие современных статических анализаторов затрудняли навигацию в коде и разработку без TDD. Я застал времена, когда нужно было в консоли емакса объявлять переменную, чтобы её тип подхватился в буфере редактирования файла с Python-кодом. И я был одним из тех, кто добавлял в emacs типизацию (вернее, Type Hinting) для Python, в то время еще через docstrings. Это уже позже в Python появилась типизация через аннотации.

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

По личному опыту могу сказать, что при использовании TDD я отладчиком практически не пользовался. Да и вообще, если есть юнит-тесты, а не только ТДД, то потребность в отладчике сильно сокращается, и это хорошо, потому что время на написание тестов можно прогнозировать, в отличии от отладки. Кстати, в большинстве случаев время на написание тестов полностью перекрывается повышением темпов разработки, т.е. разработка с тестами получается даже быстрей. Пальцы работают больше, а голова меньше. Происходит просто перераспределение составляющих разработки.
Лет 15 назад с научным руководителем рассуждали о недостатках ООП

Пришли к выводу, что в ООП проигнорирована объективность функциональности

Функция уборки существует независимо от того, есть уборщица в организации или нет

В ООП функции не могли существовать как самодостаточные объекты

Теперь всё изменилось. И конечно здорово, что в рамках одного ЯП общего назначения можно комбинировать парадигмы

То есть вопрос должен ставиться не как противопоставление парадигм, а наверно где границы их применимости (для каких задач удобно)
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Вот я для себя решил, что для расчётных задач функциональщина точно удобна.

Также удобна для работы со структурами данных.

Потому что естественным образом можно избегать сайд эффектов и нет необходимости моделировать предметную область
источник

r

rokrbek in Архитектура ИТ-решений
Gennadiy Kruglov
Лет 15 назад с научным руководителем рассуждали о недостатках ООП

Пришли к выводу, что в ООП проигнорирована объективность функциональности

Функция уборки существует независимо от того, есть уборщица в организации или нет

В ООП функции не могли существовать как самодостаточные объекты

Теперь всё изменилось. И конечно здорово, что в рамках одного ЯП общего назначения можно комбинировать парадигмы

То есть вопрос должен ставиться не как противопоставление парадигм, а наверно где границы их применимости (для каких задач удобно)
Может ли существовать функция уборки, если нет не только уборщицы, но и организации?
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
rokrbek
Может ли существовать функция уборки, если нет не только уборщицы, но и организации?
Идея функции уборки (по Аристотелю), да. Так же как идея Организации
источник

F

Fagor in Архитектура ИТ-решений
А почему нет? Преждевременная оптимизация - зло. А уборка может и существовать без явного понимания акторов. В общем я лучше остановлюсь, а то понесет меня. Но в целом не кодом едины, и не сознанием группы, да и абсолют сущетсвует пока, иначе физика разваливается.
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Когда уборщица подписывает трудовой договор организация наделяет её функцией уборки
источник

S

Sdobridnuk in Архитектура ИТ-решений
Да, может. Не факт конечно что она не редуцируется в отсутствие титульного бенефициара А ещё интересный кейс в цифровой экомики, отсутствие обьектности-субьектности во все большем числе транзакций. It work, а зачем, уже забыли или неинтересно
источник

e

elendili in Архитектура ИТ-решений
Sdobridnuk
Да, может. Не факт конечно что она не редуцируется в отсутствие титульного бенефициара А ещё интересный кейс в цифровой экомики, отсутствие обьектности-субьектности во все большем числе транзакций. It work, а зачем, уже забыли или неинтересно
>> “А ещё интересный кейс в цифровой экомики, отсутствие обьектности-субьектности во все большем числе транзакций”

Можете раскрыть тему? о чем речь)
источник

S

Sdobridnuk in Архитектура ИТ-решений
Уборщица это элемент цепочки разделения труда. При другом разделении убираться может хозяин, продавец или даже покупатель (поел - убери поднос за собой) в общепите
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Sdobridnuk
Уборщица это элемент цепочки разделения труда. При другом разделении убираться может хозяин, продавец или даже покупатель (поел - убери поднос за собой) в общепите
Какое это отношение имеет к вопросу обсуждения парадигм?
источник

S

Sdobridnuk in Архитектура ИТ-решений
Речь о создании технологий ради технологий.
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Так или иначе, в объектно-ориентированных ЯП не хватало функций как "полноценных граждан". Интуитивно многие ощущали объективность функциональности. Теперь ситуация исправлена.

Теперь ЯП комбинированные. Раз они комбинированные, значит можно комбинировать. Чтобы эффективно комбинировать, полезно понимать границы применимости
источник

S

Sdobridnuk in Архитектура ИТ-решений
Создание парадигмы, тоже шаг в системе разделения труда, и соответственно % разделения конечного. дохода в цепочке участников. По мере изменения технологического укладка в первую очередь меняется ЦРТ. Например в 18 веке умные мысли мог придумывать только философ или богослов, а плебс имел право их только цитировать. Светский разговор выглядел довольно забавно, стороны троллили друг друга, кто больше к месту цитат вспомнит. В некоторых религия возведён в абсолют даже толкование толкования. Если не находишься в особом 'сертифицированном' трансцедентном состоянии, то это запрещено и получишь ярлык еретика
источник

e

elendili in Архитектура ИТ-решений
Sdobridnuk
Создание парадигмы, тоже шаг в системе разделения труда, и соответственно % разделения конечного. дохода в цепочке участников. По мере изменения технологического укладка в первую очередь меняется ЦРТ. Например в 18 веке умные мысли мог придумывать только философ или богослов, а плебс имел право их только цитировать. Светский разговор выглядел довольно забавно, стороны троллили друг друга, кто больше к месту цитат вспомнит. В некоторых религия возведён в абсолют даже толкование толкования. Если не находишься в особом 'сертифицированном' трансцедентном состоянии, то это запрещено и получишь ярлык еретика
ЦРТ?
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
elendili
ЦРТ?
Троллинг в чистом виде. Задача - "убить" дискуссию, увести в сторону
источник