Skip to content

KolasikOmetov/Simbir

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 

Repository files navigation

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

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

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

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

  • Теоретической части;
  • Практической части;
  • Теста;

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

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

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


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


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

1. ООП:

2. SOLID

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

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

5. Gradle

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

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

II. Java. Часть 1


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

Основы:

Отладка

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

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

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

  1. Работа с примитивными типами
  2. Работа со строками
  3. Работа с массивами
  4. Завершить task и отправить ментору затраченное время

III. Java. Часть 2


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

1. Классы

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

3. Коллекции

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

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

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

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

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

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

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

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

  1. Настроить проект для java 8
  2. Написать простое лямбда-выражение в переменной myClosure, лямбда-выражение должно выводить в консоль фразу "I love Java". Вызвать это лямбда-выражение. Далее написать функцию, которая будет запускать заданное лямбда-выражение заданное количество раз. Объявить функцию так: public void repeatTask (int times, Runnable task). Функция должна запускать times раз лямбда-выражение task . Используйте эту функцию для печати "I love Java" 10 раз.
  3. Условия: есть начальная позиция на двумерной плоскости, можно осуществлять последовательность шагов по четырем направлениям 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 - круг с одним свойством: диаметр круг

IV. Верстка


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

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

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

2. Верстка

3. Типы layout'ов

4. Splash Screen

4. BottomNavigationView

5. App Bar

6. RecycleView Adapter Видео-лекция Яндекса: Школа мобильной разработки – AdapterView. Владимир Тагаков Лектор рассказывает про recycleView, желательно смотреть только после того, как появится уже некоторый опыт в создании компонентов RecycleView (**) 7. Constraint Layout

8. Ресурсы

8. Анимации

9. Codelabs

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

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

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

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

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

V. Android OS. Activity. Fragments


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

1. Android OS

2. Application

3. Activity

4. Fragment

5. SearchView

6. ViewPager

7. Списки

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

9. BroadcastReceiver

10. Codelabs

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

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

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

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

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


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

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

2. JSON

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

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

5. DiffUtils

6. Codelabs

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

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

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

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

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


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

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

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

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

4. Service

5. Codelabs

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

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

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

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

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


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

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

2. RxJava

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

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

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

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

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

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

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


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

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

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

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

5. Codelabs

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

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

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

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

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


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

1. Android SQLite

2. Основы Realm

3. Основы Room

4. Content Provider

5. Codelabs

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

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

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

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

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


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

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

2. Clean Architecture

3. DI

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

5. Утечки памяти

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

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


XII. Решение академических задач


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

  • javarush - Ресурс предлагает базовые задачки, решать их можно только на Java. Так же есть курсы по самой Java, начиная с азов синтаксиса, заканчивая Java Multithreading, так же есть курс по андроиду.
  • CodeWars - Ресурс предлагает огромную подборку задач на более чем 20 языках программирования. На codewars вы сможете обсудить задачи с другими игроками, а также посмотреть альтернативные решения. Можно писать на Java и Kotlin.
  • HackerRank - Уровень сложности задач на HackerRank чуть выше, чем на CodeWars, попадаются задания, выходящие за рамки базового программирования. Можно развиваться в нескольких областях, включая алгоритмы, математику, SQL, функциональное программирование, AI и многое другое. Можно писать на Java и Kotlin.
  • CodinGame - Это платформа для изучения программирования в игровой форме. Управляйте сценарием игры с помощью кода. Большой выбор языков, обучения по фану. В играх есть описание проблемы и тестовые примеры. Определенно стоит попробовать такой подход в обучении. Можно писать на Java и Kotlin.

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

  1. Создать репозиторий формата ФАМИЛИЯ_PRACTICE
  2. Создать ветку формата DD.MM.YYYY
  3. Решить определенные задачи с сайта CodeWars:
  4. Решить дополнительно 5 заданий учитывая сложность:
    • 2 задания на 8 kyu
    • 2 задания на 7 kyu
    • 1 задание на 6 kyu
  5. Для 4го пункта - в классах сохранить ссылки на задание в виде комментария к коду
  6. Опубликовать решеные результаты в репозитории

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%