Стать мобильным разработчиком сейчас и престижно, и перспективно. Но в Минске не так много мест, где идет подготовка будущих специалистов в этой области.

Один из таких учебных центров – EPAM Mobile Lab. Mobile Lab – подразделение компании EPAM Systems, в котором происходит обучение и подготовка специалистов для мобильных проектов на iOS, Android, и др. Работает в Минске с лета 2011 года. Основной расчет идет на студентов старших курсов и программистов, желающих переквалифицироваться в мобильные разработчики.

В EPAM Mobile Lab попасть не так-то просто: входная планка необходимых базовых знаний выше, чем для других лабораторий, срок обучения короче, а на выходе ожидаются программисты, способные практически сразу работать на боевом Production проекте (Production проект – производственный проект, т.е. работа выполняется для заказчиков, и они за нее платят – основной источник дохода компании).

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

Основное требование к кандидатам – хороший английский и владение на уровне понимания четырьмя базовыми вещами:

1. Object Oriented Programming (объектно-ориентированное программирование — ООП)

2. Memory Allocation (управление памятью)

3. Multithreading (многопоточность)

4. Data structures and Algorithms (теория программирования)

В идеале студент по окончании 4 курса должен обладать всеми этими знаниями. Однако зачастую вызывают затруднения даже вопросы о механизмах ООП. Де-факто это самая популярная тема на собеседовании программистов. И если с теорией, как правило, полный порядок, то рассказать «А зачем это нужно?» и «Какую пользу мы получаем как программисты?», могут лишь немногие студенты.

Иван Киркоров, RD, Mobile Lab Manager EPAM Systems составил шпаргалку по механизмам ООП для студентов, желающих попасть в мобильную лабораторию.

– Первый механизм ООП – абстракция. Лично я его считаю основным механизмом, который находится на более высоком уровне. Суть его в том, что на входе у нас бесконечно сложные объекты реального мира, а на выходе мы получаем упрощенную модель, с которой мы уже будем оперировать в программе. В принципе программа и есть эта модель. Модель строится путем выделения основных, важных свойств и поведения, и абстрагированием от всего остального. Таким образом, мы выделяем классы объектов.

Дальнейшие механизмы добавляют немаловажные детали в нашу модель (например, иерархию) и позволяют сделать программу более эффективной. Они работают уже на другом уровне, и их обычно рассматривают вместе: наследование, полиморфизм, инкапсуляция.

Второй механизм ООП – наследование. Он позволяет нам создавать иерархии в модели. То есть у нас может быть класс, который может иметь базовый набор свойств – это будет широкая абстракция. И мы будем создавать более узкие абстракции за счет того, что дополняем базовую абстракцию какими-то дополнительными свойствами или поведением. Иерархии сами по себе в системном программировании несут мало пользы. Вот создали мы иерархию – а зачем? Этот вопрос вводит студентов в тупик. Ответ прост: наследование помогает нам избавиться от повторного написания кода, позволяет переиспользовать код, выделяя общее поведение и формируя базовые абстракции, ведь при наследовании все поведение базового класса заимствуется и включается в наследник.

Третий механизм ООП (полиморфизм) дополняет наследование. Его суть: при создании иерархии наследования мы можем иметь несколько классов с одинаковыми методами и различной их реализацией. Таким образом, полиморфизм – это метод, позволяющий во время наследования переопределять (overriding) методы базового класса.

В полиморфизме лежит самая важная и мощная практическая польза ООП. Основная проблема реального программирования за рамками университета – это изменения. Изменение требований, исправление ошибок и новый функционал, которые нужно вносить в существующий код. Весь смысл существования ООП и различных паттернов лежит именно в задаче свести изменения в коде к минимуму и сделать этот процесс наименее опасным для работоспособности других участков кода. Именно полиморфизм лежит в основе множества этих механизмов. Полиморфизм дает нам очень важную вещь: мы получаем возможность писать наши программы в терминах абстракций, а подставлять готовые реализации (наследники) уже во время выполнения. Таким образом мы сможем избавиться от необходимости вносить изменения в алгоритм при исправлении деталей реализации и, наоборот, мы сможем менять общий алгоритм не затрагивая конкретных объектов.

Есть еще один вариант полиморфизма – это полиморфизм переопределения (overloading), когда в одном и том же классе у нас существует метод с одним и тем же именем, но, например, с разным количеством или типом параметров. Здесь польза в том, что мы визуально можем писать один и тот же метод для выполнения семантически эквивалентных задач. Например, Stream.Write(obj) метод может принимать параметром объекты разных типов, но нам не надо задумываться какой метод вызвать – это всегда будет метод Write(obj), хотя и реализации будут различаться.

Четвертый механизм ООП – инкапсуляция. Суть его в том, чтобы скрыть доступ к определенным элементам нашей программы – свойствам, полям или методам. Необходимость в нем возникает тогда, когда мы собираемся дать наш код кому-то еще – коллеге-разработчику в команде, заказчику или просто в виде библиотеки. Мы получаем задачу, сходную с задачей абстракции, ведь мы выделяем только те важные и нужные свойства и методы нашего объекта, с которыми будут работать другие разработчики, то есть выделяем публичный интерфейс и скрываем все остальное, как ненужные и небезопасные детали реализации.

Также существует и другая немаловажная сторона механизмов ООП – это «Как механизмы ООП реализованы в языке программирования?». Дать определение сути механизма, объяснить, какую пользу он приносит и пояснить, как он реализован в языке программирования – это и будет полный ответ на вопрос про ООП.

Итак, если говорить в рамках языков программирования, изучаемых в университетах:

1. Абстракция реализована в механизме создания классов и интерфейсов.

2. Наследование позволяет на основе одного класса создать другой, в некоторых языках разрешено множественное наследование, в некоторых – нет, и используется множественное наследование интерфейсов.

3. Полиморфизм реализован через определение виртуальных функций (в Java например, все функции виртуальные, а в C++ это не так).

4. Инкапсуляция обычно реализована при помощи модификаторов доступа private, protected, public и еще один на выбор.

Для тех, кто собирается заниматься мобильными разработками, Mobile Lab может стать отличным стартом. А для некоторых это успешное начало карьеры. К примеру, у учащихся мобильной лаборатории при компании EPAM Systems есть реальный шанс попасть на проект. Один из таких счастливчиков Александр Козорез рассказал о епамовской Mobile Lab:

– У нас была творческая атмосфера, вдохновляющая на собственные изобретения. Прямо в процессе обучения некоторые из нас придумали новые приложения. Я, например, создал трехмерный кубик с фотографиями, который вращается в зависимости от положения телефона, плюс туда анимацию добавил. А потом все спрашивали, как я это сделал. Я поделился, а народ на основе этого делал затем какие-то свои приложения… Кто-то просто просмотрщик фотографий, а кто-то – анимацию.

Случались и курьезные моменты. Мы смотрели пару видеоуроков на лекциях, и там у лектора были ошибки в коде. Это вызвало бурную реакцию и оживленные споры.

Было очень интересно, когда к нам в лабу пришли новые ребята. Они делали те же ошибки, что ранее допускали остальные. Тогда мы завели общую записную книжку, куда вносили все проблемы, с которыми сталкивались, и указывали, как их решали. Поэтому при возникновении вопросов тут же следовал ответный вопрос: «А ты смотрел в OneNote?»

А еще у нас были соревнования, кого позже охрана выгонит из офиса . Настолько было интересно, что не хотелось уходить.

В Mobile Lab я надолго не задержался – через полтора месяца меня забрали на продакшн. Это был отличный старт.

Того, что дается в стандартной университетской программе, недостаточно для практического применения в такой узкой области, как мобильные разработки. И именно привязка теории к тонкостям работы на практике, углубленное изучение некоторых тем в свете направленности на мобильные разработки – и есть основа программы, по которой занимаются слушатели в Mobile Lab. Поэтому если вы хотите разрабатывать приложения, стремитесь попасть в мобильную лабораторию.

Юлия ВАНСЛАВ

EPAM Systems приглашает разработчиков

MAC/iPhone разработчик

Android разработчик

Бесплатный iOS Basic Training

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *