Антипаттерны общие для всех парадигм

Поделиться
HTML-код
  • Опубликовано: 30 сен 2019
  • Примеры кода: github.com/HowProgrammingWork...

Комментарии • 51

  • @anatolykobzisty9827
    @anatolykobzisty9827 4 года назад +36

    00:00:00 Введение
    00:01:32 Плохое наименование (bad names)
    00:10:31 Магические штуки (magic things)
    00:20:13 Жесткое кодирование (hard-code)
    00:26:42 Дубликаты (dublicate)
    00:29:49 Непонятный код (cryptic code)
    00:32:42 Копирование кода (copy-paste)
    00:39:13 Допустимый код (improbability)
    00:43:05 Защита от дурака (foolproof)
    00:48:59 Плохо спроектированный код (spaghetti code)
    00:54:04 Комментарии (comments)
    00:58:20 Серебренная пуля (silver-bullet)
    01:02:17 Синдром неприятия чужой разработки (not invented here)
    01:08:39 Сильная сложность (complexity)
    01:20:04 Заключение

  • @gapiyka
    @gapiyka 3 года назад +4

    Слушал когда лежал в психушке, просто бомба для ума

  • @stanislavyankovskiy1374
    @stanislavyankovskiy1374 4 года назад +36

    Жаль мало времени смотреть ваши видео, темы очень крутые и практичные, больше нигде на ютубе не находил такого крутого контента, даже в англоязычном ютубе

    • @TimurShemsedinov
      @TimurShemsedinov  4 года назад

      Может универв видео-лекции где-то не на ютюбе выкладывают? Я не в курсе

    • @illiadenysenko7776
      @illiadenysenko7776 4 года назад +5

      ruclips.net/channel/UC0YHNueF-3Nh3uQT0P4YQZw
      о таком знали?)

    • @ice-sugar.
      @ice-sugar. Год назад

      Время есть всегда. Вам, просто, лень:)

  • @TimaGixe
    @TimaGixe Год назад +2

    Чудова лекція, з чудовими прикладами та коментарями. Дякую!

  • @VladislaV220
    @VladislaV220 3 года назад +6

    инфа золото. конвертирует интуитивно накопленный опыт в упорядоченные знания.
    и такой коммент актуален под каждым видосом из серии по основам))

  • @gennadiymedvedev214
    @gennadiymedvedev214 4 года назад +9

    , спасибо за очередную полезную лекцию !!!

  • @TimurSevimli
    @TimurSevimli Год назад +2

    Спасибо большое за знаний и опыт которым поделились!

  • @Staxa2012Chanell
    @Staxa2012Chanell 4 года назад +2

    Крута лекція, дякую! Чекаю на нові. Успіхів!

  • @TheTexPro
    @TheTexPro 2 года назад +2

    Спасибо большое за полезный материал!😃

  • @user-cd9bu4to2p
    @user-cd9bu4to2p 4 года назад +5

    Очень интересно, спасибо большое))

  • @catmall9624
    @catmall9624 4 года назад +3

    Тимур - вы лучший!!!

  • @uaplatformacomua
    @uaplatformacomua 2 года назад +3

    Замечательный урок, жаль, что я его не посмотрела, когда начинала программировать.

  • @yakovsemechko3452
    @yakovsemechko3452 Год назад +1

    37:30 array.find(e => !!e) - первым аргументом передается элемент, не индекс. Функция будет работать только в случае когда приведенное к булевому значение первого элемента будет true. В противном случае ("", 0, undefined, null, NaN, false) функция возвращает первый найденный элемент приводимый к true.

  • @dmitrijponkin
    @dmitrijponkin 4 года назад +2

    Спасибо!!!

  • @wswebus922
    @wswebus922 4 года назад +4

    Timur Shemsedinov спасибо за отличное видео! Хотелось бы ещё узнать про Императивный и Декларативные подходы к написанию кода. Какой и когда лучше использовать один или другой. Что лучше читается и легче поддерживается.

    • @TimurShemsedinov
      @TimurShemsedinov  4 года назад

      Будут отдельные лекции про антипаттерны разных парадигм, а пока это посмотрите:
      ruclips.net/video/Yk1sxLVHfjs/видео.html
      ruclips.net/video/0JxSs_GcvbQ/видео.html

  • @DimitarRad
    @DimitarRad 2 года назад +1

    Thanks, useful as usual

  • @Antonio-fm1sq
    @Antonio-fm1sq 3 года назад

    Спасибо!

  • @dimitro.cardellini
    @dimitro.cardellini 4 года назад +3

    По поводу Антипаттерна "Assumptions". На самом деле код проверки допущений зашумливает код (даже если его вынести в отдельные функции).
    Для того, чтобы код был "почище", явной проверки допущений лучше избегать -- давая возможность приложению просто упасть.
    Критически важно проверять допущения, когда результат такой проверки поможет "пользователю" приложения исправить ситуацию: выбрать правильный файл, заполнить нужное поле и т.п. Реже, для отладки.

    • @QwDragon
      @QwDragon 2 года назад

      Тем не менее, в случае коллбека вставить строку if (err) throw err; намного лучше какого-то падения в духи split of undefined.

  • @ivanhranat7067
    @ivanhranat7067 4 года назад +11

    Анекдот для тех кому лень гуглить :
    - Штурман, приборы!
    - Двести.
    Летят дальше.
    - Бл#ть, что "двести"?!
    - А что "приборы"?

  • @nikitasobolev8288
    @nikitasobolev8288 4 года назад +3

    (new Number(5)).valueOf(); - метод .valueOf() вернет число

  • @thisnameisnotavailable
    @thisnameisnotavailable Год назад +1

    Уважаемый @Timur и Господа, о каком "курсоре" идёт речь на 1:16:32 ? Я не знаю как загуглить это понятие. Что означает "цепочка преобразований вернёт курсор". Спасибо.

    • @TimurShemsedinov
      @TimurShemsedinov  Год назад

      Это пример кода, тут может быть любой другой способ доступа к базе, но курсоры я делал в другой лекции можно поискать по индексу лекций на гитхабе но для понимания этой темы это вообще не важно github.com/HowProgrammingWorks/Index

    • @thisnameisnotavailable
      @thisnameisnotavailable Год назад +1

      @@TimurShemsedinov спасибо за скорый ответ. Да, для понимания темы это не важно абсолютно. Просто это моя дотошность к целостному пониманию всего и вся. :) Мне просто непонятно является ли слово "курсор" тем же словом "вывод" или "результат" например. Может это какое-то математический или cs термин. Мне например понравилось наконец понять разницу между процедурой и функцией в первых ваших видео из плейлиста. Тут та же история для меня. Терминология хромает сильно.)

    • @TimurShemsedinov
      @TimurShemsedinov  Год назад +1

      @@thisnameisnotavailable вот эта лекция с курсорами, и еще где-то есть в связке с постгресом ruclips.net/video/CRcSWtWVvrA/видео.html

  • @criticaster743
    @criticaster743 4 года назад

    Тимур спасибо за видео, только вопрос по функции ```async id => await application``` , насколько я знаю это плохая практика, так как любая async функция оборачивается в Promise.resolve, получается что ми ждем результат и только потом возвращаем его, но можем просто вернуть промис который будем ожидать (await) как результат функции ...

    • @TimurShemsedinov
      @TimurShemsedinov  4 года назад +3

      Да, спасибо, вы в правильном направлении сделали замечание, но у меня есть уточнения. Если мы пишем const fn = async id => await promiseReturning('arg1', 'arg2', id); то это лучше переписать как const fn = id => promiseReturning('arg1', 'arg2', id); или даже const fn = promiseReturning.bind(null, 'arg1', 'arg2'); Но первая запись не приводит к вложенному разрешению промисов из-за оптимизации (это не так давно начали оптимизировать), т.е. const fn = async id => await ... нам нужен только для того, чтобы функция была AsyncFunction а не Function (это может быть требованием контракта, предъявляемыми другими частями программы к интерфейсу экспортируемой функции). В данном случае можно конечно написать async без await, вот так: const fn = async id => promiseReturning('arg1', 'arg2', id); Потому, что return из асинхронных функций все равно упаковывается в промис. Такое поведение тоже оптимизируется, это тот же промис в промисе, который заменяется на один промис. У меня в коде, на самом деле, это осталось от того кода, когда у нас в функции несколько последовательных асинхронных операции, а значит нужны await, я его просто сократил и забыл убрать await.

    • @criticaster743
      @criticaster743 4 года назад

      @@TimurShemsedinov спасибо за ответ, так и подумал.

  • @vadimburavlev857
    @vadimburavlev857 Год назад

    Есть мнение, что, если в функцию передается больше 3-х аргументов, то это плохо читаемо, можно ошибиться с порядком передачи аргументов и так далее, нужно их передавать через {arg1, arg2, arg3....}. Насколько это правильное мнение?

  • @RisDeep
    @RisDeep 4 года назад

    Не согласен, с примером антипаттерна "серебряная пуля", а именно что "циклом прогнать" в 5 строчек более читаемо или производительнее, чем через split или через регулярные выражения. (P.S. Вроде проверил, и через циклы медленнее вышло)
    Выглядит аккуратно и понятно:
    const getWordCount = (str) => str.split(' ').length;
    // не работает с лишними пробелами
    const getWordCount = (str) => str.match(/\w+/g).length;
    // не работает с кириллицей
    const getWordCount = (str) => str.match(/[а-яА-ЯёЁ\w]+/g).length;
    // работает

  • @user-no7sl1yk3f
    @user-no7sl1yk3f 5 месяцев назад

    Интересно, вот такие приемы это не какой-нибудь антипатерн?

  • @dimitro.cardellini
    @dimitro.cardellini 4 года назад +3

    !0 -> true
    !!0 -> false

  • @dimitro.cardellini
    @dimitro.cardellini 4 года назад +1

    Array.prototype.find = function find(item, index, array) {...};

  • @dimitro.cardellini
    @dimitro.cardellini 4 года назад +2

    Ну какой "Инкладс"? ) includes читается, как "инкльудс"

    • @TimurShemsedinov
      @TimurShemsedinov  4 года назад +12

      Ай кен спик эни лангваге бикоз ай юз гугле транслейт

    • @dimitro.cardellini
      @dimitro.cardellini 4 года назад +2

      @@TimurShemsedinov я не к тому, что "ай-ай-ай". Я тоже очень долго говорил "паш" (вместо "пуш"). Просто, если не смотреть на экран, можно утратить линию разговора ;)

  • @dimitro.cardellini
    @dimitro.cardellini 4 года назад

    Про мидллвары. В примерах были контроллеры, а не миддлвары.

    • @TimurShemsedinov
      @TimurShemsedinov  4 года назад +1

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

    • @dimitro.cardellini
      @dimitro.cardellini 4 года назад

      @@TimurShemsedinov согласен, "обработчик" подходит лучше.