Привет, друзья!Я Илья Попов, действующий senior android разработчик, ментор начинающих андроид-разработчиков и автор телеграм-канала Android Dev Notes10 лет назад я был неопытным самоучкой, пытающимся стать разработчиком.И я на своём опыте знаю, что новичку непонятно, в какой последовательности что изучать, и когда можно считать себя готовым к реальной работе и собеседованиям.Этот гайд - концентрация моего 10-летнего опыта работы, собеседований и менторинга андроид-разработчиков. В нём я постараюсь разложить всё это по полочкам, разбить по шагам с краткими понятными описаниями. Кстати, сейчас я набираю учеников на менторство. Подробнее обо мне и о процессе менторства можно почитать на моём сайте: https://androidmentor.ru/Итак, поехали! 🚀Предположим, что вы никак не связаны с программированием, но по тем или иным причинам решили стать андроид-разработчиком, и устроиться на работу джуниором. Верхнеуровневый план для этого в 2024 выглядит так:💻 Этап 1: Освоить Kotlin и основы ООП👉 1.1: Переменные, типы данных, вывод в консольКак заводить переменныеКакие есть типы переменныхКак конвертировать разные типы друг в другаКак производить арифметические операции с разными типами и между ними, как выводить в консоль👉 1.2: ОтладкаНаучитесь дебажить и принтлнами и дебаггером с точками остановки. Пока вы не научились асинхронности, дебаггер - ваш лучший друг👉 1.3: Условия и ветвление: If-else, when, &&, ||Изучаем условия if-else и when, их отличия и особенностиОсобенное внимание уделите отработке операторов && и || и ветвлению с этими операторами. Поиграйтесь как следует с этим, убедитесь, что понимаете каждый шаг программы - вы ведь уже умеете дебажить?)👉 1.4: ФункцииРазберитесь с функциями: без параметров, с одним параметром, с несколькими параметрами, как их вызыватьРазберитесь с областью видимости внутри и вне функцииФункции с возвращаемыми значениями и без, как сохранять результат функции в переменнуюКак использовать if-else ветвление в функции в зависимости от переданного boolean аргумента и как вернуть разные значения в зависимости от этого аргумента👉 1.5: Классы, экземпляры, датаклассы, объектыЧто такое свойства класса и как их инициализировать в теле классаЧто такое конструктор класса и как в нём объявлять аргументы и инициализировать свойстваЧто такое экземпляр класса и как его создать и как добраться до его содержимогоКакие области видимости переменных/функций и как их менятьКак использовать функции и свойства классаРазберитесь, как передавать и использовать классы как параметры функций и классы как параметры в конструкторе классовРазберитесь, зачем ввели понятие датаклассов и в чём их плюсы и минусыРазберитесь, что такое объект, и чем он отличается от класса👉 1.6: Списки, массивы, циклыЧто такое списки и массивы, какие бывают и чем отличаютсяЧто такое циклы, как с их помощью перебирать элементы коллекции и доставать значенияКак вызывать функции у элементов коллекции и распечатывать значенияКак посчитать среднее значение коллекции целочисленных элементовВажное уточнение: не забегать вперёд и не использовать удобные экстеншны, если не можете их сами вручную написать.👉 1.7: Лямбда-функцииЧто такое лямбды, зачем нужны, где используются, какие плюсы-минусы, как передавать их как параметр и как сохранять в переменную👉 1.8: НаследованиеЧто такое наследование и полиморфизм и зачем они нужныКакие у наследования плюсы и минусыКак наследование влияет на области видимости родителя/наследников👉 1.9: Абстрактные классы и интерфейсыЧем абстрактный класс отличается от интерфейсаКогда лучше использовать одно, а когда другое, и в чём плюсы и минусыКак и зачем наследоваться от абстрактных классов вместо обычных👉 1.10: Scope-функцииИзучаем let, run, also, with, apply: чем отличаются, когда что из них использоватьПочитайте про нуллабельность, безопасный вызов и как let с этим помогает, и как строить безопасные цепочки вызовов👉 1.11 Обработка ошибокИ на закуску почитайте про эксепшны и как их обрабатывать, кидать, отлавливать, и как сделать кастомные эксепшны📝 На этом знакомство с Kotlin можно считать оконченным, дальше можно продолжать его осваивать уже в контексте android-разработки.💻 Этап 2: Разрабатываем несложное android-приложение👉 Осваиваем основные компоненты и вёрсткуЧто такое Activity, Fragment и их layout’ыИзучаем жизненный цикл Activity и Fragment: дебажим, сворачиваем-разворачиваем, закрываем приложение и смотрим, какие callbacks вызываютсяТренируемся делать несложную вёрстку, вешать обработчики кликов на кнопки, вызывать всплывающие сообщения. Пока никаких сложных View типа ListView/RecyclerView: только разные layout-контейнеры, TextView, Button, EditText, RadioButton, Switch – ну и достаточноНаигрались – переходим к спискам: изучаем сначала ListView, потом RecyclerView, сначала с простых вариантов, потом постепенно усложняем. Очень важно максимально глубоко понимать принцип работы списков. Чем лучше поймёте - тем меньше потом будет проблем, потому что списки - основа огромного количества приложенийДальше познакомьтесь с ViewPager и как он влияет на жизненный цикл Fragments. Сильно не углубляйтесьПараллельно с освоением списков и усложнением вёрстки имеет смысл начинать изучать загрузку и отображение контента из интернета: осваиваем Retrofit для работы с сетью, Glide для картинок, Coroutines для асинхронщины. Пока никакой архитектуры, никаких ViewModels, Dagger и прочего, всю логику пишем во Fragments и ActivitiesКогда начнёте работать с сетью, придётся покопаться и разобраться с парсингом ответа сервера и передачей кастомного контента между Fragments и ActivitiesПри подгрузке больших списков из интернета вам придётся разобраться с бесконечным скроллом списка и pagination - постраничной подгрузкой спискаПолный гайд, в котором вы найдёте ещё 2 этапа, ждёт вас в моём телеграм-канале Android Dev Notes.Кстати, если покажете эту статью, дам скидку 20% на мою вводную консультацию.Удачи, друзья!