Next Level Dev
678 subscribers
32 photos
2 videos
58 links
Заметки синьора-самоучки с 10-летним опытом

Доучиваю или учу с нуля до крепкого джуна, готового к собеседованиям и стажировке

Roadmap для начинающих в личке @ilia_a_popov
Там же запись на менторство и консультации

О менторстве: https://androidmentor.ru
Download Telegram
Задолбало

На работе пару недель назад взял большую, важную, сложную, интересную задачу. И знаете что? Нихера не получается нормально её сделать.

А iOS'ер, параллельно занимающийся тем же, присылает красивые видосики о том, как у него всё круто работает.

Моим же видосиком того же функционала можно подтереться.

Причём я понимаю, что проблема именно в моём коде. И вроде смог локализовать, где именно – но убей не понимаю, какого хрена там не так-то.

В итоге голова над этим работает 24 / 7. То, что программистам платят только за 8 часов – издевательство. А те, кто считают, что программистам много платят – дилетанты чёртовы.

А ещё параллельно готовлю сюрприз-поездку жене на ДР, а после этого мой ДР, на который мы тоже едем в поездку, и её тоже надо спланировать. А там на носу основной отпуск, а это поездка за рубеж, и там тоже дохера работы по подготовке.

А ещё я веду этот канал, и у меня дохера идей и советов от консультантов по его развитию, которые надо переварить и что-то внедрить.

И разумеется мои менти никуда не делись, которых надо вести, ревьюить, мотивировать и поддерживать.

Ну и когда, блять, я должен всё это успеть?

В пизду. Я на тренировку.
💯16💔7🙏2🤔1🤯1
О рабочем пространстве

Я обычно работаю из дома. Но мозг время от времени устаёт и хочется сменить обстановку.

Работать из какой-нибудь кофейни мне хорошо помогает переключиться, сменить обстановку. Главное, чтобы там были нормальная еда, вкусный кофе, розетки, и не было громкой музыки.

И главное – не сидеть за кодом часами напролёт. Мне вот помогает в зал ходить, после него со свежей головой выхожу. Или просто погулять выйти.

А вообще, знаете, какое у меня самое эффективное место для работы? Такси.

Идеально: полтора часа едешь, никто тебя не трогает. Отвлекаться особо не на что. Сиди себе и занимайся кодом. И эти полтора часа сфокусированной работы порой бывают полезнее, чем весь остальной день.

А вам откуда работать нравится?
👍7🤔41🥰1
Задача побеждена!

Всё же дело оказалось в одном из методов SDK, которое я внедрял.

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

Когда речь идёт о десятках вызовов, всё норм, но когда о тысячах – устройство взвывает.

Лучший враг прячется там, где ты меньше всего будешь его искать (с)

Я этот метод всё это время не замечал, будучи уверен, что дело в коде вокруг него.

Ну а когда знаешь, в чём проблема, исправить – дело плёвое. Зато я свой код так оптимизировал, что комар носа не подточит.

Постфактум понял, что несколько часов назад мне профайлер уже подсказал ответ, но я его не заметил :))
👍12🔥6🎉5😎2
ChatGPT – бог или дьявол?

🤓 Кажется, что chatGPT можно использовать, как умного старшего товарища, он же всё знает. При этом он не злится и не токсичит, в отличие от ребят из StackOverFlow или некоторых ребят из чата Android Developers =)

🫢 Но есть один большой минус, свойственный и подавляющему большинству людей и, как следствие, chatGPT, как отражению этого большинства. Этот минус сейчас, вероятно, прозвучит для вас комично: "Когда вы задаёте им вопрос, они вам на него отвечают, причём правильно".

🤔 Чем же это плохо? Вы же получаете ответ на вопрос, решаете проблему?

❗️ Засада в том, что вы не научились решать проблему, а решили проблему. Фактически, вы её просто избежали и пошли дальше, словно с ней и не сталкивались. Забрали у себя один из пунктов, на которых могли научиться.

Обучение начинается тогда, когда у вас возникают трудности в решении проблем.
А тут вы избежали всех трудностей :)

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

Но вы не усвоите так много новой информации за такое короткое время. И эта информация не адаптирована под вас, она адаптирована под самого эксперта. И вам она в большинстве случаев в таком виде не подойдёт.

Сталкивались с такими сессиями, когда после них вы почувствовали себя говном из-за того, что вам кучу ценной инфы вывалили, а вы нихрена не поняли? Напишите в комментариях.

Не вините в этом себя.

P.S.: и это я рассмотрел хэппипасс. Но chatGPT ещё может и дичи всякой вам наговорить, а вы её примете за чистую монету. И потом у вас в коде образуется куча упоротых костылей, в верность которых вы свято верите. А у людей потом глаза на лоб полезут, когда это увидят =)

#android #лайфхаки #советы

@andrdevnotes | Обучение android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92🥰2
❇️ Как упростить себе работу с коллекциями? ❇️

В этом видео я рассказал про коллекции и экстеншны: как упростить себе жизнь, при этом не выстрелив себе в ногу.

Приятного просмотра! 🚀

Мне будет приятно, если поддержите лайками и комментариями 👀

https://youtu.be/BfzaZ8D3sls

#android #видео #лайфхаки

@andrdevnotes | Обучение android
🔥52🥰1👏1
Хочешь продолжить начатое – …

… не сбивайся с ритма (с) Х. Мураками 🤓

Решил я тут во время августовского отпуска отдохнуть от блога – и на тебе, на дворе октябрь, а я с тех пор лишь пару постов осилил.

❗️Почему? Потому что сбился с ритма. Не повторяйте моих ошибок!

📖 Ведь то же самое и в обучении – если занимаешься регулярно, но хотя бы по паре часов – куда больше вероятность доучиться, чем если адски вджобнуть в выходные по 12 часов и выгореть к чертям.

Следующий пост ждите завтра утром. Возвращаюсь в строй 💪
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10💯3😁2
Как разговаривать с адаптером, не привлекая внимания санитаров

💡 Представим, что вы хотите с помощью RecyclerView отобразить список, в котором будет несколько разных способов отображения элементов: в одном будет чекбокс, в другом картинка, в третьем картинка и текст, в остальных ещё что-то другое. Как это сделать

Адаптеру надо как-то объяснить, сколько типов отображения у вас есть, и чем они отличаются.

1️⃣ Начинаем мы ему объяснять с переопределения метода getItemViewType, который вызывается автоматически в начале отрисовки каждого элемента списка. В этом методе есть аргумент position, и именно здесь вы решаете, какой тип отображения будет на каждой position списка. Метод возвращает целое число, по которому мы и будем дальше определять тип отображения.

2️⃣ Потом адаптер вызовет метод onCreateViewHolder, у которого есть целочисленный аргумент viewType — тот самый, логику для вычисления которого мы переопределили в предыдущем методе. А из этого метода вы на основании полученного viewType должны вернуть соответствующий этому типу отображения ViewHolder — то есть объяснить адаптеру, какие вьюхи вам для каждого типа отображения понадобятся.

3️⃣ Теперь настанет очередь onBindViewHolder, в котором аргументом будет являться уже вьюхолдер и position. Вы должны определить, какой это из ваших вьюхолдеров (здравствуй, полиморфизм), взять из него соответствующие вьюхи и наполнить их информацией из элемента на этой position.

🎬 Дело сделано! Мы определили для конкретной position конкретный viewType, сопоставили с вьюхолдером и наполнили его вьюхи. И так адаптер пройдётся по всем элементам и отобразит их так, как мы ему сказали.

🤌🏼 Под каждый viewType обычно заводят свою константу с понятным названием в адаптере, чтоб потом не путаться в числах.

P.S.: хотите видео-разбор типичных ошибок при организации списков? 10 реакций этому посту и снимаю 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥4👏1
❇️ Я в шоке от его гибкости ❇️

Рассказываю про adapter delegates в android: как сделать удобнее и чище свой adapter для RecyclerView.

Приятного просмотра! 🚀

Мне будет приятно, если поддержите лайками и комментариями 👀

https://youtu.be/dQAqT2NhDJI?si=P0Mao0M-h1WX9K-k

#android #видео #лайфхаки

@andrdevnotes | Обучение android
🔥4👍2👏2😁21
А скажите, удобно вам на ютубе мои видео смотреть? Надо продублировать на российские площадки?
Где вам удобнее смотреть мои видео
Final Results
74%
Ютуб
26%
Вк
12%
Рутуб
6%
Другое (укажу в комментариях)
Волшебная таблетка для мотивации

Мне нравится изучать мотивацию людей на гормональном уровне. Это помогает понимать, почему на некоторые вещи энергия есть, а при одной мысли о других вещах хочется спать.

💡 Один из последних инсайтов: если вам нужно сделать дело, на которое у вас не хватает энергии, можно использовать дофаминовый костыль. Придумайте, что вам очень хочется сделать прямо сейчас: например, поиграть в доту. Представьте это. Ощутите, как энергии стало больше. И пообещайте себе, что после выполнения того самого дела обязательно поиграете.

Тогда ваша дофаминовая система выделит вам энергию на то, чтобы поиграть. А раз вы привязали «поиграть» к «выполнить дело» – то и на это тоже выделит.

☝️Важные моменты:

1️⃣ Ни в коем случае не обманывайте себя! Пообещали поиграть – поиграйте. Иначе перестанете себе доверять, и будут проблемы с дофамином в дальнейшем.

2️⃣ Не путайте привязку «желанное дело только после нежеланного» с «подумать о желанном, получить на это энергию, а потом обмануть себя и попытаться эту энергию использовать на нежеланное». Выделение энергии дофаминовой системой всегда целенаправленное. Вам не «выделяют энергию», вам «выделяют конкретное количество энергии на конкретное действие».

3️⃣ Использовать этот костыль лучше в крайних случаях. А по дефолту советую в таких случаях разбираться, почему вам понадобилось заниматься нежеланным делом. Обязательно ли им заниматься, и как можно сделать его желаннее: например, изменить процесс работы над ним на тот, что вам больше по душе: например, переместиться в более приятную обстановку. Или добавить в него что-то, что вам нравится: например, в скучную рутинную задачу добавить интересное архитектурное решение.

P.S.: я тут с чего всё это задвигаю вам: у меня самого щас на работе очень важное дело, которое помимо написания кода жрёт кучу энергии на коммуникации. И я сам этим костылём пользуюсь, норм работает.
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍2🔥2
🤔 По мере усложнения приложения, в какой-то момент вам перестанет хватать «плоской» навигации «активити-фрагмент», и понадобится вкладывать фрагменты друг в друга. Как это правильно реализовать?

🫣 Конечно, вы можете временно скрыться за очередной стеной абстракций, используя navigation component, но я вас уверяю, что при отсутствии чёткого понимания fragment manager и его транзакций, вы придёте к бардаку и костылям. По крайней мере, у меня было так =)

У каждого фрагмента есть доступ к трём FragmentManager (fm):

1️⃣ activity.supportFragmentManagerfm, до которого мы можем достучаться через родительскую активити. Пока вы не используете вложенность фрагментов друг в друга, его вам будет хватать.

2️⃣ parentFragmentManagerfm родительского компонента. Если Ваш фрагмент был вложен в другой фрагмент, то это будет fm родительского фрагмента, а если фрагмент вложен напрямую в активити – то это будет тот самый fm активити из пункта 1.

3️⃣ childFragmentManager – это fm, предназначенный для создания дочерних фрагментов у этого фрагмента. Только используя этот менеджер, вы сможете делать вложенную иерархию фрагментов.

🚀 А теперь проверим, насколько вам это понятно =)
🔥2🤔1🌚1
Ставь лайк, если не понял, что там за простыня сверху 😏
Please open Telegram to view this post
VIEW IN TELEGRAM
😁8👍2🌚1
Итак, правильные ответы на две задачи выше можно понять по большинству голосов:
в первой задаче это 1 и 6,
во второй это 3, 5 и 6.

💪 Все ответившие правильно и неправильно – молодцы! Первые – потому что знают, а вторые – потому что теперь научатся на своих ошибках :)

⚠️ Будьте внимательны: если вы во фрагмент вкладываете другие фрагменты, вы должны вкладывать с помощью его childFragmentManager. И этот childFragmentManager родительского фрагмента будет совпадать с parentFragmentManager его вложенных фрагментов.

А если над фрагментом только активити, то её supportFragmentManager будет совпадать с parentFragmentManager’ом этого фрагмента.

А теперь вопрос на засыпку: если я вложу фрагмент F1 в активити A, F2 в F1, а F3 в F2, то как мне легко добраться до F1.childFragmentManager’а из F3 ? И чтоб одной цепочкой, без заведения каких-то дополнительных сущностей?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1🥰1👀1
Человек я или пёс, вот в чём вопрос

Добрался я тут до одной из книг, которую мне в менторско-психологическом коммьюнити часто советовали:
«Не рычите на собаку».

Книга в основном о дрессировке животных, хотя многие из этих паттернов применимы и к людям.

Забавно осознавать, что в определённом разрезе и человек, и собака, и дельфин – в целом подчиняются одним и тем же заложенным шаблонам :)

Книга написана относительно легко, но идёт у меня довольно тяжело, как и любая профессиональная литература. Как я уже когда-то говорил – книги читать я не мастак. Но порой нужно.

Читаю книгу и понимаю, что часто у меня был куда более простой и приятный способ чему-то научиться, чем рандомно хуярить задачу сотней разных способов, пока не попаду в тот, который понравится учителю.

Проблема в том, что если просто говорить человеку "так неправильно, переделовай", человек не поймёт, а что именно неправильно-то. И вот для этого умные дрессировщики придумали термин "подкрепления действий".

Если по-простому, то подкрепление – это способ показать человеку, что он что-то делает правильно или неправильно. Именно "делает", а не "сделал". Не после результата, а в процессе.

Как в игре "горячо-холодно", очень наглядный пример. Представьте, что в этой игре вам будут просто говорить "правильно / неправильно", когда вы будете называть место, где предположительно находится предмет. И представьте, как долго такая игра продлится?

Вот "горячо" – это положительное подкрепление, а "холодно" – отрицательное.

Заметьте: вам не по щщам дали за неправильное место, а вовремя показали, что вы двигаетесь не в том направлении. В этом, кстати, разница отрицательного подкрепления и наказания.

Интересный факт: положительные подкрепления куда сильнее отрицательных. Да и пользоваться ими проще: куда понятнее и приятнее похвалить человека, чем дать ему леща (кто бы что там ни говорил).

Это я тоже замечал: если меня хвалили за то, что я мою посуду, я хотел помыть её и в следующий раз. А если строго смотрели за то, что я иду мимо грязной посуды и игнорирую её, то я хер забивал и делал так и в следующий раз.

А что у вас в обучении лучше работает? Ловили ли себя на сопротивлении, или на страхе перед наказанием, или на желании получить похвалу?
🔥21🥰1👏1💯1
P.S.: этот пост писался в диком сопротивлении и переписывался несколько раз, потому что я весьма хреновый ученик. Я плохо воспринимаю критику, даже если сам её прошу, и сопротивляюсь до последнего, даже если уже не понимаю зачем.

Ставь лайк если понимаешь, о чём я =)
👍8💯2
Не знаю как вам, а мне порой хочется съебаться от реальности.
Я использую для этого сериалы, художественные книги и изредка игры.

Сейчас, например, я для этого либо смотрю Наследников, либо читаю "Нормандцы в Сицилии", либо гамаю в Корсаров.

Да, я старпёр и люблю старые игры. Специально взял погонять у брата старый ноут, чтоб её запустить. Сначала долго пробовал завести виртуалку на маке, но безрезультатно: либо тормозит, либо вылетает.

Нравятся мне Корсары. Хоть они порой и вылетают, и графика там 12-летней давности, а всё же лучше игры с пиратской романтикой пока нет. Что меня, кстати, все эти 12 лет сильно удручает.

А пиратскую романтику с детства люблю. Зачитывался о том, как Генри Морган грабил Панаму, Франсуа Олонэ вырывал сердца, а Титч грабил корабли без единого выстрела чисто на бренде.

Почему мне пофиг на графику в Корсарах? Потому что когда я играю в Корсаров, я сам чувствую себя на борту пиратского корабля. А в моей голове графика отличная =)

Уход от реальности на какое-то время мне помогает освежить голову и с новым взглядом посмотреть на реальность.

А вы куда от реальности сбегаете?)
👍10🔥32🥰1
Думаю о том, что надо по максимуму использовать своё умение объяснять, разжёвывая вам сложные темы в будущих постах.

По темам для постов пока мысли такие:

«in и out в дженериках»

«старт-пак гита: всё необходимое для комфортной работы в команде»

«разбор задачи с литкода (уровня easy)»

«даггер и флейворы»

Как вам такие темы для постов?
Может, у вас есть непонятные вам сложные темы, которые вы хотите, чтобы я разобрал?
Пишите в комментариях 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
👍151🔥1🤔1