#39 Как писать JS-код, который не будет тормозить? Советы от Demi Murych | Максим Бобров

привет друзья с вами Кирилл Мокевнин ведущий подкаста Организованное программирование и сегодня у меня в гостях Деми Мурыч я думаю его можно особо не представлять все знают видели и есть какое-то да понимание о том что это за человек но Деми Морыч у нас реверс инженер а много чего интересного знает пожил повидел посмотрел точнее да и сегодня мы поговорим много на какие темы я изначально а когда готовился к подкасту я посмотрел разные видео я кстати раньше не пересекался да то есть как-то вот ну так получилось что свою карьеру где-то параллельно мы там находились ты в одном месте я в другом и сегодняшнюю тему мы с тобой заявили как производительность Джеса изначально и мы об этом естественно поговорим но просто зная тебя зная как ты строишь видео и как ты классно можешь всякие темы обсуждать я уверен мы с тобой много о чём поговорим куда даже в какую сторону пойдёт не знаю но попробуем по крайней мере сделать так чтобы это не было повторением там предыдущих подкастов то есть мы будем стараться зацеплять какие-то другие темы смотреть как-то по-другому обязательно кстати про ЕИ надо будет поговорить сегодня нам с тобой потому что эта тема ну как без неё в современном мире и как она влияет на нас и есть у меня что поэтому вам сказать истории да так что короче попытаемся сегодня в целом расслабленно с байками с историями всё это сопроводить ещё раз привет рад что ты на моём канале здоров здорово скажи что-нибудь до того как мы начнём если хочешь что-нибудь сказать да да привет давай давайте поговорим пока я ещё жив всё-таки да ты кстати напугал текстом это шутка была или по-настоящему нет что-то конечно по-настоящему у меня там у меня в общем-то на канале все люди знают достаточно уже давно что я с этим сражаюсь у меня я сейчас буквально сейчас можно сказать из этой комнаты отдыха в почти что в больнице ээ вещаю там все стараются помогать со всех сторон там и так далее и тому подобное да нет сейчас перспективы уже хорошие да ну отлично в любом случае как бы я знаешь как для себя тоже вот иногда формулирую когда думаю о таких вещах что одно из самых главных вещей ну помимо там детей и всего такого это конечно наследие которое ты оставишь чтобы другие люди могли в общем делать свою жизнь лучше на базе того что ты сделал и вот сегодняшний наш выпуск в том числе в эту копилочку должен будет немножко добавить я по-другому немножко думаю я думаю что самое главное для жизни человека - это чтобы он был счастлив в тот момент когда он живёт по крайней мере и главное чтобы его счастье не мешало другому счастье другому человеку а там чёрт его уж знает да это такие сейчас философские деды я можно сказать кстати тоже немножко в деды перехожу мне как раз 40 недавно исполнилось и я такой так всё народ уже начал посмеиваться на эту тему согласно новым стандартам ВЗ Да да молодой человек считается до 45 лет так что у тебя ещё вся жизнь впереди пида да давай не сейчас вот прям хардкорно возьмёмся за жесть и потом пойдём по так сказать по наклоно в сторону расслабления ты сказал что что-то очень серьёзное по производительности произошло в Джеси и ты прямо хотел очень поделиться этим давай а я адвоката Дьявола поиграю немножко да я хотел просто обозначить одну очень важную вещь что в то время когда я запускал свой канал который назывался S4 JS такая вот игра слов S4 JS одно из первых видео или чуть ли не самое первое которое я записывал была связана с тем с очень такой провокационной темой где я заявлял о том что в JavaScript есть три возможности декларировать идентификаторы Warlet и Const war - это та которая существовала со спокон веков конс не появилась не так давно лет шесть или семь назад и я заявил о том что это большая проблема с производительностью у вас может возникать если вы используете конст в то же время когда современные видео и люди с авторитетом которые заработали блогеры или в книжках писали о том что про вар вы должны забыть а это конство вы должны использовать и вот тогда я выступил с одним из этих видео за которые меня постоянно пытаются шпынть тыркать палками там и так далее о том что нет и конст хорошо авар плох и где-то год назад приблизительно появился пост заявленою для компилятора Typesриpt где товарищи которые пишут этот компилятор ТСЦ написали что у них просадка в производительности приблизительно 10-15% в то время когда они используют LED и конст против ВАР и где-то через полгода в 2024 году в где-то в июле в июне месяце автор V8 а V81 - это это один из самых популярнейших агентов исполняющих JavaScript код от Гугла который в браузере присутствует в носут они выпустили отчёт в котором говорили что они очень сильно поборолись за то чтобы избавиться от от этих 10-15% и вот канал мой этот существовал уже лет пять наверное всё это время постоянно там возникали видео один за одним относительно того что вот вар - это высокая производительность кост - это низкая производительность были разные замеры ээ перформанса совершенно с разных сторон споры на эту тему и вдруг вот ставится жирная точка когда выпускается новая версия V8 где в отчёте V8 написано что они очень сильно постарались и сократили издержки с этих 10-15% там до 5% это была большая жирная точка я ещё считаю что не зря прожил свою жизнь рассказывая об этом людям прикольно есть только тако знаешь наверное с практической точки зрения у меня такая мысль по этому поводу а ведь 100% когда они про это говорят речь идёт про бенчмарки в которых у тебя происходит это что-то в очень массивных циклах когда у тебя например миллионы оборотов оборотов говорю итераций далеко далеко не так всё просто сейчас я сразу тебя прерву это то что очень многие не учитывают дело всё в том что с появлением ES15 в языке JavaScript появилось очень много таких вещей которые связаны с правилами которые называются правила STAКICs то есть это те правила которые должны быть применены к нашему исходному коду на языке JavaScript ещё до того момента когда этот код начал выполняться если до этого до момента появления LED constт который выполнял JavaScript код взяв наш например бандл на несколько мегабайт агрегированного JavaScript кода мог выбирать из него только маленькие кусочки которые только сейчас будут выполняться и их можно было анализировать и с ними как-то можно было поступать то в случае с lett constсь правила которые потребовали в обязательном порядке полного анализа всего бандла для всех и конс И это одна из основных частей связанных с просадкой с производительностью не только то что происходит в рантайме в момент выполнения кода но и то что происходит в момент подготовки этого кода и одно дело взять 100 Кб из двух-трёхмегабайтного бандла и с ним что-то сделать а другое дело на накладывается на вас обязательства что вы должны проанализировать весь бандл это был настолько сильно большой удар по производительности что первые версии V8 от того же самого Гугла игнорировали эту часть спецификации и не применяли эти правила до тех пор пока они не придумали обходной путь каким образом сделать так чтобы не сильно просесть по производительности но даже придумав этот обходной путь у них всё равно остались те самые 15% которые долгое время люди как бы относительно говорили: "Ну есть и есть нет и нет" пока вот вдруг не заговорили в Typeesриpt появилось Ишью в Ангуляре появилось Ишю о том что они для своих компиляторов или транскомпиляторов э начинают склоняться к мнению что они должны избавиться от letк Hons в пользу и вот это в конечном итоге привело к тому что V8 очень сильно над этим поработали вот что я пытался сказать то есть не толькойм раunтайм-то конечно это тоже да и там есть ещё очень много условий где особых условий при которых действительно существует эта разница между варлет варлет и конс не так всё просто но а одна из существенных вещей благодаря которым эта просадка производительности происходила было связано в в силу того как этот код анализируется при своём запуске в самом начале ещё ещё до самого старого всё я понял да ну в рантайме мне тогда здесь абсолютно понятно и да как только появились нормальные импорты которые статически должны были анализироваться то понятно что тебе надо загружать всё и я например про это не знал действительно что Ну кстати тут ещё такой момент что это и нормально то что многие не знали по одной простой причине долгое время ведь всё транспилировалось в вары и более того и сейчас никто не мешает этого делать и более того это вообще-то не должно приводить к проблемам то есть получается что по большому счёту это кстати одна из самых приятных черт вообще в экосистеме Джеса если вдруг может быть кто-то не знает что у тебя транспайлеры же вообще являются нормой да в отличие скажем от большинства других языков в зависимости от того как организовывают люди свою работу но в большинстве случаев да в продакшене конечно же сейчас из Тайпскрипта и так далее в любом случае используют транспайлеры то есть они не пишут код на чистом языке JavaScript что в моём случае лично я утверждаю что это очень плохо я считаю что Typees Я считаю ну это моё личное мнение а я помню ты говорил ты говорил что ты не хочешь чтобы Но ты говорил что Typeescрипты не хочешь чтобы внедряли в JS я это помню не хочу в настоящий момент времени от Microsoft периодически поступают предложения внести в спецификацию языка JavaScript описание типов подобно тому как они описываются в языке Typesриpt я этого не хочу чтобы это происходило именно так потому что это путь в никуда это привязка к тайпpeскрипту и не и отсутствие решения основных проблем языка JavaScript это не в этом дело что же такое Typpeрипt typesриpt - это ээ штука которая накладывает дополнительные ограничения на программистов и эти ограничения могут быть очень полезны в том случае когда у нас большое количество программистов и их квалификация недостаточно высока любые дополнительные ограничения которые на нас накладывает окружение заставляют нас совершать меньше ошибок а если мы их совершаем то сигнализировать об этом но Typeesриpt - это костыль который появился как необходимость как ответ на запрос и тут нужно эту проблему решать не при помощи костылей вроде бы вроде тайпскрипта путём реформации самого языка и реформация этого языка не в сторону того чтобы повторить Typeesрипt а в в сторону того чтобы вводить статические нормальные статические типы в язык JavaScript об этой революции говорят очень много есть существуют даже патчи которые накладываются на V8 которые показывают как могут существовать статические типы и так далее и тому подобное сейчас мы об этом поговорим да а если просто завершить историю про вот эту часть производительности то есть у нас в принципе есть так если подводим итог статический импорт который приводит к полному анализу бандла и скорее всего кроме консталлета там ещё какие-то есть конструкции которые тоже попадают под это да частичное решение - это в транспайлерах просто настройку поставить типа компилируй в старый JS сварами и это спасёт хотя бы и как бы по идее даже сломаться не должно по идее вот если там конечно снаружи что-то не полезет туда вот а в самом рантайме как будто бы вот как я себе это вижу если у тебя там ну там нету в момент работы такого объёма обычно всё-таки переменных чтобы это было насколько существенно если ты там не обрабатываешь в циклах огромные объёмы информации как знать если взять Google Docs один из очень больших проектов написанных на языке JavaScript который выполняет гигантский объём работы и действительно является полезным для большого количества людей и решающих их проблемы там количество идентификаторов которые подпадают подто больше полутора млн 1,5 млн он кстати не на ГВТле написан что такое ГВТ гвт это ещё сейчас скажу тебе когда я работал в 2010 году это в общем короче когда ты пишешь на Джаве и он транслируется в во фронт не могу тебе сказать точно на ничего на этот счёт знаю точно что он собирается при помощи Google клажур компайлера вот ГВТ его использовал это вообще по-моему из него вытащили мне просто я точно помню что он был на нём написан изначально просто мы использовали эту технологию это ещё до появления фронтэнда как такового фронend писали таким образом ну Java FX если ты помнишь сначала была потом он ГВТ был а потом конечно всё это поумирало но оно осталось потому что много проектов с тех пор создали вот оно-то уж точно в вар превращало но ты прав да то есть получается что такие интенсивные скажем редакторы 100% под это попадают с интенсивной работы это же очень большой проект и если там пол млн идентификаторов то представим себе на секунду что эти эти идентификаторы из варов превращаются в леко конста это каждый запуск каждый анализ этого конст добавляет это как я говорю JavaScript производительность это как в та в той поговорке: курочка по зёрнышку вечером весь двор в мусоре так и в языке JavaScript постоянно происходит вроде бы как вар и конста не отличаются в производительности но вроде бы как не очень сильно и можно этим пользоваться но когда ты вдруг представляешь что у тебя 15 млн этих идентификаторов на весь этот здоровенный проект то это уже становится заметно ну тут вопрос ещё в том что с какой интенсивностью вот конкретная работа с ним приводит к задействованию какого количества да да опять же я хочу подчеркнуть весь этот все эти рассуждения не имеют никакого смысла теперь потому что смотрим в разработчиков тайпскрипта компилятора ТС где они подняли вот такую тему по этому поводу и собирались переходить уничтожая всеты консты на вар или в Ангуляри точно такая же тема это уже не мои уже мои на коленке собранные какие-то бенчмарки это уже люди которые постоянно работают с этой самой темой и они признают для окружающих о том что у них возникла такая беда и ладно бы они ээ люди которые пишут V8 Runime они предприняли большое количество усилий в 2024 году за которые потом отчитались о том что они смогли сократить издержки на почти 10% о'кей да я конечно у меня возникают вопросы о чём идёт речь потому что так на 10% при загрузке кода и до как бы до начала исполнения или во время потому что это очень большая разница да у тебя когда есть Да совершенно верно разница очень большая там действительно если погружаться в детали нужно смотреть именно эти детали и вникать в то что происходит опять же ещё раз подчеркну с теми же самыми и конст есть очень большая проблема не проблема а дифференциация связанная с тем что эти издержки проявляются тогда и только тогда когда ваши идентификаторы используются за пределами области того окружения где они были определены если вы используете LED const в одной и той же области там же где они были определены то никаких никакой разницы там не будет в производительности от слова совсем условно говоря если вы объявили какой-то конст за пределами функции а потом этот идентификатор используете внутри функции вот там по появляются те самые издержки это уже как минимум Да да ко когда замыкание начинается кстати в PHP Да да да совершенно верно знаешь как решили эту проблему с производительностью потому что они об этом подумали а когда PHP он же в принципе развивался последние много лет очень активно да я слышал что там они очень сильно переработали так вот по сравнению с Да они когда они это единственный язык просто у меня в этом плане знаешь такой широкий послужной список языков с которыми я работаю вот PHP один из них и там ещё давно они сделали следующую вещь они не хотели делать как в Джейсе как в Пайthне что это вот настолько безумие когда у тебя неуправляемый ну переменный которые ты можешь брать и они сделали по-другому то есть если ты хочешь что-то замкнуть у тебя после определения функции прямо есть такое понятие как use ага да да именно в лямдах да ты пишешь и должен обязан просто их перечис Дадада интерпретатор что конкретно тебе нужно использовать ну с одной стороны да с другой стороны чёрт его знает ну это можно автоматически как будто бы да определять оптимизатор да современный оптимизатор того же самого V8 отлично с этим справляется проблемы на него накладывает-то как раз не не способность его с этим справиться а спецификация которая написана таким образом которая заставляет его действовать таким образом хотя знаешь что самое смешное вот когда про это думаешь дай чучуть помусолим ещё немножко эту тему если у тебя конст нессылочный то вообще-то по идее там производительность должна быть просто максимальная типа без возможности оптимизировать дальше это же просто константа дело это не константа в том-то всё и дело если без без референса в языке JavaScript const - это всего лишь-навсего объявление иммутабельного идентификатора в рамках той области видимости где он был объявлен только появляется следующая область видимости следующее окружение всё этот конст и интерпретатор понять не может это это иммутабельный конст немутабельный заново он появился не заново динамическая природа языка JavaScript не позволяет интерпретатору знать в момент вызова функции тот идентификатор который используется внутри функции это тот идентификатор который был объявлен когда-то как конст или нет это ж то что избивает с толку это я называю отвратительным дизайном люди смотрят на конст и думают что это константа а это ни фига не константа ну да ну я же как раз именно про это сказал что если он не референсный то есть мне кажется они все референсные да не все референсные но я имел в виду как раз эту тему что вот это V8 же супероптимизированный и по мне если это реально бы стало проблемой но они точно могли бы это решить то есть я не вижу технических препятствий для того чтобы при присвоении внутри они там в структурку дописывали что это Проблема заключается в том что когда ты вызыва обращаешься к этому идентификатору внутри например какой-то другой функции то V8 не может знать в какой момент времени вызывается эта функция и к какому именно идентификатору за пределами текущего окружения обращается та самая функция он должен каждый раз себя перепроверять и этот каждый раз перепроверять это и есть та дополнительная издержка в 10-15% которая и возникает является ли это тот идентификатор который был когда-то объявлен как констли или не тот идентификатор какой-то другой идентификатор который просто совпадает именем но выходит за пределы текущего окружения в этом-то вся и разница да ему по окружениям надо прыгать ещё это в любом случае да бежать по окружениям и в конечном итоге приходить куда-то в случае вары этого нет потому что там просто нет таких ограничений поэтому не надо выполнять дополнительных проверок вот такие вот это да в этом смысле кстати вар - это такой типа из серии А вси-то было неплохо да когда у тебя все определяешь у тебя просто в глобальном пространстве есть бесконечный набор переменных по поводу того что ты говоришь существует такой любопытный хак в V8 каким образом объявляются на на самом деле константы которые V8 при работе с вашим кодом и берёт как константу объявляется стрелочная функция возвращающая одноединственное значение и больше ничего не делающее например мы хотим иметь константу P то мы объявляем стрелочную функцию или любую другую функцию которая всё что делает это делает retтуn 3 и там 14 и больше ничего и тогда V8 в процессе где когда мы работаем где-либо и вызываем функцию там getпи две круглые скобочки он сразу же для себя понимает что это та функция которая там когда-то существовала она никак измениться не может возвращает всегда один-единственный результат и вместо вызова этой функции инлайном заменяет на результат этого значения и получается реальная константа ну только что слегка через одно место да ну кстати вот я то же самое пока мы разговаривали думал что константы точно так же если опять же умный сделал чуть поумнее вот эту трансляцию можно просто инлайнить если даже не на уровне V8 то можно на уровне тайпскрипта и так далее да совершенно верно ну Typeesрипt вообще пошёл не тем путём они вообще этим не занимаются что очень зря они сделали а вот один из последних сейчас же ж V8 четыре компилятора процесс там Ignition Spark Plug маглев турбофан четыре четыре разных процессов которые проходят проходит наш код от Джаваскрипта до машинного кода и вот Маглев который недавно появился он недавно вот не меньше не больше года существует он стал очень активно стараться делать именно то что о чём ты говоришь предполагать и делать эти инлайны чем больше чем дальше тем больше хорошо а нормально копнули ребят э напишите что вы об этом думаете насколько вы подобные вещи упирались и в ваших проектах что такое случается потому что я подозреваю знаю проекты с миллионами строк кода которые возможно на таком уровне действительно впираются и нужно об этом думать но давай тогда просто сейчас ещё обобщённо производительности то есть это тема некая которая такая скажем у тебя просто изначально была а если говорить в целом то есть вот сейчас постоянно про это говорят постоянно сравнивают да что вот производительность там у тебя плюс ещё появляются возможности дополнительные сейчас вот веб-бвокеры всё активнее активнее начинают использовать но вообще в целом что ты скажешь про общее м общую историю связанную с производительностью как будто бы не становится такого что у тебя софт становится быстрее я например чисто как пользователь могу сказать так: "Меня бесят эти спашные все приложения пото что они тормозят и тупят как не в себя" правильно я это то что меня возмущает очень очень сильно потому что люди которые их пишут вообще не думают о производительности и виноваты в этом в первую очередь-то как раз не сам язык а вот разработчики например V8 которые в самое с десяток лет назад сделали тезис: "Ребята пишите JavaScript код как как вы привыкли а мы уж напишем ээ достаточно сильный оптимизатор который справится с вашим с вашим кодом и сделает его быстрым" и как как показала практика нет ребята не справляйтесь у людей настолько гибкий и изощрённый ум что они пишут код таким образом что приходится создавать целые конференции объясняя людям как надо писать код на языке JavaScript чтобы его интерпретирующий компилятор или оптимизирующий компилятор мог приводить к высокопроизводительной форме об этом кстати ещё говорил ээ Кнут по-моему помнишь эту фразу э-э предварительная оптимизация корень всех зол так вот он эту фразу говорил не выдавая индульгенцию людям: "Пишите код как попало" а потом будете его оптимизировать когда упрётесь в производительность он эту фразу сказал в рамках статьи в которой он учил программистов тогда писать код образом при котором компилятор бы понял ваш код и оптимизировал его так как надо он имел в виду не пытайтесь сами вручную приводить этот код к максимально машинно-эффективной форме знайте свой компилятор и зная свой компилятор пишите код в форме который бы компилятор понял и оптимизировал этот код так как надо потому что придут новые технологии а компилятор у вас изменится и ваш код будет заново компилированно в случае интерпретированных языков это вообще становится всё гораздо проще каждый раз что-то новое появляется тебе код переписывать не нужно v8 самый главное пишите код так чтобы компилятор не путался и знал что с этим кодом делать то что сейчас пишут люди это на уши не натянешь громаднейшее количество вещей которые люди в принципе не понимают в самом вот например знаешь библиотеку React например такой очень популярный сейчас в разработке фронт мне кажется я один из первых разработчиков Реакта в России в 2013 году уже продакшн у меня на реакте был не так давно года два назад даже на уровне Реакта в блоге V8 писалась вот такая здоровенное полотно текста где они объясняли разработчикам Реакт и рассказывали всю историю относительно того каким образом нужно было переписать определённую часть вещей потому что произошла очень большая деградация с точки зрения производительности не деградация как это правильно слово называется ну на правильно ты говоришь v8 они писали они сами начали разбираться и показали программистам React как они написали целый кусок кода который приводил к тому что V8 оптимизирующий компилятор V8 не мог справиться с этим кодом он не знал что с ним делать и он его опускал до самой простой самой примитивной формы из-за чего он начинал работать очень а помнишь кстати мне интересно какой что за кейс такой был что там было v8 - это на ули Нет я име ви что в реакте конкретно написали то есть там всё сводилось как обычно в первую очередь к очень простой вещи потому что когда вы передаёте какой-либо параметр функцию нет нет когда вы передаёте какой-либо параметр в функцию то и это эта функция выполняется достаточно часто что с точки зрения терминологии V8 называется функция стала горячей очень часто повторяется он принимает решение о том что её нужно оптимизировать и оптимизирует её в опираясь в первую очередь на статистику собранной информации относительно того какие данные передаются в функцию и если в функцию передавались условно данные постоянно числовые а потом вдруг через тот же самый идентификатор передаётся строка в эту же самую функцию то это приводит к тому что оптимизированная функция которая была оптимизирована под число получая вдруг параметр в строку туда же передающую попадает в состояние при которой весь этот код машинный который был сгенерирован нужно взять и выкинуть нафиг и и писать заново и это ещё не самое страшное потому что тогда V8 становится ещё чуть умнее он создаёт два варианта функции: под строку и под число это хорошо когда просто строка или число а когда вдруг это связано с объектами то передаваемые объекты внутрь функции количество форм этих объектов настолько может быть большим что V8 через определённое количество времени это у них называется мономорфное представление функции полиморфное представление функции и потом он просто отказывается если формы объектов которые передаются в эту функцию становятся настолько разными что он уже перестаёт создавать эти варианты оптимизированных функций это я очень общеа абстрактно говорю чтобы не углубляться в детали то он просто сбрасывает это всё в сторону обычного интерпретируемого кода и теперь мы себе представляем функцию которая тысячи тысячи раз вызывается внутри самой библиотеки React и А8 отказался её оптимизировать то есть привести к машинному хотя бы к машинному представлению и каждый раз просто как интерпретатор её проходит насколько сильно это сказывается в случае производительности кому интересно детали ээ блок V8 разработчиков называется V8 вы просто пишите в Гугле сайт двоеточия V8.de и пробел React и вы тут же попадёте на эту их статью где они рассказывают все подробности о том что у них произошло ну мономорфизац это история которая из при перегрузке функции при параметрическом полиморфизме часто происходит это касается не только дже и действительно джит с ума сходит если у тебя такие изменения происходят в этом плане кстати а вот смотри без относительно того как конкретно Typeesрипt реализован всё-таки когда у тебя появляется чёткая структура он автоматически очень сильно повлиял на производительность тем что у тебя структурировано всё заранее это то что меня поражает больше всего когда появился Typeesриpt например я предполагал что они приведут это карбланш с точки зрения производительности вы же дали людям типы описание этих типов и вы же их лично заставляете делать так чтобы эти типы всегда совпадали при вызове этой функции иначе он не работает но компилятор ТСC этим не пользуется и он генерирует какую-то кашу из кода ээ которая иногда совпадает иногда не совпадает они вообще не обращали на это внимание громаднейшее количество времени сейчас компилятор с Тайпскрипта никаким образом не приводит код тайпскрипта к JavaScript представлению максимально производительному он как будто бы вообще на это внимания не обращает они сосредоточились на функциональности которая может предоставить сам по себе Typeesрипt и почему-то совершенно отказались от того что могло бы сделать их Понятно там тоже не бесконечные ресурсы для разработки я просто понимаю что сейчас приоритетно я наверное согласен с ними приоритет на переписывание а для того чтобы он ускорился а там же ускорение просто дичайшее и они в течение года хотят его выпустить ну блин это очень круто то есть когда сколько там 10x компиляция будет или там даже больше там какие-то цифры безумные они показывали а дальше я думаю они займутся ну нас что волнует компиляции или нас волнует чтобы мы могли запускать браузер не с тремя вкладками и они ставят наш современный процессор 64 Гббайтами оперативной памяти раком или всё-таки приводит это в какое-то состояние при котором это работает а оно же может работать гораздо эффективнее оно же работает таким образом не потому что этого сделать было нельзя а потому что люди не умеют этого делать вы это меня бесит это меня с ума сводят го ну друзья пожалуйста ну вы у вас современные компьютеры ну ну ну дайте себе труд хотя бы элементарные вещи по этому поводу выучить кто вас там просит профилировать код до этих миллисекунд ну хотя бы ну штуки которые о чём мы говорим вы посмотрите на современный YouTube он же жеж точно такой же сумосбродный с точки зрения производительности и потребления ресурсов ну приложения стали большими что тут говорить кстати сам язык по себе и вот эти оптимизации а с моей точки зрения это в идеале инструментальное решение то есть когда всё-таки сама система тебя заставляет делать нормально ну вотрипт один из примеров а он грубо говоря он в принципе заставляет писать нормально если ты эни там не используешь и дальше это вопрос уже разработчиков тайпскрипта поэтому это круто когда головную боль убирают с разработчиков и они могут об этом не думать но у тебя как ни крути при этом есть огромная экосистема проектов Реакты например всё что вокруг него и вообще его концепции которые и например стейт-менеджеры да которые могут быть ну просто дико неэффективные потому что когда ты берёшь помнишь вот эта история я просто вот эту историю я прошёл по полной программе когда мы начали писать в тринадцатом году на Реакте например вот редактор Хекслета в продакшене в тринадцатом году уже мы выпустили на реакте я думаю что мы одни из первых в России кто вообще в принципе продакшн на реакте сделали просто тогда мне Ангулар не нравился я очень быстро свичнулся потому что мне буквально через месяц после релиза Реакта была версия 0012 что ли 11 что-то такое так вот а ты помнишь тогда же не ни флакса ничего такого не было и типа а как управлять стейтом и соответственно появился очень быстро редакс ну через какое-то время и вся же концепция пошла в чём а а я ещё как бы с бэкграундом функциональным и мне как бы вообще неизменяемость вот это всё я просто счастлив когда я работаю после там эрлангов эликсиров и всяких клош и я такой смотрю и думаю: "О круто" и мы начали во все поля использовать редакторский подход ну ты помнишь сколько потом было статей на эту тему насколько когда ты начинаешь объекты ресты эти спредоперации использовать к чему это стало приводить и когда пошла вот эта массовая история: "Остановитесь ребята давайте снова приходить к нормальной мутабельности" я это просто к чему хотел сказать что а гораздо больше чем язык мне кажется сейчас влияет огромное количество самих концепций которые ну в какой-то момент может быть неудачно пошли мы их все юзаем и изменение вот этой фундаментальной штуки оно кардинально приводит к улучшениям возьми тот же виртуальный дом я бы расширил твою мысль до того что не столько громаднейшее количество концепций сколько люди которые не понимают когда и когда и при каких условиях их применять когда это повлечёт за собой проблемы а когда это можно совершенно спокойно использовать в своём собственном коде одно дело когда вы пишете я говорю программирование нужно начинать не с того что учить человека языку программирования а с того чтобы научить его профилировать свой код хм чтобы он получал цифры относительно того как его программа которую он в будущем начнёт писать он получал цифры чего стоит выполнение его программы по крайней мере для интерпретируемых языков программирования таких как JavaScript там Python и и прочее знаешь у меня за эти годы конечно поменялось отношение в этом плане к разработке а тут ни в коем случае тебя не убеждаю просто понимаешь что мы а скажем по-разному немножко на это смотрим то есть как бы со временем вот это вот мастерство когда у тебя были очень крутые специалисты они всё делали сами у тебя растёт уровень абстракции растёт уровень автоматизации вот искусственный интеллект и так далее то есть я не считаю что вот эти вот ребята сейчас которые занимаются прикладной разработкой - это разработчики в чистом виде как это было когда-то то есть это нормально что они ну скажем знаешь вот есть такое понятие код да и например у меня в компании работают специалисты которые только этим занимаются то есть они такие как бы не до конца разработчики то есть они пишут код интеграции опишки микроскрипты внутри систем но они не пишут полноценные приложения и реально там уровень программирования ну как бы сильно несопоставим с девелопера способны да ты на коленке для себя это пишешь что ради бога язык джаваскрипt - это полнейшая анархия одно и то же можно решить десятком разных способов но когда ты пишешь код который используют тысячи других людей это же грманейшие последствия поэтому сейчас есть разделение в этом плане труда вот я наверное про что у тебя действительно такие спецы должны быть это важно но их количество не должно быть таким большим потому что ты когда берёшь например не знаю какой-нибудь крупные маркетплейсы а вот мы с ребятами как на конфе встречались ребята делают это конечно не marкетплейс но ДЗН вот этот новостник да со всякими штуками а и мне человек говорит: "Вот мы там там чуть ли не команда над одной страницей работает вот какая-то такая там история" просто потому что функциональности огромное количество но в целом это не то чтобы какой-то космос да есть какие-то люди то есть у тебя как бы вот это разделение на архитекторов ещё что-то уже начинает появляться в рамках в казалось бы то что раньше просто называлось одним приложением ну типа вот просто сайт уже не просто сайт я думаю что очень сильно решит эту проблему решило бы эту проблему в случае языка того же самого Джаварипта это как раз статическая типизация введение статических типов сняло бы громаднейшую нагрузку с интерпретатора и с всего того как он должен оптимизировать этот код ну это так это уже не давай как раз мы с тобой уже начинали и мне кажется пора переходить вот в следующую эту тему да мы плавненько по подобрались расскажи свою идею ээ я я пока ассоциативно не понял что ты имееш вду когда ты говоришь про статические типы но не Typeesрипt вот раскрой пожалуйста статические типы которые существуют на уровне самой спецификации языка не на уровне транскомпиляции на уровне спецификации когда мы объявляем идентификатор и говорим например что он будет у нас всегда связан с числовым типом то оптимизирующий компилятор как совре как работают современные оптимизирующие компиляторы по крайней мере в Питоне и в языке JavaScript это называется спекулятивная оптимизация они понятия не имеют как какие данные могут быть связаны с этим идентификатором они вынуждены некоторое время собирать статистику относительно того какие данные с этим типом связаны на основании этой статистики они потом генерируют машинный код который опирается на эту статистику одновременно с этим они должны ещё генерировать дополнительный код который контролирует а вдруг этот идентификатор теперь связан с каким-то другим новым типом захотелось человеку вдруг его теперь связать со строкой или с каким-либо другим объектом и тогда весь этот машинный код который фактически является как как бы откомпилированной версией вашего языка JavaScript нужно взять и выкинуть а когда у нас появляется статическая типизация когда на уровне спецификации языка зафиксировано что я этот идентификатор объявил как числовой или как объект вот такой-то формы и он больше никогда меняться не будет то нам не надо ни собирать статистику нам не надо ни контролировать что у нас что-то случится не так с этим типом оптимизирующий компилятор сразу же может взять этот идентификатор и собрать машинный код который будет таким всю весь цикл функционирования этой программы это решение гигантского количества издержек пример эээ в существует такая версия V8 называется V8 Lite v8 Lite - это сборка V8 из которого был выкинут полностью оптимизирующий компилятор то есть все вся попытка сбора статистики вся попытка сбора оптимизации этого была просто выброшена отключена это привело к тому что некоторое количество значимое количество больших проектов стали работать быстрее а не медленней почему потому что оказалось что издержки на сбор статистики каждого про каждый идентификатор принятия решений оптимизации и деоптимизации оказывались при определённой форме кода настолько значимыми что лучше было это просто выкинуть и не подключать вовсе статическая оптимизация снимает все эти проблемы она заранее говорит оптимизирующему компилятору о том что с этим делать и это никак не изменится вот почему это снимет большое проблем что такое Typeesрипt typeesрипt это он же ж на процессе транскомпиляции имеет э информацию о типах когда он собрал JavaScript код он просто привёл этот код как определённому виду оптимизирующий-то компилятор на языке Java который внутри в V8 находится он всё так же пытается собирать статистику и принимать решение если мы внесём это в спецификацию если у нас появится не strict а use там какой-нибудь superstct m где у нас появится те самые статические типы где мы будем гарантировать что у нас вот такой-то объект такой-то формы и он никогда меняться не будет и он связан с такими-то полями с такими-то типами то оптимизирующий компилятор говорит: "Слава тебе Господи я даже думать об этом не буду я сразу генерирую машинный код зная как складывая два числа я буду всегда складывать два числа и и не попаду в ситуацию где у меня два числа окажутся двумя строками которые я должен провести конкатинацию как это в языке JavaScript есть ну ид это да это классно что ты это объяснил но мой вопрос как раз-таки был дальше то есть просто ты сказал такую вещь что я не хочу чтобы та там Typeesрит был поэтому я и пытался понять то есть когда ты про это говоришь а чем тебя не устраивает концепция именно того что Typeesрипт это сделал я объясняю потому что Typeesрипtт который сейчас затягивает спецификацию он не делает типы статическими он в спецификацию прописывает как это называется декларативность в комментариях описание возможности того как вести как обращаться к к этим идентификаторам гарантии того что твой написанный комментарий к нашему блоку кода например к этой функции который описывает эти типы и что этот самый тип внутри этой функции будет использоваться именно так а не иначе нет никакой это это попытка прибить Typeesриpt гвоздями к языку JavaScript чтобы сохранить это теория заговора надели шапочку из фольги слушай я уточню попытка очередная попытка Майкрософта оставить за собой доминирование на рынке понял я просто тогда уточню потому что я понял что возможно мы говорим немножко о разных вещах то есть ты сейчас говоришь именно про то что они JS Dog именно вот формат который сейчас используются хотят на просто добавить на уровень самого языка ты ну он не совсем JС Dog да но очень похож они его хотят внести в спецификацию как одну из возможностей описания типов и прибить это гвоздями к спецификации то есть они не меняют сам сам язык джава я понял слушай я почему-то всё это время вот просто мы говорим почему меня это удивление вызывало потому что у меня в голове было понимание что они именно внедряют сам синтаксис в язык не не возможно у тебя просто смещ смешалось потому что было две два разных пропозла один был не от Microsoft который связан именно напрямую с статической типизацией но это всё очень сложно уже несколько лет его пытаются пропихнуть не пропихнуть потому что очень сложно это вс всё всё протащить а в случае Microsoft они работают именно на уровне описания того что идёт в в комментари так нет тогда вопрос и это выглядит это выглядит образом при котором они просто хотят прибить Typeesрипt гвоздями к самой спецификации языка JavaScript но при этом сам язык JavaScript не сильно получает от этого каких-то выгод угу и это плохо и слава богу что в комитете ТС год от года это этот проползл банится и они его заново пытаются и опять он банится и заново и опять и посмотрим к чему это всё приведёт слушай я почему всё-таки думаю что что-то как будто там ещё есть потому что я буквально недавно смотрел там же есть какой-то флаг типа skip или strip types то есть что-то в нод уже добавили по удалению уже экспериментально или я точно такой флаг этого я точно не могу тебе сказать сейчас не могу сказать нит ни да потому что у меня сейчас я не могу так активно отслеживать все последние изменения может быть что-то добавили может быть нет не могу сказать по крайней мере в официальной спецификации пока ничего по этому поводу нет может где-то там на насчёт чего-то экспериментируют ну и слава богу сейчас сейчас сейчас я хочу посмотреть потому что вот об этом написали ага смотри да это апдейт от практически 1 февраля начиная вот короче начиная с версии 236 NODA поддерживает Typesриpt без флагов а там нету работы никакой а и даже смотри прикинь extension называется МТС вот нормально да мтс теперь у нас эта штука и они просто знаешь что делают они судя по тому что я сейчас вижу они просто вырезают просто тупо отрезают типы всё может быть ну это это путь в никуда вот ну это уже это уже внедрили прикинь ну они по всей видимости на уров это я предполагаю опять же шапочку из фольги надели и слушаем на на фоне того как развивался дна или как бан бан или как правильно это голова называется да где берётся точно так же Typeespt и они он на на лету производит эту самую транскомпиляцию возможно они решили на волне этого хайпа и туда добавить это мои только предположения не знаю это в любом случае не касается спецификации это какие-то телодвижения внутри самой ноды я-то говорю о фундаментальных вещах которые связаны с развитием языка самого языка знаешь мне что кажется я просто вот смотрю на это оно же бывает и в обратную сторону судя по тому как это идёт судя по тому что вот я сейчас вижу они написали что пока мы только это делаем а потом типа мы ещё и транспайлить будем другой вопрос опять же транспайлить там там V8-то всё равно это не поймёт я напомню что когда-то NODA э добавила свою собственную систему импортов модулей да которая не было в спецификации а потом после этого ещё года полтора не могла на туда же прикрутить нормальную систему импортов которая уже была в спецификации потому что она входила входила в конфликт между первой и второй как бы здесь они опять не вляпались в ту же самую историю ну это только мои рассуждения ещё раз говорю не принимайте их всерьёз какую-то экспертную оценку это так брюжани но с точки зрения вырезания всё-таки это интересно потому что в любом случае у тебя пропадает дополнительный шаг и я тебе так скажу вот например если ты бэкэн-то разрабатываешь на ноде то есть на фронтенде это наверное не очень актуально но вот если бк то у тебя реально сейчас есть такая проблема что тебе сначала его нужно затранспайлить а потом например вотчерами смотреть там есть вот такая вот хитрая многоэтапная штука и я просто когда увидел я понял что у меня сейчас целый этап уйдёт и это просто тупо удобно хотя конечно это не имеет отношения к тому о чём мы говорили с точки зрения семантики и того как это влияет уже на джит что не делается всё к лучшему язык JavaScript - это химера у которой руки ноги торчат из разных сторон по шесть рук по семь ног и поэтому он никогда не умрёт из-за особенностей того как он развивается я вообще хочу сказать вот всё равно сколько на разных языках я пишу конечно они всё равно в основном все завидуют Джесу в плане того как у него экосистема построена то есть вот этот транспайлинг постоянный возможность менять синтаксис добавлять какие-то штуки при том что это может носить гигантский хаос но у тебя поскольку это является стандартом всё-таки это позволяет двигаться с огромной скоростью какие-то дело изменения которые ну по крайней мере быть чрезвычайно гибким это большой плюс и большущий же и минус когда ты одну и ту же самую вещь можешь сделать десятком разных способов тебе нужно бы это вот фраза есть такая: JavaScript - это язык на котором очень легко можно начинать писать код любителю то есть буквально сразу сел и начал его писать и очень сложно писать код профессионалу когда ты начинаешь в этом хаосе возможности выбора ты должен потратить большое количество времени для того чтобы проанализировать и понять какое из этих решений для тебя сейчас максимально подходящее может могу тебе даже тебя сейчас поставить в любопытный тупикс связанный с языком программирования JavaScript как ты думаешь чего тебе стоит в случае использования assigned ar pattern то есть когда ты пишешь там например LED квадратные скобочки перечисляешь идентификаторы через запятую равно и ссылаешься на массив чего тебе это стоит со стороны кажется одна красивая простая строчка кода а на уровне спецификации это три листа разворачивания в итератор который проходит по всему массиву вне зависимости от того есть у тебя там эти элементы используешь ты их все или не используешь это чрезвычайно нагруженная операция ну даже понятно почему да потому что у тебя в то же время когда ты используешь object assignment part когда ты пишешь фигурные скобочки а не квадратные и там пишешь имя поле двоеточие к чему с чем его связать или просто имена полей это транскомпилируется на две команды на каждое связывание и работает неимоверно быстро по сравнению с итератором и люди не знают что assignment pattern - это вообще в принципе команда предусмотренная для совершенно иных задач а все поскольку очень красиво и легко это можно написать в одну строчку лаконичную которая становится вроде бы как понятно его используют не понимают что это стоит с точки зрения нагрузки на агент который этот JavaScript код выполняет это вот один из примеров того что сейчас происходит hook state в реакте напрягся да да к слову сказать они там по-моему сейчас этим занимаются тем чтобы это всё переписать не переписать а заменить там же можно использовать тот же самый обк assignment паттер то только лишь нужно руками прописать ключи ноль ключ ноль с таким-то идентификатором первый с таким-то идентификатором там и так далее становится строка несколько уродливее чем она была бы просто в случае если мы квадратные скобки использовали но зато производительность не страдает да ну и если бы имена ещё не менялись вот этот вот подход с синтаксическим сахаром что у тебя имя переменной ключ значения берёт это кстати вообще забавная вещь могу тебе сказать вот мы с кем-то обсуждали буквально тут недавно на одном из подкастов насколько же эта штука зашла то есть казалось бы это же вообще ну не совсем разумно даже так делать но она оказалась удобная особенно когда ты вот в обработчиках собираешь много данных надо вернуть чтобы не писать эти простыни и другие языки бросились это адаптировать во все поля то есть это очень интересно ну видишь программирование - это не про эффективность написания кода программирование - это про то как программисту удобно этот код писать если появляется какой-либо удобный механизм даже если он стоит дорого то программист ну прямо приятно его использует ну я за то чтобы машина всё страдала и делала да так и должно быть но ей конечно типами помогать надо ну я с тобой полностью согласен компилятор должен страдать или системный программист должен страдать но штука же заключается в том что если синтаксис языка таков что он допускает гигантскую вариативность то пока современные компиляторы со всем этим со всей этой м со всем этим множеством вариативности возможности написания кода не не всегда справляется то одно дело когда ты в Хаскиле функциональном стиле пишешь с наложенным большим количеством ограничений просто потому что написать по-другому нельзя и там рай для этого самого компилятора другое дело язык JavaScript где ты можешь не знаю наворотить чего чего угодно ой в этом плане я тебе так скажу в любом случае поскольку у меня одна из специализаций - это RuИ Rails ты наверное знаешь насколько там да там насколько сильно метапрограммирование и вот динамическая передача сообщений и так далее что конечно когда то есть для меня любой код на джавакрипте с позиции Ruby да он в 1.000 раз более да такой правильный понятный и направленный потому что когда у тебя всё динамически генерится ты можешь определять методы просто взять массив и по нему пройтись и сгенерить методы вот это конечно безумная история которая вот Typeриp я хочу cingут небольшой сделать такой для тех кто меня слушает потому что они знают насколько я там люблю Rails например как фреймворк как концепцию что он позволяет но скажу так вот последнее время я очень много работаю с тайпскриптом то есть например я поишке очень много ассистентов всяких пишу то есть знаешь такие небольшие штуки идшка у нас написано редактор наш на тайпскрипте ну много короче разных элементов и проекты какие-то я ну просто всё Typeescрипt меня захватил учитывая что там и в Кэнд неплохо развили там Dzelm если кто знает FTF вот с его экосистемой чёрт побери не могу ничего с собой сделать мне вот сейчас хочется писать на тейсе нерики это же какая какая классная вещь на тайпскрипте можно написать ти полностью свой собственный язык в принципе мы можем написать и на JavaScript использовать свою систему типов а всего остального проблема заключается в том что правила непрозрачные для всех в отличие от тайпскрипта мне не нравится как реализован сам по себе тайпскрипт это набор костылей если посмотреть внутрь как он работает есть классический пример который я всем привожу это посмотрите как выведет Typeescript для вас тип когда вы объедините больше трёх объектов используя app assign assign возьмите больше трёх объектов и посмотрите что с этим сделает Typeesриpt это пример того что Typeesриpt - это набор костылей потом посмотрите как эти типы выписаны в самом Тайпскрипте типы почему Object Assign работает таким образом с одной стороны а с другой стороны другого же нет ну всё равно это мощно все остальные не зашли да первая версия Тайpeскрипта кто не в курсе был когда его привезли на выставку показать просто как концепт он же был написан на Google клажуры которая сейчас существует и там есть свои типы но не зашла Google клажура она сложная а тайпскрипт оказался интуитивно для людей понятен а я тебе так скажу вот поскольку я например много писал тоже на всяких обёртках например у меня был в продакшене Кложе с scriptрипt мы очень крипт который аналог окамола да мы смотрели использовать пытались Elm а ещё SCPT который это аналог хаскеля то есть мы очень активно всё это смотрели и ложи скрипт использовали и практика показала вот это ещё и скалу если брать котлин и так далее практика показала что языки обёртки взлетают только тогда когда у них есть совместимость по типам то есть если у тебя появляется короче язык обёртка возьми скалу который придумывает некую очень сильное расширение системы типов и у тебя нет возможности например как в котлине или как в Тайпскрипте одновременно использовать файлы на JS на TS Java и коot в одном месте все эти языки гарантированно умерли вот прямо готов поспорить а просто потому что у тебя самое главное - это переход вот этот процесс адаптации что ты можешь в свой проект вставить файл с новым расширением безусловно люди люди ленивые не хотят лишний раз напрягаться когда этого можно и не делать возможно это и правильно не ну interpрабиabбиility - это важная вещь то есть если у тебя интероп по типам отсутствует ну в том плане что он прямой то естественно ты крайне легко можешь внедрить то есть короче вот для скажем так для людей которые являются фанатами технологии это очень простой способ прийти эту технологию притащить в проект это знаешь как когда новые языки делают мы всегда на эту тему смеёмся что типа ребят если вы сделали новый язык но не сделали офигенный пакетный менеджер к нему ещё и форматор туда встроили илинтер прямо внутрь как в го FTM да ты делаешь у тебя всё форматируется у вашего языка шансов нет потому что потащат его только тогда когда можно будет вот одной командой управлять из консольки вот и это круто работает на примере этих языков когда он сделает для любого другого программиста окружение при котором он будет делать меньше а а не больше окружение капец как важно да да да слушай вот э по поводу тайпскрипта я ещё кстати хотел добавить вот ты говоришь когда первая версия была честно говоря тогда же я прикинь я забыл название как эта штука называлась которую выпустил Facebook я тоже тоже сейчас самое смешное что когда они оба появились знаешь вот тогда все выбрали сторону кто-то выбрал фейсбуковское решение кто-то выбрал Typeespeesрипт они же ещё параллельно существовали какое-то время и даже по выставкам ездили люди которые рассказывали и про те и про те варианты решений да я тотже сейчас название не вспомню так вот в тот момент я выбрал то решение а выбрал его знаешь почему потому что это был не новый язык это была именно система надстройка типов а поскольку в принципе я с ну например в ирланге там есть диалайзер у тебя система типов он сам язык динамический но у тебя есть возможность типы прописать это прямо задумано это один из немногих языков с с ByYзаignн встроенной опциональной системой типов да но там к нему претензий было много то есть и большинство людей которые с ним работали они тогда считали что опциональные типы честно говоря типа если можно не писать значит никто их не будет использовать ну типа как сни в тайпскрипте да что если нет жёсткого контроля оно всё поедет по одному месту да что делает делает тапesрипт да он простые вещи делает сложными а сложные вещи делает ни люди программисты да если не бить не бить по рукам то люди будут делать ни ну ты знаешь такие шутки есть у любого джависта что Java - это динамический язык программирования почему так у тебя всё обжекто может быть и ты можешь всё что угодно делать вот так что в этом смысле Java очень можно классно показывать код который работает всё прекрасно но он абсолютно будет динамический по своему работу принципам виду и всему остальному да java кстати это по-моему один из очень хороших примеров того каклю людям автоматически начинают бить по рукам когда они что-то начинают писать неправильно в тапс немножко этого не хватает это правда потому что я когда пишу на Java ты просто понимаешь что у тебя тупо не скомпилится в ТСе если если в тесе ты сам там не заставил инструментарий тебя остановить то ты всё-таки запустишь этот код и дальше может что-то пойти совсем не так да да поэтому и костыль я бы знаешь сейчас вот перешёл куда можно дальше пойти вот мне кажется искусственный интеллект тут вовремя появляется потому что вот всё что мы рассказывали оно ведь всё тесно связано например одно время сложность тайпскрипта была связана с тем что программирование на типах даёт много возможностей но и даёт как бы такое что там без поллитра не разобраться да да казало казалось бы типы должны были бы облегчать тебе работу на самом деле перегружают мозг очень сильно потому что ну если так такие возможности да когда у тебя то есть когда ты пишешь на современных Урмках или I18N либо используешь и у тебя все абсолютно то есть ты мершь таблички а он тебе говорит можно это сделать или нет на уровне типов это извините ну как бы космос такого нет нигде кроме ТС за счёт его системы типов но если мы открываем исходник то мы тут же как бы его закрываем потому что понять это могут я не знаю полтора человека в этом мире ну это очень сложно я тебе честно скажу что местами я халявлю и когда ну то есть я не пишу библиотеки на ТСЕ в основном я пишу в основном прикладной код но блин иишка неплохо типа сама пишет и исправляет то есть это же в принципе гораздо более детерминированная область чем написание просто кода и она справляется неплохо и как будто есть такая тенденция вообще есть такое мнение что мы типы вообще перестанем писать ты как ты считаешь произойдёт такое или нет на уровне того с чем я сталкивался вот с современными технологиями я должен сказать что чем ниже уровень языка программирования например на языке ассемблера современный тот же самый чат GPT пишет код очень сносный если я прошу его сгенерировать мне код на на языке JavaScript то я бы этот код никогда просто так бы не пропустил в продакшн более того я записывал несколько видео когда показывал как проводится типа собеседование с чатом GPT чат GPT как будто бы у нас этот конкурсант соискатель на должность и показывал как он начинает заблуждаться в том что он пишет и вроде бы код как бы и работает и и выполняется но существует целая целый спектр пограничных условий при которых он будет работать неверно или он объясняется чатом GPT неверно то есть чем выше уровень абстракции языка тем хуже сейчас справляется с этим чат GPT и вероятно это связано не столько с э ущербностью модели современного слабого искусственного интеллекта сколько с тем на каком коде он учится на языке JavaScript такое количество говнокода было нагенерировано на базе которого чат GP или другие обучаются

что немудрено что и тот код когда когда ты ему ставишь определённого рода задачи которые он генерирует не отвечают тому уровню качества который бы я бы предъявлял к этому коду а так-то конечно да господи боже 10 или 15 лет назад для того чтобы найти решение какой-либо проблемы ты должен был бы прошерстить форумы может быть позадавать вопросы может быть бы вникнуть в спецификацию а сейчас люди заходят в общих словах генерируют задачу он выдаёт код который работает это восхитительно да да я при том что кардинально не согласен что заменит программистов то есть ты понимаешь что задать правильные вопросы правильные уточнения поменять у тебя должна быть очень высокая квалификация если ты что-то серьёзное пишешь да большое но а при этом рутину писания вот знаешь как будто свершилось незаменимый ассистент для профессионала незаменимый ассистент помнишь мечта какая была как да помнишь какая мечта всегда была то есть всегда как рассказывали вот типа старые системы у тебя есть архитектор и у тебя есть такие исполнители всегда сравнивали это со стройкой что у тебя есть прорап у тебя тра-та-та раньше же даже были две разных должности один человек который писал программу другой человек который набирал эту программу да уэльки типа давайте мы сейчас всё спроектируем нарисуем а другие потом все такие говорят: "Ну ребят так не работает это всё плохо потому что как бы вы не можете так проектировать если вы не близко к коду" а сейчас мы как будто знаешь вернулись в это же состояние только за нас это делают не другие программисты а за нас это делает наш ассистент и самое смешное что на этом уровне итерации это сработало по крайней мере очень многие вещи действительно писать не надо а вот конкретно типы ну так он пишет вообще по красоте потому что типы всё-таки подчиняются очень строгим правилам и там вот так вот не забалуешь поэтому мне например очень нравится и кстати даже я знаешь что заметил именно если ты берёшь чисто тайпскриптовые либы и просишь по ним код писать ерчайший пример а крибилдеры когда тебе надо в бэкэнде составлять скиль запросики но на языке конкретной у Рэмки у тебя например вот есть такая дрим очень прикольная украинскими ребятами сделана вообще самое лучшее что наверное с нодой за последнее время случалось она генерит такой на своём языке но понятном для Джеса как бы схему базы данных ты отдал в неё он знает что это Drizel RМ и вот у меня ещё не было ни разу такого момента чтобы я когда попросил: "Сгенери мне такой-то запрос" она мне не давала рабочий код причём не в смысле там знаешь трэш это же просто компактный как бы запрос на их языке и я такой: "Блин ну как-то вот то же самое например мне не прокатывает в рельсе потому что там динамика позволяет слишком много вот так вот вот такой вот у меня есть опыт по этой штуке" да и здесь же есть ещё другой другой интересный аспект всего этого происходящего в опять же той самой спецификации заболеваний Всемирной организации здоровья появилось такое заболевание которое называется ээ цифровой дебилизм кажется так оно или псевдоцифровой дебилизм как-то так оно называется существование этих инструментов и использование их подобным образом перестаёт заставлять нас тренировать свой мозг постоянно велико искушение каждый раз воспользоваться его возможностями это сделать потому что быстро эффективно и всё что тебе нужно как профессионалу это быстро пробежать глазами и на уровне опыта сразу выхватить возможные ошибки или отсутствие этих а что будет делать следующее поколение если оно будет постоянно этим пользоваться кто будет контролировать этот код знаешь можно смотреть по-разному можно переживать действительно и многие такие вот что там произойдёт с индустрией и так далее я всегда очень спокойно к этому отношусь во-первых любое поколение всегда выживает и разбирается и как бы на плечах гигантов растёт дальше всегда никогда не было по-другому и а во-вторых так нам же лучше будет то есть если у тебя есть квалификация и понимание каких-то вещей а появляется много ребят которые это не понимают ну ты будешь просто немножко на другом уровне работать там где с тобой соревноваться сложнее вот и всё вот поэтому мне интересно я очень наблюдаю за этим потому что я иногда себя тоже ловлю на этой мысли когда знаешь ты пытаешься работать с чатом GPT ты думаешь а потом в какой-то момент ты забиваешь полностью и так ну бывают куски когда ну не хочется о них думать там слишком много надо у меня вот недавно был пример вот ты не поверишь что я вчера делал есть проект на котором мне нужно завести тренажёр онлайн для 1 языка угу е я с ними конечно никогда в жизни не работал и если ты пойдёшь там чтобы doкер файл готовы найти ну проблема я соответственно говорю: "Дай-ка мне готовое" он мне выплёвывает огромную там установку и понятно что мне копаться в этом не интересно вообще и я вот абсолютно выключив мозг ему ошибка изменения ошибка изменения а поскольку он ни с чем не связан это Docker файл и те в принципе вообще без разницы он в конце концов мне выдал рабочее решение после часа колупаний я такой думаю: "А сколько бы интересно времени я бы это сам делал там же капец просто да" но вот то время если бы ты делал сам это же время которое не просто потрачено зря это то время которое у тебя воспитывает твой мозг и и дальше становиться лучше а так-то безусловно я с тобой полностью в этом согласен это да ну как комперовать плюсы мне наверное не очень сейчас хочется копать честно тебе скажу там Да я тоже когда посмотрел как-то на язык в 1С где на русском языке свой собственный там какой-то выстроенный меня тоже это слегка коробит слушай знаешь что самое поразительное я давно не испытывал такого чувства потому что всё-таки когда я смотрю на любой язык ну классический да ты понимаешь всё равно идентификатор у тебя глаза цепляется со мной такое случилось первый раз наверное за всю мою карьеру с момента когда вот я начал учиться там в 2007 у меня коммерческие проекты пошли а учиться я в школе начал ещё так вот меня знаешь что поразило я открыл код на значит вот этом языке он ОСрипt - это имплементация 1С вне их вот этой вот системы и это первый раз в жизни когда у меня мозг не смог распарсить исходник я просто то есть это выглядит просто как текст я вообще не понял типа то есть да конечно стоят скобки да но он тебя не считывает это как параметр он не считывает это как функции о чём я и говорю что если мы будем пользоваться что со мной происходит да нет нет тех построенных в голове отработанных воспитанных в своей голове этих машинерий которые ты взглянул вроде ты же сейчас как и как любой другой очень взрослый программист когда смотришь на код ты же его даже уже по строчкам не разбираешь ты на него смотришь и тебе кажется что ты понимаешь как он работает а почему это произошло мозг воспитал у себя в голове такие определённые части этой нейросистемы в своей башке а тут я тоже когда смотрю на эти русские буквы меня это вступает причём наверное это даже не в самих буквах а то что у тебя когда на английском ты чётко делишь знаешь что ты понимаешь ты понимаешь о это конструкция языка это if или ты понимаешь о это функция а там ты просто не понимаешь и поэтому для это кажется как будто просто стена текста я такой: "Блин мне даже немножко страшно стало" я такой думаю мне надо привыкнуть чтобы я начал его да осознавать там и подсветочка какая-то нужна так интересно да да и тут-то конечно А ещё же в этих современном GPT он там сейчас стал или это и раньше было чуть ли он не по каждой строке кода тебе может попытаться описать что конкретно происходит в каждой строке кода да не он то что он творит - это конечно безумие мы буквально на днях я вот последний месяц работал знаешь над чем значит у нас есть такой бесплатный проект кот Basics.COM называется там там фишка именно в том что там всёсное и сам проект и обучение то есть сами тексты курсов они на гитхабе все лежат я его ещё сделал в семнадцатом году и там идея была в том чтобы дать попробовать вообще любой язык который существует в этом мире только базу и многие языки туда наши просто ну ребята из сообщества добавили чтобы ты понимал это единственный наверно проект на котором у тебя И там самое главное интерактив с тренажёром и там есть ракет там есть кложа там есть эликсир мало где ещё в мире найдёшь да такие вещи чтобы с интерактивом было и вот собственно я 1S я туда добавляю а и что я хотел сказать это как бы это проект на котором я немножко тренируюсь чтобы в свой основной что-то таскать и например вот этот месяц я потратил неделю на внедрение туда там было обсуждение там заходишь вкладка обсуждения и там типа знаешь может переписываться я такой: "Так пришла пора давайте добавим туда ассистента" значит я разобрался в опишке Open AI в то делаются ассистенты вот эти рак системы если ты знаешь когда прогружаешь данные он на базе их работает то есть я туда курсы вгрузил все дела я запустил я конечно был в шоке насколько это помогает людям которые именно знаешь вот фишка в те кто не в теме те кто не пользуется им просто так у меня за неделю там люди больше тысячи вопросов задали и я даже начал иногда удивляться потому что я смотрю как они с ним переписываются представляешь они находят какие-то ошибки и они прямо у него спрашивают: "А как связаться с твоими создателями чтобы передать им там информацию об ошибках?" Я побежал менять промт я прямо в промт добавил что если тебе говорят как связаться с создателями давай такой контакт представляешь всё всё по полно полная трансформация области реально это просто фантастика если раньше программист - это тот который писал код то теперь программист - это тот который должен контролировать код становится всё совершенно иначе но есть там такой нюанс всё-таки разные мнения разделения что у тебя вот эти вот все ребята которые генерируют код просто аля тамкодинг пдпроект - это всё-таки ппроекты в большом проекте ты с нуля не сгенеришь чтобы он тебе от и до потому что там база сервера экосистема инфраструктура да вот это всё вопрос получается только в том пока ли это или в будущем это всё в изменится вот я не верю что можно комплексную систему создать потому что это она выходит за рамки как бы просто кода потому что когда у тебя есть ещё инфраструктура ты всё равно выходишь на железный мир живой это как типа просите ей там не знаю машину собрать да то есть не сработает даже если она тебе сгенерит код а вот а потому что там всё чуть хитрее и вот есть знаешь какая концепция просто хотел спросить что об этом думаешь вот одна история когда ты его как помощник используешь а другая другое дело про генерацию вот ты правильно вот всё сказал и все это понимают когда он генерит код в большом проекте он герит очень много копипасты появляется то есть есть исследования которые говорят что на гитхабе стало появляться очень много копипасты то есть люди перестали заниматься абстракцией из-за этого потому что он абстрагировать не умеет ты же не весь проект сразу он же не может сказать: "О слушай вот эту концепцию лучше вот вынести в какую-то отдельную слой" например да и Фактори такой код ну почти нереально уже ручками то есть его снова туда закидывают снова перерабатывают и поэтому есть идея что в какой-то момент просто части подсистем будут работать в режиме полного чёрного ящика ну то есть типа этот код не имеет смысл даже пытаться редактировать то есть мы давайте выйдем на уровень когда мы просто будем систему делать из набора элементов каждый из которых полностью сгенерирован как аля типа микросервис так если грубое сравнение а мы просто всё это добро соединяем и тогда получается что вот такое разделение вот есть такая концепция что к этому всё придёт что ты думаешь об этом ну не исключено ведь сам же ж по себе слабый искусственный интеллект которым мы сейчас пользуемся он такие является тем самым чёрным ящиком понят же понятия не имеет по какой причине он выстраивает текст таким образом а не иначе чёрт его знает это мо взрывает вообще это идея просто да чёрт его знает возможно будут да выстраиваться какие-то это опять же фантазирование будет какая-то дифференциация между областями где ничего страшного и пусть там будет этот чёрный ящик и областями где мы должны будем обязаны знать как выполняется каждый код с одной стороны а с другой стороны опять же вернёмся к языку программирования JavaScript люди которые на нём сейчас пишут для них большинство инструкций которые они этого языка используют для них является точно таким же чёрным ящиком опять же возвращаясь к примеру с assignment pattern который кажется простой единичной строкой а на самом деле разворачивается в две страницы кода внутри да да да время покажет слушай а его знает по поводу Давай вернёмся да к джаваскрипту немножко вообще в плане глобального развития с точки зрения возможности языка то есть если вот отдельно от системы типов и производительности ты вообще следишь за этой темой у тебя есть какое-то там представление по парпозалам по всему ну да я слежу за теми областями которые мне очень интересны например один из разработчиков V8 курирует и активно в этом участвует и развивает многопоточность в языке JavaScript он этим прямо весь захвачен и благодаря ему развиваются те же самые Атомик и всё остальное что с этим связано мне это очень интересно что ещё ну это извини меня это будет аналог веб-воркеров сами по себе воркеры использование вебркеров было бы невозможно если бы в языке JavaScript не была бы реализована какая-то модель которая бы позволяла распараливать эти вычисления сейчас это на уровне спецификации называется термином мультиагент угу но средства которые в спецификации описаны - это те же самые ээ семафоры те же самые всевсе прелести типичного многопоточного программирования я понял называйте это как хотите и сам по себе этот человек из V8 китаец или да китаец или кореец у него какое-то такое имя он это называет именно многопоточным программированием ну как как называет так и называет это мне затея очень нравится из того как куда он развивается язык мне нравилось очень сильно ээ стремление а вот что сейчас проходят уже одни из финальных частей пропузлы это так называемая Shadow Realm спецификация это когда мы на уровне языка JavaScript сможем создавать свои собственные песочницы языка JavaScript поэтому будет будет существовать точнее оно уже сейчас существует просто проходит финализацию когда мы создаём некую область внутри которой будет выполняться код языка JavaScript мы его будем на языке JavaScript контролировать но для того кода который находится внутри он будет выполняться так как будто бы он выполняется в своём собственном у него свой собственный глобальный объект у него всё своё собственное только мы можем со стороны теперь это контролировать такая вот своего рода система виртуализации Shadowм называется извини я правильно понимаю что скорее как бы визуально это такой типа эвал на стероидах а как бы вполне эвал-то у тебя существует внутри того окружения в котором у тебя весь твой JavaScript код существует ну я имею в виду концептуально то есть скорее всего это будет объект который ты конфигурируешь да вот что-то в таком духе и передаёшь акотный ты создаёшь по сути дела среду это и сейчас так есть контекст когда ты создаёшь условно говоря открываешь новую вкладку и вниз запускаешь JavaScript код то оно работает приблизительно точно так же с той лишь разницей что мы не можем контролировать как это там выполняется а тут делается апи которая тебе позволяет внутри своего JavaScript кода создавать вот такое вот окружение внутри которого будет выполняться JavaScript код который не будет иметь доступа к внешнему коду который всё это контролирует ну насколько я понимаю это в JVM это очень классно реализовано когда ты вплоть до ограничений что например ты можешь там читать работать с файлами и так далее дадада то есть например этот это классно для людей которые пишут онлайн инструменты аля там код пена и так далее да да дада да

кзосности и всему остальному да да из нам кстати в этом смысле когда-то докер помог потому что у нас была как раз проблема когда мы стартовали инструменты типа как нам исполнять код так чтобы он не вылез за определённые рамки и Докер нас спас но это на БКЕ а на Френте его нет слушай я правильно понимаю что это ещё позволит переиспользовать виртуальную машину для того чтобы её инстансов не создавать много ну там разумеется потому что это всё реализовано на уровне самой самого того одного единственного агента в котором у тебя выполняется текущий код тебе не надо будет для этого создавать новые да он не нужно использовать никаких дополнительных ресурсов для этого в этом смысле да ну кстати это интересно я вот сейчас вот думаю интересно сколько может сколько это может сохранить ресурсов надо будет подумать у меня даже кейсы есть где я мог бы это заиспользовать для каких-то специфических задач очень сильно может самое главное даже не то сколько он ресурсов сколько то что это позволяет сейчас же если взять любой код сторонний код которому ты не доверяешь для того чтобы этот код у себя выполнить внутри своего собственного кода э невозможно придумать полностью изолированного окружения как бы ты не пытался замкнуть это в отдельной функции в отдельном зама всегда существует десятки способов как этот код может выбраться наружу и начинает творить всё что ему захочется а здесь у тебя есть гарантии и контроль все за всем этим в этом плане одна из самых страшных вещей ти те кто делают онлайновые такие инструменты - это например доступ к кукам тем же самым потому что можно так сессионную куку забрать себе ну это если мы говорим об об уязвимостях но с этими же с этими же вещами сейчас борятся совершенно другим образом это же используется там contentт Secкриity полисе подпись каждого скрипта ключом и уже не так не так всё сложно или не так всё просто но как бы то ни было да да есть много всяких этих механизмов а кстати я не знаю насколько это твоя тема или нет блин знаешь есть вот вещи всегда за которые стыдно то есть ты вроде там что-то делаешь делаешь делаешь а есть вот провалы вот у меня одна из этих тем не не знаю почему но вот вот эти все системы безопасности браузерные я почему-то их всё время избегаю стараюсь не погружаться они меня бесят все вот тебе честно скажу вот то же самое как мы перед этим с тобой же разговаривали о том почему вдруг этот язык выстреливает а та же самая система типов ну людям тяжело и не заходит content security поли сложно я её на изусни не помню я его каждый раз для того чтобы правильно всё собрать и использовать я лезу в документацию читаю и каждый раз думаю: "Господи я уже в пятый или в шестой раз это перечитываю" это нужно себя именно заставлять это как внутренняя самодисциплина а это очень неприятно и неудобно проще про про это как бы не думать может быть потом когда-нибудь поэтому и не использует хотя такие инструменты есть ну это вообще большая тема да потому что я подозреваю что сейчас вот мы с тобой много про производительность говорим но если бы я встретился с каким-нибудь чуваком из кибербезопасности он бы мне скорее всего столько рассказал историй насколько уязвимы все современные сайты и как можно делать вот в девяностых годах когда я развивался как начинал развиваться как программист мы присутствовали в иллюзии о том что если программиста хорошо воспитать дать ему опыт то он будет писать хорошую замечательнейший код ничего подобного он обязательно когда-нибудь ошибётся мы сейчас пришли эволюционно к тому что откуда появились песочницы вот этот Shadowурем докеры системы изолирования которые выстраивается наша инфраструктура образом при котором мы априори считаем что человек обязательно ошибётся обязательно допустит какую-то ошибку именно поэтому программирование начинает выстраиваться не с позиции того что код будет написан всегда идеально сколько с позиции того что нужно построить инфраструктуру таким образом что человек обязательно ошибётся но мы быстро это наймём да внешнее окружение снизит издержки на проблемы которые возникнут с вот тем самым с той самой ошибкой в идеальном случае до нуля вот и контри поли оно как раз про это сколько боролись сколько пытались учить людей бороться с такими вещами или не писать такие вещи которые приводят там к XS кроsй скриптинг в результате плюнули и придумали content security policy вы подписываете скрипт определённым ключом и если там вдруг неожиданно появилось что-то новое сама среда проконтролирует и заблокирует выполнение этого скрипта вот так только другое дело что сложно у них это получилось ну да и далеко я подозреваю что если ты не используешь какую-то автоматику которая сама это делает то там 100% этого нет просто никто не воткнёт да это вот то же самое в Линксе есть идеальнейшая система безопасности SE Linux но для того чтобы её отконфигурировать это нужно быть отдельным специалистом в конфигурировании с Линукса поэтому по умолчанию даже современные все дистрибутивы в большинстве случаев идут с с отключённым SE Линуксом да угу я тоже про это всегда слышал и когда сталкивался там максимум у тебя фаервоall какой-нибудь работает базовый а так система там бы настолько настолько серьёзная что даже если человек получает рута у тебя в машине он ничего с ней сделать не может потому что на него наложены соответствующие ограничения при помощи SE Линукса но чтобы его конфигурировать нужно себе мозг взорвать нужно быть гением чтобы это всё помнить ну я подозреваю что если это хостинг какой-нибудь они не то что могут себе позволить для них это вообще мастх и это они сейчас по-другому всё же всё делают это вот на уровне того же самого докера проще проще виртуализировать и потерять там 10-15% производительности текущей своей машины чем конфигурировать SE Linux вот там взломали эту виртуальную машину ну прибили её и поставили на её место новую и всё хорошо потому что как это стильно модно молодёжно быстро элементарно и думать ни о чём не надо то есть черут все поумирали то есть эта концепция уже больше да она есть она развивается но специалистов можно по пальцам пересчитать которые могут прямо сейчас сесть и начать это конфигурировать меня спроси человека который с девяносто восьмого года только сидит в Линксе смогу ли я сейчас отконфигурировать SE Linux на сервере даже со своим опытом системного администрирования я сейчас скажу вам что дайте мне сначала несколько дней я должен перечитать документ прочитаем да знаешь такая вот интересная ещё вещь есть которая меня всегда веселит а вот у обывателя и наверное мне кажется у нескушённых людей у них есть такое впечатление что со временем у тебя больше становится секюрности все об этом думают говорят персональные данные мы значит всё тра-та-та-та-та а когда ты изнутри немножко систему знаешь понимаешь кто что как пишет как торгует данными как работают вот эти все взломщики и что вообще творится и плюс Ии тут ещё прибавился к нам и ты понимаешь что мы количество способов нас развести и сделать так чтобы вообще никто не догадался их настолько становится больше они настолько более крутые что ты такой: "Блин ну мы все в трубу летим" на самом деле сейчас можно у любого человека угнать всё что угодно перегрузить его мозг там звонками чем угодно ночью его разбудить так или иначе он сказать что тебе мама звонит прямо у тебя появляется от неё сообщение и так далее и тому подобное да поэтому все системы развиваются теперь в сторону не иллюзии относительно надёжности человека сколько в сторону созда создание Typeesрипt - это как раз то про это же то же самое создание вокруг него среды которая будет его ограничивать от возможности совершить эту ошибку а ты помнишь эти истории про внедрение эксплойтов в Из-за того что в НПме пакеты по-моему не подписывались сначала в Рубе была такая история они подписание сделали потому что там был очень серьёзный баг кто-то внедрил а в ноже этот опыт прошли все все все постепенно мы все повторяем одни и те же детские болезни ты недавно слышал вот последнюю супер такую эпичную историю сNx с уязвимостью в которая по Цве там девятка по-моему из десяти да ты что слушай что-то знакомое а что там было обхода авторизации и так далее у них там в внутри при в процессах редиректа с одного роута на другой роут для того чтобы не зацикливаться или переходить куда-то они устанавливали внутреннюю куку какую-то свою по относительно которой ориентировались что они начинают крутиться в цикле или куда-то и почему-то люди совершенно забыли что те которые анализируют код и ищут уязвимости эту же куку могут установить при внешнем запросе в результате чего обходили всю систему авторизации выходили на административную панель которая работала это вот та это те же самые детские болезни которые в своё время пережили все печпишные фреймворёрки которые там когда-то развивались это прекрасно надо как-то по-другому учить людей программировать нестолько опять же говорю я перед этим говорил настаивал на том что нужно сначала учить профилированию кода а теперь я склоняюсь в течение нашего разговора к мысли что нужно не к профилированию кода а к тому чтобы создавать окружение вокруг себя что если ты глупости наделаешь то бы эти глупости за пределы этого окружения не вылезли ну или хотя бы вылезли с большой сложности ну понятно что об этом никто не думает и везде всё это постоянно проявляется я единственное помню вот кто-то на днях показывал сканеры например да смотрят ты знаешь сейчас есть такая даже штука называется придумали LLM с или что-то такое короче прямо файлик который ты кладёшь и ты делаешь описание под сайты а именно в смысле описание для лмак потому что они сейчас же что делают у тебя парсят интернет все эти штуки без остановки смотрят что там происходит и сейчас придумали концепцию типа давайте ему простим эту жизнь есть робот txt который мы даём а поисковикам а давайте для них сделаем типа отдельный и ты текстом туда выгружаешь свой сайт ну не весь конечно а в смысле так чтобы вот ту информацию которую ты хочешь поделиться чтобы им парсить сайт не пришлось они оттуда понимали кто что и как причём там формат очень простой там marркдаун потому что это типа lлэмка она распарсит и соответственно ты всё это забирает не видел такой проект нет ещё не видел но это очень сильно напоминает то что было когда-то реализовано много лет назад в Гугле когда они тестировали долгое время АПИ связанное с порталами новостными порталами это не АП и не похожие технологии у них было своя собственная АПИ для этого они создавали такие вещи ну это самому ходить надо было туда в Гугле сейчас разрешено кстати в отличие от того как это было много лет назад когда ты для индексирующего робота отдаёшь какую-то другую htмэльку и не ту которую показываешь пользователю единственное что запрещено - это чтобы контент по своему смыслу расходился с тем что ты отдал индексирующему боту и с тем который ты показал пользователю если контент сходится то ты можешь боту отдавать очень простую htмэльку без каких-либо дополнительной без какой-либо дополнительной нагруженности ну по большому-то счёту все технологии которые у нас существовали с самого начала HTML5 с семантической вёрсткой микроразметка и всёвсёвсёвсё это все были инструменты которые создавались именно для того чтобы индексирование контента понимание этого контента мм индексирующим роботом значительно упрощалось по всей видимости это какой-то дополнительный новый инструмент знаешь тако просто была знаешь такое было общее же движение когда про это говорили типа помнишь это Web 2.0 семантический веб а была идея в том что сейчас все добавят микроразметку ну а например для нас все очень важно мы естественно всегда были в тренде всегда за этим следили а в конечном итоге получилось что да микроразметка конечно нужна есть элементы которые там обязательно используются но по большому счёту у тебя элмки конечно целую индустрию угрохали и пере переосмыслили потому что теперь вообще есть вот этот чувак известный который я его кстати приглашал тоже на подкаст но пока ещё что не дошёл он просто очень много пишет про парсеры может быть ты его видел что-то как бы IT-бизнес как-то так у него называе очень популярный канал и вот он очень много пишет про парсеры про запросы то есть это целая большая вообще индустрия где народ хочет парсить постоянно сайты и вот соответственно они сейчас переходят все на эти технологии то есть у тебя там начинают плейрайты которые эмулируют ээ человека гораздо больше чем это раньше было ты кстати знаешь про это что а то есть это вообще интересно что существует просто параллельный мир в который про который не особо не говорят потому что он такой немножко в серой зоне находится а например огромное количество крупных сайтов которыми мы пользуемся там уважаемые и всё такое они например используют а большое количество накрутку поведенческих факторов то есть у них огромное количество заходов это фермы которые специально в общем-то через все эти инструменты знаешь да это в большей части по поводу поведенческих факторов это в большей части мифотворчества которое разбивается от о простые эксперименты которые показывают что это никаким образом по крайней мере для поисковых машин типа Гугла не используется другое дело что другие вещи которые связаны с этими же самыми проектами используются в как это называется правильно если раньше за это в Гугле банили то теперь в это как это называется в слово такое не снисходительно разрешается ну ты про клакинг сейчас рассказывал про подмену а ты что например да например та же самое когда раньше создавали такие полотенца а дорвейты с дорвеями со всеми остальными да вещами то теперь там ну вот например у тебя есть проект который является каким-то большим здоровеннейшим магазином у тебя есть страница на которой там представлены эти товары карточками так каталог вот это то что ты показываешь пользователю а для того чтобы показать это поисковому роботу можно поспекулировать на той теме которая сейчас позволяет поисковому роботу скормить другую htмэльку не ту htмэльку которую будет видеть пользователь и эту htмэльку можно скормить образом когда смысл этого контента направленность этого контента будет точно такой же то есть себя банить не за что но на самом деле у тебя в внутри этой htмэльки будет например содержаться 200 товаров а не 10 товаров и если рассматривать на самой на уровне самой самой простой схемы то Google будет рекомендовать в первую очередь страницу которая отвечает запросу пользователя где есть у нас 200 товаров а не 10 товаров хотя на самом деле их там так просто и не присутствует ещё до них докопаться нужно если раньше за это банилось когда-то очень давно 5 или 6 лет назад или сем ээ то теперь это считается нормой такие вот вещи используются ну вот поведенческий фактор не используются это точно это очень легко доказывается да я просто знаю что в Яндексе используется просто потому что мы как бы Яндексе это отдельная тема разговора как работает Яндекс слу Послушайте что такое поведенческие факторы это же информация которую нужно снять когда ты снимаешь эту информацию её нужно куда-то отправить чтобы эта информация где-то была зафиксирована и с этой информацией можно было бы как-то работать google - это тот браузер google Chrome - это тот браузер на который накладывается громаднейшее количество ограничений с законодательством в Европейском Союзе или в Соединённых Штатах он мониторится 24 на7 специалистами снимается весь трафик с этого и если бы там не дай бог отправлялось что-то что связано с поведенческими факторами просто на уровне той информации которую можно было бы как-то использовать это тут же бы стало известно этого сейчас просто не существует на уровне хрома да да на уровне хром да я имел в виду конечно Google аналитика понятное дело что она с тебя там все клики собирает и как ты вводишь в случае с Google аналитикой там это тоже отдельный разговор там во-первых эта информация вся обезличена во-вторых ну там личность-то не нужна чтобы поня целую статью по этому поводу когда-то писал да это надо вспомнить а интересно кстати я про клакинг-то сказал не могу не рассказать одну интересную вещь кстати я не знаю насколько ребят вам интересна тема вообще SEO всего вокруг этого просто мы заговорили и видно что и там у тебя есть опыт у меня какой-то опыт есть да по этому поводу а вот проклала есть прикольная штука вот помимо того что разные то есть вообще кто не знает подмена как бы сайта что ты роботом отдаёшь одно пользователь другое вообще в целом считается злом и справедливо да есть просто куча сейчас правил сейчас в Гугле это разрешено ну скажем так если всё-таки сделать какую-то совсем ну жёстко то забанят так мало не покажется поэтому ну разумеется если у тебя страница продажу черешни а ты отдаёшь страницу поисковому боту про унитазы то тогда ты попадёшь попадёшь а если и там черешня и там черешня то появляются нюансы да но есть ещё один нюанс который интересный с которым мы столкнулись знаешь есть такая история связанная а в Гугле есть такое понятие flexible sampling возможно ты про него слышал в чём он заключается существует огромная в какой-то момент появилось огромное количество проектов работающих по подписке которые дают контент по подписке это особенно касается новостников новостник обязан индексироваться потому что иначе как бы как ну то есть они так работают и Google это прекрасно понимает но просто иначе он индустрию уничтожит если он не будет этого делать и поэтому там возникла такая концепция типа: "О'кей это надо выделить в отдельную схему которая работает следующим образом ты действительно можешь поступать двумя способами первый способ: ты отдаёшь Гуглу как бы всё а человеку отдаёшь только часть статьи может быть ты видел когда у тебя там буквально первые строчки а потом появляется вот эта штука купи" и он это не считает за обман потому что ну ты должен разметить определённым образом как бы HTML он должен прямо прочитать что это конкретно оно там Pwall такой класс называется короче надо поставить либо второй вариант когда ты знаешь как делаешь например ты в месяц показываешь полных три статьи а четвёртую типа за бабки знаешь кто так делает так медиум делает ты замечал что ты на него ходишь ходишь ходишь а потом в какой-то момент он тебе показывает начинает появляться какая-то да и вот эта штука называется Flexible Sampling просто мы её тоже использовали потому что у нас текстовые курсы и мы показывали часть контента а часть прятали но давали индексировать Гуглу всё вот понят что это обходится ты можешь при прикинуться Гуглом зайти получить любую инфу нет ну что ты ты не можешь прикинуться Гуглом сейчас же в Google написана целая инструкция каким образом программист может со стопроцентной гарантией интерпретировать что перед тобой именно Гугловский бот серьёзно ну конечно они прямо рекомендуют и прямо пишут о том что вы должны делать реверс запрос по IP-адресу вот тебя пришёл запрос который допустим агентом представляется Гуглом ты делаешь реверс DNS запрос к тому к ДНС-серверу что это за IP-адрес и что он этот и все бот все боты Гугла сейчас в обязательном порядке возвращается из ДНСа ст строка которая непосредственно связана с Гуглом гарантировано стопроцентное доказательство единственное недостаток конечно что это медленно потому что каждый реверсзапрос к ДНСу - это всё-таки не не какие-то там миллисекунды это может и до полусекунды доходить но ну закшировать есть только Да да но кэшировать можно и IP-адреса кэшировать и так далее слушай а прикольно я кстати не знал эту тему о'кей слушай а кстати мы не поговорили вот действительно у тебя же когда GS и вот эта вся история у тебя ещё появляется общая проблема с ну с сишкой потому что всё это должно на бке исполняться ну она решается очень просто как будто бы знаешь вот сейчас дошло до такого что это вс я помню были времена когда всё это нужно было реально прямо программировать сейчас у тебя автоматика всё это решает то есть в большинстве экосистем всё само если Google Chrome уже дай бог что тех 5-5 лет распространяет свою Headless версию где она работает без интерфейса то составить хотя бы для анонимных пользователей htмэльку на уровне нашего недоразвитого JavaScript кода который на должен был бы на у пользователя генерировать ту же самую htмэльку а здесь у тебя на сервере лежит этот Headless Chromium браузер ты сам к себе делаешь запрос и сохраняешь готовую htмэльку которую потом отдаёшь как кэш как самый простой способ реализации сервер сайтрендеринга но вообще по большому счёту я считаю что это э порочная практика вообще сама по себе порочная практика подобному подобным образом я правильно понимаю что ты в принципе про SSR говоришь что сама эта концепция то есть я прямо услышал что ты сказал что HTML должен быть отдельно конечно должен быть отдельно javascript в случае того когда мы его используем на в браузере потому что фont - это всё-таки не обязательно браузер но допустим мы его используем браузер это должна быть вещь которая идёт поверх HTML а не является сама источником того самого HTML это противоречит тому что является первичным и вторичным по крайней мере это должно касаться тех проектов которые ээ генерируют информационный контент который должен индексироваться если у вас какой-то просто сложный интерактивный интерфейс то бог с вами пусть у вас загружается этот бандл ваш джаваскриптовский бандл запускается у вас в браузере и генерирует ваш интерфейс ради бога но если мы говорим о каком-либо контенте который связан с господи какой-либо статичной информацией то его не должен генерировать JavaScript javascript должен просто поверх вешаться на всё это происходящее это если мы говорим про веб вопрос тогда давай так в принципе так всю жизнь работало когда-то jquery и всё остальное но у меня тут к тебе вопрос: "Хорошо а если у меня это каталог вот там вводится список чего-либо ну как ям заранее то есть ты предлагаешь в смысле так ты же его так или иначе у тебя же JavaScript код есть который сгенерирует эту htмэльку у клиента" а всё понял я просто думал ты предлагаешь не генерить да значит эта же логика сама по себе тоже существует но это де опять же подчеркну это разговор который касается истории связанной с HTML - это как он правильно расшифровывается hyperтрансфер я не помню markup Language по-моему это да markup Language - это язык разметки документов то есть того контента который должен бы легко индексироваться каким-либо внешним алгоритмом ну кстати про индексацию они не думали когда его создавали честно говоря всё-таки они больше же думали про гипертекст ну в самом начале это безусловно да да да тогда потом когда они к HTML5 пришли то вот в HTML5 они уже этим этим очень серьёз заботились я кстати на протяжении всего подкаста хотел про это вспомнить просто когда ты говорил по поводу вот там программисты должны учить и так далее помнишь вот когда я говорил на тему того отношения к программистам что они больше ну мы уходим от вот такого уровня и приходим к более прикладному я просто хотел тогда ещё напомнить про HTML потому что а когда делали HTML там примерно такая же была концепция был момент когда ещё до пятого параллельно с ним XHTML появился и и я был из тех людей который его пытался применять потому что такой: "О смотрите строго все дела" но почему он не попёр потому что он накладывал слишком много ограничений на людей которые вообще-то далеко не всегда программисты я сейчас деталей не помню но по-моему он же требовал строгости помнишь я не про сам я не про самый HTML я про то почему он не попал в стандарт как таковой я помню что там был чуть ли не конфликт очень сильный в с консорциумом который разрабатывал вообще эти все стандарты и приводил их когда на них начали давить сторонние игроки рынка крупные типа Гугла типа Microsoft что нам нужно срочно срочно срочно ну я сейчас не вспомнил ну понятно но проблема там однозначно была потому что они говорят: "О'кей ладно вот допустим мы его применим и что у нас сейчас перестанут работать вообще все сайты и мы будем ждать пока их там переделают" ну типа это нереально потому что он был слишком строгий он фактически как смL ты не имел права там ни в одной запятой как бы ошибиться и поэтому это вот оно примерно в эту же сторону когда ты говоришь почему джез вот такой и там можно писать всё подряд а страдать приходится на нижнем более уровне угу и особо они ничего с этим сделать не могут потому что если его сделать всё-таки мм посерьёзней изначально усложнить то можно прийти к состоянию когда люди будут искать другое решение на чём писать и будут страдать а где ты найдёшь это решение в случае того же самого браузера нигде пока что а вот а вот давай про это поговорим да вот почему до сих пор не происходит то есть это же логично вот у тебя естьм а почему не перейти к процессу который уже вообще-то был это раз и как я про ГВТ говорил когда ты пишешь на Джаве и у тебя это уходит туда просто раньше это транслировалось в JavaScript сейчас это может транслироваться в вас я расскажу одну прохладную историю по этому поводу в четырнадцатом или в пятнадцатом году был ээ полностью готов такой язык который сейчас очень многие наверняка знают но он был тогда не такой как сейчас назывался он Дар была полностью готова виртуальная машина это синтаксис этого языка был полностью обратно совместим с языком JavaScript ээ был был были готовы компиляторы и транскомпиляторы из JS в дар из дарта в JS разрабатывалось это всё группой которую в том числе курировал Google всё было готово для того чтобы запустить даже в сам уже были сборки Google Chrome были бета-версии готовые в которых работал и JavaScript и Дар почему Google не дал ходу этому языку почему вдруг дальше это развития никакого не приобрело я не знаю шапочку из фольги и начинаем рассуждать на эту тему на на тему теории заговора те блин а ты мне прямо напомнил это я забыл что они реально вот внедряли его что это не просто был язык что была концепция мы перейдём все на дарт я сейчас только вспомнил это когда ты сказал да да есть мой один из моих люби любимых специалистов V8 который когда-то раньше занимался который потом перешёл в эту команду разработки Дарта вячеслав Егоров у него на Ютюбе есть несколько рассказов по этому поводу о том как у них было всё готово к запуску но Google сказал стоп остаётся JavaScript свасм та же самая любопытная история Websles как технология которая разрабатывалась она шла некоторое время без чёткого роудпа и люди подобные мне например думали что вас это будет дополнительный альтернативный язык JavaScript на более низком уровне если ты умеешь программировать пользуйся и делай а впоследствии это выразилось выродилось в то что сейчас для ручного программирования слабо приемлем это как жрать кактус см сейчас - это технология для транс для транскомпиляции из других языков программирования в язык JavaScript опять же спрашивается почему если с самого начала для этого было в самом только нужна была бы добрая воля с чего вдруг педалируется в сам по себе джаварипt ну у них видимо есть свои какие-то цели но я всё-таки вот в это верю потому что это вот это правильная штука потому что у тебя по сути тебе не нужен язык тебе нужна виртуальная машина и э собственно вот один из примеров котлин ты знаешь да что они очень сильно на это давят они а ты пишешь на котлине у тебя туда всё уходит причём у них это там ещё сложная экосистема с тем что у тебя под все платформы оно готовится и работает единственное я так понимаю что у Васма там есть мегаограничение невозможность работать с домом ну я могу это обманывать но это долгое время было и поэтому получается ты на нём можешь приложение сделать ну там есть сейчас другая другая вещь из Васма можно писать на канвас то есть вы можете рисовать интерфейс на непосредственно на самом канвасе этого бывает часто достаточно а так да васм формально согласно современной спецификации не может иметь доступ к ни к чему во вне этого самого вас то есть я правильно понимаю что в принципе в современном мире ребята которые например мира делают и вообще подобные системы ну вот когда у тебя рисуешь у тебя там канвасс на нём надо рисовать и же полно всяких фигмы и так далее это всё в принципе сейчас в теории можно было бы написать на каком-то таком матёром бэкэндовом статическом языке статически типизированном да так по-моему по-моему Фигма сейчас и переписывается и транскомпилируется по-моему Васм кажется по крайней мере модуль там по-моему мегабайта полтора васмовский у них сейчас загружается фигмовский а не на джаваскрипте он загружается ну надо пересмотреть чтобы я ничего не перепутал а так да возможно он в эту сторону и двигается но я считаю кстати это очень плохим потому что я считаю что это мы возвращаемся во времена флэша я напомню что когда-то был такой плагин как как Флш который тоже имел свой собственный условный канвас на котором рисовал всё что угодно и куда это потом чем это всё всё потом закончилось ну была попытка ещё Silverlight дададададада и даже спецы успели появиться но при этом я должен отдать должное специалистам которые писали флеш-плагин несмотря на все проблемы с безопасностью производительность этого плагина была дичайшая люди там занимались такими машинными оптимизациями чтобы заставить его производительно работать это им надо отдать должное но Адо Адо же по-моему владел флешем да не захотели его делать открытым и ну да Google сказал: "Не идите вы к чёрту" кстати кто не знает я вот недавно буквально интересовался общался с ребятами аба а во-первых не умер если кто-то думает что он умер а во-вторых это одна из сильнейших компаний занимающийся маркетинговыми инструментами для энтерпрайза серыймаркетинг вот это всё то есть там ими пользуются там типа крупнейшие вообще компании мира и это интересно а то есть они они давным-давно уже не фотошопы ни вот это всё никакого отношения к этому не имеют вот и поэтому они в таком корпоративном мире и для нормальных людей они как бы умерли хотя мы до сих пор продолжаем говорить слово Phothшоop пока ещё живы те люди которые это говорят через какое-то время это уйдёт но вообще это интересно слушай а кстати по этому поводу я честно говоря в webсмбли вообще ну плохо в эту тему погружался поэтому могу сейчас глупость сморозить но я ведь правильно понимаю что по сути вот как бы он где вообще находится-то то есть у тебя V8 - это про JS или он и ещё обрабатывает внутри V8 у тебя сейчас есть две отдельные экосистемы одна выполняет JavaScript код другая выполняет Web Assembly код то есть по сути это две разные то есть они не шарятся внутри V8 реализованы две разные машины которые причём я тебе больше более сейчас скажу для самого ВАСМа сейчас ещё появляется две разных машины васм изначально это была штука у которой такой вещи как Gbшколлектор отсутствовала как таковая ты должен был памятью управлять самостоятельно в Васме а сейчас появляется новая спецификация которая так и называется VASM GC VASM с GB-коллектором которая появляется уже третья машина внутри в V8 которая занимается выполнением этого кода но очень многие от этого рады потому как там языки с гарбашко-коллекторами такие подобные сшарпа и так далее если раньше они компилировались какой-то код в Васм они должны были за собой тянуть ещё и какой-то код на Васме эмулирующий работу Гарбашколектора то теперь этого делать им не надо.Г Надо это очень сильно упрощает транскомпиляцию из одного в другое с одной стороны а с другой стороны это уничтожает очень важную часть того что было раньше в Васме васм был предсказуем что плохо с точки зрения производительности в языке JavaScript это далеко не всегда возможность предсказать факт того когда у тебя вдруг может появиться какой-нибудь лаг из-за срабатывания того же самого гарбашколлектора в Васме этого не было потому что памятью ты управлял самостоятельно угу но с другой стороны это упрощает транскомпиляцию из других языков когда в в самом Васме реализовали свой гарбыш коллектор кстати вполне возможно что это вообще и главная причина почему он не переходит на этот уровень у тебя же по сути рантайм должен свой какой-то туда ещё идти дополнительный контроль да но это вообще насколько технически реализуемо с чего мы начали с того что а будет ли альтернатива альтернатива языку javasрипt вот я не знаю может быть и не будет непонятно почему Google так зубами держится за это да за это да ну точно он Я не верю что это история про то что давайте жить в параллельных мирах то есть они видимо там на долгосрок типа лет на 20 вперёд смотрят что в какой-то момент произойдёт Switch думаешь по этому поводу сказать просто знаешь что точно я понимаю для того чтобы это произошло вот так вот если порассуждать самое простое было бы мне кажется и самое логическое чтобы привело к реальному результату что вас бы допилили до такой степени что можно было бы просто убрать джаваскриптовую версию оставить только внутри V8 трансляцию и тогда бы они сказали: "Ребята а теперь JS в этом смысле точно такой же как и все остальные никаких преимуществ пишите на чём-то другом может быть" но опять же мы возвращаемся к тому о чём мы говорили в середине этого не произойдёт потому что на языке джаварип ты сел тяп-тяп тяп-ляп тяп-ляп и у тебя быстро что-то заработало транскомпиляция из других языков ВАСМ это всё-таки требует требуется всё-таки да некоторая квалификация для того чтобы знать что куда и как транскомпилировать и как этот модуль потом подключить чтобы загрузить наверное JavaScript никогда не умрёт угу я понял кстати ну да но это вообще интересно то есть потому что про Web Assemblet что-то так долго говорили и все кричали: "А а слушай я знаешь что понял вот э я что заметил как он используется смотри я не то чтобы в это копал но скорее тут как просто такой как потребитель как только появляется какая-то платформенная сборка для каких-то нодовских штук то я заметил что э появляется альтернатива типа ребята ставьте в Асм работает везде" и в первую очередь речь идёт про ноду то есть когда то есть короче есть пока понимаю о чём ты смотри есть либы у которых есть сишные модули и когда ты работаешь в докере в Маке ещё где-то у тебя например ты начинаешь запускать что-то на Маке вот у меня часто бывает а его работали до этого например на другой платформе и он мне прямо падает с ошибкой говорит: "Я не буду у тебя запускаться типа либо перекомпилируй либо ставь другое либо ставь" а это что-то с роллапом было связано в первую очередь и я реально заметил что последнее время появилась тенденция что типа если ты хочешь кроссплатформенность именно на БКЕ в но например я думаю что и в других местах такое может быть в в теории то типа берёшь пакет который именно под васм написан не могу ничего по этому поводу сказать не уверен да вот если кто с таким встречался напишите ну в общем я в этот момент такой посмотрел понял речь же идёт не только про запуск в браузере речь идёт ещё и про то чтобы писать твои модули на беке а универсальными по платформе потому что Vasм везде работает у тебя машина сама не меняется то есть по сути мы получаем Java так-то уж васм в этом смысле очень простой там-то как раз статическая типизация в Васме только там нет объектов там только числодробилка сама по себе и возможность работы с памятью чего как мы понимаем достаточно если писать с нуля всё что угодно можно написать ну до Джавы Васма очень далеко с другой стороны она вас-то и не нужна потому что вы же берёте сторонний язык и транскомпилируете его в вас угу ну я скорее про концепцию Write Ones use everywhere вот это вот да потому что у тебя там есть learn ну да ну да use everywh Знаешь что хотел спросить вот э во фронтнде есть такая тенденция сейчас её Ситник очень тоже любит и продвигает отказ от зависимостей уменьшение размеров бандлов и вот это всё и что это тоже большая проблема тебя эта проблема волнует или это тебя не волнует дело всё в том что если правильно писать JavaScript код то ты так или иначе его напи будешь писать таким образом что он у тебя не будет собираться в один большой бандл если его писать правильно как например если мы будем писать код в функциональном стиле то при обращении к какой-либо возможности наш код может быть написан таким образом что как только мы обращаемся к какой-то нам машинерии которая требуется нашему проекту она автоматически будет при помощи того же самого импорта загружена только это нужно правильно подготовить этот код с самого начала нужно озаботиться относительно архитектуры и правильно спланировать эту архитектуру образом при котором тебе не надо это всё собирать в один-единственный бандл собирай сейчас в маленькие кусочки с точки зрения производительности JavaScript кода это очень положительная и правильная тенденция именно возвращаясь к началу того о чём мы говорили когда например те же самые правила STICНИКС описанные в спецификации которые обязаны теперь быть наложены на весь твой бандл а не на только тот исполняемый маленький кусочек кода резко снижаются издержки на обработку тех самых Static Semantics когда у нас есть маленькие кусочки которые загружаются определённым образом слава богу что система импорта в современном JavaScript достаточно приемлемая и хорошая это абсолютно правильный подход на мой взгляд по крайней мере сейчас ну плюс если использовать системы сборки современных у тебя всякие тришейкинги там очень классно справляются и всё это повырезают можно и так а можно и без этого обходиться но и так в том числе конечно мне не нравится знаешь что мне не нравится вот тебе честно скажу очень многие библиотеки просят импортируй прямо конкретный модуль когда ты название либо слш и там функцию конкретную как вот в ладаш и аналогах ну честно меня это бесит когда мне надо по три по пять функций использовать в одном месте там работы с датами например да вот эти вот либы я такой: "Блин я лучше возьму себе либу которая поддерживает изначально тришейкинг и соответственно она сама там всё повырезает но я не буду этой фигнёй страдать" ну это вопрос времени они в любом случае к этому придут сейчас же ж тенденция именно в эту сторону наблюдается откуда Откуда раньше откуда взял взялась вообще эта вся тенденция собирать в один большой бандл это тенденция родовая травма травма протокола HTТП1 когда у нас на браузер максимум согласно спецификации по-моему четыре потока и если ты будешь грузить маленькими кусочками весь свой Java JavaScript код то ты будешь очень долго ждать только на установку соединений и на загрузке этих файлов когда мы сейчас уже давно перешли на hттп-2 hттп-3 уже вон появляется всюду проблем с этим уже никакой в этом необходимости нет зачем собирать это всё в один единственный бандл задаётся вопрос да но при этом кстати вот я когда в центре наблюдаю сейчас например Вит он там собирает у тебя вообще чуть там каждый компонент свой собственный класс да он использует нативную систему модулей уже в браузере знаешь на что я постоянно натыкаюсь там так много проблем с с динамическим загрузкой с динамической загрузкой модулей у него же есть runtunтайм да который их подгружает там там же дело не просто файл ему указал он их пошёл грузить там же важно тоже в правильном кус в правильном порядке всё это пособирать сейчас конечно это всё в более упрощённом виде стало чем раньше когда всё это было совсем вручную трясётся но постоянно всё равно то есть я вижу да более того если ты прямо смотришь у тебя в Вите есть такой типа для билдажи есть отдельная прямо статья для продакшна и там написано что смотрите когда мы не смогли загрузить какой-то модуль а соответственно а кстати это может быть ещё от предыдущего сохраниться потому что предыдущие там удалили там специальный кусок кода чтобы релоудить страничку на события там недозагрузки всё равно вот этого добра тоже довольно много бывает то есть грузится грузится чуть не загрузилось скорее всего что возможно эволюционно мы придём к тому что если JavaScript будет жить жив и жить жить будет дальше то возможно эти проблемы будут уже начинать решать на уровне самого агента выполняющего этот код хотя я думаю просто эволюционно мы к этому придём код перепишется и начнёт писаться по-другому о'кей слушай не могу тебя не спросить наверное такое последнее вот ты говоришь про а и я просто когда тебя слышал ты много говоришь про концепции которым надо учить в каком порядке и так далее как бы ты вообще сейчас учил программистов что ты считаешь самым важным я не знаю честно то скажу я Ну во-первых то в чём я точно уверен это в том что необходима академическая подготовка не только не столько потому что человеку нужно влить какие-то знания сколько то чтобы он прошёл через вот эти жернова постоянные разработки опыт разработка опыт разработка опыт чтобы в голове голова привыкла мыслить соответствующим образом спроси меня несколько лет назад я бы начал рассказывать что-нибудь про какие-нибудь фундаментальные вещи связанные с тем как устроены современные современные машины компьютерные как устроен процессор как устроена память как устроена система исчисления сейчас мы видим что на уровне тех языков программирования с высокой долей абстракции совсем не обязательно это всё знать достаточно ориентироваться в эффективности этих абстракций можно очень здорово программировать но одновременно с этим если у человека нет навыка опыта он не сталкивался с решением проблем не попадал в типичные Как ты человеку объясни что такое хорошая архитектура да когда он когда он ни разу не писал ничего сложного и большого и не попадал в ситуацию когда ему вдруг нужно было бы это расширять а он вдруг понимает что тот код который он написал он расширять не может чтобы он хотя бы раз в жизни попытался сам самостоятельно для самого себя решить эту проблему то есть реконструировать рефакторить свой код образом когда бы этих проблем бы не возникало вот мне кажется что очень важен опыт и по всей видимости опыт не в смысле решения однотипных постоянных задач а в выстраивании какой-то программы обучения при которого программиста за руку проводят через типичный набор проблем с которыми он сталкивается вот интересный пример по этому поводу у меня дочь училась в школе не обыкновенной школе а школе развивающего обучения в чём основное отличие было этой школы от типичной средней среднестатистической школы например когда они учились математике их никто не учил складывать вычитать а процесс обучения выстраивался таким образом когда дети сами придумывали сложение вычитание что такое цифры и как как ими пользоваться что такое числа может быть в случае с программистами в современными в современных реалиях нужно поступать именно так же то есть проводить их руками за за руку проводить их через типичный набор проблем с которыми он должен сталкиваться и в будущем их не повторять надо только проводить их таким образом чтобы они обязательно в неё попали в эту проблему думали о том как её решить и экономить им время только в том случае когда ты им подсказываешь правильные направления этого решения но обязательно чтобы они прошли через это своими собственными руками и своими собственными мозгами может быть так ну не уверен я чем чем старше я становлюсь тем менее категоричен я в своих условиях в этом плане да это интересно потому что это чувствуется по от перехода к переходу потому что действительно наверное все кто попадают в эту ловушку когда типа вот ребят вы того сего не знаете там про это книжки не читали а потом так смотришь меняется меняется место такой думаешь блин м где-то граница в другом месте проходит не всегда понятно в каком но где-то в другом она проходит точно да вот потому что знаешь иногда я просто офигею мы с ребятами как-то для себя выяснили что может быть у тебя другое ощущение но у нас почему-то возник такое ощущение что именно циклы повторения когда мы вот возвращаемся на те же самые концепции но немножко в другом формате такой по спирали да здесь такая спиральная теория где-то 8 лет проходит в индустрии когда мы возвращаемся к тем же самым штукам но немножко под другим углом и вот как прикол помнишь была девяностые это там двухты000чный когда все говорили про паттерны в ОП то есть вот эта банда четырёх паттерны сабесы у тебя просто это было вот ты просто без этого жить не мог это везде и всё исчезло нафиг я до сих пор поверить в это не могу все вдруг резко посчитали что это неважно да немножко с другой стороны подойдём на собеседованиях сейчас кроме твоих технических скилов важно теперь что софтскилы начинают спрашивать при этом давайте откинемся назад в шестидесятые семидесятые восьмидесятые годы когда создавались большое количество сложных программных продуктов при помощи инструментов которые и близко по удобству не совпадают с текущими никто софтскилами не интересовался но каким-то образом люди создавали сложнейшие программные продукты которыми мы сейчас пользуемся чёрт его знает да кстати я прямо хочу подчеркнуть ты очень классную штуку сказал потому что она меня прям ну не то что напрягает но я такой всё время удивляюсь типа ребят ну это не так когда начинают говорить: "Вот сейчас знаешь такой: "Вот сейчас типа важны софтски" я такой: "Блин да вам всегда это было важно просто а не придумали отдельную просто секцию под это как правило" но извините системы которые создавались во времена Брукса там блин над одной системой 1.00 человек работало и это было немного микросервисов это была одна большая цельная система то есть сложность инженерии вот сложность коммуникации сложность организационной структуры была намного да чем большинство проектов которые сейчас потому что у тебя много независимых команд вы там сами варитесь при этом было ещё то время когда объём рынка программистов был совсем не такой как сейчас и в программисты тогда шли ээ люди с большим бэкграундом математики и что уж там говорить часто гиками полнейшими и тем не менее они каким-то образом коммуницировали и решали эти задачи у нас с тобой знаешь такой под конец получилось деды бурчат я знаю что ребята которые слушают мой подкаст они знаешь часто обращают внимание они говорят типа ностальжи потому что мы так это по-прошлому проходимся и вот сейчас мы тоже с тобой немножко тогда же трава зеленее деревья были маленькими мымы мы были большими сейс да да эх я блин мне сложно называть тебя Мурыч честно тебе скажу потому что я привык людей по именам назвать но большое тебе спасибо что ты пришёл поговорил э со мной да это вам спасибо вот да ребят кто посмотрел не забудьте обязательно поставить лайк напишите что вы думаете про будущие GS и всего такого и не забывайте заходить ко мне в канал Организованное программирование где я пишу часто всякие интересные технические не только штуки давай всем спасибо пока

Creators and Guests

Demi Murych Максим Бобров
Guest
Demi Murych Максим Бобров
реверс инженер. основные языки программирования: язык ассемблера для x86 архитектуры и язык JavaScript. первую программу, которой пользовался кто-то кроме меня, написал больше 33 лет назад. автор компьютерных - вирусов, времен конца 90-тых начала 2000 годов. Широко известен в узких кругах вирусной сцены тех лет. автор взломов двух веб проектов, связанных с украинским ТВ в 2000 годах: канал Inter и STB. руководил и разрабатывал веб - инфраструктуру музыкального фестиваля казантип. уже 5 лет пишу книжку о JavaScript. знаю про JavaScript то, что никто не знает
#39 Как писать JS-код, который не будет тормозить? Советы от Demi Murych | Максим Бобров
Broadcast by