Не морочьте мне голову со своим функциональным программированием / Виталий Брагилевский

Поділитися
Вставка
  • Опубліковано 4 січ 2020
  • Apps Conf Moscow 2019
    Зал «Против глупости»
    22 апреля, 14:00
    Тезисы и презентация:
    appsconf.ru/moscow/2019/abstra...
    Адепты функционального программирования очень любят завлекать неопытных программистов обещаниями идеальной выразительности кода, его стопроцентной корректности, лёгкости поддержки и простоты рефакторинга. Иные даже пророчат высочайшую производительность и попадание после смерти напрямую в райские кущи. Опытные разработчики знают, что ничего такого не бывает, программирование - это тяжёлый труд, а серебряные пули, может, и помогают от вампиров, но никак не в процессе разработки ПО. С другой стороны, если что-то может хоть как-то облегчить труд программиста, то почему бы не попробовать этим чем-то воспользоваться?
    ...
    --------
    Нашли ошибку в видео? Пишите нам на support@ontico.ru

КОМЕНТАРІ • 50

  • @stanislavzemlyakov5442
    @stanislavzemlyakov5442 4 роки тому +19

    Отличный доклад, спасибо.

  • @user-tv2hs5rs4t
    @user-tv2hs5rs4t 3 роки тому +7

    Блестящий доклад! Спасибо большое!

  • @ultraon83
    @ultraon83 3 роки тому +5

    Просто невероятно, очень классное и понятное объяснение!

  • @centwor1on167
    @centwor1on167 2 роки тому +3

    Отличный доклад! Вот что значит эксперт - уметь рассказать и объяснить тему даже на дудульке сыграв! Спасибо Виталию за взгляд на тему с высоты

  • @PetrovAlexey
    @PetrovAlexey 4 роки тому +15

    Очень полезный доклад для вывода мозгов из тупика

  • @MrVicorl
    @MrVicorl 2 роки тому +3

    ещё до пандемии, без масок и офлайн встреча... какие времена были... :(

  • @ivanfedorov7934
    @ivanfedorov7934 3 роки тому +1

    Супер доклад , все правильно, делайте хорошие компиляторы, а уж мы-то напишем :)

  • @petrvictorovich
    @petrvictorovich 2 роки тому +16

    Почему так мало людей дозревает до такой "простоты" в понимании?
    Видимо потому что с умным видом произносить "страшные слова" легче, приятней и льстит самолюбию.

  • @folcrams2993
    @folcrams2993 10 місяців тому +1

    "Не морочьте мне голову со своим функциональным программированием!" - дайте хоть основы выучить

  • @TheOnlyAndreySotnikov
    @TheOnlyAndreySotnikov 2 роки тому +3

    Есть вещи, которые ahead of time компилятор в принципе никогда не сможет оптимизировать. Например, вызов виртуальной функции невозможно заинлайнить, если вызов осуществляется через таблицу виртуальных функций, которая строится в run-time. Так что аргумент «не бывает медленных способов программирования, это компиляторы плохие» не состоятелен.

    • @user-ob7tt2ku8r
      @user-ob7tt2ku8r Рік тому

      Поэтому полиморфизм типажей и дженериков в Rust куда лучше чем наследование абстрактных методов в той же Java. С одной стороны вроде как интерфейс (набор виртуальных методов), а с другой - no cost abstraction, потому все накладные расходы во время компиляции снимаются (ну также как Templates в С++). Ну, а если мы говорим про, скажем, массив экземпляров разных классов с одним интерфейсом, то тут я не вижу особых способов оптимизации даже руками программиста. То есть так или иначе будет if else или что-то типа того, завязанного на конкретном типе.
      Если у Вас есть идеи как эту проблему исправить руками программиста (а не компилятора), было бы интересно узнать)

    • @alexgorodecky1661
      @alexgorodecky1661 6 місяців тому

      @@user-ob7tt2ku8r, разницы с Java никакой нет. Разница лишь в том будет инлайн или нет, а это зависит. А инлайна может не быть вовсе если вы соберёте себе Array - но тут вы явно попросили рантаймовых абстракций

  • @SergRyabinin
    @SergRyabinin 3 роки тому +5

    Доклад очень интересный. Если брать аналогии с живым миром, никого не удивляет присутствие в нем птиц, насекомых, бактерий, рыб, растений, грибов и тд, но почему то в мире программистов все еще бывают споры относительно того, какой подход самый "правильный"))

    • @berghauz
      @berghauz 3 роки тому +3

      Автор доклада явно уже определился, и счетчики ему не то, и циклы фу, а что под капотом они же и сидят - ну не видно, значит неть! Уровень передергивания зашкаливает.

    • @SergRyabinin
      @SergRyabinin 3 роки тому +1

      @@berghauz споры про это все-равно не утихнут никогда и все ветки программирования будут развиваться, как и все живое на земле)) впрочем, пригладное программирование хочется видеть давно уже посредством "крупных кубиков", а не ломать копья про ООП/функциональное/структурное и етс программирование. Хотя отраслевые решения на эту тему уже имеются давно.

    • @NICKy1038ausc
      @NICKy1038ausc 2 роки тому

      @@berghauz Не очень понятна суть претензии. Следуя этой логике, раз "под капотом" процессор работает с машинными кодами, то все, кто считает более эффективным писать код хотя бы на ассемблере или на более высоких уровнях абстракции и так делают - "передёргивают".
      Речь же идёт конкретно про код программиста, который выполняет бизнес-задачу. На 8:39 был отличный пример. Декларативный код, который описывает суть задачи, занимает три строки. Проще читать, проще поддерживать. Чем лучше 10+ строк кода с циклами, проверками и счётчиками, который делает абсолютно то же самое?
      Понятно, что надо всегда быть разумными и использовать более применимый подход для кажого конкретного случая. Но доклад автора был только про ФП, в этом смысле тоже претензия непонятна

    • @berghauz
      @berghauz 2 роки тому

      @@NICKy1038ausc На 8:39 был отличный пример сахара, какое отношение этот пример имеет к счетчикам, циклам и всему прочему, о чем выступающий говорил минутой ранее? Никакого, но выступающий зачем-то акцентировал свое внимание на зашкварности использования этих методов, словно все программисты, пишущие "эффективный" код только и занимаются тем, что считают строчки в файле. Это и называется - передергивать.

    • @NICKy1038ausc
      @NICKy1038ausc 2 роки тому +1

      @@berghauz Это рофл? Прямое отношение. Вы смотрели видео, суть поняли? Были показаны два метода, которые делают одно и то же. В императивном и функциональном стиле. Первый занимает гораздо больше места и менее читаем из-за того, что в теле этого метода используются циклы и счётчики, о которых шла речь.
      В хорошем читаемом коде метод должен делать одну вещь и делать её хорошо. Перебор коллекции и чтение файлов посимвольно - как раз примеры того, почему императивный метод не является хорошо читаемым кодом. Когда все рутинные действия были вынесены в методы поменьше, функциональный код стал гораздо более лаконичным и декларативным. Он и пишется гораздо быстрее, и читается как книга: последовательно и на понятном языке. А не как код студента-младшекурсника. Программисты на реальных проектах ощутимо быстрее пишут код и быстрее его поддерживают, с этим очень странно спорить. Никто не считает каждую строчку кода, но когда функциональный код на практике В ТРИ РАЗА короче, это огромная разница.
      А так любую удобную абстракцию можно назвать сахаром и сказать, что она не нужна. И так раньше нормально жили, чего вообще развиваться, усваивать что-то новое и увеличивать производительность программистов.
      Вы сами-то решаете реальные задачи? И как, императивно? Пробовали иначе? Поделитесь, пожалуйста, своим опытом.

  • @laticalamonzi2814
    @laticalamonzi2814 Рік тому +1

    Включила на прослушку, показалось Вячеслав Мясников говорит... =)

  • @ArgentSmith
    @ArgentSmith 5 років тому +10

    Хочу такой презентер с "подсветкой экрана"

    • @VBragilevsky
      @VBragilevsky 5 років тому +5

      Управлять не очень удобно!

    • @alexanderskusnov5119
      @alexanderskusnov5119 3 роки тому +2

      Я видел другой режим: фон не становится чёрным, а пятно желтоватое или красноватое (с прозрачностью).

  • @kujoxer-yep
    @kujoxer-yep 6 місяців тому

    00:15:40 - чел 100% закрывает вопрос что такое ФП и ООП, красавчик есть же

  • @IExSet
    @IExSet Рік тому +1

    Какой нафиг компилятор с искусственным интеллектом, о чём они ?

  • @deleteddeleted1940
    @deleteddeleted1940 Рік тому

    3734 note

  • @lenin1st
    @lenin1st Рік тому +2

    когда лектор оговорился про то, что скорость - это проблема компилятора, я выключил. какие знакомые боевые фразы.

  • @cheefoxcheefox2372
    @cheefoxcheefox2372 7 місяців тому

    Чёт херь какая-то.
    Надеюсь,что в комитете Haskell этот человек просто пьёт кофе

  • @yaroslavpiddubnyak2025
    @yaroslavpiddubnyak2025 Рік тому +3

    Общий смысл - переходить на языки ещё более высокого уровня, а если будет плохо работать - это виноваты разработчики компилятора, что дураки - остались на низком. 😎

  • @0xsadcat92
    @0xsadcat92 6 місяців тому

    Штош, компилятор виноват в медленном коде, так заказчику и скажем, пусть подождет пока допилят...

    • @inbuckswetrust7357
      @inbuckswetrust7357 14 днів тому

      на кого вешать собак разрабам компилятора ? :) короче выяснится, что во всем виноват собака Тьюринг

  • @user-vj8ys1xo6m
    @user-vj8ys1xo6m 2 роки тому

    Дано: гугл-1шт. ,есть поток данных n>1, дискретность данных будет n>1÷a+(b•b). Сжатие фаилов b не позволяют высокоуровнивые кодаки. основанные на последних языках програмирования, т.к в фортан больше не могем. Попытки сжимать медиа.- нейросетями привели к неслабой ловле лулзов. Вопрос: сколько потребуется времени чтобы компания гугл освоила сжатие медиафаилов крипто шифрованием, используя при этом сторонние мощьности?

  • @user-db2th5em3v
    @user-db2th5em3v 2 роки тому

    Хаскелевский интерпретатор и вправду медленный. Отсюда вопрос: если хаскелисты, сплошь и рядом - ученые-исследователи и математики, то почему бы не написать быстрый компилятор для своего языка?

    • @user-eo5uw4xf2y
      @user-eo5uw4xf2y 2 роки тому +3

      потому что ученые-исследователи и математики не инженеры

    • @user-ob7tt2ku8r
      @user-ob7tt2ku8r Рік тому +2

      компилятор или интерпритатор? GHCI - медленный так как интерпретатор. А вот GHC - вполне быстрый, главное писать директиву ghc-options: -o2 в package.yaml, чтобы включилась оптимизация

    • @ChannelCheesecake
      @ChannelCheesecake 6 місяців тому +1

      Ну так он медленный, потому что умный. Что не понятно, это 2 стороны одной монеты. Но пока Хаскеллист напишет код за x времени, напишет y тестов и будет ждать z времени компиляцию. Какой-нибудь гошник напишет то же самое за 5x времени, напишет 3y тестов, но скомпилирует быстрее, кто в итоге продуктивнее

  • @mslq
    @mslq Рік тому +2

    Да я на ассемблере функций наделал средствами макроса и функионирую! ))

    • @user-ob7tt2ku8r
      @user-ob7tt2ku8r Рік тому +4

      пишу программы на машине Тьюринга, симулированной в игре жизнь и не жалуюсь))

  • @Darellat
    @Darellat 4 роки тому +13

    очередной манямир функциональщиков на этапе вопросов

  • @Yetishkin_Pistolet
    @Yetishkin_Pistolet Рік тому +1

    Python ведь тоже на 79% функциональный. А вы его не упомянули, почему ? Как будете оправдываться ?! А ?!
    АААААААА !!!!

    • @nikitatimofeenko9351
      @nikitatimofeenko9351 Рік тому +4

      А не че, что он ООП и сам создатель языка до последнего не хотел добавлять функциональные методы по типу map, filter, reduce и тп

    • @mslq
      @mslq Рік тому +1

      Очень сильный язык, боится оговорится.

    • @ChannelCheesecake
      @ChannelCheesecake 6 місяців тому +1

      Что там функционального. Лямбды однострочные или может быть отсутствие иммутабельных данных