Лекции по мобильной разработке: iOS, Android и Flutter
Продолжаем рассказывать о Летних школах Академии Яндекса. Проект длился три месяца и включал пять направлений: бэкенд, разработку интерфейсов, мобильную разработку, а также дизайн и менеджмент. Программа каждого курса состояла из лекций с практическими занятиями и проектной работы, а занятия вели сотрудники Яндекса, развивающие сервисы и продукты для миллионов пользователей.
В сегодняшней подборке сразу три курса из Летней школы мобильной разработки: по iOS, Android и Flutter. Материал рассчитан на слушателей, которые знакомы с основами разработки для мобильных платформ и хотят систематизировать знания. Вы узнаете об особенностях языков Kotlin, Swift и Dart, изучите различные подходы к построению архитектуры и научитесь собирать и тестировать приложения.
Android
1. My first app: вводная лекция
Вспомним историю Android, поговорим о сегодняшних трендах и заглянем в будущее.
Вы познакомитесь с устройством системы и особенностями платформы, которые важно учитывать при создании Android-приложений.
Kotlin – язык программирования для разработки под Android. Есть множество статей и туториалов о том, как научиться на нём писать. Но в нашей лекции речь пойдёт о другом.
Нужно ли знать Java, чтобы лучше понимать Kotlin? Как не нужно писать на Kotlin, и действительно ли он ушёл от своего прародителя – JVM? Вы узнаете об антипаттернах кода и сложностях вариантности дженериков.
Обзорная лекция о базовых компонентах Android-приложений.
Разберём механизмы и ограничения Android Framework: классы Activity и Fragment, сохранение состояния, передачу данных внутри приложения и работу в фоне.
Зачем нужны View и ViewGroup, в чём их отличие.
Вы узнаете, что это за сущности и для чего используются, а также познакомитесь с их внутренним устройством и процессами: Layout, Drawing и обработкой тачей. В качестве практического задания напишете собственный Custom ViewGroup.
Лекция посвящена принципам работы UI-компонента RecyclerView, основным классам и интерфейсам, а также различным подходам, применяемым на практике.
6. Background, часть 1: многопоточность
Поговорим о многопоточном взаимодействии, гарантиях Java Memory Model и стандартных механизмах асинхронного программирования в Java и Android.
7. Background, часть 2: корутины в Kotlin
Зачем нужны корутины, из каких компонентов они состоят и какие проблемы решают.
Изучим Structured Concurrency и обсудим, в каких случаях его можно и нужно поломать, а также затронем нюансы, которые могут возникнуть при запуске, отмене и обработке ошибок.
Разбираемся с устройством сети в Android.
Вы познакомитесь с протоколами HTTP(s) и WebSocket, форматами данных и популярными библиотеками для работы с сетью на платформе.
В этой лекции вы научитесь разбивать Android-приложение на модули и использовать Dagger 2 для организации межмодульного DI (Dependency Injection).
Продолжение предыдущей лекции, посвящённое Hilt и его внутреннему устройству.
Практика CI/CD (continuous integration, continuous delivery) и её влияние на процесс разработки. Поговорим об особенностях практики в мире iOS- и Android-приложений, принципах, которым нужно следовать, и популярных сервисах для построения CI/CD.
12. Инструменты разработки, отладки и профилирования
Обзорная лекция по Android Studio.
Вы изучите интерфейс и основные возможности Android Studio, научитесь использовать горячие клавиши, а также разберётесь с доступными средствами дебага и профилирования.
Зачем нужны автотесты, и в чём отличие unit от Android-зависимых тестов.
Разберём Java unit-тесты и Android-автотесты с точки зрения кода и напишем собственные. Вы освоите библиотеку Espresso, научитесь применять Matcher и познакомитесь с подходами TDD и BDD.
Поговорим о системах сборки в Java, в частности о Gradle, а также о практическом применении build-скриптов при разработке Android-приложений.
15. Дизайн, стили, темы, анимации
Зачем в Android нужны стили и темы, чем они отличаются и как устроены.
Обсудим лучшие практики применения стилей и тем, а также стандартные средства для создания анимаций.
iOS
Познакомимся с минимальным инструментарием для работы в iOS, устройством среды разработки и базовыми принципами, а также напишем небольшой экран.
2. Swift как язык программирования
Вы освоите язык Swift, его базовые и специфические конструкции, а также попробуете разработать приложение для iOS.
Подробно остановимся на слое UIView и всём, что с ним связано: вёрстке, отрисовке, иерархии и обработке событий.
Вы узнаете о стандартных представлениях для работы с коллекциями, сценариях их применения и внутренних механизмах, а также научитесь использовать UICollectionView, UITableView и UIScrollView на практике.
Лекция будет полезна как опытным разработчикам, так и тем, кто только начинает изучать платформу iOS.
Разберёмся с классом UIViewController: расскажем о его роли в структуре приложения и задачах, которые можно решать с его помощью.
Параллелизм, многопоточность и примитивы в языке Swift.
Вы познакомитесь с определяющими понятиями iOS-разработки: технологией Grand Central Dispatch, классами NSOperation и NSOperationQueue, а также с перспективными подходами к многозадачности.
Подробная лекция о клиент-серверном взаимодействии в iOS-разработке.
Рассмотрим HTTP-взаимодействие и REST-архитектуру, основы реализации сетевого слоя на Swift, сериализацию и десериализацию данных, использование формата данных JSON и проблемы безопасности в сетевом взаимодействии.
Базовые инструменты для iOS-разработчика.
Вы изучите основные составляющие Xcode проекта: Targets, Build Configuration и Schemes. Во второй части узнаете об упаковке приложения, символизации crashes и code signing, а также об инструменте Cocoapods.
Три ключевых утверждения об архитектуре: она важна, проста и спорна. Разберёмся с архитектурой iOS-приложений и с тем, как выстраивать структуру при написании кода.
Рассмотрим устройство iOS-приложений, процесс сборки и различные сборочные системы.
Обсудим основные виды тестирования и узнаем, как писать действительно полезные тесты, которые позволяют найти баг до попадания в продакшн и не ломаются при рефакторинге.
Вы освоите принципы и практики написания тестов (F.I.R.S.T, AAA, TDD и другие), а также научитесь использовать XCTest, XCUITest и изоляционные фреймворки на примере SwiftyMocky.
Практика CI/CD (continuous integration, continuous delivery) и её влияние на процесс разработки. Поговорим об особенностях практики в мире iOS- и Android-приложений, принципах, которым нужно следовать, и популярных сервисах для построения CI/CD.
13. И ещё немного про анимации
Углубимся в теорию анимации: вспомним, что такое интерполяция и функции плавности, а также разберёмся с рендерингом в iOS. Пройдёмся по API для анимации и фреймворкам UIKit и CoreAnimation.
14. Наблюдения и выводы о практиках программирования
Что такое продукт и как устроена разработка в большой компании. Обсудим сложности, с которыми сталкиваются разработчики, и подходы к их решению на конкретных примерах.
Flutter
Видеокурс для тех, кто хочет узнать о возможностях кроссплатформенного фреймворка Flutter. Вы познакомитесь с особенностями языка Dart и основными концепциями: построением UI, работой с сетью, анимацией и архитектурными подходами.
Разберём главные идеи и концепции языка Dart и фреймворка Flutter на примере готового приложения. Вы узнаете, из чего состоит Flutter-приложение, как формируется его UI и бизнес-логика.
2. Flutter: деревья виджетов и не только. Билдеры: обновление интерфейса по требованию
В первой части лекции рассмотрим рендеринг во Flutter: структуру виджетов, деревья Element и RenderObject, а также их роли и взаимосвязи.
Вторая часть посвящена использованию билдеров: зачем они нужны, как работают и что позволяют сделать.
3. Списки (ListView и другие). Анимации и рисование: от простого к сложному
Сначала поговорим о списках: какими они бывают, как создаются и где используются.
Во второй части рассмотрим работу с анимацией во Flutter: использование виджетов (implict animations), кастомных анимаций (explicit animations) и транзишенов, а также ступенчатые анимации, Canvas и добавление физики.
Вы узнаете, что такое синхронные и асинхронные задачи в Dart, EventLoop и очереди, а также научитесь взаимодействовать с платформенным кодом во Flutter: обращаться к нему с помощью Swift/Objective-C/Kotlin/Java, встраивать платформенные View и использовать возможности Dart FFI.
5. Архитектуры и стейт-менеджмент во Flutter. Let the holy war begin
В заключительной лекции поговорим об архитектуре, управлении состоянием и организации зависимостей. Рассмотрим популярные подходы и библиотеки, такие как BLoC, Redux, GetIt и Provider. В качестве практики проведём рефакторинг приложения и применим к нему каждый из подходов.