Skip to content

Pussa/andr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

Программа обучения Android-разработчика

Туториал по изучению теоретических материалов:
Обозначение Уровень важности
(****) Без изучения этого материала невозможно успешное прохождение темы
(***) Материал, без которого сложно успешно завершить изучение темы
(**) Важный материал, рекомендуемый к изучению
(*) Полезная литература, улучшающая навыки

Правила логирования времени и прохождения программы обучения


Логирование времени

Для ментора первостепенно понимать, сколько именно времени тратится на ту или иную задачу. Поэтому логирование времени осуществяется следующим образом.

  1. Логируем в саму задачу:
  • Время, затраченное на выполнение практического задания;
  • Время на прочтение теории, необходимой для выполнения практического задания;
  1. Логируем в Разработка/Прочая активность/Другое:
  • Время, затраченное на ожидание проверки выполненного задания ментором;
  • Время на прочтение прочей учебной литературы (список рекомендуемой литературы представлен в конце);

Прохождение программы обучения

Программа обучения разделена на секции. Каждая секция состоит из

  • Теоретической части;
  • Базовой части (опционально)
  • Практической части;
  • Теста;

Для каждой секции выполняется практическое задание. Теоретический материал изучается по мере необходимости для выполнения практики. После завершения практического задания необходимо в gitlab создать merge request на ментора, чтобы он смог проверить задание. Если задание выполнено успешно, то ментор предоставляет тест по пройденной секции. Для успешного прохождения теста в большинстве случаев достаточно знаний, полученных в ходе выполнения практического задания и прочтения необходимой для него теории. Если присутствует задание на реализацию методов, их можно проверять Unit тестами на правильность выполнения, до отправки на проверку ментору.

Стоит отметить, что ментор в силу различных обстоятельств не всегда может оперативно проверять merge request'ы и предоставлять тесты. Поэтому, если ментор вам говорит, что сможет проверить задание/предоставить тест только через несколько часов - приступайте к выполнению следующей секции программы обучения. Важно одновременно непроверенным может быть не более одной секции программы обучения. То есть, чтобы приступить к 5ой секции, Ваше практическое задание по 3ей секции должно быть одобрено, а тест пройден.

В случае возникновения вопросов во время выполнения практического задания, можно просить помощи у ментора. Однако не стоит подходить к ментору с недекомпозированной задачей из разряда "Я не понимаю, как сверстать экран". Декомпозируйте задачу, чтобы задать ментору более конкретный вопрос. Также не стоит сразу же спрашивать ментора, как только возникла трудность. Для начала попробуйте самостоятельно найти ответ на свой вопрос в интернете.


I. Основные принципы разработки. Git. Flow проектов


Теоретическая часть

1. ООП

2. Работа с Git, gitflow

3. Ведение проектов

4. Создание проекта, среда разработки Android Studio

5. Gradle

Практическое задание

  1. При старте работ над практическим заданием, необходимо получить доступ к issue в системе PS. Создать task с названием "I. Основные принципы разработки. Git. Flow проектов" и обновить статус задачи на "В процессе".
  2. В корпоративном gitlab создать новый репозиторий и следуя инструкциям, склонировать его к себе на компьютер. В настройках репозитория дать доступ ментору и руководителю отдела.
  3. В глобальных конфигурациях git прописать корректное имя пользователя и e-mail, которые будут использоваться для подписи коммитов.
  4. Добавить .gitignore. Содержание файла можно взять с ресурса: https://www.gitignore.io/api/androidstudio. Cделать коммит и запушить изменения на remote-сервер в master ветку
  5. Переключиться на новую ветку develop.
  6. Создать новый android-проект (Phone and Tablet -> Empty Activity).
  7. Добавить в gradle-файл библиотеку retrofit http://square.github.io/retrofit/
  8. Запустить проект на симуляторе
  9. Запустить проект на телефоне
  10. Сделать коммит и запушить изменения на remote-сервер в develop ветку
  11. После завершения работ над заданием перевести задачу в PS в статус "Завершен" и залогировать затраченное время.

II. Java. Часть 1


Теоретическая часть

Основы

Отладка

Практическое задание

Все задачи должны быть выполнены в указанном репозитории в отдельной ветке, вида training/lastname_firstname_date. После выполнения должен быть создан merge request на ментора.

Важно! Весь код должен быть написан по предоставленному Java Code Conventions

  1. Создать task в PS с заголовком "II. Java. Часть 1" и взять ее в работу.
  2. Работа с примитивными типами
  3. Работа со строками
  4. Работа с массивами
  5. Завершить task в PS и залогировать затраченное время

III. Java. Часть 2


Теоретическая часть

1. Классы

2. Обработка исключений

3. Коллекции

4. Работа со строками

5. Лямбда-выражения

Базовое задание

Все задачи должны быть выполнены в указанном репозитории в отдельной ветке, вида training/lastname_firstname_date. После выполнения должен быть создан merge request на ментора.

  1. Работа со списками
  2. Работа с классами

Практическое задание

Все задачи должны быть реализованы в одном файле и разделены комментариями, указывающими на номер или текст задания.

Важно! Весь код должен быть написан по предоставленному Java Code Conventions

  1. Создать task в PS с заголовком "II. Java. Часть 2" и взять ее в работу.
  2. Настроить проект для java 8
  3. Написать простое лямбда-выражение в переменной myClosure, лямбда-выражение должно выводить в консоль фразу "I love Java". Вызвать это лямбда-выражение. Далее написать функцию, которая будет запускать заданное лямбда-выражение заданное количество раз. Объявить функцию так: public void repeatTask (int times, Runnable task). Функция должна запускать times раз лямбда-выражение task . Используйте эту функцию для печати "I love Java" 10 раз.
  4. Условия: есть начальная позиция на двумерной плоскости, можно осуществлять последовательность шагов по четырем направлениям up, down, left, right. Размерность каждого шага равна 1. Задание:
  • Создать enum Directions с возможными направлениями движения
  • Создать метод, принимающий координаты и одно из направлений и возвращающий координату после перехода по направлению
  • Создать метод, осуществляющий несколько переходов от первоначальной координаты и выводящий координату после каждого перехода. Для этого внутри метода следует определить переменную location с начальными координатами (0,0) и массив направлений, содержащий элементы [up, up, left, down, left, down, down, right, right, down, right], и програмно вычислить какие будут координаты у переменной location после выполнения этой последовательности шагов. Для вычисленеия результата каждого перемещения следует использовать созданный ранее метод перемещения на один шаг.
  1. Создать интерфейс Shape с двумя методами perimeter и area, выводящими периметр и площадь фигуры соответственно, после чего реализовать и использовать для вывода периметра и площади следующие классы, реализующие интерфейс Shape:
  • Rectangle - прямоугольник с двумя свойствами: ширина и длина
  • Square - квадрат с одним свойством: длина стороны
  • Circle - круг с одним свойством: диаметр круга
  1. Завершить task в PS и залогировать затраченное время

IV. Верстка


Теоретическая часть

В случае если по ссылке встречается пошаговый гайд - рекомендуется его выполнить в отдельном проекте.

1. Начало разработки под Android

2. Верстка

3. Типы layout'ов

4. Splash Screen

4. BottomNavigationView

5. App Bar

6. Constraint Layout

7. Ресурсы

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

Практическое задание

Работа должна производится в созданном ранее проекте.

Все изменения должны быть закоммичены, а названия коммитов должны коротко и исчерпывающе описывать содержащие изменения. Каждый коммит должен быть рабочим, отправка некомпилирующегося кода недопустима. Для работы над этим заданием необходимо переключится на ветку layouts и все изменения пушить в нее. После завершения работы над задачей в gitlab необходимо создать merge request в ветку develop. Код должен быть читабельным и написан согласно code-style. В системе PS также необходимо создать созвучную задачу, в которую после завершения будет залогировано время.

  1. Создать task в PS с заголовком "IV. Верстка" и взять ее в работу.
  2. Сделать так, чтобы на домашнем экране Android отображалась иконка и название приложения "Хочу помочь". Ресурсы иконок тут.
  3. Реализовать Splash Screen согласно макету.
  4. Реализовать экран "Профиль" согласно макету.
  • Экран "Профиль" необходимо отображать после Splash Screen. По нажатию стрелки назад, приложение закрывается.
  • Необходимо реализовать нижний элемент навигации с помощью стандартного BottomNavigationView. Пункт "Помочь" визуально не должен отличаться от остальных четырех.
  • В нижнем меню навигации по-умолчанию должен быть выбран пункт "Профиль".
  • Верстка должна быть реализована в xml.
  • Верстка должна быть выполнена с учетом "pixel perfect" - когда все элементы дизайна расположены и имеют размеры абсолютно идентичные макету для экрана с теми же размерами, что и макет, и адекватно масштабироваться для других размеров и разрешений.
  • Все переиспользуемые размеры в xml должны быть вынесены в dimes, цвета в colors, а строки в strings.
  • Никаких "магических чисел", все должно иметь понятные названия.
  1. Завершить task в PS и залогировать затраченное время

V. Android OS. Activity. Fragments


Теоретическая часть

1. Android OS

2. Application

3. Activity

4. Fragment

5. SearchView

6. ViewPager

7. Списки

8. Работа со сторонними приложениями и permissions

9. BroadcastReceiver

Практическое задание

Работа должна производится в созданном ранее проекте.

Все изменения должны быть закоммичены, а названия коммитов должны коротко и исчерпывающе описывать содержащие изменения. Каждый коммит должен быть рабочим, отправка некомпилирующегося кода недопустима. Для работы над этим заданием необходимо переключится на ветку fragments и все изменения пушить в нее. После завершения работы над задачей в gitlab необходимо создать merge request в ветку develop. Код должен быть читабельным и написан согласно code-style.

  1. Создать task в PS с заголовком "V. Фрагменты" и взять ее в работу.
  2. Реализовать диалог согласно макету
  • Диалог необходимо открывать при нажатии на изображение пользователя на экране "Профиль".
  • По нажатию на кнопку "Выбрать фото" не должно ничего происходить.
  • По нажатию на кнопку "Сделать снимок" необходимо запускать камеру устройства. Сделанное фото должно заменять текущее на экране профиля
  • По нажатию на кнопку "Удалить" необходимо удалять текущее изображение пользователя на экране профиля
  1. Реализовать экран "Категории помощи" приложения согласно макету.
  • Экран "Категории помощи" необходимо отображать после Splash Screen. По нажатию стрелки назад, приложение закрывается. Переход на экран профиля теперь происходит при выборе пункта "Профиль" в нижнем меню.
  • В нижнем меню навигации по-умолчанию должен быть выбран пункт "Помочь".
  • Экран должен представлять из себя activity с RecyclerView.
  1. Реализовать экран "Поиск" согласно макету. Переход на этот экран осуществляется при выборе пункта "Поиск" в нижнем меню
  • Экран необходимо построить с использованием SearchView,ViewPager и фрагментов.
  • У SearchView необходимо реализовать только верстку без логики.
  • Необходимо реализовать возможность изменять выбранную вкладку перелистыванием с плавной анимацией.
  • В качестве названий для результатов необходимо использовать произвольные случайные строки.
  • Данные для отображения результата необходимо генерировать случайным образом при каждом перелистывании ViewPager.
  1. Завершить task в PS и залогировать затраченное время

VI. Структуры данных. Работа с файлами


Теоретическая часть

1. Работа с файлами в java. Сериализация

2. JSON

3. Работа с файловой системой Android

4. Работа с датой и временем

5. DiffUtils

Практическое задание

Работа должна производится в созданном ранее проекте.

Все изменения должны быть закоммичены, а названия коммитов должны коротко и исчерпывающе описывать содержащие изменения. Каждый коммит должен быть рабочим, отправка некомпилирующегося кода недопустима. Для работы над этим заданием необходимо переключится на ветку data_structures и все изменения пушить в нее. После завершения работы над задачей в gitlab необходимо создать merge request в ветку develop. Код должен быть читабельным и написан согласно code-style. Верстка экранов должна быть выполнена по принципу pixel-perfect.

  1. Создать task в PS с заголовком "VI. Структуры данных" и взять ее в работу.
  2. Доработать логику диалога на экране "Профиль".
  • По нажатию на кнопку "Выбрать фото" необходимо открывать галерею устройства. Выбранное в галерее фото должно заменять текущее на экране профиля
  1. Подключить к проекту ThreeTenABP. Все операции с датой и временем должны быть реализованы через классы данной библиотеки.
  2. Сверстать экран "Новости" согласно макету. Переход на этот экран осуществляется при выборе пункта "Новости" в нижнем меню. Экран содержит список благотворительных событий, относящихся к выбранным категориям.
  • Одно событие может относиться сразу к нескольких категориям помощи.
  1. Сверстать экран "Фильтр" согласно макету. Переход на этот экран осуществляется при клике на иконку в правом верхнем углу экрана "Новости".
  • На экране вместо фразы "Как вы хотите помочь?" необходимо отображать "Категории помощи" и ниже список всех возможных категорий.
  • При смене категорий в фильтре обновлять список на экране "Новости" обязательно при помощи DiffUtils.
  1. Сверстать экран "Детальное описание события" согласно макету. Переход на этот экран осуществляется при выборе любого события из списка. Данный экран должен получить информацию о том, какое событие было выбрано на предыдущем шаге.
  2. Необходимо создать два json'а. Содержащих в себе массивы категорий и благотворительных событий. Информация об объектах должна быть достаточной для формирования отображений на экранах, а также для корректного разделения по категориям помощи. Каждый объект должен обладать уникальным (среди объектов своего типа) идентификатором. Проверить корректность созданных json-ов через online-parser. Записать их в 2 файла и поместить в папку assets проекта.
  3. Необходимо создать сущности соответствующие понятиям Категория и Событие.
  4. Создать класс, который будет читать созданные json из файлов, парсить их и преобразовывать в массивы.
  5. Наполнить экраны полученными данными.
  6. Завершить task в PS и залогировать затраченное время

VII. Многопоточность


Теоретическая часть

1. Базовые понятия

2. Многопоточность в java

3. Фоновая работа в Android

4. Service

Практическое задание

Работа должна производится в созданном ранее проекте.

Все изменения должны быть закоммичены, а названия коммитов должны коротко и исчерпывающе описывать содержащие изменения. Каждый коммит должен быть рабочим, отправка некомпилирующегося кода недопустима. Для работы над этим заданием необходимо переключится на ветку concurrency и все изменения пушить в нее. После завершения работы над задачей в gitlab необходимо создать merge request в ветку develop. Код должен быть читабельным и написан согласно code-style.

  1. Создать task в PS с заголовком "VII. Многопоточность" и взять ее в работу.
  2. В рамках предыдущего задания было реализовано чтение из файла. Реализовать чтение из файла и парсинг в background-потоке каждым из предложенных способов. С помощью AsyncTask, Executor, IntentService. При повороте экрана не должно происходить повторное чтение из файла.
  3. Перед отправкой данных остановить рабочий background-поток (Thread.sleep(5000)), для показательного отображения Progress Indicator (имитация запроса к сети).
  4. Реализовать Progress Indicator на экранах "Категории помощи" и "Новости". Индикатор должен показываться с момента запроса данных до момента их отображения на экране. Внимание! Все действия c UI должны совершаться в главном потоке.
  5. Для сохранения и восстановления данных при смене конфигурации использовать savedInstanceState.
  6. Завершить task в PS и залогировать затраченное время

VIII. Реактивное программирование


Теоретическая часть

1. Понятие реактивности

2. RxJava

3. Android расширения

Практическое задание

Работа должна производится в созданном ранее проекте.

Важно! Для пункта 2 используется отдельный проект, указанный в задании

Все изменения должны быть закоммичены, а названия коммитов должны коротко и исчерпывающе описывать содержащие изменения. Каждый коммит должен быть рабочим, отправка некомпилирующегося кода недопустима. Для работы над этим заданием необходимо переключиться на ветку rx_java и все изменения пушить в нее. После завершения работы над задачей в gitlab необходимо создать merge request в ветку develop. Код должен быть читабельным и написан согласно code-style. В системе PS также необходимо создать созвучную задачу, в которую после завершения будет залогировано время.

  1. Создать task в PS с заголовком "X. Реактивное программирование" и взять ее в работу.
  2. Клонировать проект и реализовать все методы так, чтобы тесты проходили.
  • Все методы должны быть реализованы в указанном репозитории в отдельной ветке, вида training/lastname_firstname_date. После выполнения должен быть создан merge request на ментора.
  1. Подключить фреймворк RxJava, а так же библиотеки RxAndroid и RxBinding.
  2. Создать экран "Авторизация" согласно макету.
  • Кнопка "Войти" активна только в момент, когда в поля логин и пароль введено по 6 или более символов. В противном случае кнопка неактивна. Реализовать данное поведение с помощью RxJava.
  • В неактивном состоянии кнопка "Войти" имеет серый фон вместо зеленого.
  • При повороте экрана данные, введенные в поля ввода, должны сохраняться.
  • Экран "Авторизация" необходимо отображать после Splash Screen. По нажатию стрелки назад, приложение закрывается. Переход на экран "Категории помощи" происходит при нажатии на активную кнопку "Войти".
  1. Доработать вкладку "По мероприятиям" экрана "Поиск"
  • Реализовать логику работы SearchView. Поиск происходит в тот момент, когда пользователь 500 мс ничего не вводил в строку и не удалял из нее. То есть, если пользователь быстро вводит слово в строку поиска, поиск отрабатывает только 1 раз для всего слова целиком. Реализовать данное поведение с помощью RxJava.
  • Данные для отображения результата необходимо брать из событий из созданных ранее json файлов.
  • Если в строку поиска ничего не ввели, то вместо результатов поиска отображаем заглушку как на макете.
  • Если введенная в поиск строка не соответствует названию ни одного события, то отображаем пустой список результатов.
  • При повороте экрана, а также при перелистывании ViewPager на вкладку "По НКО" и обратно строка, введенная в поиске, список результатов и позиция списка должны сохраняться.
  1. Завершить task в PS и залогировать затраченное время

IX. Работа с сетью


Теоретическая часть

1. Базовые понятия

2. Библиотеки

3. Firebase

4. Отладка. Перехват и подмена трафика мобильных устройств

Практическое задание

Работа должна производится в созданном ранее проекте.

Все изменения должны быть закоммичены, а названия коммитов должны коротко и исчерпывающе описывать содержащие изменения. Каждый коммит должен быть рабочим, отправка некомпилирующегося кода недопустима. Для работы над этим заданием необходимо переключится на ветку networking и все изменения пушить в нее. После завершения работы над задачей в gitlab необходимо создать merge request в ветку develop. Код должен быть читабельным и написан согласно code-style.

  1. Создать task в PS с заголовком "IX. Работа с сетью" и взять ее в работу.
  2. Необходимо реализовать транспортный слой приложения, который будет осуществалять загрузку данных с сервера. Для этого требуется использовать firebase. Документация по работе с firebase тут.
  • Все "тяжелые" операции должны быть реализованы в фоновом потоке
  • На время выполнения фоновых операций пользователю должен быть показан Activity Indicator
  1. Заменить загрузку из файла на старте приложения на загрузку с сервера. В случае если ответ от сервера ошибочен - загрузить данные из файла.
  • Все "тяжелые" операции должны быть реализованы в фоновом потоке
  • На время выполнения фоновых операций пользователю должен быть показан Activity Indicator
  1. Завершить task в PS и залогировать затраченное время

X. Базы данных. Content Provider


Теоретическая часть

1. Android SQLite

2. Основы Realm

3. Основы Room

4. Content Provider

Практическое задание

Работа должна производится в созданном ранее проекте.

Все изменения должны быть закоммичены, а названия коммитов должны коротко и исчерпывающе описывать содержащие изменения. Каждый коммит должен быть рабочим, отправка некомпилирующегося кода недопустима. Для работы над этим заданием необходимо переключится на ветку data_base и все изменения пушить в нее. После завершения работы над задачей в gitlab необходимо создать merge request в ветку develop. Код должен быть читабельным и написан согласно code-style. В системе PS также необходимо создать созвучную задачу, в которую после завершения будет залогировано время.

  1. Создать task в PS с заголовком "VIII. Базы данных" и взять ее в работу.
  2. Необходимо создать базу данных с использованием Room для хранения сущностей Категории и Благотворительных событий.
  3. При первом получении данных для сущностей Категории и Благотворительные события, сохранять данные в базе данных, и дальнейшее получение производить из нее. Обновление данных должно происходить только для новой сессии.
  • Чтение и запись должны быть реализованы в фоновом потоке
  • На время выполнения фоновых операций пользователю должен быть показан Activity Indicator
  1. Наполнение экранов Категории и Благотворительных событий должно происходить из созданной базы данных
  • Все "тяжелые" операции должны быть реализованы в фоновом потоке
  • На время выполнения фоновых операций пользователю должен быть показан Activity Indicator
  1. Завершить task в PS и залогировать затраченное время

XI. Архитектура приложений. Практика в рамках продуктового проекта.


Теоретическая часть

1. Архитектура

2. Clean Architecture

3. DI

4. Многомодульность

Практическое задание

Переписать свое приложение, применяя архитектурный подход Clean Architecture. В реализации presentation слоя применить архитектурный паттерн MVP с использованием библиотеки Moxy. Для предоставления зависимостей в соотвествии с техникой DI использовать библиотеку Dagger 2. Для работы с базой данных использовать библиотеку Room.


Рекомендуемая литература и ресурсы


Материал для подготовки к собеседованиям

Система грейдов одной из компаний

Как доставлять сборки до QA

Java

Паттерны проектирования

Методологии Agile

Порталы, подкасты и дайджесты

Телеграм

Прочие ресурсы

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published