Что если я вам скажу, что если вы пишите ООП код в котором есть синус, или косинус, или любое арифметическое действие, то вы пишите в функциональном стиле? Или если я скажу, что функциональные языки позволяющие использовать полиморфизм используют объектно ориентированный стиль?
Звучит как минимум странно, потому что ни ФП, ни ООП не обладают монополией на использование тех или иных инструментов.
Чуть логичнее выглядит рекурсия, тут, наверное, большее количество согласится с тем, что рекурсия - это из мира ФП, хотя это тоже не так. Рекурсия все так же - математический термин. Если у вас в ЯП есть возможность вызвать любую функцию, то это значит, что себя вызвать тоже можно.
Вот только эта возможность в ООП языках не особо нужна, так как есть циклы. А в ФП языках это вещь без которой не обходится ни одна сколько-нибудь серьезная программа.
В любом случае мы видим, что в языках программирования заимствование из математики - это нормальный прием. Причем математика используется как источник метафор, а не источник "реализации". Потому что есть одна вещь, которая сильно отличает математику от информатики - ресурсы. В математике любая рекурсия ничего не стоит, и может выполняться бесконечно, в информатике так сделать нельзя.
Поэтому математические метафоры в информатике это не 100% матчинаг на первоначальную математическую модель.
Моя мысль заключается в том, что заимствование метафор из математики не означает использования функциональной парадигмы, потому что реализация одних и тех же метафор в ФП и ООП будет разной.
Я думаю, многие согласятся с логикой рассуждения, которую я привел выше. Но все сломается когда я скажу "монады - это не признак ФП стиля". Тут у той части аудитории, которая сильна в ФП, бомбанет не на шутку. Ведь нам все уши прожужжали, что монады - это достижение ФП.
На самом деле, понятие "монады" пришло из теории категории, так же как и другие метафоры математики, монады в ФП и ООП используются по-разному. В ФП без монад невозможно добавить императивное поведение, отказаться от функциональных компазиций в сторону цепочки вызовов. Т.е. монады, так же как и рекурсии в ФП - это основной строительный блок, без него хорошей программы не построишь. Поэтому в ФП вокруг монад построен здоровенный кусок теории.
Что же с монадами произошло в ООП? А ничего особенного, они стали основой для построения интерфейсов с высокой уровнем абстракции. В ООП основой является понятие "объект", из понятие объекта вытекает понятие "класс", а класс без реализации (чистая абстракция) - это интерфейс. Т.е. если мы пишем программу с интерфейсами, классами и объектами, да еще в императивном стиле, то это ООП, самое что ни на есть обычное ООП.
Как я уже сказал, монады в ООП стали просто интерфейсами (т.е. метафора приняла ограничения парадигмы), причем интерфейсами которые ограничивают реализацию. Такие вещи принято называть "паттерн", т.е. мы говорим не только какие методы должны быть в классе, чтобы он реализовывал интерфейс монады, но и ограничения, которая являются монаидическими законами.
Причем, как паттерн монады довольно высокого уровня абстракции, потому что из этого паттерна можно построить более детальные паттерны. Например, итератор - это монада, но с более "осмысленным" названием.
Чем хороши монады? Основное их свойство - не нарушать цепочки вызовов, т.е. зная что ваш класс реализует интерфейс монады вы можете с высокой долей уверенности сказать, что он будет корректно вести себя в цепочках вызовов.
Является ли это ФП стилем? На мой взгляд нет. На самом деле интерфейс монады состоит всего из двух методов, причем к ним можно прийти вполне интуитивно, как было сделано в том же итераторе. При этом даже нарушив законы монады, мы не сломаем нашу программу, потому что у нас ООП, а не математика.
Звучит как минимум странно, потому что ни ФП, ни ООП не обладают монополией на использование тех или иных инструментов.
Чуть логичнее выглядит рекурсия, тут, наверное, большее количество согласится с тем, что рекурсия - это из мира ФП, хотя это тоже не так. Рекурсия все так же - математический термин. Если у вас в ЯП есть возможность вызвать любую функцию, то это значит, что себя вызвать тоже можно.
Вот только эта возможность в ООП языках не особо нужна, так как есть циклы. А в ФП языках это вещь без которой не обходится ни одна сколько-нибудь серьезная программа.
В любом случае мы видим, что в языках программирования заимствование из математики - это нормальный прием. Причем математика используется как источник метафор, а не источник "реализации". Потому что есть одна вещь, которая сильно отличает математику от информатики - ресурсы. В математике любая рекурсия ничего не стоит, и может выполняться бесконечно, в информатике так сделать нельзя.
Поэтому математические метафоры в информатике это не 100% матчинаг на первоначальную математическую модель.
Моя мысль заключается в том, что заимствование метафор из математики не означает использования функциональной парадигмы, потому что реализация одних и тех же метафор в ФП и ООП будет разной.
Я думаю, многие согласятся с логикой рассуждения, которую я привел выше. Но все сломается когда я скажу "монады - это не признак ФП стиля". Тут у той части аудитории, которая сильна в ФП, бомбанет не на шутку. Ведь нам все уши прожужжали, что монады - это достижение ФП.
На самом деле, понятие "монады" пришло из теории категории, так же как и другие метафоры математики, монады в ФП и ООП используются по-разному. В ФП без монад невозможно добавить императивное поведение, отказаться от функциональных компазиций в сторону цепочки вызовов. Т.е. монады, так же как и рекурсии в ФП - это основной строительный блок, без него хорошей программы не построишь. Поэтому в ФП вокруг монад построен здоровенный кусок теории.
Что же с монадами произошло в ООП? А ничего особенного, они стали основой для построения интерфейсов с высокой уровнем абстракции. В ООП основой является понятие "объект", из понятие объекта вытекает понятие "класс", а класс без реализации (чистая абстракция) - это интерфейс. Т.е. если мы пишем программу с интерфейсами, классами и объектами, да еще в императивном стиле, то это ООП, самое что ни на есть обычное ООП.
Как я уже сказал, монады в ООП стали просто интерфейсами (т.е. метафора приняла ограничения парадигмы), причем интерфейсами которые ограничивают реализацию. Такие вещи принято называть "паттерн", т.е. мы говорим не только какие методы должны быть в классе, чтобы он реализовывал интерфейс монады, но и ограничения, которая являются монаидическими законами.
Причем, как паттерн монады довольно высокого уровня абстракции, потому что из этого паттерна можно построить более детальные паттерны. Например, итератор - это монада, но с более "осмысленным" названием.
Чем хороши монады? Основное их свойство - не нарушать цепочки вызовов, т.е. зная что ваш класс реализует интерфейс монады вы можете с высокой долей уверенности сказать, что он будет корректно вести себя в цепочках вызовов.
Является ли это ФП стилем? На мой взгляд нет. На самом деле интерфейс монады состоит всего из двух методов, причем к ним можно прийти вполне интуитивно, как было сделано в том же итераторе. При этом даже нарушив законы монады, мы не сломаем нашу программу, потому что у нас ООП, а не математика.
👍49🤔5
Элементарный пример, в законах монады есть ограничение, что применение ID-функции не должно менять содержимое монады. Возьмем пример Array.map(Id) === Array. т.е. Id функция выглядит как-то так Id = (x) => x, если мы теперь нарушим этот закон и Array.map(Id) будет возвращать у нас пустой массив (потому что в нашей программе не разрешены "пустые" действия). Закон мы нарушили, Array перестал "быть" монадой, а наша программа не изменила ни стиль, ни надежность работы.
Таким образом, использования монад в ООП - это просто использование паттерна, который вводит некоторые ограничения. Это не делает ваш код "функциональным", просто для тех кто не очень понимает что такое метафора, что такое теория категорий, кажется, что понятие "монады" пришло из ФП, но там оно выполняет другую задачу - позволяет добавить императивное поведение в программу. А в ООП это просто интерфейс, который по какой-то причине захотелось назвать "Монадой".
Более того, нарушение законов монады, например в JS Promise, не уменьшает полезности этого инструмента. И не "убивает" надежность программы.
Но понять, что использовать метафору из теории категорий и писать функциональном стиле - это абсолютно разные вещи может далеко не каждый. Это боль нашего АйТи, которая называется "модно, молодежно".
Таким образом, использования монад в ООП - это просто использование паттерна, который вводит некоторые ограничения. Это не делает ваш код "функциональным", просто для тех кто не очень понимает что такое метафора, что такое теория категорий, кажется, что понятие "монады" пришло из ФП, но там оно выполняет другую задачу - позволяет добавить императивное поведение в программу. А в ООП это просто интерфейс, который по какой-то причине захотелось назвать "Монадой".
Более того, нарушение законов монады, например в JS Promise, не уменьшает полезности этого инструмента. И не "убивает" надежность программы.
Но понять, что использовать метафору из теории категорий и писать функциональном стиле - это абсолютно разные вещи может далеко не каждый. Это боль нашего АйТи, которая называется "модно, молодежно".
👍25🤯1
Вышло 25-ое архитектурное видео на platform.soer.pro
Тема видео - Архитектурные границы и зависимости
Публичный конспект стрима: https://soer.pro/codelabs/arch_stream_25/index.html?index=..%2F..index#0
Тема видео - Архитектурные границы и зависимости
Публичный конспект стрима: https://soer.pro/codelabs/arch_stream_25/index.html?index=..%2F..index#0
👍14🔥2
Друзья, давайте подключим коллективный разум и соберем интересных тем для будущих видосов. Напишите либо свою тему, либо поставьте лайк на чью-нибудь чужую. Хочется получить темы, которые интересны большинству.
Темы пишите в комментарии к этому посту.
Темы пишите в комментарии к этому посту.
🔥10👍4
Некоторые мысли про написание плохого кода.
https://telegra.ph/Vse-pishut-odinakovo-plohoj-kod-06-26-2
https://telegra.ph/Vse-pishut-odinakovo-plohoj-kod-06-26-2
Telegraph
Все пишут одинаково плохой код
Все пишут одинаково плохой код. Такое утверждение стало встречаться довольно часто. Мне не совсем понятна причина его происхождения. Люди с полной уверенностью заявляют, что на самом деле никакой разницы в качестве кода не существует. Что все правила по написанию…
👏19👍10🔥5😁1
Что значит ООП парадигма, как мыслить объектами, а не структурами? Почему одни ООП программы более ООП чем другие?
Если хотите понять что такое ООП то лучшая книга для этого Объектно ориентированное конструирование программных систем. Из всех взглядов (я имею в виду Кея и Страуструпа) объяснения Мейера мне кажутся наиболее интересными и полезными. У него отлично описано контрактное программирование и объектная парадигма. Книга хоть и старая но очень хорошая.
#книга #обзор
Если хотите понять что такое ООП то лучшая книга для этого Объектно ориентированное конструирование программных систем. Из всех взглядов (я имею в виду Кея и Страуструпа) объяснения Мейера мне кажутся наиболее интересными и полезными. У него отлично описано контрактное программирование и объектная парадигма. Книга хоть и старая но очень хорошая.
#книга #обзор
👍46❤3🔥2🤔1
Переделал редактор конспектов на platform.soer.pro Давно хотел его сделать чем-то похожим на Jupyter ноутбуки.
Теперь документ - это набор блоков. Блок может быть разных типов, пока только Markdown, но планирую еще сделать код, графики и схемы.
Пока много чего не сделано, но начало положено. Напоминаю, что можно присоединиться к разработке и получить "PRO" за решение issue этой платформы.
Теперь документ - это набор блоков. Блок может быть разных типов, пока только Markdown, но планирую еще сделать код, графики и схемы.
Пока много чего не сделано, но начало положено. Напоминаю, что можно присоединиться к разработке и получить "PRO" за решение issue этой платформы.
👍10🔥3
Не все читают чат, поэтому продублирую здесь сылку на критику книги "Принципы, паттерны и методики гибкой разработки на языке C#", о которой писал ранее.
https://sergeyteplyakov.blogspot.com/2013/12/about-agile-principles-patterns-and.html
Критика от Сергея Теплякова. Это автор другой книги по С#, который глубоко разбирается в теме. Критика хорошая, но мне кажется вывод о книге все же предвзят, там сильно больше пользы, чем предполагаемого вреда.
https://sergeyteplyakov.blogspot.com/2013/12/about-agile-principles-patterns-and.html
Критика от Сергея Теплякова. Это автор другой книги по С#, который глубоко разбирается в теме. Критика хорошая, но мне кажется вывод о книге все же предвзят, там сильно больше пользы, чем предполагаемого вреда.
Blogspot
Критика книги Боба Мартина "Принципы, паттерны и методики гибкой разработки на языке C#"
Поскольку камрады выразили желание увидеть в одном месте все комментарии к столь известной и уважаемой книге, как "Принципы, паттерны и ме...
👍11👏4❤1🤩1🥱1
В общем я решил обозревать новости, и не знаю где эти самые новости взять. Расскажите про какие-нибудь интересные агрегаторы новостей. Где можно свежее про айтишечку брать )
❤6
В программировании есть вещи, которые не стареют. С ASCII графикой в комментариях к коду я познакомился году эдак в 1996, когда подписался в FIDO на NICE.SOURCES. Хорошо запомнил пример с кодом для декодирования JPG, который сопровождался ASCII.
Я заговорил об этом, потому что наткнулся вот на эту статью - https://blog.regehr.org/archives/1653 которая содержит кучу примеров с инфографикой из кода.
Я заговорил об этом, потому что наткнулся вот на эту статью - https://blog.regehr.org/archives/1653 которая содержит кучу примеров с инфографикой из кода.
👍7🔥7🤮4❤1
У нас есть замечательная группа VK, в которой собираем интересные ролики по программированию. А вот сегодня я там запустил голосование по лучшему ЯП.
Кому интересно вот ссылка - https://vk.com/codeartblog
PS в группе админю не только я, так что претензии по тому что там размещено не ко мне. )
Кому интересно вот ссылка - https://vk.com/codeartblog
PS в группе админю не только я, так что претензии по тому что там размещено не ко мне. )
🥰9❤1
https://www.youtube.com/watch?v=1qtaVMIfqTQ
Выпустил видео про написание функции на TDD + TypeScript. Может кому-то поможет осмыслить разработку через тестирование.
Выпустил видео про написание функции на TDD + TypeScript. Может кому-то поможет осмыслить разработку через тестирование.
YouTube
Реализация функции deepMerge для собеса (TS+TDD)
#soer #itubeteam
Основной канал для общения и публикации новых видео - Телегарм - https://news.1rj.ru/str/softwareengineervlog
Спонсорство - https://donate.s0er.ru
Сайт платным контентом - https://soer.pro
Зеркало для видео Дзен Видео - https://zen.yandex.ru/i…
Основной канал для общения и публикации новых видео - Телегарм - https://news.1rj.ru/str/softwareengineervlog
Спонсорство - https://donate.s0er.ru
Сайт платным контентом - https://soer.pro
Зеркало для видео Дзен Видео - https://zen.yandex.ru/i…
👍27❤3
Ладно хейтеры, это предсказуемая реакция на выводящее из привычного болота состояние. Но, суко, люди, которым ты помогал, когда они ещё вообще ничего из себя не представляли, которые вдруг переворачиваются и начинают тебя кенселить - это выше моего понимания.
Вот в чем, в чем, а в таком я точно не был замечен. А то что говно льют за спиной, ещё лучше характеризует этих людей. Я не буду называть имена, но я вас услышал, господа.
Вот в чем, в чем, а в таком я точно не был замечен. А то что говно льют за спиной, ещё лучше характеризует этих людей. Я не буду называть имена, но я вас услышал, господа.
😱41🤯14🐳12👍7😢6❤4😁2🤔2🤬2💩2🕊1
Я прислушался к вашим советам и попробовал на голосовом вводе произнести фразу "please merge two arrays ". У меня получилось следующее " please merge to erase". Я вбил эту же фразу в гугл переводчик и включил произношение, у него получилось следующее " please match two arrays".
А что получается у вас?
А что получается у вас?
😁40🤬2👍1
Ребята, если кому-то, что-то не нравится, то просто выйдите из сообщества. Не надо заходить в чат и начинать хамить. Если вам сделали замечание по поведению, то либо прислушайтесь, либо сразу на выход.
Я взрослый дядька, не надо меня жизни учить, я без вас разберусь что и как мне делать.
Я взрослый дядька, не надо меня жизни учить, я без вас разберусь что и как мне делать.
👍108😁12🔥6👎5❤4💯3👏1
Хочу поделиться списком рекомендованной литературы для разработчика. За один день такой объем, конечно, не осилить, но как долгосрочная цель - ок.
https://dckms.github.io/system-architecture/emacsway/it/self-education/self-education-for-software-engineer.html
#книга #рекомендация
https://dckms.github.io/system-architecture/emacsway/it/self-education/self-education-for-software-engineer.html
#книга #рекомендация
🔥69👍16
Кухарке на заметку, разница между параметрами и аргументами:
function someF(a, b)...
someF(1, 2)
a,b - параметры
1, 2 - аргументы
function someF(a, b)...
someF(1, 2)
a,b - параметры
1, 2 - аргументы
👍132😁6😱6🤣6👏5👌4🤔2
Недавно меня спросили "А ты делаешь каты?". Этот вопрос поставил меня в тупик, все дело в том, что для программистов эта фраза имеет особый смысл.
Выполнять кату - значит практиковаться в том или ином аспекте программирования, при этом каты могут быть по алгоритмам, подходам, архитектуре, т.е. по чему угодно.
Есть списки кат, которые можно выполнять и для этого есть специальные каталоги "кат".
Интересно на эту тему почитать статью Mark Seemann - https://blog.ploeh.dk/2020/01/13/on-doing-katas/
Выполнять кату - значит практиковаться в том или ином аспекте программирования, при этом каты могут быть по алгоритмам, подходам, архитектуре, т.е. по чему угодно.
Есть списки кат, которые можно выполнять и для этого есть специальные каталоги "кат".
Интересно на эту тему почитать статью Mark Seemann - https://blog.ploeh.dk/2020/01/13/on-doing-katas/
ploeh blog
On doing katas
Approach programming katas differently than martial arts katas.
👍15
Хороший вопрос про английский. Мой опыт таков:
1. Я могу читать даже очень сложные тексты (например, на arxiv.org), но скорость чтения раза в 3-4 меньше чем русского текста.
При этом дело не в том, что мне не хвататет лексики. Не знаю с чем это связно, просто английский текст жрет "батарейку" сильнее, быстрее устаю.
2. Практики устной речи, да еще с теми для кого английский - родной язык, у меня было очень мало. Почти всегда - переписка. Причем, я отвратительно знаю грамматику.
При необходимости подтянуть все можно, но у меня так сложилось, что я находил и нахожу интересную работу внутри России. У меня просто нет жесткой необходимости учить английский лучше.
Из моего опыта - устная речь чтением не прокачивается от слова совсем. Грамматику тоже надо тюнить, но читая названия коммитов к англоязычным репозиториям, замечаю, что, скажем, с артиклями никто не парится.
Так что если нет практики, причем ее надо очень много, то крайне сложно прокачать речь.
1. Я могу читать даже очень сложные тексты (например, на arxiv.org), но скорость чтения раза в 3-4 меньше чем русского текста.
При этом дело не в том, что мне не хвататет лексики. Не знаю с чем это связно, просто английский текст жрет "батарейку" сильнее, быстрее устаю.
2. Практики устной речи, да еще с теми для кого английский - родной язык, у меня было очень мало. Почти всегда - переписка. Причем, я отвратительно знаю грамматику.
При необходимости подтянуть все можно, но у меня так сложилось, что я находил и нахожу интересную работу внутри России. У меня просто нет жесткой необходимости учить английский лучше.
Из моего опыта - устная речь чтением не прокачивается от слова совсем. Грамматику тоже надо тюнить, но читая названия коммитов к англоязычным репозиториям, замечаю, что, скажем, с артиклями никто не парится.
Так что если нет практики, причем ее надо очень много, то крайне сложно прокачать речь.
👍56🔥9🐳4
https://youtu.be/vjTO0BqZwsY
Футболки с логотипом канала продолжают уходить в массы, сейчас в нашу банду соеров входит три человека - Михаил Фленов и Денис Westwind.Galeaf
Ссылку на стрим Дениса где он в футболке прилагаю.
Футболки с логотипом канала продолжают уходить в массы, сейчас в нашу банду соеров входит три человека - Михаил Фленов и Денис Westwind.Galeaf
Ссылку на стрим Дениса где он в футболке прилагаю.
YouTube
Стрим для отдыха #3 (часть 2)
#ITubeTeam #python
https://discord.gg/bntzwv6qP8 - Дискорд.
https://news.1rj.ru/str/WGDev - телеграм-канал проекта
https://vk.com/wgdev - vk-группа проекта.
https://discord.gg/bntzwv6qP8 - Дискорд.
https://news.1rj.ru/str/WGDev - телеграм-канал проекта
https://vk.com/wgdev - vk-группа проекта.