Next Level Dev
СтатистикаДелюсь опытом с ИИ, менторю начинающих android-разрабов Roadmap для начинающих андроид-разрабов в личке @ilia_a_popov Там же запись на менторство и консультации О менторстве: https://androidmentor.ru
- Последний пост
- 9 авг.
- Последнее чтение
- 21:43
- Постов за неделю
- 0
- Всего постов
- 26
- Тип
- открытый
- Язык
- русский
- Категория
- Технологии (по похожим)
- В каталоге с
- 13 авг.
- 1/24сутки в ленте
- 199
- 1/48двое суток
- 228
- 1/72трое суток
- 245
Оценка по просмотрам недавних постов: пост набирает почти всё за первые сутки.
Посты
Почему ИИ так заходит российскому бизнесу? Во-первых – бум ИИ сейчас, конечно, не только в РФ, и не тут он начался. И увольнения из-за ИИ начались не в РФ, а в ФААНГе, или как там его нынче называют. Но у нас этот тренд плотно закрепился и будет развиваться. Потому что его подпитывает кризис бизнесов. На бизнес давят со всех сторон, выжимают из него все соки – а ИИ выглядит, как спасительная соломка. И тут уже не до сантиментов – «люди – наш главный капитал и ценность» перестаёт действовать, потому что «любого можно заменить ИИ». Кто же останется, и останется ли кто-то? Ну, точно останутся те, кто умеет строить свой харнесс. Потому что чем дальше, тем ценнее будет не «сидеть на буржуйских подписках», которые будут становиться всё дороже, да и другие гайки будут закручиваться всё сильнее с обеих сторон. Сливать данные на зарубежные сервера посредством нейронок тоже запретят на государственном уровне, вопрос времени. Это и сейчас в серьёзных компаниях делать нельзя, сразу по башке от СБ получишь, как узнают. Вот и останется список «разрешённых харнесс» типа всяких там гигачатов, да локальные харнессы у других компаний, которые смогут себе это позволить. А остальные будут платить и страдать. Засада в том, что не все бизнесы это понимают. И если с кассовым разрывом они умеют бороться, то ИИ-разрыв накроет бизнесы (те, кто не смог себе позволить въебать сотни миллионов на свой харнесс) медным тазом. Людей-то уже поувольняли, на клод заменили. А клод запретили, че дальше делать будем? Переходить на другие говнохарнессы? Они не работают так же хорошо => людей придётся возвращать. А про вас уже молва «поувольняли нещадно, не идите к этим мудакам». Пупупу. А продумывать это всё, делать плавно, аккуратно, с фоллбэками и соломками далеко не у всех бизнесов есть возможность сейчас. Вот они и прыгают в эту дырявую спасительную ИИ-шлюпку. Они считают, что этот риск того стоит – ну, время покажет. Да и сами люди вахуе будут, когда клоды запретят. К нейронкам быстро привыкаешь. Мышление уже перестроилось, обратно перестраиваться будет больно. Это займёт какое-то время, и не все это смогут, кто-то плюнет и пойдёт делать свою пасеку. Поэтому я посоветую и людям, и бизнесам одно – обязательно внедряйте ИИ, но не достигайте уровня «без ИИ я беспомощен». И держите в уме, что крутые зарубежные нейронки в любой момент могут прикрыть. Вот если вы свой стафф можете заменить на российские харнессы, и вас не парит сливать им свои данные – то норм. А если есть свой харнесс, то совсем хорошо.
видео или голосовое, без подписи
Илья Аристотель на связи. Всегда можно найти 1001 причину для "не получится" и аргументированно ничё не делать. Потому что эти причины правда всегда есть. А можно вспомнить, что в любой, абсолютно любой жизненной ситуации (война, бомбёжка твоего города, голод, чё угодно) люди не сидят всегда грустные, а находят поводы для радости. Находят поводы чёто делать, создавать, творить, отдыхать. Не верите – спросите тех, кто щас это переживает, с любой из сторон. Естественно им хуёво, но они не сидят все в беспробудной депрессии. А значит, поводы чёто делать всегда есть. И если вокруг тебя щас не рушатся стены, значит этих поводов дохуя. И можно тратить время и силы на то, чтобы искать их, а не чтобы нагонять тоски. И ты их найдёшь. И у каждого они будут свои. Только ты можешь найти то, что порадует именно тебя именно сейчас. И даст тебе силы идти дальше. Ну или можешь посидеть поныть ещё, тоже вариант.
Агентик раг: спасёт ли эта соломинка? 💪 Итак, агентик раг. В чём его сила? Ты даёшь ему задачу и инструмент, и он её выполняет: вот есть такой-то запрос пользователя, вот есть бд, где скорее всего есть инфа по этому вопросу. Найди подходящие блоки в бд, синтезируй их все и отдай ахуенный ответ наружу. 🚬 Да? Нет. Ахуенно оно работать не будет. Потому что, чем больше в вашей цепочке будет агентов, а не жёстких алгоритмов, тем больше будет непредсказуемости. Сейчас он дал идеальный ответ, а в следующий раз на тот же вопрос вы получаете белиберду. А иногда вообще получите набор символов, потому что он чего-то там не распарсил и не туда свернул. То он криво поймёт вопрос пользователя, то слишком буквально будет искать в бд, то нихуя не найдёт, но скажет, что нашёл – вариантов вас незаметно обмануть у него будет масса. 🤨 И вот на какой-то день или месяц ваших попыток завести все эти академически красивые флоу, и получая какую-то плавающую хуйню на выходе, вы вдруг поймёте, что ебал я это ИИ, проще студента нанять кажется, надо навтыкать всяких костылей для стабилизации и укрощения строптивых агентов, которые так и норовят напридумывать лишнего. И если вы будете обращаться с этой стабилизацией к ИИ, то он с радостью за это возьмётся, и всё ахуенно пофиксит. 🚬 Да? Нет. Потому что, напоминаю, эта свинья всегда хочет сделать так, чтобы вы, весь такой разъярённый тем, что у вас всё работает не так, как задумывалось, в кратчайшие сроки и с минимальной затратой токенов стали довольным. А это значит только одно: когда вы обратитесь к нему с проблемой "Я ВВЁЛ А, И ПОЛУЧИЛ В, А ДОЛЖЕН БЫЛ ПОЛУЧИТЬ Б" – именно эту проблему он и пофиксит. Ему поебать, что вы имели ввиду, что он должен по этому примеру понять корневую причину проблемы и пофиксить её. 🩼 Он с 50% вероятностью вставит в промпт костыль, чтобы именно на этот вопрос вы получили именно тот ответ. 🩼 А ещё с 50% вероятностью он вставит какой-нибудь ссаный регэксп или типа того, что тоже пофиксит только ваш кейс, но сломается на любом другом. Поэтому вам понадобятся валидаторы. И валидаторы валидаторов. И голосования валидаторов. И тест-кейсы. Много тест-кейсов. И прехуки, постхуки, запрещающие ему исправлять конкретные кейсы в промптах. И много-много всего, что будет нарастать по мере ваших тщётных попыток договориться с искусственным монстром. Будет ли свет в конце тоннеля? Временами. Пока его не заслонила очередная жопа. Но всё зависит от вашего перфекционизма, как и всегда. С ИИ вы не получите идеального сервиса. Но довольно быстро получите те самые 80% профита.
Не повторяйте мои ошибки с RAG Если вы вдруг подумали, что я тут вам академические тексты строчу про ИИ, то нет – я всё это на своей шкуре проживал и проживаю. У меня пара петов вайбкодится, и на основной работе я по полной ИИ использую. И тут я делюсь выстраданными выводами. На чужих ошибках вы не научитесь, но хоть представление будете иметь. 😇 Я наивно думал, что у меня получится просто дать ИИ методичку, и он будет красиво отвечать, на неё опираясь. Хер. Тут два стула: 🪑либо эта свинья будет тупо цитировать бд (а нахрена мне этот попугай, так вся ценность ИИ теряется. Помните, как бесят такие тупорылые боты в поддержке?) 🪑либо этот кретин будет нещадно перевирать всё, что написано в бд «своими словами». Выглядеть будет порой красиво и складно (но не всегда), но смысл он может вывернуть наизнанку. ❗️И это полбеды. А главная засада в том, что пресловутый семантический поиск по бд (которая на самом деле векторное хранилище, а не бд) часто работает дерьмово. Потому что пользователь криво сформулировал запрос, и по нему в бд вы ничё вообще можете не найти, даже если оно там и есть. Потому что в бд оно в другой формулировке и другими словами. 🙅 Поэтому, если ваша задача не совсем тривиальна, запросы пользователей не вылизаны, а бд не идеальна – то классический naive rag (который я описал выше) вам мало поможет. Тупого запроса в бд «дай 5 подходящих блоков» вам не хватит. И здесь на сцену выходит agentic rag. Но об этом в другой раз.
Как заставить ллм отвечать по методичке? Есть много ситуаций, когда вы хотите, чтобы ллм опиралась на что-то конкретное в своих ответах, а не пыталась "думать" на основе всего того бардака, на котором её предобучили. Самый частый кейс – когда вы делаете бота на первую линию поддержки. Бот должен отвечать по готовым скриптам, а перед ответом лезть в базу данных компании и в ответе опираться на них, а не на те галлюцинации, которые могут у ллм возникнуть, когда она видит этот вопрос. RAG – ллм с внешней базой данных. Вы говорите ллм: "чувак, не надо тебе лишний раз пыжиться в попытках понять, на основе чего мне ответить. Вот тебе всё что тебе нужно знать, просто синтезируй ответ из этого." Это способ минимизировать галлюцинации, увеличить предсказуемость ответов. Соблазнительно, да? 🫥 Флоу работы RAG такой: Вместо того, чтобы сразу забить вопрос пользователя в ллм и получить ответ, сначала вы пробиваете вопрос пользователя во внешней базе данных, получаете из неё наиболее релевантные блоки, пихаете эти блоки в промпт как контекст вашего вопроса, на который ллм должна опираться при ответе, и только после этого отправляете в ллм всю эту простыню. 🎯 И на бумаге это звучит идеально. Но на практике в базе данных у вас будет куча дерьма, в котором чёрт ногу сломит. И когда вы эту кучу дерьма пихнёте в промпт как контекст, что вы получите на выходе из ллм? Правильно, кучу дерьма в квадрате. Но завёрнутую в красивую конфетку, а ллм это очень хорошо умеют делать. 0️⃣ При этом ллм будет убеждён, что всё делает правильно, вы же ему этот контекст дали, он ему верит, и вы будете убеждены, что ответ верен, он же на основе вашей бд сделан. А в реальности всё это полная херня, потому что из бд достали не то, а ллм в процессе докрутил до ещё большей чуши. 🌟 И тут мы переходим к тем кракенам, которые очень быстро утащат ваш RAG-корабль на дно. Но это будет в следующей серии.
🤒 Как делать агентов и скиллы? Итак, субагент – это агент, которого запускает другой агент. А что такое скилл? Его же тоже запускает агент? Чем тогда скилл от субагента отличается? И как их вообще создавать, насколько это сложно? 📌 Во-первых – тот "чатик", в котором вы общаетесь с ллм – это тоже агент. Один большой умный агент. Иначе, как я объяснял выше, этот чатик не умел бы делать ничего, кроме как получать текст на вход и отдавать текст на выход. Даже удержание контекста между вопросами – это уже агентские штучки над ллм. 📌 Во-вторых, агент – это тупо .md -файл (текстовый файл с удобной разметкой маркдаун). Тупо текст, да. А скилл – это тоже .md-файл, но лежащий в отдельной папке вместе с другими необходимыми ему файлами. 💪 Как сделать скилл: – Делаете текстовый файл SKILL.md, в начале которого будет (обязательно): --- name: название-вашего-скилла description: описание-вашего-скилла --- А дальше в файле может быть любая текстовая инструкция, описывающая, че вы хотите от этого скилла (хоть от балды её напишите, "как вам видится"). Файл этот кладёте в папку .claude/skills/название-вашего-скилла – это и будет ваш скилл, который вы сможете вызывать через /название-вашего-скилла в чате с агентом, или же он сам будет вызывать его, когда сочтёт нужным (он будет понимать это по вашему description). В эту же папку вы можете положить любые другие файлы, которые нужны для вашего скилла, на которые вы будете ссылаться в его SKILL.md. 🎩 Как сделать агента: Да всё то же самое, только вместо .claude/skills/название-вашего-скилла/SKILL.md создаёте файл .claude/agents/название-вашего-агента.md. Его тоже другие агенты будут находить по description. У агента, в отличие от навыка, помимо name и description ещё можно указать model (какую ллм использовать). А ещё у них обоих можно указать tools (какие инструменты доступны: например, можно написать tools: Read и он сможет только читать, но не сможет ниче создавать или грепать или баш запускать). ❗️ Главное отличие скилла от субагента: скилл вызывается в текущем контексте агента, который его вызвал. А вот когда агент вызывает субагента – у субагента свой контекст. И важнейшее отличие ваших инструкций после name и description в скиллах и субагентах следующее: в субагентах то, что вы напишете, станет системным промптом субагента, а в скилле – это просто инструкция, применяемая в контексте текущего агента.
Зачем нужны субагенты? Можно просто делать всю работу в одном агенте, но вы столкнётесь с проблемами: 1️⃣ Если агенту надо прожевать что-то большое (например – декомпилировать и прочитать файлы, прочитать скриншоты с картинками и текстом), то он быстро выжрет ваше контекстное окно и запустит compact. А это – идеальный рецепт для его затупления, потому что он забудет половину ваших важных изначальных инструкций и запутается в файлах. Особенно если это произойдёт в середине его работы с файлами, там вообще туши свет. Поэтому жирные задачи лучше отдавать субагентам, которых вы отдельно настроите так, чтобы они отдавали наружу уже обработанную инфу в том виде, в котором будет удобно, и не засирали память основному агенту. 2️⃣ Вы будете сталкиваться с однотипными задачами (например – сделать код-ревью), и время от времени будете получать разные результаты с разными косяками, и каждый раз будете исправлять основного агента, он будет извиняться, а через несколько раз забывать и опять ошибаться. Гораздо проще один раз настроить одного субагента, указать ему все типичные агентские ошибки и их исправления, указать ему, куда смотреть, куда не смотреть – и отдавать задачу ему. Тогда основной агент и контекст себе не засрёт, и не потеряет нить своей основной задачи, и сделает её качественнее. 3️⃣ Если делать субагентов изолированными (они не знают контекст текущего разговора, а просто получают задачу в вакууме и её решают), то вы получаете "ещё одну пару глаз", которые могут подсветить какие-то проблемы. Особенно это важно в код-ревью агентах. Если агент будет ревьюить сам себя – это, конечно, лучше, чем ничего, но сильно хуже, чем получить ревью от изолированного агента.
Evolution's end Never will it mend С появлением крутых агентов мы достигли очередного локального экстремума развития нашего мира. ИИ вобрало в себя ранее обретённые человечеством знания и предоставило удобный интерфейс для использования любому конкретному человеку. По сути, именно это сделал сам интернет, только в нём надо было самому всё искать, а тут всё найдено и "осмыслено" за тебя. И ты можешь просто сидеть и наслаждаться этим прогрессом, кайфовать от того, насколько всё стало удобно и приятно. Немного расслабить плечи. Найти ответы на важные вопросы, на которые всегда не хватало сил и времени, а теперь достаточно просто спросить – это куда проще, чем искать. Но есть и минусы – есть риск и соблазн на этом остановиться. И застрять в зоне комфорта. Поэтому лично я стараюсь, по возможности, быть на острие этих изменений, и пытаюсь максимально понять, чо там происходит, и как это максимально выгодно использовать, и как это можно дальше развивать. Будьте протоссами, а не терранами. Хватит играть в машинки и присоединяйтесь к свету Кхалы уже наконец. Не стесняйтесь использовать лучшее из того, что есть, не отрицайте прогресс. Не тормозите человечество. Ему и так тормозов хватает.
Прекратите болтать с агентами! Один из последних важнейших инсайтов, подрезанных у Миши Левченко: "критически важно не воспринимать модель как человека, которого можно попросить переделать и он поймёт и переделает. Каждое новое сообщение в истории отупляет модель, забивает ей оперативку. И если вы обнаружили что модель в целом уже пошла не туда, куда нужно – не надо её корректировать. Дропайте всё что сделано и меняйте изначальный промпт и план. Почему это важно и че это значит? Вот даёшь ты агенту задание "напиши мне пару новых классов, унаследуясь от конкретной абстракции". А эта скотина наследуется от абстракции, но "фиктивно", просто навтыкав заглушки в переопределяемые методы, и наделав своих новых методов в обход. Наплевав на смысл и суть абстракции. И ты конечно можешь написать ему в чат "ты идиот, ты все неправильно сделал, иди и переделай вот так вот" – и он чето переделает, но скорее всего опять где-то постарается схалявить и затупить. Потому что, раз он ошибся в тот раз, значит в основе этой ошибки лежит какой-то неверный вывод при анализе проекта / исследовании путей решения. И наиболее эффективным решением будет не писать ему в чат про эту ошибку, а постараться понять, почему именно он свернул не туда, и обновить ему конфиг (claude.md или где там ты конфигурируешь агента). А затем перезапустить агента, попросив его проверить написанный ранее код. И если ты всё сделал правильно – он сам найдёт ошибку, скажет, чё он сделал не так, и как сделать правильно. И не ошибётся так в следующий раз. А ты не потратишь нервы, силы и токены на бессмысленное общение с тупым агентом.
Раскрываю магию нейронок: часть 2 Как же «нейронки» делают те сложные и крутые вещи, за которые мы их ценим? Поскольку llm способна лишь сделать из вашего natural language формализированный запрос, напрашивается следующий шаг, который этот запрос примет и обработает. Для этого существует понятие mcp-сервера. Это обычный сервер, который поддерживает mcp-протокол. Грубо говоря, он умеет отдавать обработанные данные в определенном формате, и получать данные в определенном формате. То есть, обычный сервер делает презентации, которые вы просите сделать chatGPT, а вовсе не llm. Задача llm – правильно понять, че вы хотите, формализировать ваш запрос и отправить задачу правильному mcp-серверу, а потом принять запрос обратно и отдать результат вам. MCP-серверы можно написать и самому, подключить их к любому существующему агенту и заставить нейронку делать че захотите. Вопрос на засыпку, чтоб не расслаблялись: чем ИИ-ассистент отличается от ИИ-агента?
Раскрываю магию нейронок: часть 1 Если ты – не сеньорский задрот мл-щик, которого не пугают слова эмбеддинг и тензор, то под "нейронкой" ты подразумеваешь сайты типа chatgpt.com или midjourney.com, на которых ты в чате общаешься с нейронкой, а она делает тебе всякую магию. Нырнём-ка чуть поглубже, чтоб это не было для тебя таким чёрным ящиком: То, что ты называешь нейронкой, на самом деле является полезным интерфейсом над LLM. LLM (Large Language Model) – это, собственно, и есть сама нейронка. И её задача проста: понять твой запрос, который ты ей делаешь на "natural language" (обычном разговорном языке), и на таком же языке выдать тебе ответ из своей базы данных, на которой её предварительно обучили. LLM, как большинство из вас знает, предобучают на огромном массиве данных из интернета. Грубо говоря, LLM – это та же википедия, в которую ты загоняешь запрос и получаешь наиболее релевантный ответ. Всё. Никакой магии. Да, под капотом там куча математики, но суть такая. Поэтому LLM не может врать, она может только ошибаться. Любой её ответ – это просто поиск в её базе данных наиболее похожего ответа на твой вопрос. И если ты формулируешь вопрос так же, как его сформулировал какой-нибудь дебил на каком-нибудь форуме – ты и получишь ответ этому дебилу на этом форуме. Но, скорее всего, в вежливом ключе (хотя, говорят, не всегда). Следовательно, твоя задача при промптировании – максимально сузить для LLM область, в которой ей надо искать ответ – чтобы она не полезла не на тот форум. Вот и вся суть "промпт инжиниринга". Ещё раз: у нейронки нет эмоций. Однако у неё, видимо, есть ряд топорных надстроек (например, в thinking версиях видно, что на раздражение пользователя она реагирует как на триггер к изменению подхода – ровно так же, как если бы ты вместо "да мать твою сука" написал ей "измени подход, ты ходишь кругами"). Но запомните. Сама по себе LLM, будь это чатгпт или миджорни – максимально тупой инструмент, который просто сопоставляет ваш запрос с запросами, на которых его предобучили. Чатгпт предобучили сопоставлять символам символы, а миджорни – символам изображения. Но каким же нахрен образом она тогда ходит на сайты и берёт оттуда инфу? Как она тогда может сходить и посмотреть мой код или мои имейлы?
И всё же лучше всего у нейронок получается пиздеть. Оно и неудивительно, на людях ж учились 🌚 Причём неважно, клауд это или гпт. Даёшь ему задание «нейронка по апи должна написать тесты». Он пару раз пробует, у него не получается распарить ответ нормально. Он плюёт и пишет тесты сам, подсовывает это в коде в качестве «фоллбэка, если что-то идёт не так», и рапортует «задача решена, всё работает идеально!». Всегда, всегда, всегда мать его надо читать код, который он пишет, даже если вам кажется, что задача решена и всё работает. Нейронки охренительно умеют маскировать свои ошибки. Даёшь ему задание «вот ссылка на доку апи, почитай и реализуй конкретный метод». Он идёт читать, реализовывает, рапортует, что всё работает идеально. На деле же у него не получилось прочитать документацию и он реализовал метод «ну как вижу, примерно», насовав туда несуществующих параметров. Понял я это, когда сам глазами сравнил. Пока не получается нормально вогнать его в предсказуемые рамки, постоянно приходится переспрашивать и перепроверять. Особенно бесит, когда он шаг назад сломал то, что до этого работало, говоришь ему «откати всё назад», а он делает вместо этого очередное исправление поверх, которое ещё глубже закапывает проблему. И, тем не менее, с ним получается всё куда быстрее, чем без него. Но вот с предсказуемостью сроков пока не очень. Порой зависаю на простых заданиях на часы, потому что эта свинья что-то ломает на ровном месте.
Вчера Курсор мне накидал работающий докер-контейнер, который ходит через гитхаб апи в мой аккаунт, собирает данные о репозиториях, делает по ним отчёт и отправляет мне на gmail раз в день. В целом, если накатить на это дело mcp-контракт, то можно это делать с помощью llm: написать в чате с нейронкой "захерачь мне отчёты раз в день", она по запросу поймёт, что надо обращаться на мой mcp-сервер, ну а дальше примерно то же самое. А теперь внимание, вопрос: знаю ли я, что такое докер? Ну, чисто понаслышке, но ни разу сам не создавал контейнер. И для меня этот ящик весьма чёрный. Тем не менее, мы с курсором на пару разрулили ряд проблем и с аутентификацией, и в питон-коде, и в итоге всё это завелось. Говнокод ли там? Ну разумеется. Работает ли оно? Работает. Но я-то спешу, потому что мне задания дают ежедневные на челлендже, и мне пока это побоку. Если бы сам делал, для себя, без спешки – то каждую итерацию написания кода ИИ бы проверял на адекватность, особенно с точки зрения архитектуры, солида и вот этого всего. Ну да, ну да, убеждай себя, проверял бы он, ха-ха. Пока главным результатом 8 дней челленджа считаю то, что нейронка и взаимодействие с ней стало куда понятнее, этот ящик уже не так уж чёрен. И возможности и идеи использования ИИ у меня стали сильно шире. Круто. Едем дальше.
Вписался тут в Гладковский AI Advent Challenge. Месяц каждый день ебашим задания от Алексея. А Алексей спуску не даёт =) Вчера вот я въебал несколько часов на то, чтоб Курсор написал мне андроид-приложуху с простеньким чатом, в котором можно общаться с нейронкой по апи. Лёг в 2 ночи, но справился. Алексей предупреждал, что не пытайтесь делать чат на мобилке, делайте хотя бы десктоп – но так неинтересно. Больше всего времени ушло на настройку всяких базовых rules, чтоб Курсор не так сильно тупил. Подключал его к тому самому проекту, который я когда-то вместе с вами писал на двух стримах. Потому что я решил, что вместо того, чтоб по сто раз объяснять нейронке, как ей надо писать код, пусть лучше сама посмотрит. Сказал ей прост сделай новую вкладку и херачь там чат. Я пока не выёбываюсь, делаю на самом знакомом мне стэке, без этих ваших компоузов и кмп. Потому что сначала надо освоиться с вайб-кодингом как таковым, а потом уже всё остальное. Из неприятного: я расслабился и позволил ему коммитить-пушить в гит самому, а он взял и запушил мой гпт-токен в публичный репо. Ну, учимся на ошибках, чо ж поделаешь. Но факт остаётся фактом: первый настоящий вайбкодинг у меня успешно произошёл. Рад. Двигаемся дальше.
Channel name was changed to «Next Level Dev»
Я не вижу будущего у нативной мобильной разработки Почему? Потому что: 1️⃣ Все стараются экономить и заработать побыстрее И если раньше бизнес этого просто "хотел", то сейчас, зачастую, это вопрос его выживания. "Или мы порежем бюджет, или через месяц-два-три нам пизда" – реальность многих проектов. Нативная разработка = x3 команда (андроид + айос + веб). Все, кто смогут съехать на кросс-платформу – съедут, кто не сможет (потому что им нужно нормальное приложение, а не кусок говна) – съедет на мультиплатформу. 2️⃣ Нейронки активно развиваются Всех разработчиков они не заменят, но ускорить разработку они ускоряют. А это означает одно: штат разработчиков будет и дальше сокращаться. Зачем держать штат синьоров + миддлов + джунов, если можно держать пару синьоров-миддлов, которые будут ревьюить нейронку и работать с той же скоростью, как весь этот штат, а то и быстрее? 🤔 Пока это не совсем так, но всё очень быстро к этому идёт, и я думаю, что этот поезд уже не остановится. 3️⃣ Активно развивается мультиплатформа KMP, SwiftUI, Compose. Compose пытается тоже стать мультиплатформенным. Пока выглядит коряво, но и KMP 5 лет назад был корявым, а сейчас он куда бодрее. ❗️Итог: если говорить о будущем 5-10 лет, то полезных на рынке разработчиков, которых будут отрывать с руками, я вижу так: – Умеет в мультиплатформу андроид+айос+веб – Умеет управляться с нейронками и писать код кратно быстрее, чем если бы писал своими руками, без критических потерь качества на дистанции. Не надо много ума, чтобы сказать нейронке "сверстай мне вот этот экран и нахуярь такую-то бизнес-логику". Но тут есть две проблемы: 📍Нейронка обучалась на массиве данных из интернета, а это в большинстве случаев говнокод => если просто вставлять себе код нейронки, у вас будет каша из говнокода, которая через несколько месяцев начнёт тухнуть, вонять, падать и перестать быть поддерживаемой 📍Если вы ещё и сам по себе говнокодер, то вкупе с говнокодом нейронки вы проект закопаете ещё быстрее Нейронка – это как тупой джун, но он мгновенно пишет код и мгновенно исправляет свои ошибки (хотя порой там будет одна ошибка вместо другой), поэтому для опытного разработчика нейронка очень полезна 😏 ❓ А че рынок будет делать, когда синьоры и миддлы кончатся? На всех-то их не напасёшься, иначе нахуй бы были нужны стажёры и джуны вообще. А где они найдут стажёров и джунов, которые умеют в нейронки, умеют в мультиплатформу, и при этом умеют делать так, чтоб всё это не обрастало говнокодом? Им придётся их учить. И если вам кажется, что сейчас порог входа в разработку высокий и рынок сложный, то через 5 лет вы вообще охуеете. Если кто-то надеется "пересидеть, пока всё успокоится", я вас разочарую. Нихуя ничего не успокоится. Скиллбоксы и кекбряксы будут заманивать людей в свои сети обещаниями "писать мультиплатформу с помощью нейронок". 😈 Думаете, это далёкое будущее? У меня жена-дизайнер недавно написала плагин для фигмы на JS, при этом не имея ни малейшего понятия, что такое это ваше программирование. Да, я чутка помог, но там помощь была буквально "скобку вот тут надо закрыть, а вот тут он использует ещё не заведённую переменную". Я не ебу, что такое фигма, она не ебёт, что такое программирование, но мы за вечер накидали работающий плагин для дизайнеров. Каково? 🤌 И ещё один факт: тестовые задания в том виде, в котором они сейчас есть, отомрут. Смысл давать обычное тестовое, если человек скормит его нейронке и захуярит вам полноценное приложение за несколько часов? На тестовых и собеседованиях будут как раз проверять, как быстро вы можете с помощью нейронок писать нормальный код. Так что, ребятки, пора завязывать с этой нативкой. Отрасль мобильной разработки изменилась. Пора мыслить по-новому и менять подходы. 💥💥💥 Канал Next Level Dev будет о том, как я, android-разработчик с более чем 10- летним стажем, "отказываюсь" от собственной профессии и становлюсь разработчиком следующего уровня, который пишет под несколько платформ сразу. По сути, теперь это дневник моего нового пути :) Приглашаю вас пройти этот путь вместе со мной. Ставь 👻 если согласен.
Я рождён был ночью...
Решал тут давеча UI-ную задачку, суть её была в следующем: есть скроллящийся контент, и когда скроллишь его вниз – он должен скроллиться под другую вьюху, а когда скроллишь его вверх – вьюха должна скроллиться за ним, когда он выедет из-под неё. Вы это, скорее всего, видели в модных тулбарах со всякими AppBarLayout, CollapsingToolbarLayout и иже с ними. Такое поведение, как я понял, называется sticky. Если вьюха снизу – sticky footer, если сверху – sticky header. Посмотреть можно, вот тут и тут. И если с тулбаром всё понятно, то вот со вьюхами внизу уже интереснее. В целом, всё сводится к засовыванию всего в CoordinatorLayout и / или прослушиванию скроллвью и выставлению видимости / отступов в зависимости от этого. Решать можно или переопределением Behavior у CoordinatorLayout, или втупую делать всё руками, вешая OnScrollChangedListener на NestedScrollView. Через бихевьор – красивее, но у меня чот не завелось T_T. В итоге всё получилось, но через CoordinatorLayout + прослушивание скролла. Рад, что получилось сделать UI-ную задачу, как я говорил – они у меня идут туго. Местами консультировался у чатГПТ. Правда, по большей части он нёс ахинею и постоянно забывал, что я ему говорил одну фразу назад, ну да ладно. Зато иногда правил мне вёрстку быстрее, чем я бы поправил её сам.
Хочу вам попиарить канал одного чувака по имени Никита: Dev Easy Notes. Никита меня об этом не просил, кстати. Просто мне настолько нравится то, что и как он пишет, что я решил и с вами поделиться :) Он мало того, что умеет понятно и ёмко объяснять всякое из мира андроид и программирования в целом (сам он бывший бэкендер, как я понял), так ещё и у него охуенное чувство юмора, а это редкость в наше время. А ещё он пишет без прикрас, плюс у него мощная самоирония. Короче, мне заходит прям очень. Вот вам немного постов, чтоб понимали, за что он мне нравится: Ржачный, но жизовый пост про страх перед собесами: https://t.me/dev_easy_notes/334 Просто и ёмко о даггере: https://t.me/dev_easy_notes/327 Разнос koinа: https://t.me/dev_easy_notes/328 Охуенно понятно и ёмко про суть MVVM / MVI и их отличия: https://t.me/dev_easy_notes/339 Если его канал вам понравился – ставьте 👻, если нет – 🤨