Code Refactoring: Lecture 2
49:37
6 ай бұрын
Code refactoring: Lecture 1
33:26
6 ай бұрын
Пікірлер
@tomvenom
@tomvenom 16 сағат бұрын
Привет. Планируются ли уроки по iOS?
@hardlandingtac
@hardlandingtac 4 күн бұрын
Вот, кстати, вспомнил, есть у меня на канале пример рефакторинга (помимо основной темы ролика) называется "Принцип единой ответственности (SRP) - что с ним не так?". Там в оригинале приводится пример программирования игры в боулинг. Причем делается явно не понимая, что такое ООП. Так вот там четко видно, что если исходить из логики авторов, то никаким рефакторингом невозможно дойти до нормального решения. И продолжать делать рефакторинги, это только добавит каши. Поэтому нужно сразу делать крупный рефакторинг, но его нужно перетестировать, ибо сразу новая логика может не получится. Но оставлять как есть, тоже такое ... это пример, как раз того, что вся ваша теория не соответствует практике.
@shameoff16
@shameoff16 5 күн бұрын
Осторожно! В лекции есть маты!:)
@hardlandingtac
@hardlandingtac 8 күн бұрын
В целом, мне ваши лекции нравятся, поэтому я их репостну, создав плейлист из ваших лекций :) Меня просто часто спрашиваю про теорию, а мне очень не нравится объяснять базис. Но как то нужно будет придумать, делать поправки ... самое вопиющие я откоментировал сейчас, но комментарии уедут и разбросаны, надо будет собрать, ну и по мере сил отревьювить ваши лекции, наверно вам не особо понравится (автор то думает, что у него все все ок) ... но пока так как есть.
@hardlandingtac
@hardlandingtac 8 күн бұрын
54:25 Странно слушать, бесполезные новые термины. Что за телескопический? кто автор этого термина. Что за цепочка - это разговорный слэнг? Это классический полиморфизм конструкторов, зачем запутывать людей? Ну, тут и дискуссии не может быть - если так не делать, будет дублирование как в примере вначале, а это самый большой грех в коде.
@hardlandingtac
@hardlandingtac 8 күн бұрын
Ну, наконец-то, кто то хоть предупредил вначале. Вообще паттерны - зло. Начитавшись такого приходится потом резать такой код, это все равно что ребенок построил дом из кубиков и обижается, что ему говорят, что настоящий зайчик там жить не сможет. Зайчику лучше будет даже просто в коробке.
@hardlandingtac
@hardlandingtac 9 күн бұрын
1:15:00 Ну давайте разбираться. Во-первых, почему тут используется зло, как было объявлено пару слайдов до - выходные аргументы? Хотел бы я на это посмотреть, как вы без них решили бы инициализировать сессию или нет, когда перепишите как советуете. Во-вторых, ерунда это - ваши т.н. побочные эффекты, глупость несусветная, единственно с чем можно согласится это метод нужно правильно назвать, например CreateSession(). И наконец, нет ни каких причин отделять проверку пароля от инициализации сессии, пока это не ведет к дублированию. А дублирование возникнет только в том случае, если вам понадобится сделать одно без другого. Я вот не могу придумать случай, чтобы нужно было делать проверку пароля, но не открывать/закрывать сессию. Поэтому ровно наоборот в этом примере обязательно одно должно быть с другим. И этим мы приходим к демонстрации избыточности, о чем я писал про "формирование понятной промежуточной абстракции"
@hardlandingtac
@hardlandingtac 9 күн бұрын
С какого это перепуга выходные параметры стали злом? Да, и прочие про аргументы очень спорно. По сути теоретическая методичка, которую писали те, кто не разу не программировал. Думаю, во многом это именно ваши упрощения, лучше возвратитесь к Фаулеру и основывайтесь на том, какие виды рефакторингов он предлагает, у него это более взвешенно описано. А так - так сказала бабка на базаре.
@hardlandingtac
@hardlandingtac 9 күн бұрын
44:30 Наконец-то нашел живой пример, кто учит не правильно :) (именно в этом моменте, в остальном все ок) Есть всего две причины создания методов: это разная ответственности при декомпозиции и устранение дублирования. При этом критерием всегда будет минимизация связей. Это значит, что причина "формирование понятной промежуточной абстракции" - это вредная практика, она создает субъективную "понятность", которая на практике всегда не о чем. В то время как она избыточна. Не делайте так.
@hardlandingtac
@hardlandingtac 9 күн бұрын
Так то я бы поспорил по ряду моментов, но для студентов и так сойдет )) Но все же самое главное, я не согласен, что ревьюить нужно маленькими частями, вот это как раз можно вообще не делать. Нужно исправлять базовые проблемы разработчика. А это значит, что он их разбросал по всему проекту. И нужно не простыню текста писать, а один раз сесть в парном программировании и показать что нужно делать с его классическими ошибками. После этого останется дальше следить, делает ли он их дальше или нет. Если нет, ревью вообще не проводить для этого человека.
@hardlandingtac
@hardlandingtac 9 күн бұрын
Какой то бесполезный термин - инъекция зависимостей, кто его придумал? Это все 4 разные вещи: 1. это или синглтон, или фабрика объекта 2. и это базис у Г. Буча называется агрегация - и это почему то сейчас не преподают, не понимаю почему. 3. это инкапсуляция агрегации - часто совсем не нужная вещь - на моем канале есть видео "К чему приводит тотальная инкапсуляция?" ... а 4. это инстанцирование
@hardlandingtac
@hardlandingtac 9 күн бұрын
1:08:00 Не нужно заказчику или менеджеру ничего рассказывать про рефакторинг. Занимайтесь рефакторингом каждый раз когда требуется без исключений. Вы не должны никому отчитываться как правильно выполнять работу. Вся проблема только в том, что не правильно оцениваются сроки. Умножайте их на 3, на 2 точно мало. Тогда у вас будет время на непредвиденные ситуации. Менеджерам нужно лишь понимать, что подготовительные работы ведутся дольше, чем отделочные. Заказчик видит результат, когда уже поклеены работы, но клеится они за сутки, а вот стены создаются месяцами. Если же менеджер не может технически понять на каком уровне сейчас находится разработка и требует, чтобы программист создавал видимость разработки - вида сделал метр стены и сразу поклеил обоих - это проф. не пригодность менеджера и компании в целом.
@LidiyaHITS
@LidiyaHITS 9 күн бұрын
Благодарю за ваше мнение. Не стоит забывать, что компании бывают разные, у всех свои процессы. Как минимум странно будет на дэйлике менеджеру на вопрос "какую задачу делаешь" ответить "не скажу". Тимлиды есть не везде, иногда менеджер выполняет все роли сразу.
@hardlandingtac
@hardlandingtac 9 күн бұрын
@@LidiyaHITS Сейчас заметил, что у вас на слайде когда делать рефакторинг, не очень точно передается правило 3 ударов, там нужно слово "делаете" заменить на "натолкнулись". Так вот тогда, я говорю о том, что нужно взять это правило + встроить в процесс (по смыслу близко, что у вас как мнение 4). Ну и далее, у вас правильный список "Когда рефакторинг не делать". И вот тогда - объяснять кому то, что я делаю рефакторинг не нужно. Просто делайте, не выделяя в отдельную задачу. А вместо не скажу, говорить, что делаю все тоже, что и делал на прошлой неделе. Ну, или же нет у руководства понимания, отказывайтесь делать задачу, или говорите о нереалистичных сроках. Не делать нужный рефакторинг - такой опции нет, это все равно что врач будет спрашивать резать или не резать. Ну и чтобы не вставать два раза - слайд поиск места для рефакторинга - плохой. Тут нужно говорить о ревью проекта в целом, и находить самое уязвимое место. Ну и говорить про "дурные запахи по Фаулеру". А то ,что на слайде - это не практично, так экзотика. Ну а вообще все ок, мне нравится стиль ведения лекции ) ах, да - на вопрос "на дэйлике менеджеру " - еще лучше говорить, что он тратит мое время, хочет узнать пусть делает ревью коммитов. Это значит, что в правильно организованных процессах - менеджер - это сеньор, который делает ревью и на дейликах именно он говорит, что кому исправить, а не наоборот.
@TV-xj5ke
@TV-xj5ke 4 күн бұрын
Не соглашусь. У заказчика есть потребность в определенной ценности, которая решает его проблему. Если каждый раз проект будет сдвигаться вправо, то просто найдут ему замену. Всему своё место, в том числе и рефакторингу. Если потребность в рефакторинге реально есть (не выдумана), то любой менеджер это поймет и не надо будет ничего скрывать.
@hardlandingtac
@hardlandingtac 4 күн бұрын
@@TV-xj5ke Вообще, каждый отдельный рефакторинг занимает небольшое время, в идеале час-два. Есть рефакторинги, которые просто нельзя не делать, чтобы добавить функциональность. Например, устранение дублирования при добавлении аргумента в метод. Вообще я ищу конкретные примеры, чтобы продемонстрировать. Так можно говорить конкретнее. Но есть рефакторинги которые тянут изменения на пару недель. Такие я часто вижу, когда прихожу на новый проект, который делали джуниоры. Вот тогда и начинаются психи со всех сторон, так вот прежде чем ворошить эту кучу говна, нужно хорошо подумать ... можно остаться виноватым, что все перестанет работать :) Менеджерам нужно понимать, что после рефакторинга это нужно будет перетестировать, на что они не готовы.
@writetoyourdestiny
@writetoyourdestiny 2 ай бұрын
Как я понял, этот курс является продолжением какого-то другого (базового) курса. Подскажите, плиз, как называется базовый курс, который нужно посмотреть, чтобы понимать, что такое activity, view и др.
@LidiyaHITS
@LidiyaHITS Ай бұрын
Более "базового" курса у меня нет, но про активити подробно рассказано тут kzbin.info/www/bejne/Z2Wsf4GqZsqqhNk начиная с 15й минуты
@terrjou8392
@terrjou8392 2 ай бұрын
так а жизненный цикл приложения Android ? с activity понятно, в интернете везде есть, а жизненный цикл приложения?
@LidiyaHITS
@LidiyaHITS Ай бұрын
Можно почитать вот тут developer.android.com/guide/components/activities/process-lifecycle или вот здесь www.vogella.com/tutorials/AndroidLifeCycle/article.html
@writetoyourdestiny
@writetoyourdestiny 2 ай бұрын
По поводу даунгрейда версий либ для билда, для таких же случаев докер используется, можно билдить в контейнерах
@LidiyaHITS
@LidiyaHITS 2 ай бұрын
Да, вариант хороший. Но от основной проблемы (проект тащил за собой библиотеку, которой даже в репозиториях уже нет, стандартными средствами она не подключается) не спасет. Так что... не используйте, дети, старые версии React Native
@-weird_thing-
@-weird_thing- 5 ай бұрын
классная лекция , очень понятно объясняете, спасибо! Расстроился немного , что у Тимофея нет вопросов(
@ВикторВердхаймер
@ВикторВердхаймер 5 ай бұрын
Котика то нашли? =)
@gabibli
@gabibli 6 ай бұрын
1:05:35
@gabibli
@gabibli 6 ай бұрын
Невероятно поучительная лекция, спасибо!
@ДмитрийМануйлов-й7ъ
@ДмитрийМануйлов-й7ъ 6 ай бұрын
Я искал вас полтора часа и, в итоге, нашел по 'uml'. Оказалось, мог сразу зайти в аккаунт и пролистать подписки. Но представляете, как впечатлён был? Кажется, при просмотре "Рефакторинг программного обеспечения 2023. Недостатки кода 1"))
@tark_wight
@tark_wight 6 ай бұрын
Да, касаемо того, что нужно и можно разобраться -- очень полезно. Мне нравится SwiftUI. Простой и красивый. Сейчас делаю (пока в заморозке) пару петроектов + те лабы, что у нас были осенью. Всё получается, всё красиво. Но понимаю, что с UIKit у меня туго и нужно его подтягивать сильно. Прям нужно. Но боялся, что сейчас меня не хватить просто напросто. Ибо я мобильщик в двух командах + на 1C нужно акцент сейчас сделать. Так же не хочу писать на SwiftUI просто потому что проще будет сдать так лабораторную.
@KlGleb
@KlGleb 6 ай бұрын
Это лучшее видео по диаграммам, которое я смог найти. Все понятно и с хорошими примерами. Большое спасибо автору!
@NIKOLAY_PSHONIA
@NIKOLAY_PSHONIA 7 ай бұрын
подскажите почему getString() getInt() работает а getFloat() приложение вылетает ?
@LidiyaHITS
@LidiyaHITS 7 ай бұрын
А можно больше информации? Где запускаете, что хотите получить... или текст ошибки из Logcat
@NIKOLAY_PSHONIA
@NIKOLAY_PSHONIA 7 ай бұрын
Спасибо. Ошибок нет все компелиться. private lateinit var pamyat: SharedPreferences // для сохранения настроек pamyat = getSharedPreferences("TABLITSA", MODE_PRIVATE) // таблица normaZerna = pamyat.getFloat("norma", 0.0f) ошибки при компиле нет но если запустить на планшете или эмуляторе нижняя строка дает вылет приложения normaZerna = pamyat.getInt("norma", 0) работает
@LidiyaHITS
@LidiyaHITS 7 ай бұрын
@@NIKOLAY_PSHONIA когда приложение вылетает, в LogCat пишется причина. normaZerna какой тип имеет? Значение с ключом "norma" какого типа было записано в память?
@NIKOLAY_PSHONIA
@NIKOLAY_PSHONIA 7 ай бұрын
Лидия спасибо. подключил мобилку все работает. но на планшете вылетает. пока планшет отложил
@АннаПарулава
@АннаПарулава 8 ай бұрын
спасибо за лекцию! особенно понравилась объявление горячих флоу)
@snikers1238
@snikers1238 8 ай бұрын
Здравствуйте, это лекции в каком то универе? Если да, то в каком?
@LidiyaHITS
@LidiyaHITS 8 ай бұрын
Здравствуйте. Томский государственный университет
@ара_вася
@ара_вася 8 ай бұрын
6:15 как мне кажется самое лучшше здесь это "агент"
@ДианаВерещакова
@ДианаВерещакова 8 ай бұрын
Очень классно) надеюсь котик был найден!)))
@АнастАсия-л7й4н
@АнастАсия-л7й4н 8 ай бұрын
Лисков тоже мой любимый принцип преподаю Технологию разработки ПО уже 4 года, 2 года назад меняла в учебной программе темы аж на 48 часов в сумме, туда вошли принципы SOLID и парочка шаблонов проектирования (модулем лекции+лабы) материал собирался по своим знаниям с универа, по каким-то методичкам и в целом со статей хабра и пободных площадок порой даже получалось допросить каких-то друзей или знакомых разработчиков, как у них в коммерческих проектах работает тот солид и нужен ли вообще тот рефакторинг, который я так яро пытаюсь ещё впихнуть в ТРПО (на данный момент моё учреждение образования дало мне вести предмет по выбору УО на 36 часов, куда я засунула мой любимый рефакторинг с полным погружением в легаси код, но это на 3м курсе, а этих знаний не хвататет уже на 2м) за солид и шаблончики я прям топлю и очень люблю поспортить со студентами и даже прятно удивлялась когда приходили и говорили спасибо за этот душнейший предмет, ведь на собеседовании буквально были мои вопросы экзамена либо банальные контрольные вопросы для защиты лабы ваши видео прям подарок от боженьки для меня, нравится ваша подача материала и то что о каких-то ньюнасиках я сама не знала
@LidiyaHITS
@LidiyaHITS 8 ай бұрын
Благодарю за фидбек, от коллеги вдвойне приятно) Здорово, что есть люди, которые продвигают такие важные темы в учебную программу. Курс по рефакторингу я тоже читаю, все лекции есть тут: kzbin.info/aero/PLC8N_Pqn_K3Y6q7ChnY3G6MFDddGWNkzu
@anaratakisiyev7514
@anaratakisiyev7514 9 ай бұрын
Привет у меня такой вопрос касается Андроид Студио. Хотелось бы чтобы вы показали на примере, у меня все не как не получается где то делаю ошибку. Я создал программу которая содержит нормативные документы. Учитывая текучесть кадров, мне надо сделать так чтобы по истечению определеной даты, при заходе в программу открывалась активити которая давала информацию что время работы программы завершено, просим вас обратится к разработчику для новой версии. А в новой версии уже буду указывать новый срок. Можете наглядно обьяснить это? я думаю такая функция многим нужна.
@LidiyaHITS
@LidiyaHITS 8 ай бұрын
Добрый день. Если нет никакой серверной части, можно просто при открытии главной активити проверять текущую дату на устройстве (не самый надежный источник, легко обмануть, но без сервера других вариантов немного). В случае, если дата позже "даты устаревания" - показывать блокирующий экран. Либо сделать умнее: при запуске приложения проверять, какая актуальная версия опубликована в магазине. Если она новее установленной на устройстве - показывать блокирующий экран и отправлять пользователя обновиться.
@КонстантинИсаченко-е3б
@КонстантинИсаченко-е3б 9 ай бұрын
Лидия Сергеевна, прошёл весь Ваш курс по рефакторингу. Огромное спасибо, что выкладываете лекции в открытый доступ. Вашим студентам очень повезло с таким преподавателем. Удачи Вам и здоровья!
@LidiyaHITS
@LidiyaHITS 9 ай бұрын
Большое спасибо за оценку) Очень приятно)
@cerulean1621
@cerulean1621 9 ай бұрын
10/10
@AlexandrMeshkov-k6l
@AlexandrMeshkov-k6l 10 ай бұрын
Потрясающий доклад. Всё что доходило по крупицам, я нашел в структурированном виде. Спасибо
@ИльяЛевин-ъ3ж
@ИльяЛевин-ъ3ж 10 ай бұрын
спасибо большое про корутины топ)
@tanercoder1915
@tanercoder1915 Жыл бұрын
Ааа, ещё, ещё кричали дети! Про татушку с шаблонным методом на неприличном месте я услышал и чуть чаем не подавился.
@8Johnny8Catsvill8
@8Johnny8Catsvill8 Жыл бұрын
Агния Огонёк ведёт лекции по паттернам. Чек
@КонстантинСупович
@КонстантинСупович Жыл бұрын
Топ контент и подача
@LidiyaHITS
@LidiyaHITS Жыл бұрын
Спасибо) рада, что Вам понравилось)
@AlexeyK16
@AlexeyK16 Жыл бұрын
Спасибо, помогло
@Степан-о4ь4ъ
@Степан-о4ь4ъ Жыл бұрын
видео топ
@atomix4731
@atomix4731 Жыл бұрын
Лидия Благодарю за видео
@alexstoun6185
@alexstoun6185 Жыл бұрын
Круто, крайне нужный контент. Спасибо.
@АлександрАлексеев-ы8ь
@АлександрАлексеев-ы8ь Жыл бұрын
а где вы учились всему этому? куда можно поступить на учёбу заочно, чтобы научиться андроид разработке?
@АлександрАлексеев-ы8ь
@АлександрАлексеев-ы8ь Жыл бұрын
жаль что обратная связь плохая с Вами (
@LidiyaHITS
@LidiyaHITS Жыл бұрын
Если нужна только Android-разработка, можно пройти один из курсов от компании (Яндекс и др.). Если нужен полноценное образование в области IT - нужно искать ХОРОШИЙ вуз. Я сама закончила Томский государственный университет по специальности "прикладная информатика", а Android изучала самостоятельно по документации.
@АлександрАлексеев-ы8ь
@АлександрАлексеев-ы8ь Жыл бұрын
это на котлине? если да, то посмотрю все видосы)
@LidiyaHITS
@LidiyaHITS Жыл бұрын
На Котлине)
@reloginn4911
@reloginn4911 Жыл бұрын
Полезно, жаль что я программист на Rust, и для меня эта информация из разряда развлечения. Думаю те, кто пишет на Котлине - оценят.
@chantreck
@chantreck Жыл бұрын
мама я в телевизоре
@chantreck
@chantreck Жыл бұрын
Мастер-класс по тестированию котлина лучший!!!
@kabylkas
@kabylkas Жыл бұрын
Лидия, у Вас очень крутые лекции! Благодарю! 🙏
@chantreck
@chantreck Жыл бұрын
Много интересных недостатков, спасибо! Насчёт неявного языка/дерева: в лучшем языке программирования Kotlin одна из главных фишек - это поддержка DSL, в которой такие структуры можно очень красиво сделать в функциональном стиле и всё супер-вау. Считаю, что про это можно отдельно сказать в следующем году!!
@chantreck
@chantreck Жыл бұрын
Спасибо за интересную лекцию. Начал понимать паттерн "Посетитель", даже появилась идея, где можно его применить в лабораторной
@chantreck
@chantreck Жыл бұрын
Спасибо за лекцию, очень интересно! Null Object все ещё очень странная вещь, никому не советую