SOLID давно пора переосмыслять. Люди справедливо теряются в расшифровках, а также упарываются в теорию, не осознавая что на практике у них все не так солидно. Все в мире работает не абсолютно, а в меру. И принципы, возведенные в абсолют наоборот, вредят реальным проектам. Как говорят китайцы - настоящее знанее - это знание достаточности. И мудрость разработки заключается в осознавании уместности и меры следования принципам и понимании где их нужно нарушить и ради чего. Тогда разработка будет живая, а значит адаптивная, гибкая и разумная. А значит еще и гуманная, внезапно)
@1Malak165 ай бұрын
Аминь. Подписываюсь под каждым словом.
@TimurShemsedinov5 ай бұрын
Любые знания и обобщения не переносятся в другие языки автоматически, даже в одном языке с ходом времени нужно все переосмыслять, язык меняется и уже мало кто помнит про псевдомассив arguments и variable hoisting, или про то, что setTimeout может принимать первым аргументом string, а кто помнит, то хотел бы побыстрее забыть об этом.
@oeaoo5 ай бұрын
@@TimurShemsedinov ну я занимаюсь джавой и у нас огромная масса теоретических зомби. Не хочу быть категоричным, но знаю точно - очень важно различать поверхностное знание ради самоутверждения от полезного знания, "личностно перпендикулярному".
@blackbirdchannel-c7b5 ай бұрын
Спасибо за хороший разговор
@artem_travlo2 ай бұрын
супер ❤
@kai.hexendorf3 ай бұрын
Не понимаю, чем так не угодили интерфейсы тайпскрипта. Пример DI принципа: interface IEncoder { encode: () => any } class FileEncoder implements IEncoder { encode() {...} } class FileStorage { private readonly _encoder: IEncoder constructor(encoder: IEncoder) { this._encoder = encoder } } Модуль верхнего уровня (FileStorage) и нижнего (FileEncoder) зависят от абстракции - IEncoder. Кстати, под абстракциями в ооп мы подразумеваем интерфейсы, абстрактные классы и обобщенные типы. Поэтому "конкретная абстракция" - это оксюморон.
@TimurShemsedinov3 ай бұрын
@@kai.hexendorf Я ни где на интерфейсы не гоню, их нужно использовать даже в js, и нас не должно даже останавливать, что в js они не явные, их можно описать .d.ts или jsdoc но все это для процесса разработки, потом в рантайме они все равно вычисляются как "форма объектов" но для рантайма важна даже последовательность полей, а не только имена и типы. А абстракции - даже переменная это абстракция над адресацией памяти, а цикл - абстракция над потоком управления. Конкретная абстракция - это то, что можно инстанциировать, ну вот ReadableStream, а есть и абстрактный класс Stream, который мы не инстанциируем напрямую.
@kai.hexendorf3 ай бұрын
"Мы описываем интерфейс, но вся асинхронная составляющая кода теряется. У нас для асинхронного кода нет никакого способа это декларативно описать - как будет работать промис, чтобы прочекать его правильное поведение". А зачем чекать? Идея интерфейса как раз заключается в сокрытии внутренней реализации. Для клиента интерфейса нужно знать как подписаться/отписаться на событие, которое произойдет в будущем, и его даже не должно волновать, будут ли там вообще промисы и как устроены микротаски. Не нравятся промисы, можно задействовать RX. В основе любой реактивной библиотеки лежит паттерн Observable, чьи интерфейсы элементарны и понятны. Не нравится RXjs, можно написать свой минимальный набор реактивных команд на тайпскрипте и дженериках.
@Ajax222able5 ай бұрын
Солидное видео
@RussellCrowe-rd5xi5 ай бұрын
Здравствуйте Тимур! Какую документацию по JS вы можете посоветовать новичку, MDN или же его аналог doka? Заранее признателен за ответ
@TimurShemsedinov5 ай бұрын
MDN лучше всего
@RussellCrowe-rd5xi5 ай бұрын
@@TimurShemsedinov А стоит ли использовать learnJS для подготовки к собеседованиям к примеру, или это не надежный русурс?
@He1ss5 ай бұрын
@@RussellCrowe-rd5xi learnJs прекрасный источник, с его помощью вы сможете успешно пройти любое интервью по javascript
@chikenmacnugget4 ай бұрын
@@RussellCrowe-rd5xi лерн жс придурочный ресурс
@ЕгорЯкименко-п6м3 ай бұрын
@@chikenmacnugget а почему, вроде ведь был не так плох?
@somnium24055 ай бұрын
Кстати странно, что empty element приобразовывается в undefined а не в null
@TimurShemsedinov5 ай бұрын
Это не странно, массивы в js, конечно, универсальная штука, но массивы объектов обычно маленькие, а большими бывают массивы чисел. Ну вот null это пустое значение для ссылочных типов, а undefined - для скалярных. Значит можно пренебречь тем, как обрабатываются маленькие массивы и оптимизировать дырявые массивы для чисел.
@KvN-UA5 ай бұрын
‼⏳ Сподобалась ідея зробити семінар і взяти конкретну задачу щоб chatGPT вирішував її в різних підходах / стилях, можливо мовах 💯
@johnstrayk52085 ай бұрын
Сколько же у вас свободного времени такие ролики делать
@TimurShemsedinov5 ай бұрын
Три таких семинара в неделю
@oleksandrivashchenko79165 ай бұрын
Ждём грасп
@TimurShemsedinov5 ай бұрын
Первая часть уже записана
@TimurShemsedinov5 ай бұрын
Получаем GRASP
@erjigit175 ай бұрын
Звук, пожалуйста исправьте микрофон
@TimurShemsedinov5 ай бұрын
А что не так со звуком?
@andreygazhala75775 ай бұрын
Всё ок со звуком
@TheLevius5 ай бұрын
@@andreygazhala7577 для уровня телефонного разговора да. Контента выходит много, а качество звука это важнейшая составляющая и за это время можно было бы озаботиться и вложиться в звуковуху и микрофон, а не сидеть с гарнитуры
@TimurShemsedinov5 ай бұрын
@@TheLevius дело в том, что это семинар, а не контент, я вообще контент не выпускаю
@TimurShemsedinov5 ай бұрын
Микрофоны rode и sennheiser на полочке стоят, но это не удобно и я не вижу разницы в звуке, на них и на pixel buds
@dimapopov59625 ай бұрын
1:00 Немає інтерфейсів в JS.
@TimurShemsedinov5 ай бұрын
Те, що їх нема, це не не привід їх не використовувати