iOS-разработчик. Базовый курс | OTUS
Новогодняя распродажа!
Все курсы со скидкой 30%. Торопитесь!
Подробнее

Курсы

Курсы в разработке Подготовительные курсы
+7 499 110-61-65

iOS-разработчик. Базовый курс

Научитесь профессионально разрабатывать iOS-приложения и подготовитесь к собеседованиям в компаниях-партнерах

Длительность

5 месяцев

Продолжительность
5 месяцев, 4 академ. часа в неделю
Что даст вам этот курс

За 5 месяцев вы получите все основные навыки для разработки мобильных приложений под iOS. А также подготовитесь к собеседованию на должность iOS-разработчика.

Вы научитесь:

— верстать графические интерфейсы приложений;
— взаимодействовать с API посредством HTTP-запросов;
— сохранять, получать и обрабатывать данные посредством ORM CoreData;
— создавать многопоточные мобильные приложения;
— тестировать код с помощью автотестов.

Для кого этот курс

Для программистов с опытом работы на любом ООП-языке от 1 года. Опыт в iOS-разработке будет плюсом, но необязателен.

Выпускной проект

В качестве выпускного проекта вы сможете реализовать свою идею или выбрать из списка:
— «Клиент для новостного портала»;
— «Клиент для социальной сети»;
— «RSS-клиент».


Best practics на последней версии языка — Swift 5.1

Практика и живое общение с экспертами в течение всего образовательного процесса

Курс рассчитан на людей с опытом в разработке

Создание полноценного приложения в App Store для портфолио

Преподаватели
Константин Савялов
Senior IOS-разработчик в «Газпром-Медиа Радио»
Кирилл Володин
TeamLead iOS в «Финансовой корпорации Открытие»
Алексей Киселев
Senior iOS Developer в Headhunter Group
Алексей Соболевский
iOS-разработчик в Яндекс
Окончил Ереванский государственный университет в 1992 году. В iOS-разработке с 2014 года.

Участвовал в реализации проектов разной степени сложности. Наиболее значимые из них — «Госуслуги», «МТС TV», «Волонтёры», «LikeFM».

Сейчас работает над разработкой приложения для «ComedyClub».

TeamLead iOS в «Финансовой корпорации Открытие» в г. Москва. Сооснователь Digital агентства RxProject. В прошлом работал в компании «Бинбанк» и как фрилансер.

Образование: окончил магистратуру МГТУ им. Н. Э. Баумана по специальности «Информатика и системы управления». Преподавал iOS-разработку на кафедре ИУ6 в МГТУ им. Н. Э. Баумана.

Основной стек: Swift, Alamofire, Realm, UIKit, Keychain, Gitlab, Swiftlint, Firebase, CryptoSwift. Имеет опыт разработки на Python и Java.

Помимо разработки на платформе iOS, сейчас активно интересуется разработкой под Android и Machine Learning. Также имеет за плечами опыт основания и работы в стартапе как CTO.

Любит участвовать в хакатонах. Участвовал в 8 хакатонах, на 7 из которых победил или занимал призовые места. На хакатоне «Росбанка» команда студентов с курса Кирилла в МГТУ им. Баумана заняла 1 место по мобильной разработке.

Практикующий Senior iOS Developer с опытом управления командой разработчиков в качестве Lead iOS Developer. В программировании более 10 лет.

Начинал с .NET в области веб-приложений, получил статус MCPD. При развитии мобильного направления переключился на iOS-разработку. В iOS начинал с языка Objective-C с использованием MRC (pre-ARC). Последние 3 года старается использовать только Swift.

Работал в таких компаниях, как Fuse8, Humanworld.info, IDScan.net, ООО «КРИЭЙТ», 2can, OZON.travel, Mamba и других. Владеет широким спектром профессиональных навыков: Swift, Objective-C, JavaScript, HTML, CSS, C#, ASP.Net, ADO.Net, MS SQL Server, SQLite и пр.

Окончил Челябинский государственный университет по специализации «Радиофизика и компьютерная электроника».

Окончил Кемеровский государственный университет по специальности «Преподаватель-лингвист». В 2013 году сменил деятельность и самостоятельно обучился web-разработке. Работал в компаниях SilverSite и «Росконтроль», создавал сайты на языках PHP и Java, занимался вёрсткой.

Профессионально занимается iOS-разработкой с 2015-го года. Участвовал в создании чат-приложений, программного обеспечения для грузового такси, внедрял Continius Ingegration и т. д. Работал в компании Mover24 в качестве руководителя команды разработчиков, а также в компании «Новые Облачные Технологии».

На сегодняшний день Алексей работает в Яндексе. Помимо разработки на платформе iOS, активно проводит собеседования кандидатов, претендующих на позицию iOS Developer.

Стек технологий: Objective-C, Swift, UIKit, Foundation, CoreAnimation, Keychain, Associated Domains, SSO, App Groups, TeamCity.

Константин
Савялов
Кирилл
Володин
Алексей
Киселев
Алексей
Соболевский
Преподаватели
Константин Савялов
Senior IOS-разработчик в «Газпром-Медиа Радио»
Окончил Ереванский государственный университет в 1992 году. В iOS-разработке с 2014 года.

Участвовал в реализации проектов разной степени сложности. Наиболее значимые из них — «Госуслуги», «МТС TV», «Волонтёры», «LikeFM».

Сейчас работает над разработкой приложения для «ComedyClub».

Кирилл Володин
TeamLead iOS в «Финансовой корпорации Открытие»
TeamLead iOS в «Финансовой корпорации Открытие» в г. Москва. Сооснователь Digital агентства RxProject. В прошлом работал в компании «Бинбанк» и как фрилансер.

Образование: окончил магистратуру МГТУ им. Н. Э. Баумана по специальности «Информатика и системы управления». Преподавал iOS-разработку на кафедре ИУ6 в МГТУ им. Н. Э. Баумана.

Основной стек: Swift, Alamofire, Realm, UIKit, Keychain, Gitlab, Swiftlint, Firebase, CryptoSwift. Имеет опыт разработки на Python и Java.

Помимо разработки на платформе iOS, сейчас активно интересуется разработкой под Android и Machine Learning. Также имеет за плечами опыт основания и работы в стартапе как CTO.

Любит участвовать в хакатонах. Участвовал в 8 хакатонах, на 7 из которых победил или занимал призовые места. На хакатоне «Росбанка» команда студентов с курса Кирилла в МГТУ им. Баумана заняла 1 место по мобильной разработке.

Алексей Киселев
Senior iOS Developer в Headhunter Group
Практикующий Senior iOS Developer с опытом управления командой разработчиков в качестве Lead iOS Developer. В программировании более 10 лет.

Начинал с .NET в области веб-приложений, получил статус MCPD. При развитии мобильного направления переключился на iOS-разработку. В iOS начинал с языка Objective-C с использованием MRC (pre-ARC). Последние 3 года старается использовать только Swift.

Работал в таких компаниях, как Fuse8, Humanworld.info, IDScan.net, ООО «КРИЭЙТ», 2can, OZON.travel, Mamba и других. Владеет широким спектром профессиональных навыков: Swift, Objective-C, JavaScript, HTML, CSS, C#, ASP.Net, ADO.Net, MS SQL Server, SQLite и пр.

Окончил Челябинский государственный университет по специализации «Радиофизика и компьютерная электроника».

Алексей Соболевский
iOS-разработчик в Яндекс
Окончил Кемеровский государственный университет по специальности «Преподаватель-лингвист». В 2013 году сменил деятельность и самостоятельно обучился web-разработке. Работал в компаниях SilverSite и «Росконтроль», создавал сайты на языках PHP и Java, занимался вёрсткой.

Профессионально занимается iOS-разработкой с 2015-го года. Участвовал в создании чат-приложений, программного обеспечения для грузового такси, внедрял Continius Ingegration и т. д. Работал в компании Mover24 в качестве руководителя команды разработчиков, а также в компании «Новые Облачные Технологии».

На сегодняшний день Алексей работает в Яндексе. Помимо разработки на платформе iOS, активно проводит собеседования кандидатов, претендующих на позицию iOS Developer.

Стек технологий: Objective-C, Swift, UIKit, Foundation, CoreAnimation, Keychain, Associated Domains, SSO, App Groups, TeamCity.

Необходимые знания
Для прохождения программы необходимы:
— опыт работы на любом ООП-языке от 1 года;
— наличие компьютера с MacOS;
— базовые навыки работы в терминале (навигация, редактирование, исполнение команд);
— знакомство с Git.

Желательно:
— опыт работы с REST API и СУБД (SQLite, MySql, PostgreSQL);
— умение писать простые SQL-запросы или опыт работы с ORM/ActiveRecord.
Программа обучения
Модуль 1
Основы языка Swift
Модуль 2
UIKit
Модуль 3
Репозитории данных
Модуль 4
Бизнес-логика
Модуль 5
Swift UI + Combine
Модуль 6
Проектная работа
Основы языка Swift
Тема 1: Обзор по iOS платформе и языку Swift. Начинаем программировать.
- поймем как можно применить полученные на курсе знания
- разберем линейку устройств от Apple под которые можно писать программы
- установим IDE
- разберем типы данных в Swift
- научимся использовать переменные, и выводить значения на консоль.
Тема 2: Базовые конструкции языка
playground. Типы данных. Коллекции. Управление потоком. Функции.
Познакомимся со основными типами данных, операторами, коллекциями и операторами управления потоком и функциями.
Научимся правильно их использовать.
Узнаем, когда выбирать тот или иной тип данных, коллекцию или оператор.
Решим простую задачу fizzbuzz.
Тема 3: Особенности Swift
optional. Result. Перечисления. Кортежи. Особенности объявления функций. Расширенные возможности операторов if/switch/for.
Познакомимся с ключевыми особенностями языка. Рассмотрим дополнительные типы данных перечисление и кортеж. А также линтером.
Научимся писать не в Swift-стиле, узнаем, как менять стиль в зависимости от задачи. Научимся правильно работать с опциональными типами.
Узнаем, как строить контракт функции.
Разработаем простой консольный калькулятор.
Домашние задания: 2
1 Консольная программа на закрепление
Напишите консольную программу, которая принимает от пользователя два параметра: букву, число.
Вывести в консоль список всех фамилий, начинающихся на данную букву, если их владелец имеет пол, соответствующий введённому числу. Источником является массив, подготовленный заранее.
2 Консольная программа про работника
Работник работает по сменному графику 2/2. Дневная смена, ночная смена, выходной, выходной. Напишите программу, определяющую соответствие даты и смены работника.
Пользователь должен ввести в консоли, какая смена была 1-го января, а затем может вводить месяц и день для получения результата.
Тема 4: Структуры и классы
структура. Класс. Метод. Свойство. Наследование. Модификаторы доступа. Инициализация. Деинициализация.
Познакомимся со своими типами данных, структурами и классами. Их особенностями и устройством.
Научимся правильно их использовать.
Узнаем, когда выбирать структуру, а когда класс.
Тема 5: Модель управления памятью
стек. Куча. ARC. GC. Цикл удержания.
Научимся использовать стек и кучу.
Узнаем, как Swift управляет памятью.
Научимся избегать утечек памяти.
Домашние задания: 1
1 Программа, моделирующая фабрику по производству строительных материалов
Напишите программу, которая моделирует фабрику по производству строительных материалов.
Опишите в программе два класса: Человек (ФИО, возраст, паспорт), Паспорт (Серия, Номер, дата выдачи, Человек) и инициализируйте их.
Тема 6: Протоколы и расширения
протокол, расширение, диспетчеризация, миксины.
Узнаем о том, как описывать интерфейс типа без реализации и реализацию без типа.
Научимся правильно строить структуру своих типов и добавлять расширенные возможности в стандартные типы.
Тема 7: Generic
generic-классы, функции и протоколы.
Познакомимся с дженериками.
Узнаем о практиках обобщённого программирования в Swift.
Научимся использовать компилятор для проверки наших утверждений на стадии компиляции.
Домашние задания: 2
1 Напишите собственный тип данных Очередь (Queue), подходящий для хранения любых типов
2 Напишите функцию для сложения любых двух числовых аргументов
Тема 8: Функциональное программирование
функторы, монады, map, flatMap, reduce, filter.
Познакомимся с концепцией функционального программирования.
Узнаем об основных инструментах функционального программирования.
Научимся правильно использовать функциональные инструменты, предоставляемые языком.
UIKit
Тема 1: Знакомство с основными компонентами
xcode. UIApplication. UIWindow. UIView. UIViewController. MVC.
Познакомимся с основными компонентами построения приложений под iOS, средой разработки и инструментами управления ресурсами.
Узнаем, что из себя представляет iOS-приложение. Как происходит его запуск и отображение на экране устройства.
Научимся правильно использовать компоненты и создавать приложения.
Напишем простой пример "hello world".
Тема 2: UIView
uIView. UIButtom. UIControl. UIResponder. UIControlEvent.
Познакомимся с основой графического интерфейса, классом UIView и его производными.
Узнаем, какие возможности предоставляет нам UIKit для отображения информации.
Научимся создавать свои UI-компоненты.
Напишем простой калькулятор.
Домашние задания: 2
1 Напишите приложение с формой ввода паспортных данных
2 Напиши свой компонент, кнопку с изображением посередине и надписью под ней
Тема 3: UIViewController
uIViewController. UITabbarController. UINavigationController. UIContainerController-переходы.
Познакомимся с классом, предназначенным для управления UIView.
Узнаем, какие виды контроллеров существуют.
Научимся строить навигацию в приложении.
Напишем приложение с несколькими вкладками.
Тема 4: View Layout
auto Layout. UIStackView. NSLayoutConstraint. Size Classes. Intrinsic content size.
Познакомимся со средствами размещения элементов интерфейса.
Узнаем, какие способы позиционирования выбирать под разные задачи.
Научимся делать адаптивную верстку.
Напишем приложение с формой ввода логина/пароля.
Домашние задания: 1
1 Создание Todo List
Написать простой todo list:
1) на обычном контроллере разместите поле ввода текста и кнопку ""Добавить"";
2) вертикальный стек вью;
3) создайте свой собственный UI элемент — строку с надписью и кнопкой "Удалить" (справа);
4) по нажатию на кнопку ""Добавить"" текст из поля ввода переносится, как строка в стек вью;
5) при изменении ориентации экран должен адекватно реагировать на изменения.
Тема 5: UITableView
uITableView. UITableViewCell. UITableViewDataSource. UITableViewDelegate.
Познакомимся с компонентом для отображения таблиц UITableView.
Узнаем, как правильно отображать разные типы данных в одном списке.
Научимся отображать большие списки данных.
Напишем каталог городов с поиском.
Домашние задания: 1
1 Написать свой пример с использованием UITableView
Создать приложение с любыми тестовыми данными:
1) На первом экране в UITableView вывести список своих данных
2) Для вывода используйте свою кастомную ячейку (попробуйте зарегистрировать из кода или через Storyboard)
3) Реализовать возможность удалять ячейки из списка и удалять сами данные
4) Сделать Pull to Refresh, при обновлении делать перетасовку данных и показывать в новом порядке
4*) В ячейке попробуйте использовать текст с разным количеством строк
5**) Сделать swipeAction - влево - удаление ячейки, вправо - добавить к ячейке accessoryType Checkmark, если он уже есть - то убрать его
Тема 6: UICollectionView
uICollectionView. UICollectionViewCell. UICollectionViewDataSource. UICollectionViewDelegate. UICollectionViewLayout.
Познакомимся с компонентом для отображения массивов данных UICollectionView.
Узнаем, как создавать свои варианты отображения.
Научимся отображать любые коллекции данных.
Напишем галерею изображений.
Домашние задания: 1
1 Написать простой экран с картинками используя UICollectionView
Создать простое приложение, которое выводит некоторую коллекию картинок используя UICollectionView. (Картинки нужно добавить в assets)

1) На экране расположить UICollectionView, создать кастомную ячейку с UIImageView внутри. Выводить ячейки одинакового размера, по две ячейки в ряд. Соблюсти, чтобы расстояния между ячейками со всех сторон были одинаковые.

2) Разбить данные на несколько секций и отделить пустым расстоянием секции между собой.

* Добавить на экран UISegmentedControl, с двумя опциями скрола (Vertical/Horizontal). При выборе опции менять направление скрола коллекции.
** Добавить возможность менять количество столбцов в коллекции.
Тема 7: UIAnimation
uIAnimation. CAAnimation. UIViewPropertyAnimator.
Познакомимся с анимациями.
Узнаем о различных видах анимаций.
Научимся создавать динамические интерфейсы.
Напишем приложение с карточками.
Тема 8: UIApplication (уведомления, фоновое выполнение)
uIAplication. Жизненный цикл приложения. Фоновое выполнение, UIApplicationDelegate.
Подробнее узнаем о сером кардинале нашего приложения UIAplication.
Узнаем о жизненном цикле приложения, работе в фоне и других возможностях.
Научимся правильно организовывать код AppDelegate.
Напишем приложение с защитой от несанкционированного доступа.
Домашние задания: 1
1 Реализуйте гамбургер-меню с анимацией появления типа "пружина"
Реализуйте гамбургер-меню, с анимацией появления типа "пружина":
1) создайте 4 контроллера;
2) разместите на каждом из них кнопку вызова меню. Кнопка должна быть простой по центру контроллеров;
3) при нажатии на кнопку должно появляться меню. Выезжать с пружинной анимацией с левой стороны экрана;
4) меню — это UIView с 4 пунктами меню. Реализация любая (кнопки, кнопки в UIStackView, UItableView);
5) при выборе пункта мы должны переходить на другой контроллер. Переход выполняется подменой rootViewController у UIWindow. Меню при этом просто пропадает вместе с контроллером;
6) меню должно иметь кнопку "закрыть", по нажатию на которою оно закрывается с пружинной анимацией;
7) если пользователь ничего не выбрал, меню должно закрываться спустя 30 секунд, даже если приложение свернуто.
Тема 9: UIStoryboard
uIStoryboard. UISegue. Xib.
Познакомимся с графическим редактором интерфейса.
Научимся создавать интерфейс без кода.
Узнаем область применения StoryBoard.
Напишем приложение с несколькими вкладками с использованием StoryBoard.
Тема 10: Паттерны навигации
router. Coordinator.
Познакомимся с паттернами навигации.
Научимся правильно организовывать навигацию в приложении.
Добавим координаторы в приложение с несколькими вкладками.
Домашние задания: 1
1 Добавить в шаблон Coordinator методы возврата на предидущее окно. Реализовать TabBar на основе шаблона Coordinator
Репозитории данных
Тема 1: URLSession
uRLSession. URLSessionTask. URLRequest. URLResponse.
Научимся работать с http-запросами.
Узнаем, как отправлять и получать данные на сервер.
16 декабря, 20:00 — 21:30
Лектор: Кирилл Володин
Тема 2: Codable
decodable. Encodable.
Научимся обрабатывать ответ сервера с данными в формате json.
Узнаем, как правильно преобразовывать данный формат в объекты.
19 декабря, 20:00 — 21:30
Лектор: Кирилл Володин
Домашние задания: 1
1 Загрузка и отображение постов с использованием внешнего API
Загрузить список постов с сервиса https://jsonplaceholder.typicode.com/posts и отобразить в таблице.
Реализовать добавление нового поста с помощью api.
Тема 3: Типы хранилищ
userDefaults. Keychain. Files. DB.
Познакомимся с основными средствами хранения информации.
Научимся правильно выбирать тип хранилища.
23 декабря, 20:00 — 21:30
Лектор: Константин Савялов
Тема 4: Файловая система
nSFileManager.
Подробнее узнаем о файловой системе и работе с файлами.
Научимся сохранять данные в файлах.
26 декабря, 20:00 — 21:30
Лектор: Кирилл Володин
Домашние задания: 1
1 Загрузить список фотографий с внешнего API и отобразить их
Загрузить список фотографий по url https://jsonplaceholder.typicode.com/photos и отобразить в таблице.
Реализовать кэширование изображений в файловой системе.
Тема 5: Введение в CoreData
core Data Stack. NSManagedObjectModel. NSManagedObjectContext. NSPersistentStoreCoordinator.
Узнаем о стандартном ORM от Apple для работе с sqlite.
Научимся проектировать модель хранилища, сохранять и получать объекты.
9 января, 20:00 — 21:30
Лектор: Кирилл Володин
Тема 6: Offline first with CoreData
nSFetchedResultsController.
Узнаем о подходе offlineFirst.
Научимся подстраивать интерфейс под данные в базе.
13 января, 20:00 — 21:30
Лектор: Константин Савялов
Домашние задания: 1
1 Внедрить подход offline first в приложение с цитатами
Внедрить подход offline first в приложение с цитатами:
1) загрузить список постов с сервиса https://jsonplaceholder.typicode.com/posts;
2) сохраните его в CoreData;
3) организуйте показ постов из CoreData;
4) при обновлении данных в CoreData таблица должна обновляться.
Тема 7: Продвинутые возможности CoreData
nSManagedObjectContext. Query Generations.
Познакомимся с вариантами настройки стека для работы с большими объемами данных, узнаем, как работать с неизменяемой версией хранилища.
16 января, 20:00 — 21:30
Лектор: Кирилл Володин
Бизнес-логика
Тема 1: Внедрение зависимостей
storyboard. Swinject. Factory.
Познакомимся с одним из основных способов уменьшения связанности.
Научимся гибко собирать классы в приложении.
Напишем список книг с возможностью добавить отзыв.
20 января, 20:00 — 21:30
Лектор: Константин Савялов
Тема 2: Тестирование
xCTest. URLProtocol. GTW. Expectations.
Познакомимся с фреймворком для написания автотестов XCTest.
Научимся покрывать бизнес-логику автотестами.
Протестируем приложение списка книг.
23 января, 20:00 — 21:30
Лектор: Кирилл Володин
Тема 3: Многопоточность — Thread
thread. DispatchQoS.
Познакомимся с потоками.
Научимся выполнять код параллельно.
27 января, 20:00 — 21:30
Лектор: Константин Савялов
Тема 4: Многопоточность — GCD
dispatch Queues. Dispatch Groups. DispatchWorkItem. DispatchWorkItemFlags.
Познакомимся с инструментом абстракции от потоков GCD, научимся делить код на задачи и оптимизировать время их выполнения.
30 января, 20:00 — 21:30
Лектор: Кирилл Володин
Домашние задания: 1
1 Задача на многопоточность
1) напишите потокобезопасный контейнер, для хранения любого типа (Int, String, Double);
2) создайте массив чисел от 0 до 9;
3) возведите каждый элемент массива в квадрат в отдельной параллельной задаче;
4) сложите результат.
Тема 5: Многопоточность — Operation
operation.
Познакомимся с инструментом абстракции от потоков Operation, научимся делить код на задачи и оптимизировать время их выполнения.
3 февраля, 20:00 — 21:30
Лектор: Константин Савялов
Swift UI + Combine
Тема 1: SwiftUI
- разберем устройство SwiftUI
- научимся строить сложные интерфейсы при помощи SwiftUI
- научимся интегрировать SwiftUI в существующее приложение и наоборот
6 февраля, 20:00 — 21:30
Лектор: Кирилл Володин
Тема 2: Combine
- основы реактивного программирования
- как реактивное программирование помогает нам в решении повседневных задач
10 февраля, 20:00 — 21:30
Лектор: Константин Савялов
Тема 3: Swift UI + Combine
- разберем как используя SwiftUI и Combine создавать сложные, production-ready приложения
13 февраля, 20:00 — 21:30
Лектор: Кирилл Володин
Проектная работа
Тема 1: Работа над проектом: постановка задач
20 февраля, 20:00 — 21:30
Лектор: Кирилл Володин
Тема 2: Консультация по проекту
27 февраля, 20:00 — 21:30
Лектор: Кирилл Володин
Тема 3: Защита проектов
5 марта, 20:00 — 21:30
Лектор: Кирилл Володин
Домашние задания: 1
1 Сдача проекта
Цель: Сдать ссылку на репозиторий курсового проекта. В репозитории обязательно должен быть заполнен файл Readme.md с описанием проекта.
Прошедшие открытые вебинары по курсу
Открытый вебинар — это настоящее занятие в режиме он-лайн с преподавателем курса, которое позволяет посмотреть, как проходит процесс обучения. В ходе занятия слушатели имеют возможность задать вопросы и получить знания по реальным практическим кейсам.
Знакомимся с языком Swift на примере игры Snake
Алексей Соболевский
День открытых дверей
23 сентября в 20:00
Ваш сертификат

онлайн-образование

Сертификат №0001

Константин Константинопольский

Успешно закончил курс «iOS-разработчик. Базовый курс»
Выполнено практических заданий: 16 из 16

Общество с ограниченной ответственностью “Отус Онлайн-Образование”

Город:
Москва

Генеральный директор ООО “Отус Онлайн-Образование”
Виталий Чибриков

Лицензия на осуществление образовательной деятельности
№ 039825 от 28 декабря 2018г.

онлайн-образование

Сертификат №0001

Константин Константинопольский

Успешно закончил курс «iOS-разработчик. Базовый курс»
Выполнено практических заданий: 16 из 16

Общество с ограниченной ответственностью “Отус Онлайн-Образование”

Город:
Москва

Генеральный директор ООО “Отус Онлайн-Образование”
Виталий Чибриков

Лицензия на осуществление образовательной деятельности
№ 039825 от 28 декабря 2018г.