Quantcast
Channel: Категорія [Статьи] — DOU
Viewing all 2429 articles
Browse latest View live

Автоматизация тестирования API, или Почему я решил выбрать Postman

$
0
0

Буквально несколько недель назад я принял волевое решение написать API тесты для нашей доски администратора новостного портала. Для решения этой задачи существует масса инструментов и способов, реализованных на различных языках.

Но для начала пара слов о себе. На данный момент я занимаю должность Automation QA в компании Genesis Media. Мы разрабатываем новостные сайты и редакционные системы для 4 стран Африки, а также Филиппин и Казахстана. И вот, в перерыве между поточными задачами, я решил, что не так уж и плохо автоматизировать наш API. Учитывая тот факт, что до меня этого никто не делал и придется все начинать с чистого листа, у меня были развязаны руки.

Какие варианты я рассматривал

В голову мне пришло три наиболее простых решения. Первое — втоматизировать все в тестовом фреймворке для Seleniumс использованием Java (я же автоматизатор все таки ;)). Второе - это использовать новомодный Cypress. Или третье — все-таки использовать узконаправленный инструмент по типу Postmanили SoupUI.

Первый вариант мне нравился меньше всего по причине сложности внедрения. На данный момент все настроено таким образом, что запуск требует целой кучи параметров на CI или локально. К тому же совмещать UI тесты (end-to-end) с API (integration) — не самая лучшая из моих идей. Ну и не буду лукавить со своими читателями — я давно уже не тестировал API с использованием Java и попросту не мог вспомнить всех подводных камней или хотя бы библиотек.

В пользу Cypress говорило то, что я вот только начал его использовать и держал руку на пульсе. Да и к тому же с его использованием уже была написана часть UI-тестов для этой админки. А кто использовал этот инструмент  - знает, как сильно в нем рекомендуют использовать API приложения для всего, что не является целью тестирования в конкретном тесте. Следовательно, у меня уже была часть готовых API запросов. Надо признать, что Cypress сделал все, чтобы работа с запросами не доставляла вам лишней головной боли.

Третий вариант выглядел наиболее простым и чего уж там — более желанным. С Postman, вероятно, работали все, кто хоть как-то связан с веб-разработкой, и в лишних представлениях он не нуждается. Я был не исключением, но то, чего мне ни разу не удавалось, так это не просто протестировать конкретные endpoints, но и написать тесты на его основе.

Для аргументированного решения в выборе инструмента требуется что-то немного большее, чем просто желание (глубокий вздох разочарования). Для сравнения я решил написать пару простых запросов, логин и создание статьи, в Cypress и Postman c одинаковыми проверками. Это могло дать возможность оценить сложность в написании запросов, добавлении тестов к ним и в результате понять, какой из вариантов будет удобнее поддерживать в дальнейшем. Ну и не стоит упускать из виду то, что я смогу запустить эти самые тесты и банально посмотреть, что выполняется быстрее.

Cypress

Я начал с того, что было уже готово  -  запросов в Cypress. Оставалось лишь убрать лишнее из кода и добавить простую проверку статуса. Итак, вот что у меня получилось для запроса регистрации и создания задачи:

Two basic API tests in Cypress

На скриншоте выше мы можем наблюдать запрос на логин и создание задачи с минимальным набором необходимых полей (названия в json схеме такие странные из-за NDA и отсутствия фантазии). После каждого запроса мы сравниваем полученный статус код с ожидаемым. Все довольно просто даже для меня  -  человека, не так давно начавшего свое знакомство с JavaScript. Cypress позволяет выносить общие переменные в файл cypress.json, что делает поддержку и параметризацию тестов весьма удобной. Но что же насчет скорости выполнения?

Test results in Cypress runner

На этом скриншоте вы можете увидеть Cypress runner и время, которое ушло на выполнение двух тестов  - 1.87 секунды. Не такой уж и плохой результат. Но загвоздка кроется в том, что вся инфраструктура уже поднята. Если же запустить тесты из консоли, так как они и должны запускаться в CI/CD, то только на запуск самого Cypress уходит более десяти секунд. А это уже не так приятно. И пускай у нас будет несколько больше запросов, чем сейчас, но поднимать столь немалый клиент для такой простой задачи не кажется уже столь целесообразным.

Итого, мы имеем следующие плюсы Cypress:

  1. Простой синтаксис при написании тестов, в котором сможет за несколько дней разобраться даже новичок.
  2. Готовая инфраструктура с возможностью простого параметризированного запуска.
  3. Наличие интерактивного ранера, где можно посмотреть все ошибки прямо в консоли.

А что же из минусов:

  1. Очень долгий запуск.
  2. Необходимость писать код запросов (пусть он и не сложный).

Не так уж и много.

Postman

Теперь давайте посмотрим, как пойдет процесс с Postman. И вот вам сразу же скриншот запроса:

Request view in Postman

Здесь все достаточно банально, в особенности для тех, кто уже использовал Postman в целях тестирования API. Просто записываем все параметры и их значения в таблицу, добавляем к ним описания по необходимости. Выносим url в переменную окруженияи с ее помощью прописываем endpoint. А во вкладке «Tests» выбираем сниппет для проверки статуса ответа. Единственное, с чем могут быть проблемы у начинающих, — это как передать токен из ответа логина в следующие запросы. Но это решается снова же через запись переменной в окружение. А код для этого можно взять в сниппете с говорящим названием «Set environment variable».

Окей, запускаю тесты в качестве коллекции из самого Postman и получаю следующую картину:

API test run in Postman runner

Результат —  несколько меньше двух секундна два запроса. Примерно тот же результат (на самом деле он должен был быть лучше, но интернет в новом офисе на момент написания статьи не оставил мне шансов). Но вот что мы увидим, если запустим все это из консоли?

Для решения этой задачи существует npm пакет Newman. Что ж, устанавливаем, читаем минимальную документацию и запускаем. Для этого экспортируем нашу коллекцию с запросами и тестами в них, а также не забываем экспортировать окружение, как обычное, так и глобальное, если его используем. Команда для запуска проста:

newman run имя_файла_коллекции -e имя_файла_окружения -g имя_файла_глобального_окружения

Newman run results in CLI

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

И после давайте быстро поговорим о плюсах и минусах (а то мне еще выводы писать, а вы и так уже поди устали все это читать).

Плюсы:

  1. Инструмент, с которым знакомы многие, и он крайне прост в обращении.
  2. Запросы пишутся быстро, и для этого не требуется никакого кода, а следовательно ими смогут воспользоваться все без исключения.
  3. Крайне быстрый старт тестов.
  4. Встроенная возможность шеринга коллекций внутри рабочей команды для платных аккаунтов.
  5. Генерация документации по созданным запросам и сохраненным ответам.

Минусы:

  1. При написании параметров запроса в форме form-data по-прежнему встречаются досадные неприятности, вроде невозможности передачи булевого значения. Они просто приводятся к строке, хотя числовые значения работают нормально.
  2. Примерно такая же проблема со вложенными параметрами.

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

Что же мы имеем в сухом остатке

Написание запросов в Postman проходит проще, быстрее и выглядит читабельнее. Что касается выполнения самих запросов — то тут, скорее всего, разница не существенна. Но вот что точно можно сказать, так это то, что на запуск тестов с использованием Newman не нужно дополнительное время, как в случае с Cypress.

К примеру, на данный момент наша коллекция включает в себя 60 запросов и более 100 проверок, но на их выполнение локально уходит в среднем 15 секунд. На удаленном сервере же эта цифра еще меньше и порой достигает 9 секунд, что сопоставимо со временем запуска одного Cypress.

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

После проведенного исследования я остановил свой выбор на Postman, так как нам необходимо будет запускать эти тесты достаточно часто, и время будет весьма критичным. К тому же возможность сгенерировать документацию сыграла не последнюю роль, так как, по сути, детального описания, да еще и с примерами в едином месте у нас до сих пор не существовало.

Выводы

В этой статье я хотел передать свой опыт в выборе инструмента, но не в коей мере не настаиваю на том, что он единственно правильный. Ваш выбор может зависеть от ваших задач, потребностей и ограничений и может отличаться от текущего. В следующий раз я расскажу более подробно о самом тестировании в Postman и в частности о такой библиотеке, как tiny-json-validator, которая уже входит в набор подключенных библиотек Postman и позволяет проверять схему ответа и типы данных в нем. На этом желаю вам легких и правильных решений :)


Логування Android-застосунку з XLogger

$
0
0

Разом з іншими Android-інженерами в CloudMade ми вирішили покращити логування в нашому Android-застосунку. Визначили шари, які хотіли б логувати, а потім створили різні теги для кожного шару. Було важливо логувати все, що ми встановлюємо в Android Data Binding ObservableField (примітиви, такі як ObservableInt, ObservableFloat та ObservableField ).

Що таке Android Data Binding

Android Data Binding дає спосіб пов’язати інтерфейс користувача з бізнес-логікою, що дозволяє користувачеві оновлювати значення інтерфейсу без ручного втручання. Це зменшує кількість коду в бізнес-логіці для синхронізації інтерфейсу, коли надходять нові дані. Data binding — це один з компонентів архітектури Android, запропонований Google.

Вступ

Логування є невід’ємною частиною розробки програмного забезпечення. Воно надає розробникам та командам підтримки можливість побачити, як дійсно працює код програми.

Багато помилок, недоліків продуктивності та інших проблем можна уникнути, написавши логи. Логи можуть також надати важливу інформацію про використання вашого програмного забезпечення. Логи допомагають стежити за фактичними даними, з якими працює ваш код, та стежити за різними логічними потоками у початковому коді. Але, якщо це зробити погано, це може призвести до великої кількості непотрібної інформації та суттєво знизити читабельність вихідного коду.

Визначення проблеми

У нас є ViewModel з ObservableField, і ми хотіли логувати встановлення кожного нового значення в нього:

public class ViewModelMainActivity {

   public android.databinding.ObservableField<String> messageObservable = new ObservableField<>();

}

Однією з основних проблем була необхідність не вносити багато змін у клієнтський код. Ми не хотіли створювати обгортки для кожного ObservableField, такі як ObservableInt, ObservableFloat, ObservableField тощо). Ми також не хотіли перевизначати в них метод set() і ініціалізувати ним кожен ObservableField, який уже мали в програмах в кожній ViewModel. Отже, ми вирішили створити власну бібліотеку, яка зробить це за нас — XLogger!

Налаштування бібліотеки

Щоб використовувати XLogger, додайте залежність до build.gradle вашого модуля і синхронізуйте проект.

implementation 'com.cloudmade.xlogger:xlogger:1.1.0'
annotationProcessor 'com.cloudmade.xlogger:xlogger:1.1.0'

Звичайно, якщо ви використовуєте Kotlin, замініть annotationProcessor на kapt (і не забудьте apply plugin: ‘kotlin-kapt').

Використання

Якщо ви хочете логувати встановлення нового значення в ObservableField, ви повинні анотувати його @Loggable та викликати метод XLogger.init(), передаючи екземпляр класу як його аргумент.

public class ViewModelMainActivity {

   @Loggable
   public android.databinding.ObservableField<String> messageObservable = new android.databinding.ObservableField<>();

   public ViewModelMainActivity() {
       *.XLogger.init(this);
   }
}

Деталі реалізації

Під час компіляції AnnotationProcessor знаходить ObservableFields, анотовані @Loggable, та генерує клас з назвою «EnclosingClassSimpleName + Initializer» зі статичним методом initXLogger().

У статичному методі initXLogger()створюється новий відповідний екземпляр генерованої обгортки (ObservableInt -> ObservableIntWrapper, ObservableFloat -> ObservableFloatWrapper і т. д.) і встановлюється замість оригінального ObservableField. Ця обгортка розширює класс ObservableField і перевизначає метод set(), який фактично логує встановлення нового значення.

public static void initXLogger(ViewModelMainActivity enclosingClass) {
   *.generated.ObservableFieldWrapper<java.lang.String> newFieldMessageObservable = new *.generated.ObservableFieldWrapper(enclosingClass.messageObservable.get(), "messageObservable", enclosingClass.getClass().getSimpleName());
   enclosingClass.messageObservable = newFieldMessageObservable;
}

Щоб не викликати методи зі згенерованого класу в коді клієнта, ми створили XLoggerInitializerFactory, який створюється під час компіляції та XLogger.init(), що доступний перед компіляцією. XLoggerInitializerFactory виступає як міст між згенерованим «EnclosingClassSimpleName + Initializer» зі статичним методом initXLogger() і XLogger.init().

public class XLogger {
    public static void init(Object enclosingClass) {
       try {
           Class.forName("*.XLoggerInitializerFactory").getMethod("init", enclosingClass.getClass())
                   .invoke(null, enclosingClass);
       } catch (Exception e) {
           System.out.println(e.getMessage());
       }
    }
}

public class XLoggerInitializerFactory {
   public static void init(ViewModelMainActivity enclosingClass) {
       ViewModelMainActivityInitializer.initXLogger(enclosingClass);
   }
}

Після анотування ObservableField за допомогою @Loggable і виклику методу XLogger.init(), ви зможете побачити рядок в logcat після того, як встановите нове значення в нього.

com.cloudmade.xlogger D/UI: value Hello World! was set into ViewModelMainActivity.messageObservable

Наразі підтримуються ObservableFields:

  • ObservableBoolean
  • ObservableByte
  • ObservableChar
  • ObservableDouble
  • ObservableFloat
  • ObservableInt
  • ObservableLong
  • ObservableShort
  • ObservableField<T>

Висновок

Ви можете логувати встановлення значення в ObservableField у вашому застосунку, не змінюючи значною мірою початковий код. На GitHubє приклад застосунку та початковий код бібліотеки.


Цю статтю англійською мовою ви можете прочитати тут.

DIY. Подводный дрон. История одного сумасшествия

$
0
0

В этом материале описано проектирование, разработка и сборка прототипа подводного дрона на базе Raspberry PI и управление им с Android-смартфона. Статья может пригодиться как новичкам (изложены азы управления электродвигателями, диодами, камерами, гироскопом), так и опытным инженерам (они могут поглумиться над исполнением и решениями :)). В общем, если вы любитель сделать чего-то электронного своими руками — милости прошу к прочтению.

Я пересмотрел много передач по Discovery про изобретателей, и однажды захотелось сделать самому что-то интересное, да чтобы во все тяжкие: электромоторы, контроллеры, управление, камера. Купив много полезных (и не очень) девайсов, я стал думать, какой же проект будет прикольно сделать. Пришел к выводу, что летающих дронов хоть чем-то жуй, ездящих тоже, а вот с водой какой-то косяк (ха-ха, да я «немного» ошибался).

После серфинга в интернете я нашел довольно много решений, но большинство из них либо еще не вышли в массы и находились в состоянии прототипов, либо стоили некисло дорого (3++к енотов). Если интересно, то можете глянуть пару хороших здесь.

Забегая наперед, скажу, что у меня вышел рабочий прототип, который способен плавать на нескольких метрах глубины, со всеми плюсами и минусами. Сложно сказать, что в результате я получил продукт, которым можно легко управлять и что он сейчас готов сделать что-то большее, чем унять инженерный азарт. Но все узлы у него работают исправно, и главное, что мои ошибки и наработки могут помочь кому-то сделать что-то значимое (даже если для только него самого).

Так как работы было проделано действительно много, можно разделить все по следующим темам:

В порядке бреда

Скажу сразу: я любитель, и большинство из того, что я делал, было сделано методом научного тыка, ибо собрать что-то и протестить на-а-амного веселее, чем просчитать и понять, что в теории оно не работает. Вариантов конструкции и идей было немалое количество, и были откровенно «глупые» реализации (одна из них будет описана чисто по приколу далее).

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

Как обычно, в начале приходят не самые умные идеи (а думать дважды — не мой подход), и я попытался поэкспериментировать с передачей момента магнитами. Выбрал простую конструкцию и собрал такой вот «высокотехнологичный» девайс:

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

Несмотря на кривизну, после запуска макета можно смело прокричать: «И все-таки она вертится» ©. Момент передается, детали вращаются, но за счет притяжения сильно возрастает трение. Следующий минус, помимо десятков остальных, в том что если стопнуть воображаемый винт, то магниты теряют «контакт» и второй раз уже сцепиться не могут из-за разности скоростей.

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

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

Итак, перейдем к более серьезным вещам.

Выбор компонентов

Далее список того, что было использовано при создании аппарата.

Материнка

В качестве контроллера однозначно была выбрана «малинка» (Raspberry PI 3B). Arduino-подобные платы для такой комплексной задачи сразу отпали, так как надо контролировать минимум 4 двигателя, диоды, гироскоп, отправлять поток видео с камеры и при этом получать и обрабатывать команды с устройств управления.

Малина идет со встроенным Wi-Fi и Ethernet под RJ-45, что несомненно позволит произвести все эти операции.

Канал связи

Да, да — витая пара

С передачей данных под водой всегда было туго. Вода служит отличным экраном, и, следовательно, про всякую беспроводку можно позабыть (любителям «а как же подводные лодки» — просьба ознакомиться с размером антенны для реализации и стоимостью технологий, сложностью и шириной канала пропускания). Так что иного выхода не оставалось. Был чеклист, который успешно пройден:

  1. Возможность передачи под водой.
  2. Скорость такой передачи.
  3. Универсальность (не надо изобретать велосипед ни на распберри, ни на передатчике).

Есть специальный кабель для воды с нулевой плавучестью и прочими прелестями, но купить 100 метров отдельно нельзя, а тратить 500+ баксов на катушку я не захотел.

Передатчик «на суше»

Мини-роутер NEXX

Было 3 основных варианта передачи.

  1. Попробовать вывести проводом Wi-Fi антенну из воды на сушу (вместо витой пары кабель одножильный), но тут много было спорных моментов.
  2. Построить мост на двух Raspberry как клиент-сервер (было бы уместно, но дороже и геморней).
  3. Взять готовый мини-роутер и соединить витой парой с малиной. Этот вариант был взят за основу, так как он самый надежный, быстрый и дешевый. Как показала практика, это неплохой вариант.

Электродвигатель

N2830/2212 1000KV
После испытания 3 разных моторов выбор пал именно на эту модель. Почему? Да все просто — он достаточно мощный, у него есть вторая ось и можно повесить 2 винта. Все двигатели нормально работают в воде до первого попадания водорослей или песка. Если брать высокооборотистые и менее мощные — вода не их стихия. Более дешевые варианты тоже не оправдали надежд. В общем цена/качество.

Плата управления (ESC)

Afro ESC (30A)
Тоже довольно все просто. Ее можно запрограммировать на переключение forward/reverse, и мощности 30 ампер должно хватить на испытуемые моторы. Плюс ко всему, их не надо было ждать месяц-другой из Китая (но, конечно же, есть одно но:).

Afro ESC USB Программатор

Программатордля наших ESC. С помощью этого девайса можно залить нужную прошивку. Собственно говоря, это и есть «но». Ждать пришлось полтора месяца.

Светодиод

CREE XHP50
Эта модель способна выжигать все живое световым потоком. Такая цель и была.

Импульсный драйвер для светодиодов

7-30В 3А
Отлично подходит для наших целей — держит два вышеуказанных светодиода, а главное — подключается к малинке и позволяет плавно регулировать яркость диодов.

Гироскоп

MPU-6050
Трехосевой гироскоп/акселерометр, который будет отправлять данные на Raspberry о местоположении в пространстве. Сильно они не пригодились, но данные были :)

Камера

RPi Camera F
Или любая другая нативная камера Raspberry PI. Главное условие — чтобы она коннектилась через шлейф, а не была USB. С видеостримингом всегда были проблемы (задержки, кодинг), точнее, это не проблемы, а «надо убить много времени, чтобы завелось».

Джойстик

iPega PG-9055 — помощник управления, если у вас руки мокрые, а они такими будут, можно включить управление данным девайсом.

Батарея

Turnigy 2200mAh 3S 30C
Снова был ряд тестов и выбор. Батареи 18650 не подошли, ибо у контроллера ток разряда был 25А, чего не хватало всей системе на пиках (да, пару батарей умерло смертью храбрых после использования). Можно было попробовать соорудить на 6 батареях и получить 50А, но это сложнее. Кабелем такую мощность постоянного(!!) тока передать нереально (помним про дистанцию 100 м). Так что взял Li-Po,которая шикарно справилась со своей задачей и поместилась в корпус.

И остальное

Программирование ESC

К сожалению, Afro ESC из коробки имеет только одно направление вращения, поэтому надо «шить». Самая засада в том, что надо ждать линкер из Китая, остальное детали. Предположим, что он у вас уже есть :)

Совет, который я встретил на просторах интернета, — купить USB хаб, чтобы в случае короткого замыкания сгорел он, а не ваш дорогой ноут. Но каждый волен выбирать свою судьбу :)

Качаем файлпрошивки на диск и программу для прошивки KKMulticopter Flashtool.

Теперь важно не натупить с подключением проводов, ибо последствия могут быть печальные для какого-то устройства. Краткий ликбез по ESC по проводам:

  1. Пара красный-черный толстых кабелей с бананом «папой» на конце. Силовое питание двигателя. Я подавал 12 вольт и ампер — сколько просило :)
    1. Красный — ВХОД плюс.
    2. Черный — ВХОД минус.
  2. Толстые провода красный-черный-желтый — питание на двигатель. Пока мы их не трогаем, но в дальнейшем будем соединять на аналогичные «цвета» электродвигателя.
  3. Тонкие провода управления и питания.
    1. Желтый — это непосредственно кабель, по которому передаем сигнал управления.
    2. Красный — выход 5в (в целом я его не использовал). Их есть несколько разных типов, если захотите — читайте.
    3. Черный — минус.

Подключаем тонкие проводак Linker’у: минус к минусу (черные) и сигнал на сигнал (желтые). Тонкий красный не трогаем и не подключаем. Далее даем питание на плату (черный и красный входы). Лично я использовал этот импульсный блок, но подойдет любой с похожими характеристиками.

Открываем программу прошивки и выбираем:

Programmer: Turnigy USB Linker or Afro USB Linker (зависит о того, что у вас есть).
Port: собственно тот USB, куда включили. Благо, выбор там не велик.
Baud rate: 9600.
Controller: atmega 8-based brushless ESC (8kB flash).

И выбираем уже скачанный файл прошивки. Жмем кнопку «Run» и молимся :) Скоро прошивка успешно зальется на ESC, и все будет готово. Весь процесс можете посмотреть здесь:

Из 8-мипрограммируемых мною ESC сдох только один :)

Настройка Raspberry PI сервера

Теперь перейдем к настройке Raspberry PI.

  1. Качаем последний дистрибутив системы тут.
  2. Скачиваеми устанавливаем Etcher.
  3. Вставляем пустую microSD флешку в картридер (тут уже сами думайте, где их взять).
  4. Открываем Etcher и выбираем zip или img Raspbian, который скачали на первом шаге.
  5. Нажимаем ’Flash!’
  6. Ждем окончания установки и извлекаем microSD.
  7. Вставляем флешку в наш Raspberry.

Для тестов нам будет достаточно «малинки», телефона на базе Android и любого Wi-Fi роутера с доступом к интернет. Если вы любитель консольного общения с устройствами, то вам ничего объяснять и не надо, сами справитесь. Для более ленивых — подключаем монитор, клавиатуру (HDMI и USB порты работают на «ура» из коробки), питание от какого-то USB-microUSB и грузим систему. Важно помнить, что на все двигатели подаем 12V, а на Raspberry — 5V. Также важно, если выключить резко питание на малину — может побиться операционная система (связано это с памятью самого устройства). Так что лучше подумать о бесперебойности.

Подключаем к сети Wi-Fi, и в целом система готова. Я бы советовал настроить ваш роутер и дать static IP адресс для малины, ибо подключаться будем именно по IP.

Если вы уже работали с Linux, то дальнейшие действия вам будут не дики. Самым простым способом создать серверное приложение будет NodeJS. Разобраться, что да как не составляет труда, так как в Гугле еще никого не банили. Открываем терминал и поехали:

sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install -y nodejs

И проверочно запускаем node -v, дабы точно понять, что все установилось.

Можно сразу слить весь проект с репозитория и запустить (ссылка будет в конце статьи), но разве мы здесь ради этого собрались? :) Теперь создаем папку нашего проекта mkdir ~/droneи переходим в нее cd ~/droneи инициализируем проект: npm init. Установщик спросит название и индекс файл — укажем app.js.

После инициализации ставим express: npm install express. И создаем файл app.js: touch app.js.

Для тех, кто работает с GUI (моник и клава), советую поставить Atom. В нем очень даже удобно писать js-код. Для остальных — Vim, Nano, MCEdit (и сами знаете).

Далее добавляем код в app.js и сохраняем файл:

'use strict';
const express = require('express');
const net = require('net');
const app = express();

const server = net.createServer((socket) => {
  socket.on('data', (data) => {
    var command = data.toString();
  	console.log(err);
  });
}).on('error', (err) => {
  console.log(err);
  // handle errors here
  // throw err;
});
server.timeout = 0;
// grab an arbitrary unused port.
server.listen(49655, () => {
  console.log('opened server on', server.address());
});

И запускаем из консоли node app.js в папке(!!) drone. Теперь у вас крутится сервер, который слушает подключения на 49655 порт. Запомним: наш локальный IP (ifconfigв консоли) и все подключения будем производить на IP:49655.

Сейчас давайте усложнять конструкции :)

Управление электродвигателями с Raspberry PI

Итак, начинаем самую веселую часть нашей работы — пишем управление на Raspberry PI. Идем в папку проекта ~/drone и устанавливаем PiGpioбиблиотеку:

sudo apt-get update
sudo apt-get install pigpio
npm install pigpio

Теперь небольшой ликбез по управлению ESC. Нам надо передать некую частоту на управляемый провод (желтый тонкий) (см. раздел «Программирование ESC»). Прошивка afro_nfet_besc30_r1 имеет диапазон 1100-1900,где значение 1500 — состояние спокойствия, 1100 макс реверс, 1900 макс форвард.

Создаем файлик engines.jsи в него добавляем JS-код:

//Константа состояния спокойствия
const SERVO_ZERO = 1500;
//Подключаем библиотеку 'pigpio'
const Gpio = require('pigpio').Gpio;

//Определяем наши 4 двигателя по пинам расбперри (пиновка будет объяснена чуть ниже)
const servo1 = new Gpio(22, {mode: Gpio.OUTPUT});
const servo2 = new Gpio(10, {mode: Gpio.OUTPUT});

const servo3 = new Gpio(9, {mode: Gpio.OUTPUT});
const servo4 = new Gpio(27, {mode: Gpio.OUTPUT});

//Устанавливаем каждой плате состояние “спокойствия”
servo1.servoWrite(SERVO_ZERO);
servo2.servoWrite(SERVO_ZERO);
servo3.servoWrite(SERVO_ZERO);
servo4.servoWrite(SERVO_ZERO);

//По вызову этого метода пишем значение в наш ESC
module.exports.engines = {
  leftEsc: (value) => {
    servo1.servoWrite(value);
  },
  rightEsc: (value) => {
    servo2.servoWrite(value);
  },
  topLeftEsc: (value) => {
    servo3.servoWrite(value);
  },
  topRightEsc: (value) => {
    servo4.servoWrite(value);
  }
}

Дабы использовать этот код, пишем в app.js:

const engines = require('./engines.js').engines;
engines.leftEsc(*VALUE[1100;1900]*);

Собственно говоря, servo1.servoWrite() — и есть магическое управление. Подаем 1100 — двигатель крутится в реверсном направлении. Подаем 1900 — max forward. А вот распиновка нашей малины:

Если вкратце, то мы используем оранжевые GPIO. Одна пара GPIO 10 — GPIO 22, вторая GPIO 9 и GPIO 27 (логичнее было бы использовать 27;22 10;9, но при пайке не учел, и пришлось поменять). Если брать по порядочным числам (указаны серым), то это 13;15 и 19;21 контакты. На каждый из них подключаем желтые провода из ESC, а минус же объединяем в один GND, к примеру 39 контакт.

Осталось подключить остальное. Коннектим провода питания (красный и черный) Afro ESC к отдельному блоку питания(12v), подключаем моторы к желтый-красный-черный толстым проводам и уже можем играться. Например, допилить код и по интервалу подавать разные сигналы на пины. Небольшое видео, правда, там управление осуществляется с Android, но это опишу немного позже:

Гироскоп

Подключаем:
VCC к пину 1 (3.3V PWR)
GND к любому минусу
SCL к пину 5 (GPIO 3)
SDA к пину 3 (GPIO 2)

Подключение не сложное, а программно еще проще — хорошие люди сделали все до нас. На помощь спешат библиотеки i2c-busи i2c-mpu6050.

Устанавливаем в проект:

npm install i2c-bus
npm install i2c-mpu6050

Создаем файл gyroscope.jsи добавляем:

const i2c = require('i2c-bus');
const MPU6050 = require('i2c-mpu6050');

const address = 0x68;
const i2c1 = i2c.openSync(1);
const sensor = new MPU6050(i2c1, address);

var reading = false;
var sensorData = {};

module.exports.gyroscope = {
  getData : () => {
    return JSON.stringify(sensorData);
  },
  readRotation : () => {
    sensor.readRotation(function (err, rot) {
      if (err) {
        console.log(e);
        return;
      }
      console.log(rot);
    });
  },
  readSensor : () => {
  	if (!reading) {
  		reading = true;
  	}
  	sensor.read(function (err, data) {
      reading = false;
  		if (err) {
  			console.log(err);
  		} else {
        sensorData = data;
  		}
  	});
  }
}

Запускаем метод readSensor с какой-то периодичностью и забираем данные последнего опроса из getData. Там будет много составляющих (x,y,z,a) о положении. Разобраться что к чему, честно, не успел. Были важнее задачи с управлением. Знаю, решение такое себе, но оно имело чисто ознакомительный характер, поэтому и актуальность результата не очень важна.

Raspberry PI Flashlight control

Потихоньку продолжаем наращивать функционал и на этот раз займемся светодиодами. У нас есть два XHP-50 диода и драйвер-контроля (см. раздел «Выбор компонентов»). Они очень хорошо греются, поэтому без радиаторов использовать их никому не рекомендую. На том же сайте, благо, они есть. Главное, не напутать с размером.

Итак, прикручиваем диоды на радиатор, паяем минус одного к плюсу другого (на них есть маркировка) и припаиваем минусовой и плюсовой провода:

Далее смотрим на наш контроллер и тоже паяем.

Питание — 12V плюс и минус, можно запитаться тем же, чем и питаем двигатели. Выводы на диод соединяем с ранее припаянными соответственно L- к минусу, L+ к плюсу. Аналоговый контакт (А) в данной реализации не нужен, оставляем пустым.

Теперь нас интересует цифровой вход (D) и земля (G). Коннектим цифру (D) на GPIO 11 и землю на многострадальный GND (любой, можно один). Теперь возвращаемся к нашей Raspberry PI, создаем файлик light.js и добавляем следующее:

//Наша знакомая библиотека
const Gpio = require('pigpio').Gpio;
//Создаем Gpio для нашего пина
const light = new Gpio(11, {mode: Gpio.OUTPUT});
// Значение можно ставить от 0 до 255 (из доков по драйверу светодиода)
const LIGHT_MIN = 0;
const LIGHT_MAX = 255;
//Нужно будет для вычислений
const LIGHT_DIAPASONE = LIGHT_MAX - LIGHT_MIN;
//Выключаем светодиод изначально (система стартует с включенными на максимум светодиодами)
light.pwmWrite(LIGHT_MIN);
//Экспортируем методы работы
module.exports.light = {
  on: () => {
    //Передаем на драйвер значение 255
light.pwmWrite(LIGHT_MAX);
  },
  off: () => {
//Передаем на драйвер значение 0
    light.pwmWrite(LIGHT_MIN);
  },
//Здесь принимаем значение в процентах от 0 до 100
  set: (val) => {
    if(val < 0 || val > 100) return;
//Вычисляем значение исходя из процента
    val = Math.round(LIGHT_MIN + LIGHT_DIAPASONE / 100 * val);
    console.log("Light:"+val);
//Передаем на драйвер значение
    light.pwmWrite(val);
  }
}

Запустить можем из нашего app.jsтак же, как и engines:

const light = require('./light.js').light;
light.on();
light.off();
light.set(50);

Видеодемонстрация готового решения:

Если понять главную идею, то все предельно просто: подключил, подал сигнал, смотришь результат. Грубо говоря, это весь функционал контроля, который нам нужен для активизации элементов. Но все это бесполезно без какого-то контроллера, который и будет включать/регулировать все это, а это говорит о том, что надо построить коммуникацию между сервером и клиентом. Значит придумаем протокол :)

Протокол общения

Как вы поняли из первоначальной настройки Raspberry PI, общение будет произведено по сокет подключению. И нужен какой-то набор команд, который будет захардкожен на сервере и клиенте. Так как я сам себе д’артаньян, то решил использовать свой формат, ибо варианты, которые есть, не совсем подходят по критерию вес/читаемость. Строим, основываясь на базе модели управления, а это телефон с Android на борту.

Вот приблизительно и сама модель (программа будет описана чуть ниже). Экран разделен на две части. Левая отвечает за горизонтальную плоскость (вперед и назад), правая — за вертикальную.
Ставите палец в какой-то области — это считается точкой отсчета и контроля парой двигателей, но при этом это точка спокойствия.

Если ведете его вертикально вверх — потихоньку повышается скорость вращения обоих двигателей в прямом направлении с мощностью от 0 до максимума (зависит от расстояния от точки касания до текущей).

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

Если вправо: левый крутится в прямом, правый в реверсном.

То есть по факту нам нужно знать угол отклонения от точки касания (где верх = 90, низ — 90, право 0, лево 180) и коэффициент скорости — удаленность пальца от точки касания (от 0 до 100). Конечные команды выглядит так:

C:L;A:45;V:35;
C:R;A:0;V:100;
C:LIGHT;V:50;

С — любая команда начинается с этой буквы (command);

:— разделитель ключ-значения;

;— разделитель пар ключ-значение;

L — говорит, что нажатие было в левой части экрана;

R — соответственно в правой;

LIGHT — внезапно, свет :)

A — ANGLE угол отклонения;

V — value значение чего-то.

То есть первая команда говорит: «Горизонтальна пара двигателей, направление 45 градусов (левый на максимуме (но максимум — это 35%, исходя из V), правый стоит), со скоростью вращения 35% от максимума».

Вторая соответственно: «Вертикальная пара двигателей, направление 0 градусов (левый на максимуме, правый на максимальном реверсе), с максимальной скоростью вращения». Третья: «Включить свет на 50% яркости».

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

Приложение на Android

Наконец-то мы «доехали» до создания контроллера для всего этого. В целом, общение состоит из «нажал на что-то на экране — передал значение на сервер». Вкратце пройдемся по базовому приложению. Здесь нет ничего необычного и сверхсложного, поэтому весь код выкладывать не буду. При желании зайдете на репозиторий и посмотрите. Также хочу отметить, что все новомодные паттерны MVVM, MVP, VIPER и т. д. пошли лесом, ибо мне надо было рабочее приложение в минимальные сроки, а не выпендриваться. Юайка простая, так что делается максимально просто.

Первым делом создадим активность с вьюхами отображения состояния.

Лаяутбудет следующий:

  1. Слой отображения видео (плеер инкапсулирован во фрагмент).
  2. Слой JoystickView — кастомная вьюха, в которой переопределен метод dispatchTouchEvent и в нем обрабатываем нажатие и перемещение пальцев по экрану. Она же рисует UI-линии от нажатия до текущего состояния. Обязательный аспект — поддержка мультитача, так как управление осуществляется двумя пальцами.
  3. Слой с TextView текущей температуры Raspberry PI (если что-то пошло не так и она начинает греться — можно прекратить использование раньше, чем она выключится/сгорит). Благо, такого не было.
  4. Слой отображения данных с гироскопа. Набор TextView в парах label-значение. Выводит «сырые данные» с гироскопа. Планировалось их обрабатывать, но времени не хватило для разбора всего и изобретения крутого отображения.
  5. Слой с SeekBar — управление светодиодом, простой элемент, при перетягивании которого меняется значение от 0 до 100.

Видео Stream

Тут было проделано достаточно много работы для подбора необходимых способов стриминга.

HLS сразу отпал, так как задержка была порядка 10 секунд. При желании можно было добиться 5, но это все равно далеко не то, что надо. В управлении крайне необходимо передать видео с минимальной задержкой. Но передачу организовать не сложно, что со стороны Raspberry, что отображение с Android.

RTMP уже будет потяжелее. Проблема в том, что не было особо простого варианта реализации на Android (на момент конца 2017 года). Есть платные варианты, с которыми тоже повозиться, есть многострадальный VLC, который надо компилить с C++ и настраивать, есть уже собранный VLC как библиотека, который тоже из коробки не хотел проигрывать. Если прибавить ко всему, что это было как хобби и делалось в вечернее послерабочее время, когда голова не сильно свежая и времени ±2 часа, то эти варианты я отбросил.

Зато нашел очень даже рабочее решение, которое подходило по моим параметрам. RPi Camera Viewer for Android — решение, которое получает Raw H.264 поток с камеры и отображает на TextureView c использованием нативного MediaCodec. Если честно, то я до конца не раскрутил всю логику отображения, но собрал и чуть модифицировал под себя для использования. Собственно, главным со стороны Android выступает DecoderThread. Он коннектится по IP и порту, декодит поток и отдает в Surface, а в случае обрыва или ошибки идет рекконект каждые 2 секунды.

Со стороны Raspberry команда запуска потока будет следующая:

raspivid -t 0 -w 1280 -h 720 -hf -ih -fps 10 -o - | nc -k -l 2222

Raspivid — команда, которая осуществляет «захват» видео с подключенной камеры (но не USB, а именно подключенной шлейфом). Параметры выбирал методом «научного» тыка. Качество 1280×720, частота кадров 10fps. Безумно мало, но минимальная задержка.

И весь поток, который транслируется с камеры передается без изменений командой Netcatна 2222 порт.

Приложение на Android коннектится к нему и уже обрабатывает видео, отображая на экране.
Неделю вечеров пришлось потратить на поиск и тестирование таких простых решений, так как общение с Raspberry для меня было в новизну, как и стриминг с Unix-системы.

Управление с экрана и джойстиком

Как уже было сказано ранее, JoystickView передает угол и значение касания экрана на сокет в виде команды типа C:L;A:45;V:35;

Есть потокподключения к сокету (с реконнектами, колбеками и прочим), в котором находится очередь команд. Циклом выбирает их и отправляет на сервер.

В помощь экранному управлению допилил управление джойстиком.

Данный девайс коннектится по Bluetooth и работает как клавиатура. Следовательно, все данные обрабатываются MainActivity методами onKeyDownи onGenericMotionEvent.

Тест управления:

Вроде ничего важного со стороны Android не забыл, если что-то не раскрыл — пишите, объясню, допишу.

Сборка и тестирование конструкций

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

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

Вот такой адок получился в итоге:

Был забит болт на потери при передаче (кабеля было 10 метров) и на основные косяки такого решения. Потому основная цель была посмотреть:

  1. Можно ли жить с 4-мядвижками?
  2. Можно ли управлять с телефона?
  3. Будет ли затекать вода в коробку?

Но я упустил один важный момент, о котором Серега меня предупреждал. После теста в ванной все эти контакты надо было хорошенько просушить, ибо они — самое слабое звено. А я забил и получил в итоге комбо из 48 мест(!!!) соединения, которые могут (а если могут — обязательно будут) терять контакт.

Здесь как на всех мемасиках ожидание-реальность.

Тест в ванной:

Его сильно кренит из-за проводов, но он способен перемещаться. Ну и чутка перегружен грузами, так как коробка пустая — не рассчитал. А вот следующий тест в «поле» оказался еще хуже:

Двигатели и контакты чуть поддались коррозии, из-за низкой температуры кабель потерял пластичность, и уже все происходило не так резво. Да и гребные винты были неподходящего размера.

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

Так как никто не был уверен, что на глубине 10+ метров эта конструкция не даст течь и не зальет электронику — решили сделать усиленный вариант «коробка в коробке». Заказали в Китае все необходимое и приступили к дальнейшей сборке:

В коробке были просверлены отверстия для проводов, которые выходили через cable glands (забыл, как они называются по-другому).

Дополнительно была прикручена коробка для диодов и камеры. Естественно, на резиновую прокладку и плотненько зажата винтами. Далее была спаяна плата соединений, с отдельными разъемами под каждый ESC, драйвер диода и гироскоп.

Дабы упростить из без того нагроможденные конструкции, питание сделали одно (для всех узлов) — от LiPO батареи, так как только она способна выдать такой ток разрядки, который покрыл бы и Raspberry, и диоды, и двигатели. Но дополнительно добавили плату уменьшения напряжения с 12V до 5V, которая питала только малину. «Работаем дальше» ©

Получили вот такой внутренний дата-бокс. 4 вывода мотора, 2 диода и шлейф видео. С ним пришлось повозиться больше всего. Правда, в самый последний момент подключения камера не взлетела (на тестах было все хорошо) — где-то таки переломал шлейф во время бесконечных разборок и сборок. Так как уже не было сил это все пересобирать еще раз — решено было забить, да прикрепить на скотч экшн-камеру в водозащитном кейсе и провести новые тестирования.

Кстати, были заменены также гребные винты на максимально большие из тех, которые продаются для моделей, и заменены двигатели на более мощные. На каждый электромотор, который отвечал за горизонтальную плоскость, было прикреплено по 2 винта, просто потому, что они были :)

В качестве роутера был подключен наш NEXX. То есть из Raspberry PI выходит витая пара и коннектится посредством RJ-45 в маршрутизатор. Он же, в свою очередь, раздает Wi-Fi для Android-телефона. На малине забит статический IP адрес, что позволяет не настраивать каждый раз подключение. Правда опять есть проблемы с подключением — если нет нормального покрытия связи, телефон не может присоединиться нормально по IP. Для этого отключал мобильный интернет и пытался присоединиться несколько раз. После подключения открывал SSH на телефоне и запускал команды запуска node сервера (а после всего — выключения системы).

Пришло время новых тестов и, казалось бы, что может пойти не так? Да все :)

По приезде на киевское водохранилище были обнаружены волны нечеловеческих размеров (ну это я так себя утешаю).

И последствия таких заплывов: полностью забитые двигателя всякой плавающей штукой типа водорослей, песком. Тест был снова провален.

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

Выводы

Главное, что из этого всего получилось — большой опыт в построении таких вот связок и систем. В процессе разработки было использовано немалое количество различных девайсов, и их управление оказалось намного проще, чем это выглядит издалека.

Конструкция на четырех двигателях не сильно оправдала свои ожидания — управлять таким девайсом крайне тяжело. В идеале надо делать четыре вертикальных двигателя, минимум два горизонтальных. При этом стабилизировать все гироскопом, ибо человек теряется в управлении, и ему надо помогать (как это делают все летающие собратья).

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

После этого проекта любой умный дом не кажется таким уж сложным. Сервер, команды на реле, да и все. Главное, время и желание. Остальное придет.

А смысл?

А его нет.

Обещанные ссылки:

Для запуска используем файл app.js.

Всем добра.

Країна для життя, а не програмування. Про навчання і роботу в Італії

$
0
0

Привіт, мене звати Олександр Гончар. Я займаюся машинним навчанням в українському стартапі MAWI solutions та консультую компанії щодо ML. Закінчивши бакалаврат з прикладної математики в КПІ у 2014 році, я продовжив навчатися за цією спеціальністю в магістратурі університету у Вероні. У статті розповім, чим вища освіта в Італії відрізняється від нашої, чому ця країна є вдалим вибором для тих, хто хоче насолоджуватися життям у неспішному темпі, але поганою для тих, хто звик робити все швидко та хто прагне розвиватися в технологіях як програміст чи девелопер.

Як усе почалося

Ще на другому курсі навчання в університеті я задумався про те, що хочу набратися досвіду за кордоном. Вчився у гімназії з поглибленим вивченням мов, встиг одним оком побачити інші культури, відчував, що далі цікаво пізнавати світ. Коли закінчував бакалаврат, думав продовжувати навчання в Німеччині, переглядав можливості, мав на той час сертифікат IELTS. У січні 2015 року наш професор, очільник кафедри прикладної математики Олег Романович Чертов розповів про магістерську програму з математикив університеті у Вероні для студентів з-поза меж ЄС. За її умовами, відібраним учасникам надається по 9000 євро стипендії на кожен із двох років навчання.

На той час я мало що знав про Італію, окрім, хіба, футболу. Нова країна, нова мова — подумав, що це буде цікавим викликом, і почав готуватися. Зібрав потрібні документи (CV, мотиваційний лист, перелік навчальної програми і оцінок з предметів). Документи (всі перекладені англійською) подавав у лютому, а в березні проводилися інтерв’ю. Їх було два етапи: на першому переглядали мої оцінки, резюме, мотиваційний лист, знання англійської. За цими документами оцінили всіх аплікантів. Тих, хто мав найвищі оцінки за результатами першого етапу, запросили на особисте інтерв’ю по скайпу. Там запитували, чим займаюся, чому хочу вивчати математику, що хочу винести з універу. Я відповідав, що вже працюю у сфері машинного навчання і хочу поглибити фундаментальні знання, щоб розв’язувати більш складні задачі. За результатами цієї співбесіди був першим у списку за набраними балами.

Найскладнішим у процесі підготовки було те, що на той час я ще не отримав на руки диплом бакалавра. Через це виникали різні бюрократичні труднощі з посольством Італії, де мав отримати візу. Мені потрібно було раніше за однокурсників отримати цей документ, для цього ходив у поліграфію домовлятися, та все одно затягнулося з друком. Загалом від часу, коли дізнався про стипендію, до моменту, коли владнав справи в посольстві, минуло півроку.

Документ, який регламентує моє перебування в Італії, — це тимчасовий дозвіл на проживання у вигляді пластикової картки. Його потрібно поновлювати щороку у квестурі (державному органі, який займається справами мігрантів). У квестуру приношу документи, які підтверджують, що я дійсно вчуся, маю де і на що жити.

Загалом у кожного може виникнути своя історія з документами. Приміром, у мого друга, який теж збирався на навчання в Італію, виникли труднощі через те, що в його дипломі з університету Шевченка було написано про 3 роки і 10 місяців навчання на бакалавраті замість чотирьох. Єдине, що можна вдіяти в такій ситуації, — дослухатися до порад працівників консульства і виконувати їхні рекомендації.

Нині йде третій рік мого навчання, яке закінчиться захистом диплома. Навчання може тривати довше, ніж два роки, поки не захистиш диплом, утім, стипендія передбачена на дворічний термін. Головна умова навчання — щосеместра складати певну кількість кредитів, щоб продовжувати отримувати стипендію. Загалом цього нескладно дотриматися.

Житло

Протягом двох років навчання, на які передбачена стипендія, давали гуртожиток. Перший рік жив у ньому. Проживання оплачував зі своєї стипендії: приблизно 210 євро у місяць. Мешкав у блоці зі ще одним хлопцем (по окремій кімнаті для кожного), він теж із України, тож швидко знайшли спільну мову. Місця у кімнаті було вдосталь, щоб, наприклад, робити зарядку. Кожна кімната мала окрему душову, туалет. Кухня була спільною на поверх, де 12 кімнат. Намагалися зі всіма домовитися, щоб слідкували за чистотою, тож особливих проблем щодо ведення побуту не виникало. Оскільки університет — учасник багатьох програм обміну, то жив переважно не з італійцями, а зі студентами зі всього світу: від Канади до Австралії.

Наступного року вирішив знімати кімнату в квартирі, бо не зовсім звик до гуртожитських умов. Уже коли виселявся, дізнався, що мав змогу платити менше. За рік сплатив 2500 євро, а міг би — 1000, оскільки я студент з-поза меж ЄС (тому, якщо збираєтеся на навчання за кордоном, варто завчасно цікавитися такими опціями).

Коли вирішив знімати кімнату, студентська організація ISU при університеті підшукала мені житло. За нього також довелося платити більше, як уже збагнув згодом. Кімната, яку мені знайшли, обходилася в 300 євро за місяць, хоча з такими ж умовами і розташуванням (10 хвилин пішки від головного корпусу університету) реально знайти за 200-250 євро.Але було легше не завдавати собі клопотів із пошуком.

Після другого року навчання вирішив шукати квартиру, щоб проживати вдвох із дівчиною. Це виявилося найважчим: я студент, а з цим статусом офіційно не можна працювати. До того ж, я іноземець, це теж ускладнює процес. Мало хто хоче здавати квартиру за таких умов, тож мені знадобилося півроку шукати і переконувати власників житла у своїй платоспроможності. Зрештою, вдався до послуг агентства, вони знайшли орендаря, якому я роз’яснив ситуацію й домовився. Оренда двокімнатної квартири неподалік центру Верони коштує 600 євро + орієнтовно 100-150компослуг на місяць. Також за послуги агентства сплатив 10% від річної вартості оренди + податки.

Вид з мосту Ponte delle Navi біля мого дому

Ціни на купівлю житла у Вероні стартують від 100 тисяч євро за двокімнатне помешкання й можуть сягати 200-300тисяч євро. За моїми спостереженнями, серед італійців, які вже реалізувалися в житті, більше прийнято купувати житло, аніж орендувати. Відсотки за іпотекою незначні — 2-3%,крім того існують державні програми підтримки для молодих сімей. Іпотека вигідна не лише через низькі відсотки: якщо з якихось причин більше не можеш сплачувати кредит, банк пропонує продати житло іншому клієнтові й отримати гроші за продану частку квартири.

Навчання

Як на мене, головна відмінність тутешнього навчання від українського — не в професорах, технічному оснащенні або програмах. Найбільше відрізняються самі студенти та їхня мотивація. У нас, наприклад, вступають на технічні спеціальності у виш, тому що модно бути програмістом. При цьому у нас на курсі в Україні було відсотків 20 людей, справді зацікавлених у предметах. Тут же не потрібно витрачати 4-6років на університет, якщо хочеш бути програмістом. Навчитися програмувати можна у коледжах. Якщо італійський студент обирає університет (а надто магістратуру), це означає, що він хоче займатися конкретною дисципліною, наприклад, математикою і нічим більше.

Зазвичай за годину до початку пар студенти приходять в університет, щоб повторити минулий матеріал, сидять на всіх парах, лекції записують на диктофон. Після пар йдуть у бібліотеку: читати книжки, опрацьовувати конспекти, слухати записи. Так триває приблизно до 20-їгодини. Лише після цього проявляється італійськість студентів — можуть іти в бар. Я сам, зізнаюся, так багато не вчився, але точно більше, ніж в Україні. Студенти загалом дружелюбні, навзаєм допомагали одне одному при потребі, жодного негативу або холодності не згадаю.

Під час навчання не прийнято працювати. Студенти, які досі ще не працювали в індустрії, більше переживають за оцінки. Це також пов’язано з подальшою мотивацією. Якщо людина йде в магістратуру, це значить, що вона хоче робити кар’єру в науці. Наприклад, планує далі отримати ступінь PhD, тож стовідсотково будуть дивитися на оцінки. Також у Європі краще працюють соціальні ліфти: тобі не потрібно так, як у нас, крутитися, щоб чогось досягти. Хороші оцінки — це критерій для студентів, що вони роблять усе правильно. Згодом це конвертується у зарплати.

Тож коли такі студенти приходять на заняття, у професорів немає іншого виходу, окрім як вчити їх добре. При цьому кваліфікація викладачів приблизно така сама, як у їхніх українських колег: здебільшого вони попрацювали в індустрії, їздять на наукові конференції, публікуються у наукових виданнях.




В усьому іншому умови навчання приблизно такі самі. Матеріально-технічна база хоч і на вищому рівні, ніж в українських вишах, але значного контрасту не відчувається. Предметів було менше, ніж в Україні, за рахунок того, що немає додаткових дисциплін, на зразок філософії. Треба набрати 120 кредитів, щоб закінчити магістерську (без обумовлених дедлайнів — можна хоч 10 років складати, якщо ти італієць, і 5 років, якщо іноземець). Я складав екзамени протягом трьох років, зараз пишу дипломну роботу, у березні захищатиму. Оптимально можна складати 4 предмети в семестр і таким чином усе встигнути.

Щодо мого професійного напрямку — машинного навчання, вийшло так, що в самому університеті мені взагалі запропонували прочитати кілька практичних міні-курсів з практичного глибинного навчаннята нейронних мереж для часових рядів. Студентам сподобалось, приїжджали навіть PhD з інших міст та університетів. Це трохи підтверджує наголос на теоретичні знання у моєму університеті. Але точно можу сказати, що вивчення базових математичних дисциплін дуже допомогло грунтовному розумінню того, як працює machine learning (а не так, як на відомій картинці з Карлсоном).

Адаптація

Найперше, до чого належало звикнути, — це до того, що почав жити сам, без батьків. По-друге, довелося вивчити італійську і звикнути розмовляти нею всюди. Магазини, лікарні, оформлення документів — ніде без неї не обійтися. Також складно було поєднувати роботу з навчанням, оскільки навчатися треба було набагато більше і якісніше, ніж в Україні. Коли я тільки переїжджав, працював віддалено на один американський стартап. Приблизно через півроку, коли він зазнав краху, почав шукати іншу роботу, оскільки стипендії не вистачало, аби підтримувати звичний рівень життя. Певний час був фрілансером на різних проектах, пов’язаних з машинним навчанням, тож не ходив на всі пари. Брав конспекти у професорів і казав, що вчитимуся таким чином, оскільки працюю. Викладачі до такого рішення поставилися з розумінням, не можна сказати, що надто цим переймалися.

Загальні враження від країни

Перше, що впадає в очі, — це те, що італійці з повагою ставляться до чужого життя і права на відпочинок. В Італії магазини, торгові центри не працюють після 20-їі по неділях. Це країна для життя, особисті права, відпочинок — на першому місці.

Італійці емоційні, відкриті, схильні розмовляти з незнайомцями, співати на вулицях, якими стереотипними не здавалися б ці характеристики. У їхньому спілкуванні більше усмішок і жартів. Це миролюбний, неагресивний народ. Принаймні я не бачив, щоб у новинах часто повідомляли про кримінал або насилля. На вулицях курять травку, жодних конфліктів через це не виникає. Багато мігрантів з Африки, Азії, Сходу.

Італія — чудова країна для життя, якщо ваша мета — отримувати задоволення від купівлі гарних речей, смачної їжі, веселощів, безтурботності, відчуття свободи. Італійці не є трудоголіками, проте їхня економіка не остання в Європі. Тут розвинені туризм, класична культура, архітектура, дизайн, арт. Це традиційні для країни галузі. Якщо ж у людини ціль пожити в країні, яка рухає бізнес, науку, технології, то їй не в Італію. Інновацій тут менше, це проявляється навіть у елементарних речах. Наприклад, якщо в Києві вже кілька років, як можна розплатитися з телефону в метро, то в Мілані така опція з’явилася лише цьогоріч.

Міст біля Castelvecchio

IT-ринок

В Італії все посередньо з технологічними гігантами і стартапами порівняно, наприклад, із США. Якщо умовно поділити ринок ІТ-професій за типами проектів — продуктові компанії (не важливо, ІТ чи ні), технологічні стартапи, великі корпорації (теж не важливо, ІТ чи ні), консалтингові, аутсорс/аутстаф-компанії та R&D лабораторії — то в Італії помічаю перекіс на продуктові компанії (частіше не ІТ) та R&D лабораторії.

Здебільшого не йдеться про використання передових технологій — треба, щоб усе просто працювало і продавалося. Технологічні гіганти не надто охоче відкривають тут свої офіси, є один офіс Амазону, є Google. Але ті, хто дійсно хоче працювати в Гуглі, Амазоні, їдуть далі в Європу або в США.

Я був спікером на кількох ІТ-івентах в Італії: Heroes of Maratea, Machine Learning Milano. Рівень проектів мене трохи розчарував. Наприклад, на першому івенті найбільше уваги привернули стартапи з пошуку італійської піци у Штатах та девайс для зав’язування краватки. На другому мітапі було більше вчених, рівень теоретичної підготовки яких дуже високий, але з прикладними результатами все не так круто.

На мітапі Machine learning Milano

Італійці не дуже хочуть працювати над рутинними аутсорсними задачами, тому консалтингові, аутсорс-компанії багатьма розглядаються лише як перша робота для здобуття досвіду. Більшість спеціалістів, які отримали вищу освіту, на такі проекти, де потрібно просто щось попрограмувати, дивитись не будуть. Італійські (й інші європейські) компанії це розуміють і аутсорсять, наприклад, в Україну, а самі керують ІТ-відділами у продуктових компаніях.

Залежно від міста, фронтенд девелопер може отримувати 2-2,5тисячі євро, full-stack розробник — 2,5-3,5тисячі євро, data scientist — 3-4тисячі євро (без поділу на умовних джуніорів-сеньйорів, у вакансії просто пишуть Software Engineer, Data Scientist). Для порівняння: прожитковий мінімум у країні складає 900 євро, а в описах вакансій на будь-яку роботу пропонують не менше, як 1,5 тисячі євро.

Загалом програмісти не відчувають себе такими королями життя, як в Україні, тут вони точно не еліта нації. Італійський бармен може отримувати 2000 євро, а програміст-інтерн — усього тисячу. Оскільки робота важка, то не так багато охочих вкладати стільки зусиль заради того, аби отримувати додаткових 500-1000євро щомісяця.

З іншого боку, в Італії досить непогано розвивається наука, університети підтримують проекти на базі досліджень. Тому для тих, хто не женеться за високими зарплатами в ІТ, а хоче робити якісні дослідження зі стипендією 1200-2000євро в місяць (для PhD студента), італійські виші можуть бути дуже непоганим варіантом.

Транспорт

Оскільки Верона — невелике місто, рідко користуюся громадським транспортом. Живу практично в центрі, усі потрібні локації знаходяться на відстані 20-30хвилин пішки. Разовий квиток на автобус коштує 2 євро на 90 хвилин. Можна купити пачку з 10 квитків по 1,20 євро. Є проїзний на місяць (35-40 євро),але мені вистачає цієї пачки на кілька тижнів.

Транспорт нормальний, охайний, автобуси ходять кожні 10-15хвилин у будні і раз на 30-60хвилин у вихідні або в пізній час. Контролери є, і вони штрафують :) Таксі може коштувати 10-20 євро,але я користувався ним лише кілька разів.

Італією ходять круті швидкісні потяги місцевої залізниці Trenitalia, з Верони будь-куди на північ Італії можна доїхати за 2 години. Для нічних переїздів зручно використовувати Flixbus.

Якщо завчасно планувати подорожі в інші країни, то за 20-30євро можна знайти квиток, скажімо, до Франції на Ryanair. Літати можна з Верони, з Мілана, кілька разів літав з Венеції. Літати можна куди завгодно, найзручніше, звичайно, у сусідні країни: Іспанію, Німеччину, Францію.

Вартість життя

Головна стаття витрат — це квартира, 600 євро на двох людей (+ орієнтовно 100-150євро компослуг на місяць). Щоб добре їсти вдома (рибу, м’ясо, овочі, фрукти, круасан з кавою у кафе, тобто без супер-делікатесів, але поживно і корисно), одній людині вистачає 300 євро на місяць. Продукти звик купувати в супермаркетах, у Вероні є великі мережі на зразок Spar. Мінімальний чек на обід у кафе складе 10 євро. Інші щомісячні витрати — це транспорт, медична страховка, спортзал. Місячний абонемент коштує 25 євро.

Не будемо також забувати про одяг, догляд за собою, купівлю потрібних речей для будинку та електроніки, хобі, самонавчання, онлайн-сервіси (Netflix, Spotify, Amazon) витрати на благодійність та подарунки близьким. Ці витрати варіюються для кожної людини. Але одяг точно дешевший, ніж в Україні (масс-маркет бренди, як Zara, у Києві можуть коштувати на ~10-20 євро більше).

Для дозвілля теж є багато чого цікавого. В Італії багато різних виставок: від арту до котів. Квиток на виставку в галерею, музей коштує 10-1550 євро,залежно від масштабу події. Квиток в кіно не на 3D-фільм коштує 8 євро. Можна подорожувати в інші міста (година потягом), на озера Комо чи Гарда або на північ — у гори біля Тренто. В Arena di Verona часто бувають концерти, зазвичай там повний sold out за місяці до самого івенту.

Якщо підсумувати, то, як на мене, нормальне життя в Італії коштуватиме від 1500 євро в місяць на одну людину.

Біля Arena di Verona

Медицина

Як студент, сплачую приблизно 150 євро на рік за медичну страховку. Кілька разів, коли хворів, мав досвід спілкування з лікарями. Усе має такий вигляд: спершу йдеш до сімейного лікаря, він тебе оглядає і відправляє до наступного спеціаліста. Огляд у сімейного лікаря безплатний, натомість лору, до якого одного разу мене направили, заплатив 30 євро за п’ятихвилинний огляд (без страховки це коштувало б ще більше).

Оскільки не всі лікарі розмовляють англійською, завчасно гуглив терміни, щоб знати, як описати свої симптоми. Не помітив різниці у якості обслуговування між українськими та італійськими лікарями (але це, можливо, тому, що відвідував дуже професійних лікарів в Україні).

Мова

Почав вчити італійську мову у Києві, один місяць приватно займався з викладачем. Коли приїхав, вливався в середовище, продовжував вчити мову у процесі. У Києві вивчив основи, граматику, а вже в Італії на цей каркас нанизував подальші знання. Тепер знаю італійську на рівні, достатньому, щоб порозумітися в побутовому спілкуванні. Як на мене, мова зовсім нескладна, особливо, якщо вже є знання хоча б одної іншої європейської мови (англійська, іспанська або французька — ідеально).

В університеті запросто можна обійтися без знання італійської, поза ним — ні. Якщо хочеш жити в Італії, мову потрібно вчити. Туристу можна обійтися, але в постійному спілкуванні без знання італійської за тобою закріпиться тавро іноземця. Щоб влитися в суспільство, мати можливість за потреби попросити поради, треба вчити італійську.

Висновки

Найбільша краса Італії в тому, що ця країна наче створена для того, щоб жити і радіти. Тут чудові умови, щоб працювати віддалено з клієнтами з інших країн, залишаючись у приємній зоні комфорту.

Я звик до швидшого темпу життя в Києві, особливо в роботі, тож італійська повільність у цьому сенсі не влаштовує. Так само до мінусів відніс би бюрократію. Але з огляду на те, що для мене, як для іноземця, апріорі передбачено більше процедур і тяганини, не маю особливих скарг.

Найбільший недолік у тому, що для спеціалістів моєї професії тут мало можливостей, щоб не лише працювати, а й розвиватися. Верона є веселим туристичним містом, але загалом вона дещо консервативна. Тож тут точно не залишатимуся, подумую про переїзд у сучасніші Турин або Мілан, а то й за межі країни: в такі технологічні хаби, як Париж, Берлін або Барселона.


За допомогу у підготовці статті дякуємо Ярославі Тимощук.

IT-благодійність 2018: огляд ініціатив, до яких можна долучитися

$
0
0

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

ІТ-Миколай, Київ

IT-Mиколай Київ разом із Благодійним фондом імені Св. Луки «31 Июня»збирають кошти на лікування передчасно народжених малюків для придбання 15 резервуарів та 10 систем дренування у Неонатальний центр Київського Охматдиту.

Загальна вартість — 270 000 грн.

Зараз зібрано 74 753,55 — це ⅓ від загальної суми.

Як допомогти:

  • переказати гроші на рахунки Благодійного фонду Cв. Луки;
  • кнопочка Donate;
  • провести благочинну акцію в себе в офісі;
  • підтримати сторінку у Фейсбуці;
  • розказати друзям та знайомим.

Контакти:Катерина Андрущенко, kshevtsova@gmail.com, тел. 067 828 28 63.

ІТ-Миколай, Львів

ІТ-Миколай разом із Благодійним фондом «Крила надії»збирає кошти на купівлю сучасного медичного обладнання для Західноукраїнського спеціалізованого дитячого медичного центру, де проходять лікування діти із складними захворюваннями зі всієї Західної України.

Цього року ціль — високочастотна електрохірургічна система ARC 350 PLUS та Lotus LG 4 з інструментами та комплектними деталями виробництва BOWA-electronic GmbH&Co (Німеччина), яка вирішує 100% питань забезпечення проведення оперативних втручань будь-якої складності при різних хірургічних патологіях.

Сума до збору — 1 884 704 (близько 58 тис. євро).

Як допомогти:

  • кнопочка Donate;
  • провести благочинну акцію в себе в офісі;
  • підтримати сторінку у Фейсбуці;
  • розказати друзям та знайомим.

Контакти:itmykolai@gmail.com.

Олені Святого Миколая, Харків

Волонтери проводять збір подарунків для дітей із зони АТО. Малеча написала листи з побажаннями Святому Миколаю. І ви можете виконати їхні бажання.

До акції приєдналися: Waverley Software.

Як допомогти:

Контакти:inkeshka@gmail.com.

Збір теплих речей для безхатченків, Харків

Waverley Software за підтримки організації «Банк вещей для бездомных людей — Харьков»запрошує до збору теплої одежі для безхатченків. Старі куртки, светри, кофти, штани, черевики — все, що вже не потрібно вам, дуже треба їм.

Як допомогти:можна зв’язатися зі співробітником компанії Waverley і передати одяг. 20-гогрудня всі зібрані речі будуть передані волонтерам.

Контакти:Любов, 093 22 34 609.

Миколай про тебе не забуде, Львів

Щорічна благочинна акція, завданням якої є зібрати та роздати подарунки (солодощі, іграшки, книжки, фарби, олівці, зошити, засоби гігієни) для тих діток, які могли би залишитися без нашої або батьківської уваги, а також створити особливу чарівну атмосферу свята.

У 2017 році вдалося рознести подарунки для 2800 дітей Львова, волонтерами акції стало близько 500 молодих людей, у тому числі 35 водіїв-волонтерів.

До акції вже приєдналися: Waverley Software, Artelogic, Eleks, ElifTech, Intellias, Keenethics, Pecode Software, Sigma Software, SoftServe, Tickets.ua, V.I.Tech, Virtido.

Як допомогти:

  • Принести іграшки, солодощі, канцелярське приладдя, дитячі книжки, засоби гігієни на Фабрику Святого Миколая (в приміщенні Львівського палацу мистецтв за адресою вул. Коперника, 17 з 10.00 до 19.00) з 13 до 17 грудня.
  • Розмістити коробку для збору подарунків в своєму офісі.
  • Стати водієм-помічником Св. Миколая та допомогти нам з перевезенням волонтерів та подарунків ввечері 18 грудня 2017 р. від Фабрики Св. Миколая до домівок малюків, які з нетерпінням чекають візиту від Помічників Чудотворця.
  • Залишити книги-подарунки у доброму стані з власної бібліотеки або ж ті, які ви придбали у книгарні спеціально для дітей з нужденних родин (0-12 р.).
  • Приєднатись до акції у вашому місті.

Контакти:сайт акції, info@mykolaj.com.ua, група в Facebook.

Благодійний проект для людей із вадами зору «Відчуй Україну на дотик»

Мета проекту — допомогти людям з вадами зору «побачити» архітектуру великих міст України. Проект передбачає проведення сканування будівель за допомогою дронів та фотокамер, побудову їх 3D-моделей із подальшим друком на 3D-принтерах. Створені будівлі помандрують дитячими будинками України і ознайомлять дітей із архітектурою міст. Зараз сканування виконується у Львові, відскановано десять об’єктів. Заплановано відсканувати ще десяток. Далі проект буде поширений на інші міста України.

У проекті задіяно десяток волонтерів з компанії ELEKS, організації, що займається оцифруванням культурної спадщини Skeiron та спеціалістів у сфері 3D-моделювання із PolySpace studio.

Як допомогти:

  • одноразова або постійна фінансова підтримка проекту;
  • купівля обладнання (дрон, фотокамера) для потреб сканування;
  • купівля 3D-принтера з великою площею друку;
  • волонтерство та будь-яка підтримка у розвитку проекту.

Контакти:сторінка Skeiron у Facebook, skeiron.llc@gmail.com, сайт, +38 093 82 63 850.

Благодійний проект з нейрореабілітації тяжкопоранених людей

Благодійний Фонд «КРАН» в партнерстві з науково-практичним центром нейрореабілітації «Нодус» надає допомогу в лікуванні та відновленні в Україні «занедбаних» тяжких пацієнтів з ураженням центральної та периферичної нервової системи. Насамперед воїнів-захисників України, соціально незахищених цивільних осіб, дітей-сиріт, дітей з малозабезпечених сімей, дітей з інвалідністю, осіб зі статусом «одинокий», що потребують лікування та спеціалізованої медичної реабілітації (насамперед, відновлювального лікування та нейрореабілітації).

Як допомогти:переказати кошти на рахунок Благодійного Фонду «КРАН».

Контакти:офіційний сайт БФ.

Дар Різдва, Черкаси

Вже четвертий рік поспіль церква «Дім Євангелія» в Черкасах проводить благодійний проект «Дар Різдва». Учасники збирають подарунки для дітей із малозабезпечених і неповних сімей, сиріт, дітей воїнів АТО та дітей з багатодітних родин. На Різдво разом із командою волонтерів вони відвідують ці сім’ї, співають різдвяних пісень та вручають зібрані подарунки.

До цієї ініціативи регулярно долучаються локальні IT-компанії: SPD-Ukraine, Master of Code, Ekreative, Interlink LLC, Active Bridge, Default Value.

Як допомогти:

Кожен учасник акції має змогу власноруч зібрати один або декілька подарунків для дітей. Організатори надають спеціальні подарункові коробочки та списки речей, з яких повинен складатися подарунок.

  • Якщо ви у Черкасах — отримайте спеціальну коробочку та зберіть подарунок за списком. Отримати коробочку та залишити заповнену можна у будь-який день з 8:00 до 20:00 за адресою м. Черкаси, вул. Іллєнка, 60 (церква «Дім Євангелія»).
  • Якщо у вас немає змоги власноруч зібрати подарунок, але ви все одно хочете долучитися — зв’яжіться з організаторами. Вони закуповують додаткову партію подарунків на пожертви від добродіїв та компаній.

Контакти:Віталій, 067 900 80 85 або 073 133 22 10, andriets.vitalii@gmail.com, Facebook.

Кімнати позитиву 2.0

Кімнати позитиву — це яскравий, комфортний та функціональний простір для дітей, які є пацієнтами дитячих лікарень і можуть там весело проводити час, читати, наздоганяти шкільні заняття, займатись творчістю, а головне — отримувати позитивні емоції, які сприяють їх швидшому одужанню.

Впродовж 2016-2017років корпоративний Благодійний фонд «Відкриті очі» компанії SoftServe вперше реалізував такий проект у Вроцлавській дитячій клініці ендокринології та діабетології, вул. T. Халубіньскєго, 2a, разом з Асоціацією Pozytywne.com, яка впроваджує такі зміни у дитячих відділеннях лікарень Польщі. Отримавши такий досвід, компанія вирішила продовжити цю справу в дитячих лікарнях України і створити Кімнату позитиву для маленьких пацієнтів чотирьох лікарень країни в Івано-Франківську, Харкові, Дніпрі та Рівному.

На реалізацію проекту потрібно 615 тис. грн. Уже зібрано 462 тис. грн.

Як допомогти:

  • Долучитись фінансово можна на сторінці проекту «Кімнати позитиву 2.0»на сайті Благодійного фонду «Відкриті очі».
  • Поширити інформацію про проект серед своїх друзів, колег, знайомих.

Компанії, які бажають підтримати ці проекти і стати партнерами Благодійного фонду, можуть написати відповідного листа на fund@softserveinc.com.

Контакти:Уляна Буденкевич, ubuden@softserveinc.com.

Простір розвитку дітей з аутизмом, Івано-Франківськ

Протягом останніх років проблема активного повноцінного розвитку дітей з аутизмом та суміжними розладами стає доволі актуальною.

Щораз більше дітей мають проблеми з гіперактивністю, мовною або сенсорною інтеграціями. У багатьох розвинених країнах такі захворювання діагностуються у дітей віком до 2-хроків, що забезпечує своєчасне лікування та допомагає дитині розвиватися та ефективно спілкуватися зі світом та однолітками. Натомість в Україні ситуація гірша, адже навіть при діагностуванні розладів на ранніх етапах, батьки не отримують належної інформації про корекційне виховання таких діток. В Україні є лише кілька фахових центрів, в яких діти можуть проходити відповідні програми розвитку (як наприклад, дитячий реабілітаційний центр «Джерело»у Львові).

Метою проекту є допомога ГО «Простір розвитку дітей», Івано-Франківськ у наповненні кімнати сенсорної інтеграції спеціалізованим обладнанням для дітей з аутизмом та іншими розладами, де вони могли б навчатися, гратися, спілкуватися та розвиватися фізично під час занять з фахівцями Простору.

На реалізацію проекту потрібно 89 тис. грн. Уже зібрано 32 тис. грн.

Як допомогти:

Контакти:Уляна Буденкевич, ubuden@softserveinc.com.

gofriends IT Academy — соціальний проект для дітей-сиріт

В Україні є велике питання: що робити, коли сироті виповнюється 18 років. Зазвичай ці діти виявляються непристосованими до самостійного життя. Вони відвідують коледжі низького рівня, і без життєвої мотивації вони не приділяють належної уваги освіті, витрачають свій час і зусилля неефективно. У якийсь момент вони стикаються з перешкодами.

Головна мета gofriends IT Academy полягає в тому, щоб допомогти змінити життя та покращити майбутнє дітей, котрі потребують допомоги.

Як допомогти:

  • Індивідуальне спонсорство 1 дитини — 400$/ місяць (харчування, проживання, стипендія).
  • Корпоративна підтримка — стажування та працевлаштування дитини у вашій компанії після проходження навчання.
  • Інші потреби — одяг, ноутбуки, навчальні матеріали, книги, меблі, постільна білизна.

Контакти:Євген, 063 010 17 97.

Фонд «Я майбутнє України»

Благодійний фонд «Я майбутнє України» опікується сиротами та дітьми, позбавленими батьківського піклування.

ЛакіБукс — благодійний просвітницький проект, заснований разом з ІТ-компанією Lucky Labs. У рамках ініціативи видається та безкоштовно поширюється україномовна науково-популярна література для дітей 10-14 років.Книги передають у бібліотеки, школи-інтернати, центри соціально-психологічної реабілітації східних регіонів України (у пріоритеті Донбас, а також Харківська, Миколаївська та Запорізька області). Наразі в українські бібліотеки доставлено кілька тисяч книг, серед яких «Дівчатам слово» Маїм Бялік, «Літо довжиною в ДНК» Аліни Штефан, «Коротка історія технологій, або Як зрозуміти свій гаджет» Андрія Тужикова та ін.

Центр доброти для матері та дитини «Мрія Марти» — кризовий центр для одиноких мам з дітьми-безхатченками. Матері отримують медичну, соціальну, матеріальну, психологічну, юридичну підтримку.

Як допомогти:обрати проект та перерахувати кошти на сайті фонду.

Контакти:сайт фонду.

Таємний Санта з фондом «Щаслива дитина», Запоріжжя

Компанія Redwerk уже декілька років поспіль підтримує благодійний фонд «Щаслива дитина». Напередодні новорічних свят кожен співробітник отримав листа від дітей з тяжкими захворюваннями. Таким чином, члени команди стали Таємними Сантами для маленьких мрійників.

Основна мета фонду — допомога дітям-сиротам, багатодітним родинам та дітям з різноманітними захворюваннями. Благодійні ініціативи проводяться майже кожного місяця.

Як допомогти:

  • разова/постійна допомога;
  • допомога з обладнанням;
  • волонтерство;
  • корпоративне співробітництво.

Контакти:info@deti.zp.ua.

Гідна старість з Let’s Help!, Київ

Організація допомагає будинкам літніх людей. На меті — створити достойні умови для проживання, забезпечити обладнанням та створити теплу атмосферу. Більше того, особи похилого віку потребують не лише фінансової та побутової допомоги, але й моральної підтримки.

До акції долучилися: Redwerk.

Як допомогти:

  • обрати напрям, у якому хочете допомагати: Комфортне життя, Здорове життя або Насичене життя.
  • внести свої пропозиції щодо розвитку напрямів.
  • залучити до ініціативи друзів та колег.

Контакти:office@letshelp.com.ua.

Добрий обід, Одеса

Щодня волонтери годують близько 240 пенсіонерів, людей похилого віку, які не можуть забезпечити себе. Частина з них не можуть вийти з дому, і пайки приносять їм особисто.

У вас є можливість зібрати до різдвяного столу пайки, щоб вони могли порадувати себе чимось приємним до Нового року.

З того, що необхідно:

  • засоби гігієни — шампуні, пральний порошок, мило;
  • чай, цукор, печиво;
  • крупи — рис, манка;
  • вермішель;
  • будь-які види консервів;
  • згущене молоко;
  • цукерки;
  • мандарини.

До акції приєдналися: HYS Enterprise.

Контакти:сторінка у Facebook.

Збери добрий подарунок, Одеса

Щорічний проект «Збери Добрий Подарунок», в якому будуть зібрані більше ~ 1000 іменних подарунків (виконання новорічних мрій) для дітей з інтернатів, дитячих будинків, дітей з особливими потребами.

Як допомогти:обрати фотоз побажаннями дітей та зібрати подарунок.

Подарунок потрібно привезти до 28 грудня за адресою м. Одеса, Троїцька, 34 з 10:00 до 19:00.

Контакти:Олена, 094 930 97 87, Наталія Терехова, 097 375 72 29.

Light up your heart! — збір допомоги для UFOND

Infopulse цього року організував зимове свято у форматі благодійного вечору «Light up your heart». Напередодні заходу було ініційовано збір коштів для організації UFOND, одна з головних місій якої — «Дозволити дитячим серцям битися» (порятунок тяжкохворих дітей). Спільними зусиллями спеціалісти компанії зібрали кошти для підопічного фонду — хлопчика Дмитра.

Наразі триває збір коштів для порятунку Давида, стан якого потребує також нагальної допомоги. Компанія разом з благодійним партнером запрошує долучитися друзів IT-спільноти!

Як допомогти:

Контакти:help@ufond.ua.

Анімаційні ролики з математики

Анімаційна студія NEED: necessary educationзбирає кошти на створення серії відеоуроків з математики, які мають полегшити навчальний процес для учнів, вчителів та тих, хто займається самоосвітою. Цикл складається із двох частин: відео, які пояснюють математичні правила/поняття/теореми та відео, які візуалізують захопливі теми, що не входять у програму, але підвищують мотивацію вивчати математику.

Окрім створення циклу, проект передбачає серію майстер-класів для вчителів та відкриті уроки у школах.

На платформі «Моє місто» проект вже зібрав 72% від необхідної суми та вийшов на фінішну смугу.

Подивитися вже готові ролики можна на Youtube.

Як допомогти:

GladPet

Соціальний проект GladPetстворив сайт, на якому кожен охочий може розмістити інформацію про собаку чи котика, що шукає домівку, чи обрати собі пухнастика до душі. За два роки на сайті було відмічено, що понад 1000 тваринок знайшли власників.

Для масштабування на всю Україну та рекламну кампанію проект збирає грошіна краудфандинговій платформі «Моє місто».

Зібрано коштів станом на 6 грудня — 15 371 грн — сьома частина необхідної суми.

Як допомогти:

Контакти:Facebook, Instagram, пошта info@gladpet.org.

Как попасть в IT – пример бизнес-аналитика

$
0
0

В предыдущих статьяхя уже начал рассказывать о нюансах работы бизнес-аналитика. Сейчас же хочу поделиться мыслями о том, как стать BA — какие навыки важны, где учиться и как сменить специализацию. Данная статья будет полезна людям, которые хотят получить позицию Business analyst / Product owner, будь то новички в мире ИТ или же специалисты других направлений, такие как разработка или тестирование.

Есть ли смысл идти на платные курсы?

Ко мне обратился один из знакомых с просьбой помочь ему с подготовкой к собеседованию на позицию бизнес-аналитик. Конечно же, я ему помог, чем смог, и в то же время немного углубился в образовательную сферу на рынке Украины и пришел к выводу, что нет бесплатнойбазы для того, чтобы стать бизнес-аналитиком. Если проанализируете нынешний рынок, поймете, о чем я говорю: много курсов от «специалистов», которые никогда не проходили на практике то, чему они учат.

Основной вывод: каждый трактует работу, как он хочет, оперирует высокоуровневыми терминами и понятиями. Те, кто хоть немного понимает в IT, продают знания от $300/курс и выше. Вот вам один из примеров. Стоимость за 3 дня — 1000 евро с тренером, который никогда не работал как БА/PО.

Да, эти люди могут быть классными спикерами, тренерами, но зачастую не специалисты в своих сферах. Потому что они не делают эту работу изо дня в день! Их задача — учить и рассказывать, а не внедрять, разрабатывать, вести переговоры. Решать вам, куда потратить эти деньги ;)

С чего начать и что делать?

У вас должна быть цель, к которой вы будете идти. У кого-то это всеобщее признание и $1000 на счету или покупка квартиры. Если нет цели, вы не будете знать, куда идти, соответственно, не сможете составить план действий, чтобы достичь ее.

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

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

Много работайте. Если будете тратить на работу и развитие 8 часов в день, то вы станете крутым специалистом через 5 лет (если станете)! А те, кто будут тратить по ~12 часов в сутки, станут таким же за 3 года. Главное — быть увлеченным тем, что делаешь! Старайтесь углубляться как можно больше в каждый вопрос, на который вы ищите ответ.

Может, не самый главный, но очень важный совет — найти поддержку. В идеале — близкий человек, друг, родственник. В моем случае это были мотивационные ролики и один очень близкий друг. Банально, но 1 видео с утра как-то придавало мне больше сил и заряжало на успех (вот пример). Тут можете найти больше.

Кто есть кто?

Как я уже говорил, на украинском рынке понятия очень смазанные. Давайте посмотрим на официальные описания ролей в проекте и сравним их с реальностью.

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

Бизнес-аналитикв принципе может не иметь отношения к IT-индустрии. Этот человек анализирует организацию или бизнес-домен (реальный или гипотетический) и описывает бизнес или процессы, системы, оценивая бизнес-модель или ее интеграцию с технологиями. (wiki)

То есть классический бизнес-анализ — это реинжиниринг процессов. Например, если компания хочет изменить организационную структуру: из 1 департамента сделать 5.

Системный аналитик — является мостом между бизнес-проблемами и технологическими решениями. Это человек, который специализируется на анализе, разработке и внедрении информационных систем.

Requirements manager — вы также можете встретить на украинском рынке эту позицию, нечасто, но все же. Определения такой профессии в принципе нет, но есть понятие Requirements management. Это процесс того, как должен документироваться бэклог, анализироваться, отслеживаться и т. д.

Имеем процесс, но не имеем как таковой позиции. Это то, что было придумано исключительно на нашем рынке. Зачастую это означает смесь системного аналитика и product owner.

Product owner — связующее звено между заказчиком и командой. Главная его задача — создать и контролировать backlog. (источник)

Product manager — специалист, который работает с продуктом, исследует рынок, анализирует финансовую часть. Фактически этот человек выступает CEO продукта. (wiki)

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

Однако неопределенность — это реалии украинского рынка в мире IT. Здесь нет четких различий между специалистами. Границы очень размыты. В одной компании от вас требуют одни скиллы, в другой — совершенно иные. Если вы планируете работать на украинском рынке, то будьте готовы к тому, что ваши задачи не ограничатся только обязанностями бизнес-аналитика.

Как начать?

Используйте разные информационные ресурсы для изучения. Для начала важно получить базу и узнать основные понятия IT. Вот несколько источников, которые мне помогли:

Там же в телеграм-чатах пробуйте найти ментора.

Вряд ли вас сразу возьмут на позицию бизнес-аналитика, если вы вообще не в теме, поэтому лучше начать работу со смежных областей. Например, в SEO можно хорошо понять, что такое проекты и как с ними работать.

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

Как перейти в бизнес-анализ?

Задавайте вопросы, ищите новые знакомства и расширяйте свои горизонты. Берите на себя больше обязанностей. «Я готов», — эта фраза должна стать вашим девизом.

Не бойтесь ошибиться. Ваш фейл — это шанс научиться чему-то. Увольнение — это не конец, а начало. Но расставайтесь с людьми хорошо: если допустили ошибку, имейте смелость признаться.

Отвечу на простом примере — как свичнуться для QA: это люди, которые имеют прямое отношение к разработке ПО:

  1. Попросите у себя на проекте вести демо: вы подтянете английский, научитесь слушать клиента, сможете что-то рекомендовать, уйдет страх.
  2. Обратитесь к Product owner с прямой просьбой: «Я хочу заниматься бизнес-анализом, помоги мне разобраться». То есть просите. Это не стыдно, наоборот, это возможность бесплатно получить информацию от практика.
  3. Вы получите теоретические знания, но дальше нужно пробовать идти на джуниор позиции.

Что нужно знать на старте?

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

Нужно понимать, как строить software, а для этого я рекомендую вам сделать небольшое веб-приложение, в котором будет несколько полей, форма для e-mail и кнопка «отправить». Ваша задача — сделать веб-форму, которая будет доступна в интернете. Это поможет понять, что такое веб-приложение и база данных с технической стороны, как общается клиент с сервером. В будущем, когда будете обсуждать вопросы внутри проекта с разработчиками, сможете оперировать понятными для них словами.

Почитайте про UML. Все вам не понадобится, нужно будет только пару диаграмм (Activity / Class / Use case). Хорошо, если у вас будут achievements с предыдущей работы, даже если это не касается IT (улучшение процесса, оптимизация чего-то).

Загуглите что такое SDLC. После этого, у вас будет представление того, что и как происходит хотя бы в теории.

Помогают ли курсы получить работу?

Я не ходил ни на одни курсы и не заплатил ни копейки денег за 8 лет. Курсы — это последнее место, куда бы я пошел тратить деньги. Лучше читайте книги, статьи, посещайте мероприятия.

Тем более, практически ни одна компания не говорит, что после курсов рассмотрит вас как кандидата.

Нужна ли сертификация?

Скажу так: на рынке большинство моих знакомых не имеют сертификации, в том числе и я. Если вам сильно хочется — можете пойти и получить. Что вы с ней будете делать в Украине — лично я не знаю. Возможно, это поднимет вам самооценку :)

Если вы хотите получить сертификацию, вы должны настраиваться на международный уровень.

Нужна ли техническая экспертиза?

Не обязательна, но это будет большим плюсом для украинского рынка. Тем более сейчас требования выросли. Ваша задача — не только найти подход к бизнесу, но и «подружиться» с разработчиками.

Какие программы нужно знать, чтобы начать работать?

Я бы сказал — никакие. Максимум — Excel. А Jira, TFS и прочие отличаются во всех компаниях. Они настолько разные, что невозможно все знать. Я бы сказал, что это самое последнее, в чем нужно разобраться.

Нужен ли английский?

Да, Upper-Intermediate — must have. Рекомендую украинский продукт Grammarly, помогает при написании документации. Я учил английский на оффлайн-встречах. Первые 2 месяца молчал, максимум мог сказать «Yes» или «No». Но потом начал пытаться говорить и спустя год уже хорошо коммуницировал с собеседниками.

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

«У мене був кращий старт, ніж у випускників Стенфорда, бо в мене багато досвіду». Розповідь Senior software engineer з LinkedIn Марії Панютіної

$
0
0

Львів’янка Марія Панютіна переїхала до Кремнієвої долини разом із чоловіком у 2012 році. Після роботи у GlobalLogic та Verifone, Марія влаштувалась на позицію software engineer у LinkedIn. Через рік жінка отримала підвищення до senior software engineer. Про етапи проходження співбесід, структуру роботи в команді та те, над чим зараз вона працює в компанії, Марія розказала DOU.

Про початок кар’єри програміста

Мені 29 років, програмістом я працюю більше 10 років. Почала як фрілансер ще у 2008-му.Тоді це не було мейнстрімом. У 2010 році я закінчила Львівський політехнічний інститут за напрямом «Комп’ютеризовані системи, автоматика і управління». За спеціальністю попрацювати не вийшло, не було сильного зацікавлення.

В Україні працювала в OSF Global Services та SoftServe UI-інженером. Майже всі проекти, де я побувала, були пов’язані з американським ринком. Чоловік також програміст, пише на С/С++. Познайомились ми в 2007 через спільних друзів. Жили в гуртожитку, вчились, працювали, правда, в різних компаніях. Разом росли кар’єрно — книжки, курси, фріланс. Узаконили стосунки в 2009. Це було доволі смішно.

Він: Маш, може одружимось?
Я: коли?
Він: давай у серпні?
Я: якщо 15-те —субота, то давай в суботу...

Переїзд і перша робота в США

У 2012 році він отримав можливість поїхати в США, і ми вирішили ризикнути. Ми приїхали за L1/L2 візами (внутрішньофірмовий переїзд). Тому в мене не було можливості працювати офіційно і потрібно було чекати на work permit (дозвіл на роботу). Перші кілька місяців я закінчувала свої проекти на SoftServe, потім, поки чекала, вибирала вакансії, які мені подобаються, складала список вимог, яких мені не вистачало, чого я ще не навчилась, та вдосконалювала знання, практикувала англійську. За час поки я чекала work permit — подавала на нього декілька разів, — я встигла навіть народила дитину. Їй було три місяці, коли я нарешті отримала дозвіл.

Я дуже боялась першого інтервю. Боялася свого акценту, що щось не зрозумію. Одна річ аутсорсний досвід і фріланс, інше — чужа країна, без знайомих чи друзів, величезна кількість продуктових компаній і сильна конкуренція. Оскільки на той час чоловік працював в GlobalLogic (це стаффінгова компанія тут), і тоді вони шукали інженерів на новий проект на Verifone, я вирішила спробувати свої сили на той же проект в розрахунку, що буде простіша інтеграція.

Інтерв’ю було доволі просте: усі питання були по резюме, але потрібно було знати кожну букву — що було там написано. Також дали куски коду з питаннями «А що буде, якщо я поміняю цей шматок на інший?», «А який буде результат виконання наступного?» і т. д. Наскільки я тепер розумію, часто стаффінгові компанії надають людей з ідеальним резюме без реальних знань, тому вони тоді перестраховувались.

Оскільки говорити неправду я ще не навчилась, наступного день мені подзвонили і привітали з успішним проходженням співбесіди. Проект полягав у написанні Reference Application для платіжних пристроїв. Першими користувачами додатка були транспортні системи в Індії і Австралії. Цей досвід я вважаю одним з найкращих у моєму житті, бо це був цікавий проект (JavaScript для custom hardware зі специфічним браузером), можливість працювати з чоловіком, і я перестала боятися своєї англійської.

Пропрацювавши на Verifone (через посередника GlobalLogic) більше півтора року, я вирішила глянути, що робиться на ринку праці. Пройшовши успішно декілька інтерв’ю в невеликих продуктових компаніях і отримавши оффери, вирішила піти, але менеджер з Verifone зробив контроффер, і я залишилась. Правда, пішла на інший проект. Там ще пропрацювала близько 10 місяців на стандартному проекті (Portal System).

Потім отримала дзвінок від рекрутера з LinkedIn і зрозуміла — це мій шанс працювати з Big Data, у великих проектах, змога застувати свої знання для покращення продуктивності і швидкості веб-додатків. Ще під час роботи на GlobalLogic і Verifone ми з чоловіком розуміли, що треба вчити щось нове, і майже весь свій вільний час тратили на LeetCode і «Cracking The Coding Interview» (вечорами, коли дочка спала чи вихідними — на прогулянках). Це того вартувало: чоловік працює в Google, а я — в LinkedIn як FTE (штатний інженер).

Про роботу в LinkedIn

Великі компанії завжди шукають кандидатів. Рекрутери з Facebook, Google, Apple мені пишуть раз у півроку (питають, чи бува не готова поміняти роботу). Зазвичай у день буває 2-3повідомлення зі стартапів, раз у тиждень — з менших компаній.

У LinkedIn я проходила стандартний набір: телефонна розмова з рекрутером, телефонне інтерв’ю (2 практичні алгоритмічні задачі і близько 5 теоретичних питань), і onsite (8-годинне7-модульнеінтерв’ю). Після проходження всього мені на вибір запропонували піти в одну з чотирьох команд. Це було дуже приємно. Я вибрала організацію Data.

У нашій команді близько 25 людей. Тут і data scientists, і pipeline engineers, backend, frontend. Ми працюємо над проектом, який називається «Test, Ramp and Ехреrementations» — платформа, що дозволяє менеджити налаштування і виконання A/B тестів незалежно від код релізів. Також ця платформа дозволяє ізолювати реальні результати експерименту від шуму.

Наприклад, було вирішено оновити версію якоїсь частини LinkedIn (уявімо, що треба поміняти зелену кнопку з написом Accept на оранжеву з написом Admit). Оскільки ці зміни зможуть побачити всі користувачі, а це більше 500 млн людей, ми подаємо ці зміни тільки на 5% користувачів — вони обираються рандомно за специфічним алгоритмом. Потім моніторимо, як змінились метрики. Якщо все ок, тоді піднімаємо процент (ramp) ще на 10%. І дивимося далі до миті, поки не буде 100% з позитивними метриками. Моніторинг, сповіщення — усе відбувається автоматично, базуючись на даних. Наразі в нас активні десятки тисяч тестів. Мені дуже подобається бачити, що всі рішення на фічі для продукту базуються на реальних даних, а не на баченні окремого менеджера чи інженера.

Зараз компанія інтегрується із системою «Майкрософт». На момент продажу однією з умов була вимога приватності (GDPR). Це було нашим найбільшим кошмаром. Задачі під значком GDPR малий найбільший пріоритет і найвищу критичність, скільки у разі запізнень компанія могла бути оштрафована на дуже велику суму. GDPR означає, що компанія не має права зберігати sensitive дані: генетична чи біометрична інформація, віросповідання, політичні уподобання і т. д. Уся інформація, яку я можу дивитись, має бути тільки сукупна. Тобто я не можу зробити вибірку за певними користувачами, а тільки за певними величинами, такими як — країна, платформа, мова і т. д. У перший день роботи в компанії усіх попереджають, що якщо хтось спробує глянути на дані певної людини — звільнення в той же день і штрафи. Тут з цим дуже серйозно, приватність — найважливіше.

Також після купівлі LinkedIn «Майкрософтом» ми мали доволі багато мітингів з темами про інтеграцію: як ми можемо допомогти один одному, яку інформацію можемо поширювати і т. д. Сам процес інтегрування не швидкий, досі обговорюються певні ситуації і питання.

LinkedIn прагне і працює над тим, щоб бути єдиною платформою, яка допомагає зростати кар’єрно. Тут стараються охопити всі вікові і соціальні групи. Після купівлі «Лінди» з’явилася можливість проходити технічні і нетехнічні курси. Головні правила компанії: «Members First», «Act like an owner» і «Make shit done». І вони мені подобаються своєю відвертістю. Я їх транслюю так: «Бери відповідальність за свою роботу, наші користувачі повинні мати можливість робити кар’єру своєї мрії».

Дуже подобається корпоративна етика в самій компанії. На мою думку, це поки що найкраще, що я бачила. Одне з головних правил — допомога один одному, адже ми — команда і в нас одна ціль. Зазвичай на кожному проекті є office hours — це коли будь-хто може підійти і попросити допомоги чи роз’яснень з певних питань. Тут швидко вчишся бути командним гравцем, а не соло.

Співбесіди в LinkedIn

Наразі, як представник LinkedIn, я проводжу телефонні та onsite-співбесіди. Можу сказати, що вимоги відрізняються від українських тим, що в нашій країні зазвичай питають про бібліотеки, мови чи специфічні питання з проекту. В США більше питають про алгоритмізацію, як ти вирішуєш проблеми. Дивляться, наскільки ти командний гравець. В Україні орієнтують на соло, а тут розуміють, что великий продукт одна людина строворити не може.

В LinkedIn, як і у всіх великих компаніях Долини, є свій процес інтерв’ювання. Перше — це, звичайно, HR, який перевіряє загальну адекватність програміста. Потім телефонне інтерв’ю. Воно зазвичай триває 45-60 хвилин.Перші 5 хвилин — представлення, наступні 15 — прості теоретичні питання, потім 30 хвилин — 1 чи 2 задачки (зазвичай використовується Skype for interview чи інший online editor), і якщо залишився ще час — то прикінцеві питання (типу, а який фреймворк ви використовуєте, а яка завантаженість).

Якщо пройшов телефонну співбесіду, то наступний крок — onsite. Це зазвичай інтерв’ю з 09:00 ранку до 16:00 вечора, яке складається з 7-мимодулів. Кожен модуль триває 45-60 хвилин:

  1. Алгоритими.
  2. Бачення продукту.
  3. Мова програмування (JavaScript у моєму випадку).
  4. Прагматичне програмування.
  5. Системний дизайн і архітектура.
  6. Обід з менеджером.
  7. І на кінець — hiring менеджер з рандомної інженерної організації.

На всіх модулях є по два інтерв’юери, окрім 6-гоі 7-го —там тільки по одному. Модулі 1, 3, 4 — написання коду на дошці з покриттям тестів і дизайном, 5 — діаграми на дошці. Решта — зазвичай проста розмова. Після онсайту кожен інтерв’юер має написати відгук на проходження свого модуля.

Потім йде засідання, де зачитують усі фідбеки і вирішують, давати чи не давати оффер. Якщо оффер не дали, то пишуть відгук, що саме пройшло не дуже добре (наприклад, якщо завалив алгоритми, то так і скажуть — вам треба попрацювати над алгоритмами).

Мій процес (від дзвінка рекрутера до першого дня в компанії) зайняв 4 місяці. Готувалась я за книжкою «Cracking the coding interview» + leetcode.comhackerrank.com.

Наразі я тут працюю вже 2,5 роки і отримала підвищення з software engineer до senior software engineer. Кожен процес підвищення — подання заявки менеджером, фідбеки від команди і інших менеджерів, рев’ю комітів з тестами і документацією — займає від 3 місяців, а якщо з позиції senior до staff — то від 6 місяців. Ти не можеш прийти до менеджера і сказати, що хочеш на вищу позицію. З менеджером постійно йде комунікація.

Щоб отримати підвищення, є три складові: craftsmanship, leadership, execution (кваліфікована робота, лідерство, виконання задач — ред.). Ти дивишся, наскільки ти просуваєшся у цих якостях. Наскільки ти більше береш відповідальності над проектом, за свою частину проекту, за людей, з якими працюєш, чи хороший у тебе код, чи все вчасно зроблене. Коли ти вже наближаєшся до наступного рівня, менеджер збирає пакет, фідбеки з менеджерської сторони, від твоїх колег, дивиться твої найкращі роботи. Кожний перехід має свій регламент. Зазвичай менеджер інформує, який є прогрес, що потрібно вдосконалити, чи потрібно над чимось попрацювати. Чим більша компанія, тим складніший процес.

Як компанія утримує своїх співробітників

Заробітна плата складається з 3-хскладників: база, бонуси і акції. Бонуси нараховують раз у рік, базуючись на річній продуктивності (OKRs, oncalls, feedbacks, etc). База може переглядатись і частіше. Акції нараховуються на 4 роки в момент підписання оффера і видаються перший раз після першого року в компанії 25% і по 6,25% кожних 3 місяці. Але розмір зарплати дуже залежить від компанії. На мою думку, найкращу зарплату з великих компаній дає Facebook, найменшу, — напевно, Tesla.

Я народила другу дитину, працюючи в LinkedIn. Ця компанія вважається найкращою в плані відпусток і декрету. Дають 12 тижнів повністю оплаченого parental leave і чоловікам, і жінкам, якщо у вас народилася дитина, коли ви були співробітником LinkedIn. Також дають 8-12тижнів disability (pregnancy/delivery) leave (у середньому 75% від заробітньої ставки, ці гроші не оподатковуються).

Усім співробітникам надають 2 тижні оплачуваного shut down (відпочинку — ред.): 1 тиждень на День незалежності, інший — на Різдво. Також є нелімітована відпустка: зазвичай люди беруть по 1-2тижні до кожного shut down. Якщо ти чи твоя дитина захворіли, можна взяти вихідний день чи працювати із дому.

Дуже зручний графік роботи. Наприклад, у нас будинок на околиці Сан-Хосе, і мені їхати на роботу по дві години в одну сторону у звичний для всіх час. Тому я приїжджаю на роботу о 6-йранку і закінчую о 3-йпо обіді, щоб уникнути цього трафіку. Усі мітинги, де я потрібна, закінчуються до цього часу.

Є безкоштовна мережа ресторанів зі сніданками, обідами і вечерями, барісти, спортзали, кімнати для мам, кімнати для сну, маленькі кухні з безкоштовною їжею у всіх офісах і на кожному поверсі (бутерброди, каші, снеки і т. д.), масажний кабінет.

Кожен місяць в п’ятницю є InDay, коли можна займатися своїм проектом чи покращувати свої знання на курсах. Є безкоштовні курси з 3D printing, laser cutting, photo printing, etc.

Медична страховка у всіх великих компаніях однакова. За два тижні коштує близько $900 на сім’ю. Я з них плачу тільки $100 на два тижні за всю сім’ю, все інше доплачує компанія. Але це страховка настільки хороша, що я за свої ускладнені пологи доплатила лише $250. Також у нас є послуги адвокатів. За $5-10 в місяць у тебе є адвокат на 2 випадки в рік. Є страховки життя. За два тижні я плачу за всі страховки (до оподаткування) близько $340. Є внески в пенсійний фонд. У свій приватний пенсійний фонд я відкладаю $500, а компанія доплачує від цієї суми 50%, але максимум $9 тис. у рік.

Підвищення кваліфікації

Вчитися потрібно завжди. Нові мови, нові стандарти. Прийшла в big data — і маєш трішки розбиратися, що це таке. Також до пари глянути на machine learning. Постійно треба, крім досвіду, отримувати нові знання. Я не закінчувала додаткових університетів, але я брала додаткові курси, і в Україні також. На інтерв’ю не було питань щодо моєї спеціальності, бо в мене диплом системного інженера. Це явно не те, чим я зараз займаюся. Але в мене був кращий старт, ніж у випускників Стенфорда, бо в мене багато досвіду. Я знаю, як писати продукт, працювати з менеджерами, з командою. Тут дивляться на те, наскільки ти знаєш, що ти робиш.

Усі компанії, в котрих я підписувала оффер, робили background check. Це не тільки виписка з поліції. Це ще й наскільки ти правдиво себе описав у резюме. Копія диплому нічого не означає, вони роблять офіційний запит в університет, щоб перевірити, що я там навчалася. Також вони дзвонять у попередні компанії, де ти працював останні 5 років. У моєму випадку дзвонили в GlobalLogic, SoftServe, OSF Global Services.

Життя з родиною в Кремнієвій долині

Найскладніше все починати з нуля. В Україні в мене була родина, кар’єра, друзі, знайомі, власна квартира. Тут — нічого. Як і в будь-якому місці, тут є свої плюси і мінуси. Найбільшою перевагою для нас є те, що ми — обоє програмісти — живемо в центрі технологій. Будь-коли можемо поміняти роботу. Мінус — тут дуже дорого. Це одне із найдорожчих місць у світі. Наприклад, приватний дитсадок і дошкільний/післяшкільний догляд — $2 300 у місяць, кредит на будинок + податок + комунальні послуги = $4 100 (в місяць). І це все опісля оподаткування заробітної плати, що в середньому складає близько 35%.

Після народження сина наше життя трішки ускладнилось, але ми справляємося. Розуміємо, що наші діти — це наші проблеми. У нас тут немає батьків чи родичів, які могли б відвести чи забрати дітей з дитсадка, школи. Тому доводиться викручуватися самим. Графік трошки складнуватий, день розписаний буквально по секундах.

Я прокидаюся о 5:00 ранку, готую меншому в дитсадок lunch box і одяг на день, старша снідає та обідає в школі. О 5:45 виїжджаю з дому, о 6:15 я вже в офісі. Чоловік прокидається о 5:30. О 6:20 будить і одягає дітей, о 6:45 відвозить у школу (дошкільний догляд) і їде в офіс. Я о 3:00 їду додому. Там маю годину, яку я можу присвятити собі. О 5:00 виїжджаю по дітей, о 5:45 ми з дітьми вдома. О 6:30 приїжджає чоловік, і до 8:30 стараємося присвятити час тільки дітям. О 8:30 ванні процедури, і кладемо дітей спати.

У нас немає такого, що вся домашня робота тільки на комусь одному. Обов’язки розподілені порівну: чоловік відповідає за чистоту в домі, миття посуди і прання одягу. На мені — готування їжі, годування, вбирання, купання дітей. Домашні дитячі завдання також на чоловікові. Двоє дітей — удвічі більше проблем, тому коли хворіє малий — з дому працюю я, коли хворіє мала — з дому працює чоловік.

Я часто чую від українок, що я погана мама, бо займаюся кар’єрою, а не домом і дітьми. На таке стараюся уваги не звертати, бо ми якісно проводимо час. Наприклад, моя дочка наприкінці своїх 4-хроків почала писати і читати. Зараз (5 років минуло у вересні) вона вже переписується зі мною і чоловіком в скайпі, багато читає самостійно і пише нам з чоловіком записки. І оскільки ми знаємо, що в нас мало часу вдень — ми його цінимо ще більше.

Часу на соціальне життя майже не лишається, але нам це не дуже заважає. Ми домашні і можемо спокійно сидіти з кавою і цікавою книжкою. Зараз можу сказати, що ми зробили дуже хорошу кар’єру в США. Чоловік після Verifone перейшов у Googlе. Але це було дуже важко — виховувати дітей, вчитися і працювати.

Що далі

Я не планую найближчим часом іти в іншу компанію чи створювати свій стартап. Наразі я займаюся дуже цікавим проектом з шикарними можливостями за достойну оплату. Кожного тижня я маю розмову з менеджером, кожні два тижні — з senior менеджером про те, що я роблю, чим займаюся, що відчуваю, яким є мій прогрес, як я себе бачу далі. Я відчуваю, що в цій компанії я буду найближчі декілька років точно. Поки що мені всього достатньо. Далі у мене буде більше не написання більше коду, а відповідальності.

Путеводитель по сертификациям проектного менеджмента

$
0
0

Как подтвердить, что ты профессионал в той или иной области? Успешный опыт, результат интервью, рекомендация коллег — все это носит субъективный характер. В академических кругах работает принцип: коллегия профессионалов должна проверить знания и подтвердить вашу экспертность. Так работает получение докторской степени — вас выслушает коллегия экспертов (других докторов наук) и даст свой вердикт. В бизнес-среде действует похожий подход, но вместо академической институции выступает некая организация, которая аккредитует экспертов согласно собственным критериям. Как правило, это определенные требования к опыту, высшему образованию, прохождению специального обучения и сдача теста, экзамена, интервью или оценки комиссией.

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

Выбор сертификации зависит от этапа карьеры и потребностей профессионала в определенном своде знаний. В статье мы рассмотрим основные сертификации, которые могут быть интересны руководителям проектов.Несмотря на то, что в данной статье представлены наиболее распространённые сертификации, все равно останутся те, которые здесь не описаны, поскольку рынок знаний в ІТ-сфере является одним из самых динамичных.

Project Management Institute (PMI)

PMI — международная организация, которая привлекает волонтеров для создания стандартов по управлению проектами. Созданный PMI свод знаний по управлению проектами (PMBoK) был признан Американским национальным институтом стандартов (ANSI) и Международной организацией по стандартизации (ISO). PMI объединяет более 500 тыс. экспертов в более чем 190 странах. В Украине он представлен PMI Kyiv Chapter. Самая распространенная PMI сертификация Project Management Professional (PMP) считается одной из самых престижных. На сегодня более 800 тыс. человек получили эту сертификацию.

Обзор PMI Сертификаций:

Project Management Professional (РМР) — для допуска к экзамену требуется 3,5 года опыта работы проектным менеджером. Подготовка к экзамену занимает около 3 месяцев. Обязательным критерием является прохождение обучения в аккредитованном центре, не менее 35 часов. Сам экзамен состоит из 200 вопросов за 4 часа. Вопросы построены так, что на них, как правило, нет очевидного ответа. Все предложенные варианты могут выглядеть правильными, но надо выбрать только один из 4-х.Сертификация особенно распространена в США, но в мире она также остается одной из самых узнаваемых. Экзамен строится на материале из PMBoK, но готовиться к экзамену лучше по специальным материалам. Одними из самых популярных являются руководства к подготовке от Rita Mulcahy.

Certified Associate in Project Management (CAMP) — аналог PMP, ориентированный на кандидатов с небольшим опытом работы или даже без него. Вопросы те же, но их меньше и поэтому экзамен немного проще. Как и PMP, он базируется на PMBoK.

Portfolio Management Professional (PfMP)и Program Management Professional (PgMP) — сертификации считаются одними из самых сложных существующих профессиональных сертификаций. Требуют опыт в 6000 часов управления проектами, программами или портфелями проектов. В мире чуть больше 500 сертифицированных PfMP и чуть более 2000 PgMP.

Критерий сравненияPMPCAPMPgMPPfMP
Профессиональное образование35 часов обучения на аккредитованных курсахМинимум 23 часа обучения на аккредитованных курсах
Требования к опытуСо степенью бакалавра или международный эквивалент, минимум 3 года (4500 часов) опыта управления всеми аспектами проекта за последние 8 лет.Со степенью бакалавра или международный эквивалент, минимум 4 года (6000 часов) проектного менеджмента и минимум 4 года (6000 часов) опыта управления программами за последние 15 лет.Со степенью бакалавра или международный эквивалент, минимум 4 года (6000 часов) опыта управления портфелями проектов и 8 лет (96 месяцев) общего стажа за последние 15 лет.
Информация про экзамен4 часа, 200 вопросов3 часа, 150 вопросовОценка 1: проверка комиссией
Оценка 2: 4 часа, 170 вопросов
Оценка 1: проверка комиссией
Оценка 2: 4 часа, 170 вопросов
Стоимость экзаменаСтандартная: $555
Для членов PMI: $405
Стандартная: $300
Для членов PMI: $225
Стандартная: $1000
Для членов PMI: $800
Стандартная: $1000
Для членов PMI: $800

Risk Management Certification (RMP) — сертификация не особо распространенная в наших широтах. Она рассчитана на тех, кто занимается оценкой проектных рисков. Как правило, роль риск-менеджера выделяют на очень больших проектах или как отдельное лицо/подразделение в организации. Экзамен дает обширный набор инструментов и практик для работы с рисками. Скорее, имеет смысл как дополнение к PMP или любой другой сертификации.

PMI-SP — эта сертификация ориентирована на тех, кто специализируется на построении календарного плана для проекта. Как и RMP, имеет ценность как дополнение к PMP или аналогичной сертификации.

PMI-PBA — сертификация предназначена для бизнес-аналитиков. Вполне достойный аналог BABoK и сопутствующих сертификаций.

PMI-ACP — в рамках сертификации рассматриваются Agile, Scrum, Kanban, XP, Lean и др. Достойная альтернатива различным Agile-сертификациям.

Критерий сравненияACPPBARMPSP
Профессиональное образование21 час обучения на аккредитованных курсах по Agile практикам35 часов обучения на аккредитованных курсах по бизнес-анализу30 часов обучения на аккредитованных курсах по риск-менеджменту30 часов обучения на аккредитованных курсах по планированию расписания
Требования к опыту2000 часов работы с проектными командами за последние 5 лет и 1500 часов работы с Agile методологиями и практиками за последние 3 года.
Со степенью бакалавра или международный эквивалент, минимум 3 года (4500 часов) работы бизнес-аналитиком и 2000 часов работы с проектными командами за последние восемь лет.
Со степенью бакалавра или международный эквивалент, минимум 3000 часов работы с риск-менеджментом за последние 5 лет.
Со степенью бакалавра или международный эквивалент, минимум 3000 часов работы с расписанием проекта за последние 5 лет.
Информация про экзамен3 часа, 120 вопросов4 часа, 200 вопросов3,5 часа, 170 вопросов3,5 часа, 170 вопросов
Стоимость экзаменаСтандартная: $495
Для членов PMI: $435
Стандартная: $555
Для членов PMI: $405
Стандартная: $670
Для членов PMI: $520
Стандартная: $670
Для членов PMI: $520

AXELOS

Совместное предприятие правительства Великобритании и компании Capita, объединило сертификации, которые находятся в собственности правительства. Из них самые распространенные: ITIL, PRINCE2, P3O, MoP, MSP.

ITIL — набор лучших практик по управлению IТ-сервисами. Очень недооцененная сертификация и одна из наиболее релевантных для сферы ІТ-аутсорсинга. Свод практик состоит из 5 книг, которые по структуре чем-то напоминают PMBoK. Тут нет областей знаний, только группы процессов, и вместо 49 их около 30. Сертификация имеет много уровней.

Самый высокий уровень Masterсопоставим по сложности с PfMP, хотя сравнивать эти сертификации довольно сложно. Особое распространение ITIL получил в ІТ-департаментах крупных компаний. ITIL идет часто об руку с ISO 20000 или COBIT (альтернатива). Сертификация имеет модульную структуру.

Начальный уровень, или Foundation Level — это экзамен, который состоит из 40 вопросов с вариантами ответов. Нет каких-либо предварительных требований для допуска к экзамену. Стоимость экзамена — около 300 евро. После его прохождения начисляется 2 балла, которые могут пригодиться для дальнейшей сертификации.

Относительно недавно в структуре появился новый уровень Practitioner Level. Если начальный уровень — это лишь теория, то на этом уровне проверяются уже практические аспекты. За прохождение уровня Practitioner дается 3 балла.

Следующий уровень ITIL Intermediate Levelтребует как минимум сданного ITIL Foundation и обучения на авторизованных курсах. Данный уровень имеет модульную структуру и разделяется на две категории: Service Lifecycle и Service Capability. Для получения сертификата можно выбрать лишь одно из направлений. Service Lifecycle ориентировано на изучение процессов управления жизненным циклом сервисов в 5 модулях (курсы и соответствующие экзамены):

  • Service Strategy;
  • Service Design;
  • Service Transition;
  • Service Operation;
  • Continual Service Improvement.

За каждый экзамен группы Lifecycle дается 3 балла.

Service Capability покрывает практики управления ІТ-услугами в отдельных областях. Сюда входит 4 модуля:

  • Operational Support and Analysis (операционная поддержка и анализ);
  • Service Offerings and Agreements (сервисные предложения и соглашения);
  • Release Control and Validation (управление конфигурациями и изменениями);
  • Planning Protection and Optimization (защита и оптимизация планирования).

За каждый экзамен группы Lifecycle дается 4 балла. Для тех, кто решил пойти дальше, как раз и нужны эти баллы. Кандидату необходимо набрать минимум 22 балла, чтобы получить уровень ITIL Expert Level. Еще одним необходимым условием является сдача экзамена MALC (Managing Across the Lifecycle), который дает 5 баллов.

Те, кто решил не останавливаться на достигнутом, может еще получить квалификацию ITIL Master. Для получения квалификации ITIL Master необходимо объяснить и обосновать, как вы лично выбираете и применяете ряд принципов и знаний из ITIL и поддерживающих методов управления для достижения желаемых бизнес-результатов, решая одну или несколько практических задач.

PRINCE2 — одна из самых распространенных альтернатив PMI PMBoK. Британский стандарт по управлению проектами, как и его американский аналог, применим в разных индустриях, не имеет ограничений по размеру или специфике проекта. Основное отличие, которое можно выделить, — это то, что PMBoK есть сводом знаний, в то время как PRINCE2 позиционируется как методология, фокус на том, что необходимо делать.

PRINCE2 ProcessesPMBoK Process Groups
Starting-up a ProjectInitiation
Initiating a Project
Directing a ProjectExecuting
Controlling StageMonitoring and Control
Managing Product DeliveryClosing
Managing Stage Boundary
Closing Project

По сути, PRINCE2 и PMBoK не являются конкурентами и не противоречат друг другу, некоторые компании используют и то, и другое. PRINCE2 имеет несколько уровней сертификацииPRINCE2 Foundationи PRINCE2 Practitioner. Оба экзамена заметно проще PMP. В 2017 году Axelos обновила экзамен, но пока еще есть возможность сдавать версию 2009 года. Также есть экзамен PRINCE2 Agile, Guidebook, который представляет собой комбинацию из оригинального PRINCE2 и Agile-принципов и лучших практик.

Prince2PMBoK
7 PrinciplesНет принципов :)
7 Themes10 Knowledge Areas
7 Processes5 Process groups
41 Activities47 Processes
2 Techniques (описаны подробно)
40 Techniques (ссылки на другие ресурсы)
119 tools and techniques (детально описаны)

P3O, MoP, MSP

MSP — это логическое продолжение сертификации PRINCE2. Если PRINCE2 описывает, как управлять проектами, то MSP, или Managing Successful Programmes — это методология по управлению программами. MSP представляет собой практические рекомендации по созданию среды программы и объясняет, как уровень программ должен взаимодействовать с уровнем проекта и более высокими уровнями в рамках крупной организации, которая обычно видит программу как часть общего портфеля.

Для обеспечения надлежащего управления бизнес-изменениями и всеми связанными инициативами (программы и проекты) необходим портфельный уровень управления. MoP™ — Management of Portfolios — является подходящим руководством для этого. Для объединения подходов по управлению проектами, программами и портфелями была разработана модель P3O и фреймворк для оценки зрелости процессов в компании P3O3. Все эти модели и руководства имеют сертификации. Большинство разделено на два уровня — Foundation и Practitioner. Но пусть название Foundation не вводит в заблуждение, это всего лишь уровень владения методологией, как правило, означает теоретические знания. Для выбора подходящей сертификации стоит обращать внимание именно на саму методологию. PRINCE2 — это уровень Project Manager/Senior Project Manager, MSP — Program Manager/Delivery Manager. MoP- Director/VP. P3O — подойдет для C-levelменеджеров, собственников бизнеса.

International project management association (IPMA)

Европейский аналог PMI IPMA предлагает четыре уровня сертификации:

В отличие от сертификаций PMI и PRINCE2, которые проходят на базе сертификационных центров (Prometric, PeopleCert), сертификация IPMA проводится местным сертифицирующим органом. В Украине это Сертификационное отделение УКРНЕТ/Серт Украинской ассоциации управления проектами «УКРНЕТ» , которая прошла международную валидацию на соответствие сертификационной программы IPMA® 4-L-C правилам IPMA®.

Процесс сертификации выглядит следующим образом:

Сертификация проводится на основе модели компетенции ICB. То есть основой для сертификации является стандарт, который описывает, что должен знать кандидат и какими навыками обладать. Оценку знаний проводит местная коллегия экспертов.

Также организация проводит сертификацию консультантов по управлению проектами. Два уровня международной сертификации IPMA®:

PMC IPMA®: Сертифицированный консультант по управлению проектами
За последние 8 лет имеет не менее 3 лет опыта работы в качестве консультанта по управлению программами и портфелями проектов. За последние 20 лет имеет 3 года опыта работы в качестве менеджера проектов. Способен консультировать в области управления проектами на уровне проекта.

PPMC IPMA®: Сертифицированный консультант по управлению программами и портфелями проектов
За последние 8 лет имеет минимум 5-летнийопыт консалтинга по УП, не менее 2 лет из которых — в качестве консультанта по управлению программами и портфелями проектов. За последние 20 лет имеет 3 года опыта работы в качестве менеджера комплексных проектов. Способен консультировать в области управления проектами на уровне стратегии/организации.

Scrum Alliance

Провайдер одной из самых распространённых сертификаций для проектных менеджеров CSM (Certified Scrum Master)часто предлагает связку сразу из двух сертификаций CSM и CSPO (Certified Scrum Product Owner). Полная карта сертификаций выглядит следующим образом:

Также предлагаются сертификации Scrum Alliance Certified Enterprise Coach℠ (CEC), Certified Scrum Trainer® (CST®),Certified Agile Leadership. В последнее время Scrum Alliance подвергается критике, так как для получения сертификации нужно пройти обязательный тренинг. Цена тренинга составляет $800-1500, и, как правило, он проходит в игровом формате. После его прохождения открывается доступ к экзамену, который носит больше формальный характер.

Scrum.org

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

ICAgile

Этот рекордсмен по количеству сертификаций предлагает 8 треков (направлений) + Fundamental. Всего насчитывает 26 сертификаций. Это один из самых новых провайдеров сертификаций, стремительно набирающих популярность.

Large Scale Scrum (LeSS)

LESS — это фреймворк-надстройка над Scrum, который создан для работы с большими проектами и программами с использованием гибких методологий. Для получения необходимо пройти соответствующие курсы. Предлагаются три уровня сертификации:

Scaled Agile Framework (SAFe)

Scaled Agile — Scaled Agile Framework (SAFe vX.X) — один из самых тяжеловесных Agile-фреймворков. Для оценки масштабов достаточно взглянуть на сравнение инфографики, описывающей Scrum и Scaled Agile Framework:

Scrum

SAFe 4.5

Большинство гибких методологий не выходят за пределы уровня команды. SAFe предоставляет консолидированную структуру на уровне компании. SAFe состоит из четырех уровней: команда, программа и портфолио, поток ценности. Сертификация имеет смысл только в том случае, если планируется внедрение SAFe или предполагается работа подобного масштаба (более 50 человек). Предлагаются следующие сертификации:

  • Certified SAFe® Agilist (SA)
  • Certified SAFe® Program Consultant
  • Certified SAFe® Practitioner
  • Certified SAFe® Scrum Master
  • Certified SAFe® Advanced Scrum Master
  • Certified SAFe® Release Train Engineer
  • Certified SAFe® Product Owner/Product Manager
  • Certified SAFe® DevOps Practitioner (SDP)
Scrum Master
Fundamentals Professional Expert Master
Scrum AllianceCSMCSPCTC/CEC/CST
Scrum.orgPSM IPSM IIPSM III
PMIPMI-ACP
ICAgileICPICP-ATF (facilitation)
ICP-ACC (Coaching)
ICE-AC (Coaching)ICM (experts in multiple disciplines)
Product Owner
Scrum AllianceCSPOCSP
Scrum.orgPSO IPSPO II
SAFePMPO
ICAgileICPICP-BVA
ICP-PFM
ICE-VMICM
Team Member
Scrum AllianceCSDCSP
Scrum.orgPSD I
ICAgileICPICP-PRG
ICP-ASD
ICP-TST
ICP-ATA
ICE-DV
ICE-AT
ICM
SCALING
SAFeSASPSPC/SPCT
LeSSCertified LeSS PractitionerCertified LeSS Trainer
Scrum.orgNEXUS OpenSPS
DADCertified Disciplined AgilistCertified Disciplined Agile PractitionerCertified Disciplined Agile Coach

Lean Kanban University

Сертификации, которые предлагает этот университет могут заинтересовать тех, кто практикует Kanban.

Practitioner (TKP)покрывает основные концепции Kanban. В рамках обучающих классов проходят 4 типа Kanban-систем, как проходят ежедневные митинги и обзор следующих уровней сертификации.

Manager (KMP)состоит из двух частей KMP I и KMP II. В отличие от первой, сертификация подразумевает, что вы можете не только следовать процессам и знать их основные нюансы, но и построить систему с нуля или оптимизировать существующую.

Также есть сертификации для тренеров Trainer (AKT)и коучей Coach (KCP). На них стоит обратить внимание тем, кто планирует не только строить процесс, но и учить других, как это делать, выступать в роли тренера.

Six Sigma

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

  • Yellow Belt:этот уровень рассчитан на члена проектной команды или организации, который работает над улучшениям на проекте/в организации (process improvement).
  • Green Belt:обладатель этого пояса также работает над улучшениями, но уже оперирует метриками и может самостоятельно вести небольшой проект.
  • Black Belt:черный пояс дают тем, кто способен вести проект и тренировать остальных в своей команде.
  • Master Black Belt (этот уровень не всегда присутствует в иерархии сертификаций провайдеров): это тот, кто работает на стратегическом уровне в организации, проводит тренинги и готовит к сертификации обладателей черного и зеленого поясов.

Организации, которые предлагают сертификацию по Six Sigma:

Также ряд университетов имеет сертификационные программы по Six Sigma.

Непростой выбор

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

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

Немного о моем опыте

PMO Competence Manager в SoftServe, в прошлом — Senior Project Manager. Вел несколько крупных аккаунтов, вырастил из нескольких небольших проектов третий по величине аккаунт на SoftServe. На данный момент ответственный за направление People Excellence. Занимаюсь разработкой моделей компетенций для проектных менеджеров. Оптимизирую процессы оценки знаний и performance руководителей проектов всех уровней, отбора внешних кандидатов. Координирую менторские и on-boarding программы для PM-ов. Совместно с SoftServe University разрабатываем тренинги для проектных менеджеров.

После 2-3лет работы проектным менеджером решил сдать экзамен PMP, считаю его базовым не только для менеджеров проектов, но и для операционных руководителей. Подготовительные курсы проходил в Израиле в Technion.

Примерно через год после сдачи PMP, на одном проекте с крупным британским концерном, столкнулся с процессами, которые отличались от тех, что в PMBoK. Оказывается, у них на корпоративном уровне внедрен PRINCE2. Чтобы лучше понимать процессы на стороне клиента, прочитал Managing Successful Projects with PRINCE2® 2017 Edition. Уже после окончания проекта достаточно хорошо разобрался в этом подходе и без труда сдал экзамен.

На другом проекте мы перешли от Fixed-Price модели к SLA поддержке. Решил построить процесс согласно best practices и изучил ITIL Service Operation. Через некоторое время для более полного понимания картины прочитал остальные 4 книги и решил сдать экзамен, больше чтобы проверить свои знания и понимание.

Веду в SoftServe тренинги по Scrum и Kanban, но сертификаций в этом направлении не проходил, пока не вижу в этом смысла. Планирую в ближайшее время пройти тренинг и сдать сертификацию по SAFe. Есть большой интерес со стороны клиентов к этому фреймворку.


Найкращі ІТ-роботодавці 2018

$
0
0

Цього року ми перезапустилирейтинг роботодавців — обнулили попередні голоси, розширили анкету та створили категорію для великих компаній. За два місяці 14 602 ІТ-спеціалісти проголосували за 993 компанії.

За результатами їхнього голосування ми склали рейтинг найкращих роботодавців України. Представляємо результати опитування станом на 17 грудня 2018 року.

Майже щодня додаються нові відповіді, і в рейтингу відбуваються невеликі коливання. Актуальні результати ви завжди можете подивитися у зведеній таблиці. Також доступні результати минулого року.

Категорія «понад 1500 спеціалістів»

Одним з головних нововведень цьогорічного рейтингу роботодавців стала категорія для великих компаній, у якій поборотися за звання найкращої мали змогу 7 ІТ-компаній. Проте бар’єр у 10% від загальної кількості працівників не подолали Luxoft і NIX Solutions.

П’ять компаній, яким вдалося перетнути бар’єр, зібрали 27% від загальної кількості оцінок рейтингу.

Найкращою серед найбільших ІТ-компаній стала Infopulse. На другому місці — SoftServe, за компанію проголосувала рекордна кількість спеціалістів — 1900. GlobalLogicзамкнула трійку лідерів.

КомпаніїЗагальний балКомпенсаціяУмови праціКар’єраПроектЛояльність
Infopulse
91
400 анкет
88
91
90
90
95
SoftServe
88
1901
82
91
89
87
92
GlobalLogic
85
538
84
88
81
84
91
4EPAM
84
749
83
84
85
83
87
5Ciklum
82
317
75
87
76
84
86
Загальний бал в таблицях округлено до цілого, щоб побачити точне значення, наведіть на число і зачекайте кілька секунд.

Категорія «800–1500 спеціалістів»

Українська продуктова компанія Genesisстала найкращим роботодавцем у категорії «800–1500 спеціалістів».Співробітники високо оцінили компанію за всіма розділами анкети.

Переможець минулого року в категорії «від 800 спеціалістів» — Intellias — посів друге місце. На третьому місці — Sigma Software.

КомпаніїЗагальний балКомпенсаціяУмови праціКар’єраПроектЛояльність
Genesis
96
124 анкети
95
96
95
95
98
Intellias
92
142
91
95
89
89
95
Sigma Software
91
162
87
95
91
91
93
4DataArt
90
219
90
91
85
87
95
5N-iX
85
90
79
91
83
87
88

Категорія «200–800 спеціалістів»

Переможцем у цій категорії стала Govitall, на другому місці — Trionika, але компанії розділяє лише 0,13 бала. На третьому місці лідер минулорічного рейтингу в цій категорії — Netpeak.

Найбільшу кількість оцінок набрала Cogniance (202 анкети) — з результатом у 93 бали компанія посіла 11 місце.

Срібний призер минулого року — Terrasoft — не подолав бар’єр за мінімальною кількістю голосів.

КомпаніїЗагальний балКомпенсаціяУмови праціКар’єраПроектЛояльність
Govitall
99
81 анкета
97
99
98
99
99
Trionika
98
63
98
99
98
98
98
Netpeak
98
67
96
99
98
98
99
4AgileEngine
97
82
96
97
97
97
98
5Symphony Solutions
96
79
94
97
96
95
97

Категорія «81–200 спеціалістів»

Уже другий рік поспіль Codemotionстає найкращим роботодавцем у своїй категорії. Цього року компанія перейшла до категорії «81–200 спеціалістів»,і знову 52 працівники поставили максимальну кількість балів.

На другому і третьому місцях — Ringostatта Technorelyвідповідно.

Узагалі в цій категорії майже 40 компаній мають оцінки вище 90 балів.

КомпаніїЗагальний балКомпенсаціяУмови праціКар’єраПроектЛояльність
Codemotion
100
52 анкети
100
100
100
100
100
Ringostat
100
30
100
100
100
100
100
Technorely
100
42
100
100
100
100
100
4Active Bridge
100
33
100
100
100
100
100
5Leobit
98
70
97
99
97
99
99

Рейтинг продуктових компаній

Цього року ми вперше обрали топ-5 продуктових компаній рейтингу, які мають щонайменше 30 анкет.

Найкращою стала одеська компанія Ringostat, що розробляє call tracking сервіс. Також серед продуктів компанії віртуальна АТС та форма зворотнього дзвінка.

M2E Proпотрапила на друге місце. Компанія розробляє розширення Magento для Amazon і eBay.

На третьому місці — Terrasoft, яка не пройшла бар’єр за мінімальною кількістю анкет у категорії «200–800 спеціалістів».Основний продукт компанії — bpm’online — платформа для управління бізнес-процесами та CRM.

Genesis, яка стала найкращою у категорії «800–1500 спеціалістів»,посіла четверте місце. У її активі понад 15 продуктів, зокрема медіа-компанія Genesis Media, дошка оголошень у Нігерії JiJi та мобільний застосунок BetterMe.

П’яте місце зайняла Everad — СРА-мережа.

КомпаніїЗагальний балКомпенсаціяУмови праціКар’єраПроектЛояльність
1Ringostat
100
30
100
100
100
100
100
2M2E Pro
97
35
94
97
97
98
99
3Terrasoft
96
40
94
98
96
97
97
4Genesis
96
124
95
96
95
95
98
5Everad
95
42
93
97
93
96
95

Лідери у містах

Київ

КомпаніїЗагальний балКомпенсаціяУмови праціКар’єраПроектЛояльність
1Codemotion
100
37 анкет
100
100
100
100
100
2Govitall
99
81
97
99
98
99
99
3Trionika
98
63
98
99
98
98
98
4LITSLINK
97
34
96
97
97
98
98
5Terrasoft
96
40
94
98
96
97
97

Харків

КомпаніїЗагальний балКомпенсаціяУмови праціКар’єраПроектЛояльність
1ITOMYCH STUDIO
98
42 анкети
97
99
97
98
99
2AgileEngine
98
48
97
98
98
97
98
3Ascendix Technologies
97
38
96
97
97
97
100
4TeamDev
96
34
95
98
94
96
97
5Eastern Peak
95
47
93
97
95
96
95

Львів

КомпаніїЗагальний балКомпенсаціяУмови праціКар’єраПроектЛояльність
1Leobit
98
70 анкет
97
99
97
99
99
2Binariks
98
34
97
98
98
99
99
3Symphony Solutions
96
41
94
96
95
96
98
4TechMagic
94
42
92
95
94
94
96
5Intellias
94
58
93
96
92
91
96

Дніпро

КомпаніїЗагальний балКомпенсаціяУмови праціКар’єраПроектЛояльність
1LANARS
97
37 анкет
97
98
95
97
100
2M2E Pro
97
35
94
97
97
98
99
3AMC Bridge
94
81
94
95
93
93
98
4OWOX
93
78
88
95
91
93
96
5Cleveroad
93
47
91
92
93
94
93

Одеса

КомпаніїЗагальний балКомпенсаціяУмови праціКар’єраПроектЛояльність
1Netpeak
98
40 анкет
96
99
98
98
99
2Provectus
95
74
93
97
94
94
97
3Lohika
94
60
94
96
89
91
98
4HYS Enterprise
92
35
86
95
92
93
95
5Andersen
90
31
86
94
91
89
94

Вінниця

КомпаніїЗагальний балКомпенсаціяУмови праціКар’єраПроектЛояльність
1Pillar
93
37анкет
92
95
91
93
95
2Exadel
92
32
90
97
89
89
96
3Onseo
89
32
89
90
84
89
93
4EPAM
86
30
81
84
86
85
91
5Delphi Software
84
41
84
89
78
84
85

Черкаси

КомпаніїЗагальний балКомпенсаціяУмови праціКар’єраПроектЛояльність
1Active Bridge
100
33 анкети
100
100
100
100
100
2Master of Code Global
94
58
90
94
95
95
97
3SPD-Ukraine
92
43
89
94
90
92
97
4eKreative
91
55
89
93
89
91
94

Найкращі з найкращих

Переможці за кожною зі шкал оцінювання:

1500+800–1500200–80081–200
КомпенсаціяInfopulseGenesisTrionikaCodemotion
Умови праціSoftServeGenesisGovitallCodemotion
Кар’єраInfopulseGenesisGovitallCodemotion
ПроектInfopulseGenesisGovitallCodemotion
ЛояльністьInfopulseGenesisNetpeakCodemotion

Підсумки

Infopulse — найкращий роботодавець категорії «понад 1500 спеціалістів»;
Genesis — найкращий роботодавець категорії «800–1500 спеціалістів»;
Govitall — найкращий роботодавець категорії «200–800 спеціалістів»;
Codemotion — найкращий роботодавець категорії «81–200 спеціалістів» (і найкращий роботодавець Києва).

Codemotion — найкращий роботодавець Києва (і найкращий роботодавець категорії «81–200 спеціалістів»);
ITOMYCH STUDIO — найкращий роботодавець Харкова;
Leobit — найкращий роботодавець Львова;
LANARS — найкращий роботодавець Дніпра;
Netpeak — найкращий роботодавець Одеси;
Pillar — найкращий роботодавець Вінниці;
Active Bridge — найкращий роботодавець Черкас.


Вітаємо переможців та ще раз спасибі майже 15 тисячам спеціалістів, які зробили цей рейтинг своїми оцінками.

«Це не робота, а волонтерство». Як і навіщо програмісту викладати в університеті

$
0
0

Не можна сказати, що викладання у виші — дуже популярне хобі ІТ-спеціалістів. Зарплата викладача незрівнянно менша за гонорари розробників чи тестувальників. А щоб створити навчальну програму та готуватися до лекцій, доведеться витратити немало свого вільного часу.

Проте багато людей мають хист до того, щоб передавати свій досвід іншим. Це допомагає поглибити власні технічні знання та дає привід самореалізуватися як викладач. Ми з’ясували, як це можна зробити, які виклики чекають під час викладання та як самому отримати від такої діяльності якомога більше переваг.

Хочу викладати. До кого звертатися?

Наразі в усіх ЗВО (закладах вищої освіти) є підвищений попит на викладачів-практиків, які готові ділитися знаннями та досвідом. Тож перейти від бажання до справи досить просто. Імовірно, що адміністрація університету зрадіє ініціативі та посприяє проходженню всіх формальностей.

Найпростіший варіант — звернутися до керівництва факультету або кафедри, де ви навчалися. Зазвичай викладачів менше, ніж предметів для вивчення, тому майже в будь-якому виші знайдуться «вільні» курси.

Артем Коротенко, Software engineer в Tatem Games та викладач НТУУ «КПІ»:

«Я помітив, що мене тегнули під постом від представника ФІОТ (факультет інформатики та обчислювальної техніки) про пошук викладачів на два вільні курси. Я закінчив цей факультет, але іншу кафедру рік тому. Отож порозуміння з керівництвом кафедри вдалося досягти швидко. Фактично я отримав дозвіл взяти достатньо нестандартний курс — „Введення в ігрову розробку“ та майже з нуля створити матеріали до нього».

Можливо, у вас є знайомі, які вже викладають у ЗВО. Тоді можна звернутися до них та запропонувати свою кандидатуру. Ба більше, якщо на факультеті вже працюють ІТ-спеціалісти, значить університет має досвід співпраці з практиками. І, скоріше за все, цінуватиме такого викладача, намагаючись не докучати йому формальностями.

Андрій Заблоцький, QC Expert у SoftServe та викладач НУ «ЛП»:

«Я звернувся до Зеновія Вереса — колеги по SoftServe та засновника програми „Інтернет речей“ в НУ „Львівська Політехніка“. Він уже не перший рік працює над трансформацією навчальних програм. Зеновій запропонував мені зробити пілот курсу „Основи тестування ПЗ“. Отже, моє бажання збіглося з прагненням університету змінюватися та переходити від вивчення Pascal з конспектів до створення живих робочих аплікацій, які вирішують певні задачі. А головне — почав співпрацювати з людьми, які поділяють мою думку та бачать у цьому сенс».

Якщо із ЗВО співпрацює ваша компанія, то завітайте безпосередньо до департаменту, який відповідає за таке партнерство. Там вам підкажуть, які потреби є в університетів та з чого можна почати.

Максим Почебут, директор освітніх програм в EPAM Україна, кандидат технічних наук:

«Ми співпрацюємо із 20 вишами у 5 містах України і знаємо, як університетам потрібні нові викладачі, які готові взяти на себе навантаження у веденні повноцінного курсу або проведенні тематичних лекцій, практичних занять. Тому радо ділимося з колегами необхідною інформацією про такі можливості. Якщо у вашій компанії такої сервісної служби немає, я раджу звернутися безпосередньо до вашої Alma Mater або ж до завідувача кафедри будь-якого закладу. З ним можна домовитися про зустріч та подальшу співпрацю».

До яких формальностей готуватися

За словами Максима Почебута, зі сторони вишів є певні вимоги до майбутнього викладача. Зазвичай право викладати дають спеціалістам, які завершили магістратуру та мають профільну освіту. Але основна вимога — це бажання якісно викладати свій предмет та володіння майстерністю викладання. Якщо є бажання і немає досвіду викладання, то людині можуть не довірити одразу вести повноцінний курс. У такому випадку можна почати з проведення практичних занять або роботи зі студентами у якості ментора на невеличких університетських проектах.

У ЗВО у магістерській програмі лише невеликий відсоток викладачів може не мати ступеня кандидата наук, пояснює Артем Коротенко. У бакалавраті теж є таке обмеження, але відсоток вищий. Проте на ІТ-спеціальностях існує величезний дефіцит викладацьких кадрів, особливо якщо мова йде про кваліфікованих спеціалістів з реальним досвідом у сфері.

«Тому, скоріше за все, це закінчується співбесідою з керівництвом та працевлаштуванням за повною державною схемою — автобіографія від руки, флюорографія, охорона праці й тому подібне», — розказує він.

Андрій Заблоцький не мав жодного досвіду викладання до того, як звернувся до «Львівської Політехніки». Але це не стало перешкодою. Зі сторони ЗВО головною вимогою було створити навчальну програму з чітко визначеним розкладом, темами та практичними матеріалами, які мають освоїти студенти під час навчального семестру. А також — перекласти українською усі терміни, пов’язані з тестуванням.

За його словами, також було необхідно офіційно оформитись на роботу в університет: «Це займає приблизно стільки ж часу, як збір документів на отримання водійських прав, включно з медоглядом».

Щодо подальшого суміщання пар з основною роботою, це можна владнати двома способами. Перший — домовитися з компанією.

«Я веду одну лекцію та два практичні заняття на тиждень. У SoftServe до моєї викладацької роботи віднеслись абсолютно позитивно, жодних додаткових годин відпрацьовувати не довелося. Навпаки, мій керівник запропонувала залучити ще двох експертів додатково задля допомоги з проведенням практичних занять та відповідно зменшення мого навантаження», — розповідає Андрій Заблоцький.

Другий спосіб — домовитися з кафедрою, щоб ваші предмети поставили на ранок. Артем Коротенкопереконався, що лекція на першій-другій парі зазвичай не вносить значних змін у робочий розклад, адже робота в ІТ-компаніях зазвичай починається достатньо пізно.

Як розробити навчальну програму

Андрій Заблоцькийпочав готувати програму з того, що записав у електронних таблицях теми, які мають освоїти студенти. Пізніше він детально розписав, що група буде проходити під час кожного заняття.

Він рекомендує викладачу поставити собі запитання: кого ви, як лектор, хочете бачити в кінці вашого курсу навчання?

Заблоцький поставив ціль отримати на виході інженерів, які зможуть зайти на середньостатистичний проект на позицію QC trainee. При цьому отримати теоретиків, які би знали всі терміни тестування, проте не вміли б застосовувати їх на практиці, він не хотів. Тому він вирішив розробити гібридну програму, що включає в себе як лекції, так і практичні завдання.

«До прикладу, якщо одного тижня ми вивчали типи тестування, то наступного тижня кожен зі студентів мав пов’язати ці теоретичні знання з реальними сайтами чи мобільними аплікаціями. Задача — показати на практиці, як студент проводив тестування та які типи тестування при цьому застосовував», — пояснює Андрій.



За його словами, розробка всієї навчальної програми зайняла приблизно один тиждень. При цьому майбутній викладач спирався на поради Зеновія Вереса та вже готову програму курсу Quality Control ІТ-академії SoftServe.

Артем Коротенкозгадує, що при створенні програми свого курсу з розробки ігор орієнтувався на поточні знання студентів. Дивився, що вони ще не вивчили за попередні роки з того, що потрібно в роботі. І за цими темами проводив заняття — наприклад, так до курсу увійшли лекції з комп’ютерної графіки.

«Також доводиться повторювати теми з програмування, тому що в цілому рівень знань залишає бажати кращого», — зауважує викладач.

За словами Зеновія Вереса, засновника програми «Інтернет речей» в НУ «Львівська Політехніка» та Solution architect у SoftServe, конкретні вимоги до навчальної програми вказані у нормативних документах кожного ЗВО. Наприклад, у ЛП викладач сам вирішує, що саме викладати під час курсу. Проте є вимоги до того, які компетенції студенти мають здобути на виході, як розподілятимуться бали, яку літературу брати за основу.

Як стати хорошим викладачем

Щоб стати хорошим викладачем, необхідно відчувати аудиторію, вміти чути її та керувати нею, радить Максим Почебут. За останніми дослідженнями, людина може сконцентровано сприймати інформацію лише 12 хвилин, хоча заняття зазвичай триває 45 або 90 хвилин.

За спостереженнями Максима, інженери-практики при викладанні часто-густо зосереджуються на суто технічних деталях або наводять практичні приклади, абсолютно не зрозумілі майбутнім спеціалістам. Таким чином, втрачається увага аудиторії. І вкрай важливо вчасно це помітити.

Тому педагогічна майстерність і складається із трьох китів: чути, відчувати та керувати аудиторією. Керувати значить швидко реагувати на настрої, запити аудиторії та підлаштовуватися під неї. Необхідно постійно змінювати ритм занять для того, щоб максимально тримати увагу. Заняття не мають бути однаковими. Почебут рекомендує використовувати різні інструменти: змішане викладання (онлайн та аудиторне), групова динаміка тощо.

«Звичайна лекція сьогодні — це вже минуле. Це не актуально та нецікаво для молоді. Викладачеві важливо пропустити матеріал через себе та свій досвід та залучити аудиторію до теми. Викладання — це не передача інформації, це обмін інформацією, її постійна циркуляція», — пояснює він.

Артем Коротенкотакож погоджується, що треба бути сучасним, особливо із технічної точки зору. Він записує лекції на відео та викладає їх. Згодом передивлюється власні записи і аналізує, що можна покращити. Про «дідівські» методи перевірки конспектів та контролю відвідуваності викладач радить забути. Та найважливіша порада — не вигадувати неактуальні, застарілі або ж формальні завдання для лабораторних та курсових робіт.

За словами Артема, N років у сфері та бейджик Senior/Lead не робить з людини гарного викладача. Це, по суті, інша професія.

«Одна справа проводити мітапи чи виступати на конференціях з певними темами. І зовсім інша — скласти структурований курс тривалістю в семестр, слідкувати за рівнем знань студентів та матеріалом, який вони вже знають, вивчати аналогічні курси в закордонних університетах. Навіть курс, що складається з однієї лекції та однієї практики на тиждень, вимагає багато часу на підготовку. Іноді готуюсь напередодні пари цілий вечір: після закінчення роботи і до глибокої ночі», — розповідає викладач.

Також він зауважує, що розробнику не варто подавати студентам свою суб’єктивну думку про ту чи іншу технологію як єдину істину.

Викладач «Львівської Політехніки» Андрій Заблоцькийпомітив, що результати навчання є значно кращими, коли студенти бачать, як працює проект із середини, як взаємодіють люди і які інструменти розробки вони при цьому використовують. Тому він проводить лекції безпосередньо в офісі компанії — в умовах, максимально наближених до робочих.

За його словами, студентам важливо побачити, що всі отримані ними знання були не даремними та справді будуть застосовані на практиці.

«З цією ж метою я прошу нашу HR Marketing команду провести студентам додаткову екскурсію компанією. Після такої події абсолютно у всіх загоряються очі та відкривається друге дихання», — згадує Заблоцький.

Ще один підхід Андрія — відмовитися від класичних навчальних відносин «учитель-учень» і стати для студентів ментором. Для цього він не витрачає час на перевірку присутності чи інші формальності. Замість цього викладач розпочинає кожне заняття з 5 типових запитань, які студенти можуть отримати під час проходження співбесіди. Найкращих випускників курсу він обіцяє порекомендувати на відкриті вакансії компанії.

І головне питання. Навіщо?

Якщо у вас немає вченого звання (доцент чи професор) або ж наукового ступеня (кандидат чи доктор наук), імовірно, вас влаштують як асистента кафедри та запропонують зарплатню 4-6 тис.грн. Це за умови роботи на повну ставку — 600 годин навчального навантаження у рік (це як заняття, так і, наприклад, перевірка курсових чи консультування студентів-дипломників). Якщо менше, це відповідно складатиме 0.75, 0.5 або 0.25 ставки. Також є різні надбавки — наприклад, за роботу з контрактниками чи статусність ЗВО.

За словами Андрія Заблоцького, він мотивувався бажанням проявити себе в коучінгу чи менторстві. Він переконаний, що кожному спеціалісту важливо зустріти свого ментора, особливо в студентські роки. Такий учитель покаже, де людина знаходиться зараз, ким може стати через 5 років та що треба для досягнення поставлених цілей.

«Такий досвід схожий на волонтерство. Проте я згадую власну історію, як 11 років тому я сам був пересічним студентом та підпрацьовував кур’єром. Завдяки моєму знайомому, який уже був успішним розробником, мені вдалося зрозуміти, що я хочу від життя, ким бути і чого досягти», — згадує він.

До того ж, досвід викладання дав Андрію привід освоїти з нуля встановлення трекінгових та test case management систем.

Артем Коротенкоразом із надбавками отримує приблизно 4000 грн в місяць за півставки. Проте він упевнився, що інколи викладання курсу може бути навіть більш корисним для викладача, ніж для великої кількості студентів. Це відбувається так: викладач береться розглядати якусь тему, глибоко її вивчає і в процесі дізнається багато нового. При підготовці лекцій Артем виписує окремо можливі питання з аудиторії, якщо раптом комусь зі студентів щось буде незрозуміло. За його словами, у підсумку більша частина цих запитань і не буде задана, але в нього в голові залишається більш повне розуміння теми.

Таким чином, викладання стає певної мірою «самоосвітою за розкладом», вважає Артем. До того ж, є дедлайни, які мотивують не відкладати вивчення нових тем на потім, а встигнути опрацювати матеріал до певної дати. При цьому головне слідкувати за якістю свої роботи та не втрачати цікавість, щоб ваше бажання спробувати себе у викладанні допомогло підвищити рівень освіти студентів.

Реальный пример использования Spring Global Lock

$
0
0

Меня зовут Максим Вороной, я — Consultant Engineering в GlobalLogic (Харьков). С 2000 года я занимаюсь архитектурой ПО, в круг моих интересов входят распределенные и облачные системы, а также построение систем с элементами искусственного интеллекта. Кроме этого, я веду учебный курс для разработчиков по современной архитектуре программных приложений.

Недавно во время GlobalLogic Kharkiv Java Conference 2018 я сделал доклад об использовании Spring Global Lock и написал эту статью на его основе.

Как мы получили проект

Для начала небольшая реальная история, которая началась в западной Европе. Компания из богатой европейской страны решила заказать софт у одной очень известной южной страны. Южная страна что-то изготовила, зарелизила, сторонние тестировщики это проверили...
Но после запуска в продакшн европейская страна пожаловалась: все, что вы создали и протестировали, не работает в ситуации, когда система обрабатывает данные, связанные с одновременным приходом нескольких пользователей.

Специалисты южной страны сказали: «Да! Точно! Мы знаем, в чем причина!». Разработчики добавили парочку временных задержек в коде, установили для пользователя ограничение на длительность сеанса работы, сказали: «Теперь все работает!», — и выпустили второй релиз. Европейская страна проверила, и оказалось, пока в системе два человека, — все прекрасно, а на десяти начинаются уже известные проблемы.

Южная страна выпустила второй, третий релиз, разработчики добавили кое-что «волшебное»: еще больше увеличили задержки, добавили пару лишних инстансов серверов JBoss. Тестировщики опять добросовестно проверили базовые бизнес-сценарии, по которым все работало. А европейская страна сказала: нет, ребята, не работает — пожалуй, на этом мы с вами и расстанемся.

Так проект попал в Украину. В начале мы восторгались «классным» кодом: его прекрасным колоритом, наличием задержек и даже изобретением пузырьковой сортировки. По словам заказчика, в целом в системе все было хорошо — кроме того, что многопользовательский сценарий не работал, и всего лишь надо было подправить код.

Первое, что мы попытались сделать — это избавиться от JBoss, от которого ничего, кроме Web-сервера не использовалось. Но DevOps заказчика сказали, что на продакшене все настроено именно под него, и специально для нас ничего менять не будут (вы же выпустите пустяковый фикс). Картина для нас складывалась печальная: мы были жестко ограничены возможностью выбора платформы, не могли использовать оптимальные паттерны и готовые облачные решения. В таких условиях мы начали оживлять код.

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

Case Study: книжный магазин

Допустим, существует простой сценарий покупки книги. Пользователю необходимо выбрать 2-3книги из большого списка, сделать заказ, указав атрибуты платежа. Сервер производит валидацию — например, проверяет, имеется ли в наличии на складе книга, которую пользователь готов оплатить. И после этого совершает транзакцию покупки.

При этом необходимо совместить уменьшение количества книг на складе со снятием денег с банковской карты. Тут-то и крылась проблема: когда на сайт приходили десятки, сотни пользователей, оказывалось, что все они успешно проходили валидацию до того, как наличие книг на складе уменьшалось.

Как было

Дизайн таблиц базы данных для задачи тривиальный:

Таблица Store содержит все доступные для покупки книги с первичным ключом isbn.

Таблица Payment содержит результат совершенной покупки, где: payment — первичный ключ, amount — сумма, которую нужно заплатить за приобретаемые книги, transaction — атрибут, отправляемый банком.

Таблица BookOrder, реализует связку 1:N между Store и Payment (1 платеж за N книг).

Южная страна с давними традициями программирования написала следующий код (для простоты приводятся только используемые SQL-запросы в порядке выполнения):

public void buyBooks(List<Book> books, Payment userPayment){
// Validate:
final String checkSql =
"SELECT 1 FROM Store WHERE isbn = ? AND amount > 1";
// Modify business entities
final String insertPaymentSql =
"INSERT INTO Payment (amount, transaction) VALUES ...";
final String insertOrderSql =
"INSERT INTO BookOrder (payment, isbn) VALUES ...";
final String updateStoreSql =
"UPDATE Store SET amount = amount -1 WHERE isbn = ?";
}

Валидация заключается в простом запросе: SELECT 1 FROM Store WHERE isbn = ? AND amount > 1. Таким образом мы проверяем, имеется ли книга на складе. Затем создаем «платежку» в таблице Payment, добавляем новую запись в таблице BookOrder и в финальной строке кода уменьшаем количество экземпляров книги на складе на единицу.

Три подхода к решению

Реализация уровня junior

Стоит подчеркнуть, что эта проверка — несколько искусственная, но она наиболее эффективно показывает проблемы с данным кодом. Наша команда получила его именно в таком виде. Для начала мы поручили исправление проблемы программисту junior-уровня, который предложил решение, добавив в начало следующее описание: @Transactional

@Transactional // (!)
public void buyBooks(List<Book> books, Payment userPayment){

В этом месте читатель, должно быть, улыбнется: понятно, что проблема решена не была.

К счастью, код-ревью у нас поставлен хорошо, и опытный старший программист сказал джуниору: «Парень, это не поможет».

Способы организации транзакций

Тут я напомню о двух из пяти вариантов изоляции транзакций в базах данных:

Read committed — транзакция читает только фиксированные данные (от завершенных транзакций). Этот уровень изоляции используется в большинстве существующих баз данных по умолчанию (Oracle, SQL, MySQL и пр.). Оптимальное соотношение между производительностью и изоляцией, но подвержено т. н. фантомному чтению.

Serializable — гарантия невмешательства в данные. Минус — время ожидания пользователя в очереди увеличивается.

Любые «игры» с описанными уровнями изоляции, к сожалению, наш код не спасали. Даже если мы выберем Serializable, следующая строка останется проблемным местом системы:

UPDATE Store SET amount = amount -1 WHERE isbn = ?

Проверка, даже проходя внутри транзакции, читает read-only данные. Эти данные успешно возвращают результат, означающий, что книга лежит на складе. После чего вся остальная бизнес-логика может работать с пустым складом, поскольку книга уже может быть куплена другим пользователем.

Более удачная реализация — уровень middle

Как можно было бы устранить проблему в коде? Мы оставляем сигнатуру транзакции, остальные три запроса остаются как есть, но мы добавляем одно волшебное ключевое слово (в синтаксисе MS SQL):

@Transactional
public void buyBooks(List<Book> books, Payment userPayment){
// Validate:
final String checkSql =
"SELECT 1 FROM Store WHERE isbn = ? AND amount > 1 FOR UPDATE";
// Modify business entities
final String insertPaymentSql =
"INSERT INTO Payment (amount, transaction) VALUES ...";
final String insertOrderSql =
"INSERT INTO BookOrder (payment, isbn) VALUES ...";
final String updateStoreSql =
"UPDATE Store SET amount = amount -1 WHERE isbn = ?";
}

Существует, похожий синтаксис для JPA спецификации:

em.find(isbn, LockMode.PESSIMISTIC_READ )

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

Анализируем дальше.

К сожалению, даже к этому коду есть множество претензий.

Рассмотрим процесс покупки поэтапно:

  • пользователь делает запрос о наличии книги;
  • сервер валидирует данные и сообщает, что книгу можно купить;
  • дается разрешение на проведение транзакции.

Зададимся вопросом, что в частности произойдет, если получение подтверждения банка займет более 40 секунд (время, установленное для обрыва транзакций в большинстве баз данных по умолчанию)?

Если за 40 секунд транзакция не закончилась, база данных «решает», что система подвисла и прерывает транзакцию. Это время можно увеличить, но смысл?.. Банковский https-запрос, который выполняет проверку платежеспособности данного пользователя, может существенно поломать код.
Следующий вопрос: что мы будем делать, если производительности этого кода недостаточно? Он компактен и прекрасно ложится в уровень архитектуры небольшого приложения. Но если возникнет увеличение нагрузки — на складе, в закупке, в платежных системах? Одним из решений может стать масштабирование системы на облако и использование микросервисов. Следует повторно оговориться, что наш пример искусственный и с микросервисами мы будем вынуждены разбить монолитный код, описанный в нашем примере.

Реализация уровня Senior

Что же может предложить для устранения этой проблемы «сеньор» или архитектор?

Здесь на сцену выходит поставляемая в базовом наборе Spring библиотека Spring Global Lock, позволяющая полностью решить нашу проблему. Как это будет выглядеть?

Autowired
private LockRegistry lockRegistry;
@Transactional
public void buyBooks2(List<Book> books, Payment userPayment){
    for(Book b: books){
        Lock lock = lockRegistry.obtain(b.getIsbn());
        lock.lock(); // lock.tryLock();
        try{
            doInsertAndUpdate(b);
        } catch (InterruptedException e1){
            //give up
            Thread.currentThread().interrupt();
        } finally{
            lock.unlock();
        } //try
    } //for
}

Есть некоторый класс LockRegistry — создадим его Autowired instance.

Блок finallyнужно включать в код обязательно и всегда обрабатывать interrupt exception, так как при принудительном завершении текущего потока код остается валидным.

Покупка книги в данной по версии 2 будет выглядеть следующим образом:

  • в виде JSON-файла приходит список книг, которые хочет купить пользователь, а также информация, достаточная для того, чтобы осуществить платеж;
  • из LockRegistryполучаем всем известный java.util.concurrent.locks.Lock (стандартный интерфейс библиотеки Java), на котором устанавливается блокировка — можно использовать по желанию методы lockили tryLock;
  • после этого добавляем классический код: try, catchи finally (finally гарантирует разблокировку по окончанию вне зависимости от ошибок);
  • покупка книг происходит в стороннем методе doInsertAndUpdate.

Для любопытных приведу дополнительно пару зависимостей, как они выглядят в Maven:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-integration</artifactId></dependency><dependency><groupId>org.springframework.integration</groupId><artifactId>spring-integration-core</artifactId></dependency>

Как видите, получился простой и компактный код, гарантирующий отсутствие проблем.

Ключ getIsbn в коде позволит точечно заблокировать только необходимую книгу. Что именно вы используете в качестве ключа для Spring значения не имеет: можно указать глобальный идентификатор для блокировки всей системы либо точечный Isbn, блокирующий одну запись. Spring принимает любой Object, который и будет использован в качестве ключа.

Что под капотом

Моя любимая игра с любыми новыми технологиями и библиотеками — разобраться, что внутри и как это работает. При этом всегда открывается множество интересных вещей. Что же из себя представляет LockRegistry?

LockRegistry в базовой поставке библиотеки SpringLock имеет пять основных вариантов реализации:

  1. PassThruLockRegistry.
  2. GemfireLockRegistry.
  3. RedisLockRegistry.
  4. JdbcLockRegistry.
  5. ZookeeperLockRegistry.

PassThruLockRegistryне делает вообще никакой блокировки — это пустая заглушка, применяется для тестирования.

GemfireLockRegistry — как и RedisLockRegistry — используют соответственно Gemfire и Redis базы для реализации глобальных блокировок.

JdbcLockRegistry — наиболее общий, чаще всего используемый экземпляр, на котором стоит остановиться подробнее. Для его реализации Spring вводит вспомогательную таблицу в существующей базе данных. Для каждой блокировки в этой таблице создается новая запись с ключом, который указал программист. Если подобный ключ в базе есть, Spring принимает решение, что блокировка невозможна.

Но что произойдет, если в базе сделана запись о блокировке, а код, который запустил транзакцию, «умер» (был намеренно закрыт пользователем либо завершил работу по ошибке)? Естественно, больше никто не сможет уже заблокировать этот ключ. Для разрешения таких ситуаций разработчики предусмотрели поле when. Поле позволяет ограничить нашу транзакцию по времени.

Но даже наличие поля when не спасает нас от другой проблемы. Рассмотрим диаграмму, взятую из статьи Мартина Клепмана.

На изображении выше вы видите сервис блокировки и два клиента. Таблица Lock в данном случае реализует JdbcLockRegistry.

  • Клиент 1 захватывает и удерживает блокировку в течение длительного времени (допустим, у этого клиента в какой-то момент включился Garbage Collector, который затормозил всю Java).
  • Cервис блокировок отслеживает для нас наступление time-out при помощи поля when и отменяет блокировку. Пока все корректно.
  • В игру вступает Клиент 2. Он забирает на себя блокировку, успешно завершает собственную бизнес-транзакцию.
  • Тут Garbage Collector Клиента 1 заканчивает работу, и Клиент 1 точно так же благополучно записывает свои данные в базу.

И это полное фиаско. Все данные транзакции Клиента 2 были перетерты.

Для разрешения подобных ситуаций в JdbcLockRegistry добавляется целочисленное поле version.

Теперь картина выглядит так:

  • На момент, когда происходит захват транзакции, Клиент 1 получает токен (в примере на картинке — 33).
  • Вступает в работу Клиент 2. Он делает захват уже после обрыва блокировки, ему выдается токен 34, Клиент 2 записывает данные.
  • Garbage Collector Клиента 1 просыпается, но когда Клиент 1 пытается произвести какие-то действия с базой, оказывается что устаревший токен 33, конфликтует с токеном 34. В результате Клиент 1 получает ошибку.

Такой код с полем when и version обеспечивает корректное бизнес-поведение в сложных распределенных сценариях.

Вернемся к рассмотренному ранее компактному рабочему коду:

public void buyBooks2(List<Book> books, Payment userPayment){
    for(Book b: books){
        Lock lock = lockRegistry.obtain(b.getIsbn());
        lock.lock(); // lock.tryLock();
        try{
            doInsertAndUpdate(b);
        } catch (InterruptedException e1){
            //give up
            Thread.currentThread().interrupt();
        } finally{
            lock.unlock();
        } //try
    } //for
}

Где здесь обработка экспирации? Каким образом Spring понимает, что отведенное время закончилось? В Spring ответственность за правила экспирации возложена на программиста (предусмотрена даже возможность ввести вечную блокировку). Можно указать явное описание, в течение какого времени данная блокировка должна быть отпущена. Мы вычеркиваем Autowired-код с простым lockRegistry и заменяем его на ExpirableLockRegistry. В этом случае при конфигурации lockRegistry программисту необходимо будет использовать более гибкий подход, создав Scheduler: в нашем примере это fixedDelay, равный 50 секундам, и метод, который очищает все существующие в системе блокировки, превысившие время ожидания — expireUnusedOlderThan (также с указанием 50 000 миллисекунд).

@Autowired
private LockRegistry lockRegistry;
@Autowired
private ExpirableLockRegistry lockRegistry;
@Scheduled(fixedDelay=50000)
public void cleanObsolete(){
    lockRegistry.expireUnusedOlderThan(50000);//that are not currently locked
}

Теперь давайте уделим еще немного внимания реализации ZookeeperLockRegistry .

Apache Zookeeper — иерархическое распределенное хранилище информации. Это не база данных, но может использоваться в качестве базы (хотя это и не совсем удобно). Zookeeper активно используется при реализации крупных распределенных систем, и, например, широкоизвестная Apache Kafka, хранит в нем такие важные для себя настройки как:

  • список разрешенных пользователей;
  • кто выступает лидером;
  • какой уровень избыточности и пр.

Информация в Zookeeper организована в виде дерева, в узлах которого могут храниться какие-либо данные. Zookeeper — практически «неубиваемая» система, которая поднимает несколько экземпляров, для обеспечения требуемого уровень репликации информации. В терминах CAP-теоремы Zookeeper — это типичная СР-система (Consistency — Partition Tolerance): хорошо распределяется в сети и гарантирует, что информация будет надежно сохранена.

Таким образом использование ZookeeperLockRegistryподразумевает, что информация о блокировках будет храниться в распределенном иерархическом хранилище.

Как еще можно использовать Spring Global Lock

Современные распределенные системы постоянно вынуждены решать одну и ту же задачу — «договориться» между собой, кто из них лидер. Это необходимо при проектировании микросервисов, создании fault-tolerant или high-available кластеров и прочих подобных задачах.
Расскажу об алгоритме Algorithm of Leader Election, который работает в нескольких компонентах Spring Cloud (более подробно можно прочитать в Spring Cloud Release Notes).

Реализация алгоритма спрятана в компоненте LockRegistryLeaderInitiator.

Эта компонента:

  • Использует глобальную блокировку с обработкой time-out.
  • Допускает существование только одного лидера.
  • Допускается отсутствие лидера в течение коротких промежутков времени.

Один из примеров применения Algorithm of Leader Election — Zookeeper (написанное на чистой Java без использования Spring). Zookeeper не использует Spring Lock, но с идеей Spring Lock мы можем порассуждать, каким образом реализовывать механизм leader election.

В более простых приложениях роли явные прописываются администратором системы. Например, вы организуете транзакцию в схеме Master-Slave. Данные распространяются от Master к Slave по явно прописанным правилам, кто Master, а кто Slave.

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

В нашей мысленной реализации мы берем Spring Lock и на некоторое время блокируем всю систему, используя в качестве ключа какой-либо абсолютно глобальный идентификатор. Когда система блокируется, один из экземпляров Zookeeper прописывает себя главным. Остальные, не имея возможности захватить блокировку, ждут. Таким образом, реализуется чрезвычайно простой алгоритм выбора лидера.

Почему Zookeeper является именно СР, а не АР-системой? Именно потому, что на момент блокировки мы делаем временно всю систему недоступной. Система глобальной блокировки гарантирует, что если во время выбора какой-либо экземпляр прекратил работу, блокировка со временем будет снята и другой лидер выдвинет себя в качестве главного. Минус такого подхода — на какое-то время (время захвата Global Lock или восстановления по time-out) система может оказаться недоступной.

Подведем итоги

Плюсы

Использование Global Lock — это всегда гарантированное распределенное окружение (например, микросервисное). При этом не стоит забывать о решении уровня Middle — это хорошее, добротное решение. Если вы используете чистую базу данных и есть возможность делать блокировку на уровне таблиц, на уровне записи, оно имеет полное право на жизнь.

Минусы

К сожалению, задержки все же присутствуют и могут быть довольно большими (например, в случае многократного падения системы по тайм-ауту). Global Lock может замедлить систему — особенно при неудачном выборе ключа — и об этом нельзя забывать.

Если вам интересно развитие в Java-направлении, рекомендую также посмотреть материалы GlobalLogic Kharkiv Java Conference 2018.

DOU Hobby: Косплей — игра в костюмы и образы любимых персонажей

$
0
0

[DOU Hobby — рубрика о нетехнических проектах IT-специалистов: творчество, интересное хобби и другие lifestyle-достижения. Если вам есть о чем рассказать — пишите на valentina@dou.ua]

Разработчик Сергей Савченкоработает в харьковской компании Jabil Software Services, а в свободное время занимается косплеем — шьет костюмы культовых персонажей и затем воплощает эти образы на фестивалях. Он уже побывал Джокером, Зверем из «Людей Х», Чудовищем из диснеевского мультфильма — и не только.

Сергей рассказал DOU, как косплееры создают костюмы и образы персонажей, сколько это стоит и что мотивирует продолжать, несмотря на почти неокупаемые затраты.

— Сергей, как вы увлеклись косплеем? С чего все началось?

Я увлекся косплеем внезапно даже для самого себя. Однажды просто обмолвился друзьям, что было бы неплохо и интересно поучаствовать в подобном. Немного пообсуждали, и все забылось где-то на год. Я и сам, честно говоря, перестал думать о той идее.

И вот как-то одна из подруг предложила взять участие в аматорской театральной постановке на 5-15минут на крупном харьковском косплей-фестивале «Ханифест». Это был 2016 год, мероприятие проходило в клубе «Радмир». Недолго думая, я согласился. Это обещало быть занятным приключением.

— Каким был ваш первый персонаж? Почему именно этот образ?

Первым персонажем, сделанным мною, был Джокер Хита Леджера. Этот образ был нужен ребятам для сценки, так что выбора я особо не имел.

— Костюм делали сами?

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

Грим и прическу мне помогали делать, ведь краситься я не обучен. На создание образа потратил не более 1000 грн. При этом львиная доля суммы ушла именно на краски для волос и театральный грим.

Но, главное, образ получился. Люди узнавали и были очень рады увидеть одного из любимых персонажей в реальной жизни.

Джокер из фильма «Темный рыцарь» («Ханифест», 2016)

— А как делаете костюмы сейчас? Как придумываете образ, где ищете материалы?

Образ — это несложно, ведь он уже есть готовый. Просто нужно рассмотреть как можно больше картинок с персонажем и запомнить каждую мелочь. После остается только воплотить это в жизнь.

Сначала мы с ребятами выбираем вселенную, по которой будем ставить сценку. После этого распределяем персонажей. И пока идет написание сценария, все остальные готовят свои костюмы. Я изучаю персонажа в деталях: смотрю фильмы, мультики или аниме, читаю комиксы или мангу, где встречается нужный герой. Моя цель — максимально правдоподобно передать его характер. Затем уже покупаю материалы и делаю костюм. Финальный этап — репетиции, репетиции и еще раз репетиции.

Поиск материалов — очень обширная тема. Часть вещей нахожу в секонд-хендах: ищу более-менее похожую одежду и затем перешиваю ее под себя. Остальное шью с нуля, подходящие материалы покупаю в тканевых магазинах.

Также для пошива костюмов иногда требуются дополнительные аксессуары — например, мечи, посохи и прочая нетривиальная бижутерия. Эти вещи, или крафт, как мы их называем, ищу в строительных магазинах и барахолках. К примеру, из материалов может пригодится Eva Foam, дерево, трубы из ПВХ — все, что покажется юзабельным в создании. Где что найдете, то и ваше. Ну и штурмую художественные магазины в поисках красок, кисточек и так далее.

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

Еще нужны тонны аксессуаров — от цветных контактных линз до краски для волос и париков. И отдельная тема — мейкап. Как парню мне странно об этом говорить, но приходится возмещать убытки в косметических запасах моей девушки.

— Какие самые интересные образы составляли?

Из самых запоминающихся — это, конечно, первый образ, Джокер. Сколько было сомнений и скептицизма, но результат и реакция людей все развеяли до капли.

Также был интересен и приятен образ Чудовища из диснеевского «Красавицы и Чудовище». И к этому персонажу люди отнеслись с огромным теплом.

Чудовище («Ханифест», 2017)

А наиболее успешным считаю Хоука (Hawke) из вселенной Dragon Age. Основу костюма я купил у человека, который уже дедал и вывозил на фестиваль этого персонажа. Многое в костюме меня не устроило, и я занялся крупным рефакторигом, допиливанием и перепиливанием. По сути, остались лишь самые сложные части, которые были в наиболее удовлетворительном состоянии. Но даже их коснулась кисточка.

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

— Сколько времени уходит на один костюм?

Все зависит от сложности костюма и нашей лени. Если сроки поджимают, можно и за неделю склепать. Но спать тут вряд ли кто будет. Как говорят в наших кругах: «Ночь перед фестивалем? Время перешить костюм!»

Если основательно подойти к костюму какой-то эфемерной «средней» сложности, то за пару месяцев можно справиться. Но это все очень индивидуально.

— А какие бывают трудности при этом, что изготовить сложнее всего?

Все веселье с трудностями начинается непосредственно перед фестивалем. Перед Comic Con Украиназаметил, что на латной перчатке не хватает одного сегмента. Надо было срочно что-то делать. Перчатка сделана из Eva, а ее-то у меня и не было, и пришлось «колхозить» на коленке. Исправить ситуацию помогли укрепленная кожа, ножницы, краска и клей. Даже не видно было разницы, если не всматриваться с очень близкого расстояния.

Сейчас весело вспоминать такие моменты, но за ночь до фестиваля это все достаточно стрессово.

Костюмы все сложные, каждый по-своему. Могу лишь сказать: проверяйте вещи, которые заказываете у швей или крафтеров. Тщательно! Так как на фестивале это может доставить массу неудобств.

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

Слева: Акира Отоиши из аниме «Невероятные приключения ДжоДжо» («Ханифест», 2018)Справа: образ гопника из Харькова для сценки («Ханифест», 2018)

— А насколько дорого обходится один образ? На что идет основная часть трат?

Финансы — вопрос болезненный. Это относительно дорогое хобби, если хочешь делать действительно хорошие костюмы. Траты идут на услуги швеи, крафтера, материалы, грим и все-все-все.

Самый дорогой мой костюм и он же самый качественный — это Hawke из Dragon Age. Сама основа обошлась где-то в 5-6 тыс.грн. Вместе с расходниками на доделывание-переделывание и новыми частями образ обошелся примерно в 12 тыс. грн.

А самый бюджетный — это Джокер. Как я уже говорил, на него ушло около 1000 грн. И при повторном выгуле костюма на следующих фестивалях нужно лишь поддерживать наличие грима, краски и прочих расходников.

Цены на материалы очень разнятся и зависят от качества и места продажи. Если готовы рисковать и ждать, AliExpress — ваше все. Если нет, придется немного раскошелиться. Мои парики стоили около 600 грн за штуку. Все они неплохого качества, но это лишь основа, похожая на необходимый образ. Достригать и укладывать прическу необходимо было самим. Боюсь представить, сколько отдают мастерам некоторые ребята, у которых в образах большие и сложно уложенные парики.

— Насколько в Украине развито сообщество косплейщиков? Какие есть фестивали, мероприятия?

Косплей-сообщество в Украине развито достаточно хорошо. Регулярно проходят ежегодные крупные фестивали и иногда появляются небольшие локальные. Это не может не радовать, ибо монополия не есть хорошо.

Практически во всех крупных городах Украины проходит хотя бы по одному фестивалю в год. В Харькове остался лишь «Ханифест», хотя пару лет назад было 3-4разных фестиваля. Может и больше, но тогда я не был втянут в этот водоворот.

В Киеве проходит Comic Con Киев. В этом году прошел первый Comic Con Украина — это было великолепно: масштабно и просто незабываемо.

В Одессе есть Fan Expo, в Днепре — «Акихабара», во Львове — Anicon. И еще хочу отметить маленький провинциальный фестиваль Pokemon Fest, который прошел в городе Первомайский Харьковской области. Он состоялся впервые, но по уровню организации может дать фору некоторым крупным фестивалям из больших городов.




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

Кстати, с ростом уровня фестивалей и других мероприятий растет и качество косплея в целом. Наши украинские косплееры успешно выступают и за границей. Единственная досада — это неокупаемость костюмов. Призовые фонды небольшие, если сравнивать с затратами на костюмы. Но я верю, что организаторы смогут привлечь достойных спонсоров. Думаю, что это дело времени.

— С чего начать новичку, который хочет заняться косплеем? Что можете посоветовать начинающим?

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

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

И еще — не стоит с наскоку брать очень сложные костюмы. Лучше начинать потихоньку, с относительно простых. Кстати, одни и те же костюмы можно выгуливать костюмы не на одном фестивале.

— Что лично вам нравится в косплее? Что мотивирует создавать новые образы?

Косплей меня покоряет, в первую очередь, реакцией людей на очередной образ. Эмоции фотографирующихся непередаваемы. Эти тепло, восторг, улыбки и просто счастье покоряют с первого раза. Поэтому стараешься отплатить людям тем же — все радуя и радуя их новыми образами.

Конечно, есть и критика, но ее нужно принимать по существу. Критикуют многое и могут раскритиковать все. Если так случилось, и критика действительно обоснована и касается ваших косяков и недоработок — это повод в дальнейшем работать лучше, но никак не останавливаться.

Слева: Hawke из вселенной Dragon Age 2 (ComicCon Украина, 2018)В центре: Итати Утиха из аниме «Наруто» (Pokemon Fest, 2018)
Справа: Джокер из фильма «Темный рыцарь» («Ночь Супергероев» в клубе Plazma, 2016)

Во-вторых, мы с ребятами ставим сценки — по сути, это аматорские театральные постановки, — и выступаем на фестивалях. До косплея я играл в музыкальной группе, и мы достаточно часто выступали. Не на профессиональном уровне, конечно, но для местных тусовок годилось. И я проникся любовью к сцене. Выкладываешься на всю перед зрителями, а в ответ получаешь массу эмоций от них. Это еще один значительный фактор вдохновения и мотивации.

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

— Какие у вас планы на будущее? Какие образы готовите на следующие фестивали?

Планов на будущее много. Как минимум сделать что-то масштабное по Dragon Age — или сценку, или дефиле, или вообще стенд. Но это пока в подвешенном состоянии.

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

Если кому интересно следить за нашим творчеством: косбенд «Oh, my Bets!»всегда рад стараться радовать людей своими образами и сценками!

Как мы масштабировали команду и выжили

$
0
0

Кто из уже более-менее опытных менеджеров не мечтал, чтобы его проект вот так взял и вырос? Рано или поздно каждого, ну или большинство, посещают мысли о том, что процессы отлажены, все идет своим чередом, и остается только присматривать за происходящим, изредка внося те или иные коррективы. Скучно. Хочется новых вызовов и выхода на следующий уровень.

Такая мечта нашей управленческой команды сбылась. За последний год мы агрессивно выросли (почти в 10 раз), о чем и хочется рассказать, поделиться накопившимися уроками и опытом. Приведенный ниже кейс описывает инструменты и практики масштабирования, примененные в команде при росте с 10 до 60 разработчиков за полгода, которые помогли всему аккаунту «прыгнуть» с 30 до 250 человек.

Онбординг

Масштабирование, скейлинг — звучит красиво, не так ли? Эти слова в первую очередь означают необходимость активно нанимать и адаптировать специалистов. Новичков должно было стать в 5 раз больше членов первичной команды, так называемого «костяка».

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

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

Для полного погружения в рабочую среду мы выделили две недели. За это период человек получает список задач в Jira, где в подзадачах прописаны все необходимые шаги для их выполнения с указанием времени. Новичок не задумывается о том, к кому подойти и у кого спросить. У него есть готовый алгоритм, чем ему заниматься и что от него ожидают в итоге. Результат — коммуникация между новичком и ментором уже проактивно организована и структурирована, она имеет четкий вектор, более продуктивна и результативна. Также, важно отметить, что подобная система позволяет обеспечить максимально идентичную стартовую точку для всех новичков.

Как выглядит онбординг:

  • Приветственное письмо. Теплые слова, общее описание проекта и команды. Цель — создать необходимый настрой, сформировать ожидания о процедуре онбординга.
  • Нетехнический митинг. Общая информация про организационную и компонентную структуру проекта, введение в базовые процессы и ожидания, необходимый минимум контекста о текущей ситуации и ближайших планах.
  • Технический митинг. Знакомство с техническими лидами и архитектурой компонентов, стандартами кодирования и практиками, принятыми на проекте. Знакомство с кодовой базой и зависимостями.
  • Структурированный список всех необходимых материалов — Папка Специального Назначения, где собраны данные про рабочие каналы коммуникации, области в Jira, календари митингов, контакты ключевых стейкхолдеров и глоссарий проекта. Плюс — ссылки на актуальные оргчарты и другую полезную информацию.

Что мы получили после внедрения этой структуры:

  • Мы экономим время как опытных членов команды, так и новичков. Люди не отвлекаются на то, чтобы проверить, утвердить, помочь, найти. Есть заранее обозначенные активности и ответственные лица.
  • Вовлеченные специалисты распоряжаются своим временем рационально: каждая активность заранее планируется, является частью ежедневной нагрузки и не мешает основным задачам.
  • Новичок не ощущает себя брошенным — он всегда знает, что ему делать и у кого попросить помощи.
  • Эта система легко масштабируется.

Переосмыслить проект в целом

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

С ростом проекта мы пересмотрели архитектурные подходы и перешли от монолитной структуры к микросервисам и общим модулям. Этот подход значительно облегчил взаимодействие. Теперь версионирование модулей и сервисов позволяет прогнозируемо поставлять изменения, лучше работать с обратной совместимостью и не блокировать работу других команд. Безусловно, данный процесс не является артефактом именно роста — переход от монолита к компонентам и так планировался, — но не упомянуть его нельзя. Остановиться и переосмыслить — важный шаг при планировании роста.

Выделить новые роли

В определенный момент роста команды получилось так, что нагрузка тимлидов (а их было на тот момент двое) оказалась распределена неравномерно: слишком много времени уходило на менторство и онбординг, слишком мало — на другие задачи.

Сухая теория гласит, что каждый mentee требует порядка 10% времени ментора. Эмпирически мы пришли к тому, что для нас комфортно разделить организационную и техническую нагрузку примерно поровну, то есть каждый лид может курировать до пяти подопечных. Чтобы разгрузить менеджеров и тимлидов, мы решили подробить проектные команды и делегировать функции.

Для этого создали роль Group Lead. Это разработчик не ниже Intermediate или Senior уровня, уже обладающий доменной экспертизой, с командой около пяти программистов: с таким количеством людей он/она могут валидировать задачи, уделяя внимание каждому. Также мы переосмыслили роль тимлида: для команды из 60 человек у нас их стало трое, каждый в своей экспертной области:

  • Тимлид по техническим вопросам, ответственный за R&D и фундаментальные технические вопросы.
  • Тимлид по бизнес-интересам и технологическому развитию — отвечает за взаимодействие «бизнес — команда разработки», валидирует требования.
  • Тимлид, отвечающий за процессы разработки — их имплементацию и контроль.

Тот же маневр проделали и с командой менеджмента. Выделили Project Managers, которые непосредственно работают с командой, Project Coordinators и Resource Coordinators, которые всегда готовы прийти на помощь. Это позволило разграничить зоны ответственности внутри аккаунта, обозначить сферы влияния от ежедневного распределения ресурсов до стратегического планирования.

Новый взгляд на сам процесс разработки

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

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

Давайте углубимся в детали и приведем несколько точечных примеров.

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

Поднажали на усовершенствование CI/CD практик, инвестировали в тестирование и инфраструктуру:

  • Пересмотрели подход и фреймворк для unit-тестирования.
  • Прокачали инфраструктуру, стали выполнять пакет тестирования не на каждый билд, а на каждый пулл-реквест, с автоматическим запретом мержа в случае ошибок. Конечно, стоило ввести это с самого начала, чего мы не сделали, но вынесли урок, который будем применять на других проектах.
  • Внедрили SSA (system stability assurance) процесс, который по своей сути содержит набор интеграционных тестов и событий, регулирующих их запуск. Этот подход призван сместить фокус автоматического тестирования с отдельных юнитов в сторону бизнес-сценариев, что позволит ускорить поставки и быть уверенным в их качестве. Говорят, когда Титаник тонул, у него из трубы все еще шел дым и в рубке горел свет — вот такие false-positive результаты тестирования мы и устраняем.

Пересмотрели подход к ревью кода. Перешли от модели «Пулл-реквесты проверяют лиды» на «Пулл-реквесты проверяют носители компетенции в целевом компоненте». Это означает, что большее количество специалистов взяли на себя ответственность за процесс. Мы выявили техэкспертов по компонентам и разгрузили лидов — децентрализовали принятие решения. В перспективе движемся к формированию SME (subject matter experts) по каждому из компонентов системы и специализации отдельных команд.

Для старта мы сделали матрицу компетенций, где на пересечении специалистов и компонентов есть возможность выбрать оценку от 0 до 3, где 3 — знание компонента на глубоком уровне. Само собой, те же компоненты были продублированы и в Jira, что помогает собирать статистику по каждому из них, а также ориентироваться по контактным лицам.

Knowledge sharing занял еще более значимую роль. Вместе с клиентом мы начали формировать базу знаний. Разработчики записывают демо реализованного функционала, мы каталогизируем эти записи, формируя единый удобный справочник. У нас появилась возможность «пощупать» продукт, даже не запуская его и не читая спецификаций.

Это, пожалуй, основные направления. Каждое под собой содержит еще десятки мелких доработок и изменений, которые необходимо было сделать во время миграции (или, быть может, правильнее сказать — эволюции) процессов аккаунта.

Вывод

Описанные шаги позволили нам хоть и не безболезненно, но успешно масштабироваться в условиях агрессивного роста — основное увеличение команды произошло менее чем за шесть месяцев.

Также к заслугам отнесем и то, что все процессы, которые мы внедряли для команды из 60 человек, успешно работают для 250 человек на стороне Dev-Pro и для 400 специалистов на стороне клиента. Более того, наша команда позитивно влияет и на работу других вендоров заказчика.

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

Выбор средств для обеспечения жизненного цикла решений

$
0
0

Всем привет! Меня зовут Стас, и я работаю на позиции Cloud Solutions Architect. Мне часто приходится инициировать старт проектов. При этом важно выбрать средства обеспечения жизненного цикла решения. Необходимо решить, какие именно средства команда будет использовать для создания, поддержки и развития решения.

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

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

Когда предлагаете использовать какие-либо средства на конкретном проекте, будьте готовы нести персональную ответственность.

Статья в основном ориентирована на аутсорсинг, так как он составляет большую часть украинского IT, однако вполне применима и для продуктовых компаний. В основном все описанное касается mature аутсорсинг-компаний, которые ставят перед собой цели предлагать максимально качественный сервис для своих клиентов.

Многие термины специально оставлены на английском языке, так как переводить их бессмысленно.

Основные понятия

Жизненный цикл решения — совокупность стадий, которые проходит решение за период своего существования, начиная от момента возникновения идеи до утилизации.

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

Категории средств

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

AreaRole
AuthЦентрализованная аутентификация и авторизация пользователей, сервисов и приложений.
Все другие средства интегрируются с этим.
CommunicationКоммуникации внутри команды.
Коммуникации на основе чатов с возможностью проведения видеозвонков и их записью, индексированием и поиском по ключевым словам.
Knowledge SharingРасшаривание знаний о проекте между всеми участниками команды.
На основе де-факто индустриального стандарта Markdown.
Requirements ManagementУправление и визуализация требованиями.
Например Scrum backlog и Kanban board.
ReposХранение исходников и контроль версий.
Например, реализация Git.
PipelinesСборка и управление выпусками.
ArtifactsХранение артефактов и работа с ними.
Например, Debug Symbols, NuGet, NPM, Mavenи т. д.
TestФункциональное тестирование.
Test LoadНагрузочное тестирование.
MonitorМониторинг решения и предиктивная аналитика.
FeedbackСбор отзывов об использовании решения.
IDEСреда разработки.
Из коробки интегрированная со всеми системами.

Размещение

Обычно по условиям контрактов между заказчикоми исполнителем, которые мало кто читает, абсолютно все артефакты, порождённые во время жизненного цикла решения, принадлежат заказчику. В данном случае артефакты — это документация, требования, код, собранные приложение, тесты и т. д.

Рассмотрим следующие варианты размещения:

Размещение на стороне исполнителя (on-prem)

Плюс:

  • Некоторые инструменты могут быть уже развёрнуты и настроены.

Минусы:

    • Нужно обязательно заложить процесс передачи артефактов на сторону заказчика, а это требует идентичного набора развёрнутых сервисов на стороне клиента.
    • Крайне редки случаи, когда все инструменты есть на стороне исполнителя.
    • Затраты на лицензирование закладываются в стоимость услуг, и оплата возлагается на исполнителя.
    • Требуется организовать доступ членам команды со стороны заказчика к инфраструктуре, сервисам и системам, которые на стороне исполнителя.
    • Требуются затраты на поддержку и обновление ПО и железа.

Размещение на стороне заказчика (on-prem)

Плюсы:

  • Нет необходимости передавать артефакты.
  • Клиент сам платит за лицензии.

Минусы:

  • Крайне редки случаи, когда все инструменты есть на стороне клиента.
  • Будьте готовы к проблемам с получением доступа к инфраструктуре, системам и сервисам.
  • Требуются затраты на поддержку и обновление ПО и железа.

Размещение на третьей стороне (service)

Плюс:

  • Все артефакты принадлежат клиенту через договор оказания услуг с третьей стороной.

Минус:

  • С обеих сторон возможны случаи паранойи на тему третья сторона все украдет.

Смешанные варианты не исключены, но, как правило, они обладают минусами всех вышеперечисленных.

Лично я всегда стараюсь продвинуть вариант использования облачных сервисов и только в исключительных ситуациях — размещение на стороне заказчика.

Средства

Есть два варианта получения набора средств:

  • собрать из разных инструментов от разных поставщиков.
  • использовать решение от одного поставщика.

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

Внимание! В этой статье я рассматриваю именно те средства и в той комбинации, которые мне больше всего встречались и с которыми у меня есть реальный опыт работы.

  • Option A — на основе сервисов и продуктов компании Atlassian, иногда упоминается как Atlassian Stack. На самом деле чаще всего используется максимум 3 продукта от Atlassian.
  • Option M — на базе сервисов и продуктов Microsoft, в основе которого лежит пакет облачных сервисов Azure DevOps. До недавнего времени являлся одним продуктом Visual Studio Team Services. Имеет версию, доступную on-prem.

Естественно, на рынке средств обеспечения жизненного цикла — много предложений. Количество возможных вариантов использования в различных комбинациях просто огромно. Однако я специально повторюсь, в статье рассматриваются именно те средства и в той комбинации, которые я лично использовал в своей профессиональной деятельности.

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

Следующая таблица описывает, какие конкретно средства и по какой стоимости в месяц входят в вышеперечисленные варианты:

AreaOption A ToolCostOption M ToolCost
AuthG Suit???Active Directoryfree: basic
extra: $1/user
Knowledge SharingAtlassian Confluence<10 users: $10
>10 users: $5/user
Wikifree: 5 users
extra: $6/user
Requirements ManagementAtlassian Jira<10 users: $10
>10 users: $7/user
BoardsIncluded
ReposAtlassian Bitbucket<5 users: free
>5 users: $5/user
ReposIncluded
PipelinesJenkins*1Pipelinesfree: 1
extra: $40/pipe
ArtifactsMyGet5 feeds: $40Artifactsfree: 5 users
extra: $4/user
TestGurock TestRail$30/userTest Plans$52/user
Test LoadLoad Impact$300Load Testsfree: 20k
extra: $36/100k

Некоторые Area не описаны, это сделано с целью упрощения. Потому как выбор тех же Communication средств — это тема ещё одной статьи.

Сравнение вариантов

Давайте сравним оба варианта по следующим аспектам:

AreaOption AOption M
AuthИнтеграция продуктов с централизованной системой аутентификации требует дополнительных затрат.Интеграция из коробки с Active Directory и реализует B2B Collaboration.
ComplianceAtlassian заявляето соответствии следующим требованиям: GDPR, ISO 27001, SOC 2 Type 1, CSA STAR Level 1.Microsoft заявляето соответствии следующим требованиям: GDPR, ISO 27001:2013, SOC 1 Type 2, SOC 2 Type 2, HIPAA, BAA, EU Model Clauses.
LegalТребуется принять различные политики от каждого поставщика.Требуется принять только одну политику от одного поставщика.
Service ManagementХоть большинство сервисов управляемые, некоторые, такие как Jenkins, требуют дополнительной инфраструктуры, настройки и поддержки.Все сервисы управляемые.
TraceabilityТребуются дополнительные расходы на покупку и интеграцию плагинов.Доступна из коробки.
Price & PaymentОтдельная покупка каждого сервиса у разных поставщиков.
Отдельные счета-фактуры в конце месяца.
Совокупная стоимость владения больше, чем решение «все в одном».
Все услуги приобретаются у одного поставщика в виде пакета.
Один счёт-фактура в конце месяца.
Совокупная стоимость владения меньше, чем у отдельных систем.

Сравнение систем по функциональности систем здесь не проводим, ибо в целом системы +/- обладают одинаковой функциональностью и, например, сравнение Jira с Boards — это также отдельная тема.

Если ваш проект в регулируемом домене, например Healthcare, то желательно, чтобы абсолютно все сервисы, которые вы используете, соответствовали требованиям, специфичным в этом домене. Например, если ваш проект в домене Healthcare и территориально в USA, то вам лучше использовать только HIPAA Compliant средства.

Сценарии использования

Чтобы дать представление о приблизительной стоимости владения, ниже приведены несколько сценариев использования.

  • Stakeholders работают только с требованиями.
  • Все члены команды как минимум имеют доступ к системе тестирования для просмотра планов, кейсов и результатов.
  • Стоимость Pipeline Agents, Load Tests не включены.
  • Стоимость Option M может быть уменьшена, если члены команды имеют Visual Studio Subscription.

Scenario 1 Команда малого размера: 3 stakeholders, 5 developers, 1 tester.

Options&Tools3х stakeholder5х dev1х testTotal
Option A$350
Confluence$10
Jira$30$50$10$90
BitbucketNot Required$25$5$30
MyGetNot Required$40
TestRailNot Required$150$30$180
Option M$58
WikiIncludedIncludedIncluded$0
BoardsIncludedIncluded$6$6
ReposNot RequiredIncludedIncluded$0
ArtifactsNot RequiredIncludedNot Required$0
Test PlansNot RequiredIncluded$52$52

Scenario 2 Команда среднего размера: 5 stakeholders, 20 developers, 5 testers.

Options&Tools5х stakeholder20х dev5х testTotal
Option A$1422
Confluence$25$100$25$150
Jira$35$140$35$210
BitbucketNot Required$100$25$125
MyGetNot Required$117Not Required$117
TestRailNot Required$820
Option M$520
WikiIncludedIncludedIncluded$0
BoardsIncluded$150Included$150
ReposNot RequiredIncludedIncluded$0
ArtifactsNot Required$110Not Required$110
Test PlansNot RequiredIncluded$260$260

Заключение

Я не хочу навязывать кому-либо свое мнение. Разве что добавлю, что перед тем как выбирать какие-либо средства, основательно подумайте, проанализируйте и сравните несколько вариантов.

P. S. Надеюсь, эта статья подтолкнет людей с опытом к написанию своих материалов, раскрывающих другие аспекты средств обеспечения жизненного цикла. Например, лично я бы почитал сравнение Azure DevOps с GitLab Cloud.

Причины для смены работы в IТ, или Начнем с себя

$
0
0

В этой статье я хотел поделиться с вами своими личными наблюдениями, опытом и анализом того, почему люди меняют работу в ИT. Я прошел путь от учителя информатики в средней школе, системного администратора, программиста, бизнес-аналитика, руководителя проекта и сейчас занимаю должность операционного директора в одной софтовой компании. У меня за плечами 17 лет опыта работы в ИТ, сотни проведенных собеседований. В свое время я сменил 9 работодателей.

Основываясь на анализе проведенных собеседований и своем иногда горьком опыте, я выделил шесть основных причин смены работы в ИТ.

Заработная плата

Наверное, это самая распространенная причина. «Голод, не тетка...». В ИТ мало кто голодает, конечно, если вы не работаете на государственном предприятии. Но сколько бы мы ни зарабатывали, нам всегда хочется зарабатывать еще больше. Что тут греха таить, у меня так же, как и у многих читателей, основной причиной смены работы был именно размер заработной платы или задержка выплат.

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

Если у вас на руках приятный job оффер, не спешите его слепо принимать. Проведите анализ самой компании. Почитайте отзывы о компании (ресурсов сейчас предостаточно), посмотрите, кто из ваших знакомых работал или работает в этой компании. Переговорите с ними, уточните, проводится ли пересмотр заработной платы и какие условия для этого необходимо выполнить; была ли задержка заработной платы.

Карьерный рост

Карьерный рост или более правильно сказать — отсутствие карьерного роста. Это можно отнести к пункту «Профессиональное выгорание» в моем списке, однако я часто слышу эту причину на собеседованиях и решил выделить отдельным пунктом.

Забавный случай произошел с моей коллегой, которая работала на позиции главного инженера-технолога более 3-хлет. Ей предложили перейти в другую компанию на должность руководителя подразделения. На текущем месте работы ей не смогли предложить повышения в должности, а коллеге очень этого хотелось. Собственно, она и перешла в другую компанию на должность руководителя. Через некоторое время мы с ней встретились, и я поинтересовался, как у нее дела на новом месте работы. На что получил ответ: не очень все хорошо. Как оказалось, в подразделении у нее не было вообще никого, то есть руководитель подразделения без сотрудников. У нее нет вообще никаких полномочий и привилегий, просто теперь должность называется по-другому и все.

Если вы идете на более высокую должность, как минимум поинтересуйтесь:

  • количеством сотрудников в вашем подразделении;
  • вашими полномочиями;
  • какие ожидания от вас как руководителя;
  • почему позиция руководителя вакантна.

Руководство

Многие мои знакомые жаловались на то, что их руководитель «Редиска». И, мол, он меня недооценивает и вообще никогда не слушает. Не люблю обсуждать других, однако согласен, что не все могут быть менеджерами. Есть одна крылатая народная фраза: «Чем больше становилась его должность, тем сильнее корона сжимала его мозг».

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

Когда я получил свои первые менеджерские погоны, очень хотел быть достойным менеджером. По этому поводу отец мне сказал: «Где бы ты ни был, кем бы ты ни был — оставайся всегда человеком». Мне это помогает.

И в тоже время руководитель и есть «Редиска». Именно он заставляет работать, иногда делает взбучку, и самое неприятное — увольняет сотрудников.

И если вы все-таки называете своего менеджера «Редиской», возможно, причина кроется не в нем? Поищите причину сначала в зеркале. Я часто практикую этот метод. Да, неприятно признавать свои ошибки, однако без принятия ошибок сложно развиваться.

Невозможность саморазвития

Вот сейчас полетят в меня камни... Что!? Вы серьезно!? Эту причину я часто слышу от банковских сотрудников. Вот просто вдумайтесь в саму формулировку причины — саморазвитие. Кто больше должен быть заинтересован в вашем саморазвитии — работодатель или вы? Когда я слышу эту причину, задаю вполне, как по мне, логичный вопрос: «Что в вашем понимании значит невозможность саморазвития?».

Вас, извините, закатали в 3-литровуюбанку, как овощ? Как вам мешают развиваться? Большинство ИТ-компаний перепродают ваш труд или трудочасы, и они имеют право вам ставить задачи на 8 часов в день, и вы при приеме на работу соглашаетесь на это — так или нет?

Давайте рассмотрим пример: вы купили квартиру и наняли штукатура, чтобы он поштукатурил стены. Вы приходите и видите, как он 2 часа в день лепит куличики из раствора и говорит, что это поможет ему саморазвиваться. При этом ваш ребенок и супруга гостят у тещи, а вы живете вот в этих куличиках... Что вы ему на это скажете?

Расскажу по своему опыту. Довольно долгое время я работал в банках на позиции бизнес-аналитика. И это не мешало мне заниматься саморазвитием: мне никто не запрещал читать BABOK, PMBOK, посещать разнообразные митапы и курсы. Именно работая в банке, с целью обмена опытом и саморазвитием, я создал группу в ФБ — IT Network — Business Analysis & Project Management (для любителей статистики там есть опрос). При помощи группы я познакомился с чудесными людьми, профессионалами своего дела, которые помогли мне развиваться и достигать новых карьерных высот. Не ищите причины — ищите возможности!

Профессиональное выгорание

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

Причины моего профессионального выгорания:

  • рутина;
  • работа на износ.

Именно рутина стала причиной моего увольнения из одной компании на заре моей карьере. После этого я себе сказал: рутинная работа не по мне, — и выбрал курс на позицию бизнес-аналитика. Там рутины было намного меньше. Единственное, что мне не нравилось и не нравится сейчас — переписывать по несколько раз документы с требованиями к реализации систем. Поэтому сначала я стал разрабатывать и согласовывать прототипы, а потом — писать документы.

Работа на износ — думаю, многие читатели сталкивались с этим. Моя проблема крылась во мне:

  • Неумение делегирования. С ростом моей должности росло и количество задач, и сцепив зубы, я начал выполнять практически все задачи сам, работая по 12-16часов в день. При этом команда аналитиков спокойно отсиживала 8 часов и уходила домой. Я ничего не успевал делать, я злился и, как свеча, медленно сгорал. Спасибо моему менеджеру. Он мне рассказал о том, как правильно планировать и распределять задачи, как работать с приоритетами... Как говорит мой друг: «Работать нужно головой, а не 12 часов».
  • Неумение отказать. Каждый должен оценивать свои силы и говорить друзьям, коллегам, руководителям волшебное слово — нет. Не набирайтесь задач. Самостоятельно вы все задачи не выполните. Оценивайте свои силы. Только вы сами можете сказать, сможете сделать поставленную задачу или нет. При отказе не скупитесь на аргументацию, отказ принимать также сложно.
  • Мультизадачность. У меня часто бывали ситуации, когда задач слишком много, и приходится переключаться с задачи на задачу. Что делать? Все довольно просто: выставить приоритеты и не соблазняться на переключение между задачами. Именно последовательное выполнение задач увеличит вашу эффективность. Если передо мной стоит важная и срочная задача, я отключаю все раздражители: социальные сети, почту, иногда даже телефон и выполняю эту задачу.

Как понять, в чем ваша проблема? Поделюсь своим лайфхаком. При получении новой лычки на мои погоны (Head of PMO) у меня эффективность очень сильно снизилась. Я работал все больше и больше, а результата не было, и это очень сильно меня огорчало. Мне посоветовали сделать одно упражнение. На протяжении двух недель я начал записывать ежеминутно, чем занимаюсь на работе, включая прочтение интересных статей, переписку в ФБ или в скайпе, перерывы на обед, разговоры по телефону и так далее. После этого провел анализ. Результатом был поражен. Анализ показал, что больше всего времени я трачу на консультации сотрудников. Но это моя святая обязанность — консультировать коллег, ею я не мог жертвовать.

По результатам анализа мне удалось найти закономерность: меньше всего меня отвлекают в период с 9:00 до 10:30, с 12:30 до 14:30. Это были самые продуктивные часы. Посоветовавшись с моим руководителем, я попросил его изменить мой график и работать с 8:00 до 17:00. А обед — с 12:00 до 12:30. Теперь у меня появился еще 1 час для продуктивной работы. Кажется, всего час, а для меня это еще целый час, когда меня никто не отвлекает. Также взял за правило не заходить в соцсети на протяжении рабочего дня, это еще экономит мне до 30 мин в день.

Сейчас меня можно найти в социальных сетях и за чтением интересных статей во время обеда, по дороге на работу и домой. Кстати, так я нашел время на прочтение книг. Книги читаю в дороге (путешествия, командировки, дорога на работу и с работы). Таким образом, в этом году прочитал 18 новых книг. Еще две лежит на полке в ожидании путешествий.

Атмосфера в коллективе

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

Расскажу историю, которая приключилась со мной в 2009 году. В то время я устроился на новое место работы и незадолго до этого открыл для себя новый метод управления проектами — Scrum. Проникшись глубиной методологии, начал нести с собой плакат: «Даешь гибкость в разработке!».

Я рассказывал, какая крутая эта методология и что все неправильно работают. Меня чуть не сожгли на костре изменений за ересь... Все смотрели на меня с опаской и в тихую смеялись над доской задач. На первой ретроспективе спринта QA специалист заявила, что никакого она жаловаться не будет и что это вообще ересь, у нас государственный заказчик и ни о какой гибкости нет и речи... Я начал постепенно внедрять небольшие изменения, приближавшие нас к гибкой методологии. И только через 3 года компания стала готова к внедрению Scrum-фреймворка.

Какой вывод можно сделать? Вы пришли в команду, до этого она жила как-то и без вас. Не стоит делать революции, изучите, чем живет компания. И только после этого, при необходимости, начните постепенно вносить изменения.


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

А какие по вашему мнению весомые причины для смены работы?


Image by Tea Wetyšková


Обзор AR-очков Magic Leap: шаг вперед или прорывной скачок?

$
0
0

Привет! Я Research & Development Lead в Intellectsoft AR Lab. Мы разрабатываем решения под Microsoft HoloLens в сфере строительства. В этой статье я рассмотрю плюсы и минусы очков Magic Leap, которые вышли недавно.

Появление Magic Leap очков техноэнтузиасты ждали семь долгих лет. Уже с первого тизера, создатели обещали пользователям впечатляющий AR/VR опыт, который может быть применен в самых разных сферах — от развлечений до комплексных решений бизнеса. Выпуск откладывался несколько раз, и в итоге 8 августа 2018 года состоялся долгожданный релиз очков Magic Leap, которые на тот момент можно было купить всего в нескольких городах СШA.

До выхода Magic Leap, мы в Intellectsoft AR Labработали с решениями в дополненной реальности для строительной индустрии, выпустив MEP Layout демо для Microsoft HoloLens под названием KADO. Наконец, у нас появилась возможность испытать новое и долгожданное устройство.

Оказался ли новый девайс достойным столь длительного ожидания, или же количество недочетов, все же, не позволит ему стать объектом массового потребления на данном этапе?

Предлагаем рассмотреть все плюсы и минусы в нашем детальном обзоре Magic Leap.

Преимущества

1. Поле обзора Magic Leap больше, чем у очков Microsoft HoloLens

С первого взгляда заметно, что активная область Magic Leap больше, чем у Microsoft HoloLens — единственного устройства, близкого к ним по возможностям. Это важное преимущество. Большее поле обзора Magic Leap позволяет охватить большее пространство меньшим движением головы, что упрощает процесс адаптации для новых пользователей. Малое поле обзора у Microsoft HoloLens считают критическим недостатком многие пользователи устройства. По их мнению, это делает технологию не очень подходящей для широкого использования. Команда создателей Magic Leap приняла это во внимание.

2. Небольшой вес очков

Еще одно преимущество Magic Leap — вес. Очки почти в два раза легче, чем Microsoft HoloLens: 345 грамм против 579 грамм. Это позволяет дольше работать с AR-очками, например, для дизайна или 3D-моделирования.

3. Больше вычислительной мощности, оперативной памяти и места для хранения данных, чем у других моделей на рынке

Очки Magic Leap работают на чипе NVidia Tegra X2 с интегрированным 256-ядернымграфическим процессором NVidia Pascal, 6-ядернымпроцессором ARMv8 с 64-битнымпроцессором, и 8 ГБ памяти LPDDR4 с 128-битныминтерфейсом. Половина памяти (4 ГБ) будет доступна для приложений разработчика. Емкость памяти составляет 128 ГБ, для разработчиков доступно — 95 ГБ.

Все это инкапсулируется в отдельное устройство под названием Lightpack, которое пользователь должен носить с очками. Устройство небольшое и легко крепится к карману.

Такая комплектация — еще одно существенное преимущество, так как позволяет разработчикам работать с крупными и более сложными 3D-моделями.

4. Технология Magic Leap поддерживает разработку на macOS

Разработчики, работающие на Mac, будут очень рады: Magic Leap поддерживает разработку на macOS, а их творческие усилия в области AR, больше не будут ограничены исключительно Windows.

Недостатки

1. Наличие двух размеров очков усложняет покупку, разработку и тестирование

Нашу пару очков Magic Leap привез к нам в офис курьер службы доставок Enjoy. При заказе нам сообщили, что нужно выбрать между двумя доступными размерами — они так и назывались: «Размер 1» и «Размер 2». В чем же разница? Выбор будет зависеть от вашего межзрачкового расстояния. Мы провели необходимые замеры и определили, что троим из четверых членов команды подходил «Размер 2». На нем мы и остановили наш выбор. Тем более, как мне известно, этот размер должен подходить порядка 30% пользователей.

Так как мы планируем использовать Magic Leap для демопоказов, выбор между двумя размерами создает несколько очевидных проблем. Начнем с того, что команда нашей AR лаборатории рассредоточена по нескольким локациям, поэтому придется снабдить каждый из офисов очками Magic Leap, тем более в двух размерах. Также это означает, что могут возникнуть трудности с проведением комфортной демонстрации для каждого клиента.

2. Сложно сделать так, чтобы глаза и очки были на одном уровне

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

Вдобавок к этому, очки Magic Leap поставляются с 5-юразличными размерами носоупоров (носовых фиксирующих колодок), и я часто сам перепрыгиваю между размерами 2, 3, 4 и 5 после того, как передавал очки кому-то другому. Опять же, это добавляет сложности при использовании. Это приемлемо, если вы используете Magic Leap в качестве индивидуального устройства, но неудобно для работы и тестировании в команде.

3. Локализация, отслеживание и распознавание пространства необходимо улучшить

Во время тестирования Magic Leap я заметил больше визуального дрожания, чем у HoloLens. Пространственное согласование также не работает должным образом. Каждый раз, когда я запускаю Magic Leap после перезагрузки, они не могут распознать уже знакомое пространство. Эта проблема сохраняется, как в случае с многофункциональными поверхностями, так и на больших пространственных расстояниях, независимо от усилий, которые вы приложили. Следовательно, одновременная локализация и построение карты (SLAM) затруднительно. Это проблема с софтом, и я надеюсь, что разработчики уже работают над ее устранением.

4. Ограниченное использование «мэша» комнаты

Очки Magic Leap имеют все необходимое для выполнения постоянного сканирования комнаты. Однако я обнаружил, что операционная система Lumin OS не использует это активно для системных интерфейсов. Вы можете увидеть, как системное меню проходит сквозь стены, или вы можете расположить экраны приложений за стеной или сквозь пол. На мой взгляд, пространственный компьютерный интерфейс должен знать об окружающей среде пользователя и последовательно объединять физические и цифровые миры. Я полагаю, что этот процесс слишком вычислительно затратный, и разработчики решили его оптимизировать в данном релизе, а позже добавить больше функций, которые будут распознавать пространства.

5. Навигация трекпада контроллера не очень удобная

Я был удивлен, что пользовательский интерфейс Magic Leap не предполагает использование жестов или контроля взгляда вообще. Вместо этого компания реализовала навигацию на основе трекпада. Вам нужно провести по трекпаду контроллера большим пальцем, чтобы переместить фокус между элементами пользовательского интерфейса. Я думаю, что навигационная система, основанная на жестах, которую мы видели в гарнитурах VR, таких как Oculus Go и Google Daydream, была бы более подходящей и удобной на предприятии и в целом. Подход, основанный на направлении взгляда, как в Microsoft HoloLens, также лучше подходит для интерфейсной навигации и ввода текста. Наше тестирование Magic Leap проходило в относительно просторном офисе, но использование контроллера в более узких пространствах, например, на строительных площадках, будет неудобным.

В конечном счете, это тоже проблема программного обеспечения, которая со временем может быть решена, учитывая ее важность.

6. Голосовой интерфейс и навигация используются недостаточно

Коротко говоря, управление голосом в нативном интерфейсе Magic Leap пока довольно базовое. Сейчас навигация в основном осуществляется через текст и изображения. Опять же, на сегодняшний день в большинстве случаев VR/AR технологии полагаются на голосовое управление. В случае с Magic Leap, было бы намного удобнее иметь голосовое сопровождение вместо того, чтобы читать длинные тексты на интерфейсе AR-очков, независимо от того, насколько хорошо они сделаны или насколько большое поле зрения.

7. Выключение очков и отсутствие режима сна

В очках Magic Leap отсутствует режима сна, и если вы хотите сэкономить заряд батареи, вам придется каждый раз выключать их. Это очень странное технологическое решение в то время, как производители ноутбуков и смартфонов уже давно избавили пользователей от этой рутины. С развитием технологий спящий режим уже давно стал базовой фичей. И несмотря на то, что очкам и самой технологии Magic Leap есть чем гордиться, разработчикам явно придется добавить эту функцию в ближайшем будущем.

8. Нет простого способа носить очки Magic Leap с собой

Почти любой современный гаджет помещается в обычный рюкзак и не нуждается в особой защите, но это не относится к Magic Leap. Устройство хрупкое, плюс вы не сможете отключить компьютер Lightpack от него. Кроме того, вам нужно дополнительное место для носоупоров, зарядного устройства и контроллера. Кажется, понадобится отдельная коробка для того, чтобы носить все это, если вы не хотите разбить устройство по пути на важную встречу.

9. Очки Magic Leap не подходят для ношения сверху очков для зрения

Большинство членов нашей команды носят очки для коррекции зрения. И для того, чтобы комфортно использовать Magic Leap, нам нужно каждый раз переходить на контактные линзы. Я также попробовал использовать устройство во время ношения своих очков, и мой опыт взаимодействия был значительно хуже.

10. Чрезмерное нагревание — основной недостаток

Примерно через 15-20минут после начала использования вы можете почувствовать нагревание очков на лбу. Это сводит на нет положительный эффект легкости, а также отбивает желание использовать их долго.

Выводы

Несмотря на очевидные недостатки, Magic Leap — это шаг к по-настоящему пространственным очкам дополненной реальности. Устройство легкое, имеет большое поле обозрения и обладает достаточной вычислительной мощностью, чтобы дать возможность создателям и разработчикам создавать новый и уникальный опыт. Если смотреть шире, AR-очки Magic Leap — это скорее шаг, чем скачок к созданию новых инновационных проектов.

На рынке пока еще не так много приложений для тестирования очков. Это говорит о том, что очкам и технологии Magic Leap надо провести, по крайней мере, еще один год в разработке, прежде чем они попадут в массовое использование.

Для наших корпоративных клиентов Magic Leap дает возможность экспериментировать с более крупными BIM моделями (Building Information Modeling) в сферах производства и строительства. Сфера образования и сфера развлечений — это те индустрии, где я также вижу возможность подтвердить работоспособность концепции и протестировать устройство на реальных приложениях.

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

Понравился наш обзор гарнитуры Magic Leap? Напишите свои вопросы в комментариях или прямую в Intellectsoft AR Lab.

Python дайджест #18: new Python governance model

$
0
0

У випуску: Python отримує нову модель „уряду”, AWS Lambda підтримує Python 3.7, PyCharm 2018.3.

Новини

Super Potato Bruh, написана на Pygame, доступна в Steam. Сорси доступні тут.

Red Hat Linux 8.0 Beta реліз замінюєдефолтний Python 2.7 на Python 3.6.

Python стаєофіційною мовою програмування для навчання у Франції.

Funding for 64-bit Armv8-a support in PyPy — PyPy отримує кошти на підтримку 64-bit Armv8-a.

AWS Lambda Supports Python 3.7 — AWS додає підтримку 3.7 до Lambda.

Advent of Code 2018 is now online — різдвяний календар задачок розпочато!

Python gets a new governance model — розбір нової моделі управління Python.

Python governance vote (December 2018): Results.

Нові релізи

Qt for Python 5.12 Released

PyCharm 2018.3 — тайм-трекінг, можливість зберігати термінали, підтримка Cassandra та інше.

Bokeh 1.0

Цікаві бібліотеки

Camelot — парсінг таблиць з PDF-файлів.

Dampr — Pure Python Data Processing.

Molten — фреймворк для побудови HTTP API, в стилі rocket.

Video-to-ascii — програвач відео в терміналі за допомогою ASCII символів.

Loguru — Python logging made (stupidly) simple.

WordRPG — текстова RPG, написана на Python.

Python port scanner in asyncio.

Thonny: The Beginner-Friendly Python Editor.

pyAudioClassification — класифікація аудіо на базі Keras & TensorFlow.

PEP’s

PEP 8016 — The Steering Council Model — нова модель правління Python.

Статті/ресурси

Explaining the Python global interpreter lock — ще один раз про GIL.

Top 50 matplotlib Visualizations for Data Analysis — The Master Plots — підбірка для дата аналізу та візуалізації з прикладами коду.

Moving over to Go has made it painfully apparent how spoiled Python devs are to have the Requests library — про біль без requests і подібних бібліотек в Go.

50 Free Machine Learning Datasets: Natural Language Processing — набір датасетів від Cambridge Spark.

Using dice to recreate a picture — моделювання зображень з гральних кубиків.

Python at Microsoft: flying under the radar — від синдрому „винайдено не нами”до підтримки Python в Visual Studuio/Visual Studio Code та наймання core розробників у Microsoft.

Fixing a Tough Memory Leak In Python — як знайти витік пам’яті в Python-коді.

Dependency Injection in Python: The Java Guy’s Perspective

Profiling Python applications using Pyflame — профілювання коду з Pyflame на основі системного виклику ptrace.

Pipenv: promises a lot, delivers very little.

The Rise of Python for Embedded Systems Continues — стан Python в embedded-системах від Zerynth.

Відео

Python pet detector — розпізнавання котів з Raspberry та Python.

MIT AI: Python (Guido van Rossum) — доповідь Гвідо на MIT:AI.

How To Install Python and Set It Up With Visual Studio Code.

The entire MIT Intro Computer Science class using Python is available for free, with course materials — відео з популярного курсу MIT 6.000.

Туторіали

Як побудувати Alexa аплікації з Python.

Build A Simple Live Flight Tracking in Python — трекінг та візуалізація польотів літаків з matplotlib.

Continuous Integration With Python: An Introduction.

Designing Well-Structured REST APIs with Flask-RestPlus: Part 1.

Bash completion with Python — написання bash автодоповнень на Python.

A complete tutorial on data visualization with Python using Matplotlib.


← Попередній випуск: Python дайджест #17

Как проводить собеседование на позицию DevOps-Engineer. И как готовиться к нему

$
0
0

Всем привет! Меня зовут Антон, я DevOps-инженер в MacPaw, экс-сотрудник Swiftype (an Elastic company), Grammarly, Bigmir.net. За 10 лет в ИТ я успел побывать в мире VoIP-хаоса, FreeBSD-сект, тимлидства, MacOS-разработки (со стороны DevOps), стандартного веба. Минимум половину своей карьеры мне приходилось собеседовать людей, поэтому с опытом я выработал для себя некие правила и чекпоинты, которыми и хотел бы сегодня с вами поделиться.

Статья будет полезна техническим специалистам, которые проводят интервью в стиле «как карта ляжет» или понадеявшись на импровизацию. Особенно для тех, кто проводит интервью на роли DevOps/SRE Engineer, преимущественно для уровней middle, senior, TL.

Хотел бы отметить, что мой карьерный путь проходил только по продуктовым компаниям, поэтому, вероятно, кое-что из написанного может отличаться в мире аутсорса.

Сломанный процесс

Что не так? Я бы хотел начать с того, что немного поворчуя часто встречал поломанные процессы интервью в разных компаниях! И это даже не затрагивая моменты, когда интервью превращается в прогревание своего ЧСВ.

Что такое inode? Разница между Apache и Nginx? Что произойдет, если я нажму Tab-Tab? Как часто, будучи в роли кандидата, вы слышали подобные вопросы? И как часто вы делали мысленный фейспалм на них? Высока вероятность, что ваш собеседник просто загуглил список вопросов «Linux System Administrator/DevOps Interview Questions», который вы даже когда-то скролили, попивая пивко вечером, но вряд ли запомнили все ответы. В итоге проверили вашу память, и, в лучшем случае, немного знаний.

Что делать, если вы собеседующий

Готовиться к интервью! Да, с вашей стороны это не менее важно, чем со стороны кандидата. У вас должен быть список вопросов, ответы на которые помогут вам понять, насколько ценным будет опыт человека для текущей компании.

Не надо так

Это очень важный блок! Перечитайте его дважды, даже, если вы не относитесь к DevOps. Не нужно спрашивать:

  • Как бы кандидат разруливал сложности «прогонки» 10 Tbit/s на FreeBSD, потому что это прикольная история, которую рассказал сосед по общаге в 2005.
  • Про межпланетный интернет. Да-да, такой проект существует, и правда интересно обсудить, как он работает. Но прочтите ниже блок «Поведенческие моменты» и поговорите об этом с будущим коллегой в пабе ;)
  • О чем сами узнали только вчера. То, что кандидат ничего не знает из недавних changelogs, ни о чем не говорит. Не все мы ноулайферы.
  • О том, чего у вас нет в компании. Вы планируете когда-то использовать Kafka? Нет? Вот и не нужно спрашивать!
  • Специфический опыт, который доступен тем, кто строил какой-то левый хостинг, но денег у вас не было, и вы извращались как могли, и познали дзен! Туда же VoIP, CI/CD on MacOS/Windows и подобное! Само собой, только если это не требуется от позиции.
  • Что делает вот тот ресурс в Chef и почему DSL там сработает так, а не иначе? Впрочем, если у вас колбаса самописного шефа и самописные LWRP, которые надо будет редактировать, то вопрос может быть и правильным.
  • Не задавайте вопросы, на которые можно ответить первой строкой из описания в «Википедии». Такие вопросы не помогают понять, сможет ли человек делать конкретную работу. Один мой друг жаловался, что не может проходить собеседования, так как не знает все о HAProxy, о Postgres, да еще и про MongoDB. Я посоветовал заучивать первые предложения из описаний, и количество пройденных интервью возросло.
    • Вы знаете, что такое риак?
    • Ну, это распределенный KV датастор, как Динамодб.
    • А, ну ок!

Let’s talk about real systems

Задавайте открытые вопросы, в которые можно углубляться. Если вы не знаете таких вопросов, то возьмите вопросы, которые вам близки, и умножайте нагрузку, пользователей, rps в X2-X5-X1000 раз.

Пример открытого вопроса:

Опиши шаги, необходимые для построения приложения с автоскейлингом в AWS. Далее это позволит вам развивать тему максимально глубоко, в зависимости от вашего опыта и опыта вашего собеседника:
  • А если мы хотим использовать Spot Instances, что изменится?
  • ALB или NLB?
  • Мы же уже на Spot? Zero downtime shutdown, как?
  • MySQL master-master, master-slave, автоматическое переключение, как?
  • Зашивать код в AMI? Идет в разрез с системой деплоймента? Как можно по-другому? Или триггерить билд на конкретный инстанс? А чтобы не деплоить на всех в группе при этом?
  • Куда будем класть сикреты?
  • А если у нас часть инфраструктуры в другом облаке или до сих пор на bare-metal? VPN? Хм...

Пример вопроса с «умножением»:

У нас есть Data Pipeline: ALB-Nginx-Python-RabbitMQ-Some_Workers-S3-Hadoop-Whatever. Система хорошо работает при количестве запросов X1, но при X2 начинает скапливаться очередь, где может быть проблема, что делать?
  • При X5 nginx начинает выдавать 502, что не так и куда смотреть? Трейсинг, интересно?
  • При X20 опять очередь, и наш реалтайм процессинг уже совсем не похож на реалтайм.
  • У нас прилетело Х100, реббит упал, и потерял все данные? План по High Availability, как это будет выглядеть, сколько чего добавляем, а если опять чертов Spot? А как быть с остальными частями системы?
  • Kubernetes? Отлично, давай поговорим, как будет выглядеть вся система?
  • Мы же не забываем все это замониторить и читать логи, CI/CD? А как, откуда кто куда пишет и т.д.

Troubleshooting + hands-on

Это все отлично, скажете вы, но как же мне работать с человеком, который не знает, что такое LA или всех флагов lsof на память?

Нет, конечно, никто вам не запретит опять скатиться в «Apache vs Nginx». Но лучше сами немного подготовьтесь, сделайте виртуалку, сломайте в ней что-нибудь и дайте своему собеседнику. Эта часть займет у вас минут 5-7,но закроет очень много скучных вопросов. Заодно можно узнать что-то новое.

Deep dive

Если вам интересно узнать, например, как работает GTID в MySQL, то воспользуйтесь советами из блока «Let’s talk about real systems» и подведите к этому в обсуждении про увеличение нагрузки. То же самое с сетями, конфиг-менеджментами и т. д. Не стоит спрашивать подобные вопросы, ни к чему не привязываясь. Человек не в контексте, а вы такие бац! А как ElasticSearch делает flush-commit под капотом? И тут судорожно приходится вспоминать что-то про Lucene, что приведет к неловким попыткам выдать хоть что-нибудь.

Программирование и тестирование

Программирование, как английский, должно быть by default. А вот на каком уровне — это очень холиварный вопрос. Имхо, чем чаще вы пишете код для повседневных задач, тем лучше.

Здесь нужно учитывать нюанс, что инфраструктурные вещи, как правило, отличаются от CRUD, например. Поэтому, самое худшее, что можно придумать — это позвать проверить эту часть программиста. Я даже помню (но не буду вслух) одну украинскую компанию, которая просила от DevOps-инженера алгоритмы, структуры данных и вот это вот все.

Понимая под какие задачи вы пишете код, можно подготовить правильные вопросы или тестовое. Например, вам по задачам достаточно только bash и прочий sh. Даем вот такой кусок лога Nginx:

host=setapp.com remote_addr=134.21.127.86 request="GET /v4/customer?access_token=lol HTTP/1.1" status=200 bytes_sent=813 user_agent="Setapp/1.18.2 CFNetwork/974.1 Darwin/18.0.0 (x86_64)" request_length=385 request_time=0.078 upstream_time=0.078 request_id=47f01df614e6c777d88270417c9ac871
host=setapp.com remote_addr=134.21.127.86 request="POST /v4/apns_token HTTP/1.1" status=204 bytes_sent=454 user_agent="Setapp/1.18.5 CFNetwork/974.1 Darwin/18.0.0 (x86_64)" request_length=655 request_time=0.081 upstream_time=0.074 request_id=9174d3b3712c4fd1e93696457f255439
host=setapp.com remote_addr=99.59.88.166 request="GET /v5/token/lol HTTP/1.1" status=200 bytes_sent=910 user_agent="Setapp/1.18.5 CFNetwork/975.0.3 Darwin/18.2.0 (x86_64)" request_length=371 request_time=0.011 upstream_time=0.011 request_id=d51d8230b753f5c9ac5fe31f4d1279a3

И просим вывести только IP-адреса, затем убрать из вывода remote_addr=, а после отсортировать, вывести топ повторяющихся IP, удалить дубликаты и т. д. Набросать подобных и более сложных задачек из жизни по bash совсем не сложно.

Идем дальше. Кандидат знает Python, Ruby, Go? Попросите сделать такой же парсинг лога, только на любимом ЯП. Хочу отметить, что во время интервью, под стрессом, скорее всего, мало кто справится со следующими просьбами, и для их выполнения может понадобиться несколько часов или больше. Скажу честно, что сам довольно редко просил делать тестовое, однако вы можете всегда иметь заготовки под рукой. Адекватно оценивайте количество времени, которое кандидат будет готов потратить на тестовое задание ради вашей компании на данном этапе.

Еще примеры:

  • Написать CLI программу, которая будет парсить JMX и высчитывать процент или частоту запуска GC.
  • Программу, которая сможет принять вебхук, распарсить json и, используя готовые библиотеки, отправить ключевые значения в Slack или в Jenkins API.
  • Написать какой-то «кукбук» для Chef/Puppet — тоже вариант. Ansible? Скажи что-нибудь по YAMLовски :)

К сожалению или к счастью, 99% задач по написанию кода в этой профессии сводятся к подобному.

Хотел было что-то добавить про написание k8s operators, но голос разума подсказал, что это оверкил. Скорее всего, нужно будет готовиться к подобному в недалеком будущем, но пока я и сам не сталкивался с такими заданиями на интервью.

Тестирование тоже желательно должно быть. Не буду долго тут расписывать, но, если кандидат когда-то имел опыт с inspecили подобным, то это уже хорошо! Умеет и писал тесты к своему коду — отлично!

Поведенческие моменты

Я не предлагаю спрашивать о том, кем вы себя видите через 5 лет! Скорее, о чем-то, что может быть важным для вашей команды или компании. Очень простой и банальный пример, когда вы решили внедрить, ну я не знаю, blameless postmortems, а перед вами типичный злой сисадминхейтер всего и всех. Также можно расспросить, работал ли человек в команде, как принимали решения о внедрении чего-то нового. Это покажет, работал ли он с другими людьми и есть ли вообще опыт принятия решений с кем-то вместе.

Если у кандидата были ограничения в прошлых компаниях, в тулах, деньгах, чем угодно, то я обычно прошу рассказать, что бы он изменил в процессах, если бы ему эти ограничения сняли.

Часто в нашей работе приходится сталкиваться с tradeoff между быстрым «подставлю костыль» и сделаю правильно. Как решить, когда выбирать первое, а когда второе? Иногда аргументация очень интересная для обоих вариантов и базируется на прошлом опыте.

Один из моих любимых вопросов: если бы мы с тобой поменялись местами, то что бы ты у меня спрашивал? Как по технической части, так и в целом? Чтобы тебе было важно выяснить обо мне?

Доводилось ли тебе быть «евангелистом»? Как ты доносил (бы) людям идею изменений какого-либо процесса или технической части в продукте, команде?

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

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

London is the capital of Great Britain

Не проверяйте английский у кандидатов на техническом собеседовании, это задача HR. Более того, когда интервьюер начинает «лет ми спик фром май харт» с целью проверить ваш английский, то выглядит это очень так себе. Плюс на интервью все и так стрессуют и иногда забывают ответы на банальные вопросы, а на английском можно вообще ненароком кандидата прибить.

Фидбэк после интервью

Для HR

В 100% случаев HR будет просить у вас фидбэк. За варианты «норм» или «не катит» HR заносят вас в список на аннигиляцию в случае восстания машин. Поэтому старайтесь, не откладывая, сразу после интервью написать свои мысли о кандидате. Если вам это сложно, то попробуйте делать пометки в процессе общения, только обязательно предупредите об этом собеседника. Фидбэк HR нужен не из вредности, а потому, что HR в идеале хочет хорошо делать свою работу и поддерживать как свою репутацию, так и компании.

Вспомните, как часто на DOU мелькают недовольные отзывы кандидатов «Все было хорошо, но потом HR так и не перезвонил и не дал фидбэка». Но HR не было на собеседовании с вами, скорее всего, и поэтому нельзя просто взять и придумать фидбэк самостоятельно. Кандидат уделил время нам, и мы проявляем к нему уважение, не просто говоря «Прости, ты не подходишь нам», а объясняя, почему именно и где уже хорошо, а над чем еще стоит поработать.

Для кандидата напрямую

Тут нужно быть осторожным, так как ненамеренно можно и обидеть человека, и оставить плохую ассоциацию с компанией! У меня был случай, когда я выдал человеку аккуратное «слабенько с AWS», а он оказался каким-то там трижды сертифицированным по AWS. Было неудобно. C тех пор я стараюсь показать свой отзыв кому-то из коллег и конкретизировать: «Не хватило знаний с такой-то и такой-то штукой в AWS».

В большинстве случаев человек сам способен провести ретроспективу и понять, где он плавал, а где был силен. Но, если речь явном запросе «что бы почитать?», то вам же несложно накидать список хороших книг, WebOps/DevOps/SRE Weekly и дать ссылочку на UkrOps Slack, правда?

Послесловие

В конце хотелось бы обобщить важное:

  • Готовьтесь к интервью независимо от того, на какой вы будете стороне.
  • Не превращайте интервью в сценку «Я здесь самый крутой чувак!».
  • Не делайте из интервью экзамен, их, вроде, и в универе должно было хватить :)
  • Выбирайте себе коллегу, а не набор чекпоинтов напротив нужных скиллов.

Ринок праці 2018: рекордні темпи росту і 160 тисяч спеціалістів

$
0
0

Підводимо підсумки року. За нашими підрахунками, кількість зайнятих спеціалістів в українському ІТ досягла відмітки 160 тисяч. Галузь продовжує зростати рекордними темпами, і схоже, що стримує її лише дефіцит кадрів. Але про все по черзі.

Програмісти: +33 тис. спеціалістів

Щороку ми пробуємо оцінити кількість фахівців у галузі, використовуючи дані зарплатного опитування і ТОП-50.

За даними липневого зарплатного опитування, 16,6% опитаних працюють у компаніях «від 1 000 спеціалістів». З липневого рейтингу ТОП-50сюди потрапляє 13 компаній (від EPAM до Intellias), в яких усього працює 26 508 технічних спеціалістів.

Таким чином, отримуємо 26 508 / 16,6% = 159 687 спеціалістів.

Ріст ринку vs. ТОП-25

Рік тому за цією ж формулою ми нарахувалив Україні 126 990 працівників ІТ, тобто за 2018 індустрія виросла на 26%. За останні два роки ІТ-галузь зросла на 60%.

На початку року ми підрахуваликількість ІТ-фахівців за даними Мін’юсту — отримали 125 тисяч ФОПів-айтішників.

Вакансії: +48% до 2017

Кількість опублікованих на DOU вакансій зросла за рік у півтора рази — з 3 111 до 4 606 в місяць.

Кількість відгуків зросла на 23% порівняно з минулим роком — з 270 тис. до 330 тис. Кількість компаній, які розміщують вакансії, зросла на 38% — з 2 419 до 3 339.

Кількість вакансій за роками

Найбільш затребуваними в 2018 році були Front-end, QA і PHP — частка цих трьох категорій складає 31% від загальної кількості вакансій.

Усього вакансій за 2018 рік за категоріями

У топі за співвідношенням вакансій / відгуків тримаються в основному нетехнічні напрямки в ІТ. На кожну вакансію Product і Project Manager припадає понад 15 відгуків. Тоді як на одну вакансію Fron-end — тільки 5.

Кількість відгуків на одну вакансію, листопад 2018

Зарплати: +27% у Senior Ruby, +25% у Junior QA

Уперше з 2014 року у Junior і Middle QA спостерігається позитивна динаміка зростання зарплат — за даними липневого опитування. За останній рік у Junior QA зарплата збільшилася з $400 до $500, у Middle — з $1100 до $1300. Найбільший стрибок за рік стався у Senior Ruby (+$800).

Рухається вгору і середня зарплата проджект-менеджерів — за останній рік +$200. Це перша позитивна зміна динаміки зарплати ПМ-ів з грудня 2013 року.

Зарплати істотно відрізняються не тільки залежно від досвіду роботи, але і в розрізі міст. ПМ у Києві отримує в два рази більше, ніж ПМ в Одесі і Львові. Junior Java краще платять в Одесі, а львівські Middle Swift отримують на $900 більше, ніж столичні.

Ми вже збираємо анкети для грудневого зарплатного опитування. Приєднуйтесь!

Бонуси в IT: в топі гнучкий графік роботи і корпоративи

У 2014 році ми вже публікували статтю про бонуси в ІТ. Цього року знову вирішили поглянути на цю темуі в анкету «Портрета ІТ-спеціаліста» додали два питання: які бонуси надає ваша компанія і які бонуси вам би хотілося отримувати.

Висновки: медична страховка, спорт і компенсація харчування — те, чим можна привабити спеціалістів у компанію, не рахуючи матеріальних бонусів. Компенсація харчування виявилася одним з найбільш недооцінених компаніями бонусів.

Найкращі канали пошуку спеціалістів

У лютому 2018 року на Djinni проходило опитування роботодавців та рекрутерів. Дізнавалися, хто, як і де шукає ІТ-спеціалістів.

Рекрутер закриває одну вакансію за період у середньому від двох тижнів до двох місяців. Зарплата спеціалістів з пошуку в Києві майже в два рази вища, ніж у регіонах, а найкращі канали пошуку — LinkedIn, Djinni та рекомендації співробітників.

Ефективність каналів пошуку

Найкращі ІТ-роботодавці

Цього року ми перезапустили рейтинг ІТ-роботодавців. Намагалися врахувати критику минулих років — тепер у рейтингу нова анкета, є окрема категорія для українських ІТ-гігантів і ще низка інших оновлень. За два місяці зібрали майже 15 тис. голосів та визначили найкращих IT-роботодавців 2018 року.

Школи та виші

Рейтинг вишівтретій рік поспіль очолює Могилянка. З профільних ВНЗ у п’ятірці лідерів тільки ХНУРЕ (3 місце). КПІ зайняв лише 8 місце, а Львівська політехніка — 12-е.

Топ-10 найкращих вишів на думку учасників опитування:

Третій рік поспіль ми готуємо рейтинг шкіл за результатами ЗНО. Цього року враховували результати попередніх двох років (2016/17).

Портрет ІТ-спеціаліста

Традиційно завершимо огляд Портретом ІТ-спеціаліста. Цього року зібрали 8 638 анкет, додали кілька нових питань, а Popel Agency намалювали нам гарну інфографіку в стилі Pixel art.

Із цікавого — жінок в ІТ вже 23%, у Києві частка тих, хто працює в аутсорсі та продукті, майже однакова — 36% проти 35% відповідно, двоє з трьох ІТ-спеціалістів працюють в опенспейсі.

Ідемо в 2019-й.

Senior у пошуках роботи. Про питання на системний дизайн та фінальні співбесіди

$
0
0

Після перерви знову продовжуємо говорити про співбесіди. Цього разу більше про практичні запитання, питання з дизайну та фінальні. Якщо ви ще не читали попередніх трьох частин (перша, друга, третя) — спершу зверніться до них.

Отож, почнімо. Коли ви успішно пройшли етапи тестових завдань, теоретичних запитань, перевірку на знання якихось конкретних штук, то у вас, найімовірніше, будуть цікавитися вже більш складними речами. А саме — вашим попереднім досвідом, підходами до вирішення задач, вашими роздумами щодо платформ та фреймворків.

Попередній досвід

Перше запитання, яке вам майже гарантовано поставлять, буде: «Опишіть найскладнішу задачу, яку вам довелося робити».

Як на мене, питання досить нерелевантне, тому що, як правило, інтерв’юер буде очікувати саме технічних проблем, тоді як у нашій роботі більшість складнощів пов’язані якраз із людьми. Навряд його задовільнить відповідь: «Ми вперлися в обмеження системи. Щоб порефакторити, треба було 3 місяці проводити купу мітингів з іншими відділами, щоб переконати їх, що ця робота повинна бути виконана саме зараз» (це, напевне, більше про менеджерський досвід). Або «у нас хаотичний замовник, і ми 4 рази переписували якусь частину системи. Вже на третій раз мені було дуже складно себе мотивувати».

Натомість усі чомусь будуть очікувати прохолодних історій про те, як ви перемелювали петабайти даних на кластерах, які коштують тисячу баксів за годину роботи. Як ви ковбасили 300kk req/sec на чистому Netty. Як ви застосовували consistent hash ring для шардування терабайтів даних і подібні байки.

Я вже писаву себе на каналі, що найскладніші задачі, для виконання яких мені треба було думати і напружувати сіру речовину, залишилися в університеті. Реальна робота з технічної точки зору виявилася прогулянкою Центральним парком у сонячний день. Тому, якщо вам не пощастило працювати в highload/adtech/fintech/gambling проектах, де є реально великі навантаження, то вашою найскладнішою проблемою, напевне, було розслідування якогось хитрого бага, який не давав нормально рендерити формочки або конвертувати один XML в інший.

Утім, раджу заздалегідь бути готовим до цього запитання, а ще краще мати декілька варіантів залежно від того, як буде йти розмова. Добре мати в арсеналі один перформенс-баг, один хитрий баг в underlying системі або бібліотеці, один баг в незнайомій системі (коли треба було розібратися самому), один цікавий баг і ще щось на кшталт цього. Добре, якщо ви дасте зрозуміти, що не боїтеся складнощів і можете докласти усіх зусиль, щоб вирішити проблему.

Щоразу я по-різному відповідав на це питання. Бувало, прямо казав, що в інституті мені треба було малювати граф зі стрілочками і там була складна тригонометрія. Іноді казав, що фіксив меморі ліки, а іноді — що мав терки з іншими відділами. Якось викручувався.

Далі, найімовірніше, будуть запитання щодо релевантних для вашої вакансії технологій, які перелічені у вас в CV.

Мав співбесіду в український аутсорсинг.Я працював раніше із Spring Cloud Netflix. У вакансії є така вимога, і інтерв’юери давай мене питати: а перелічіть, що ви використовували? А які є аналоги цих штук? А чому ви обрали саме цей стек? А які у вас були проблеми? А якби другий раз робили проект, то що б узяли? А навіщо ось це або ось це? І так далі. У результаті ми десь годину розмовляли тільки про Spring Cloud Netflix, і хлопці все ніяк не могли до мене підкопатися. Так і сказали: «Ми шукаємо таке питання, на яке б ти не відповів». А так вийшло, що я зміг на все відповісти.

Добре, коли у вас в CV перелічені тільки ті технології, які ви добре знаєте. Я дотримуюся думки, що «менше — краще», тому не пишу у CV, припустімо, WebLogic, з яким я востаннє мав справу 4 роки тому. Залишайте тільки те, що ви добре знаєте, бо інакше вас можуть запитати щодо якоїсь древньої штуки, а ви не відповісте. У цілому, напевне, нічого страшного, але краще все-таки залишати по собі лише позитивні враження.

Ще мав співбесіду в лідера ринку на техліда.У них на проекті є AWS. І в мене у CV теж написано, що я щось тямлю в тому. Ну і вони давай мене питати: а перелічіть усі сервіси, які ви використовували, а чому оце не взяли, а чому оце взяли, а які проблеми були, а що таке ось ця штука і так далі. Наостанок програм-менеджер(!) у мене запитав: «Чим відрізняються лямбди, написані на Java та інших мовах?» :)

Потім запитують щодо проектів. Щось у стилі: «Розкажіть про ваш останній проект, як там все було, що ви там зробили корисного, які були складнощі».

Тут теж добре пам’ятати, що точно ви робили, які були нюанси. Намагайтеся давати тільки релевантні факти, максимально стисло і без заглиблення у непотрібні деталі. Добре, коли ваш проект зроблений на технологіях, які якраз вимагають на вакансію. Потрібно також розуміти, що інтерв’юери дають це запитання, щоб через нього за ниточку розмотати потрібний та цікавий їм клубок. Запитання про проект — просто стартове, для того, щоб окреслити рамки розмови, цікаві моменти.

Щодо проектів під NDA, я особисто таких не мав. Але мені здається, що можна розказати деталі технічної реалізації, не вдаючись у значущі деталі бізнесу. У будь-якому випадку я би не відмахувався NDA-лейблом від таких запитань. Це навряд чи додасть вам плюсиків.

Я мав підготовлену промову про свій останній проект: що там були за технології, яка моя роль, скільки людей у команді, які складнощі. Раджу вам мати таку саму. Бажано також продумати, що можна сказати про кілька попередніх проектів, якщо вони були нещодавно.

Задачі на проектування і системний дизайн

Незважаючи на те, що у більшості випадків на роботі вас не допустять власне до таких задач або ваш внесок буде мінімальним, запитання такі люблять ставити. Тож необхідно знати, що відповідати, і мати у голові типовий алгоритм для вирішення задач.

Для підготовки до цього етапу я скористався таким списком матеріалів. Його буде достатньо майже для всіх випадків. Якщо навіть ви не претендуєте на роль архітектора або техліда, я все одно наполегливо рекомендую вам проштудіювати всі приклади, які там є, просто щоб знати, як будувати системи, типові підходи та інструменти.

Співбесіда на Java-помідора у дрібну аутстаф-контору.Їхній інженер розповідає, що в них мікросервіси на Spring Boot та Go, щось там якось крутиться, задає мені кілька дефолтних питань. Далі ми переходимо до фронтенд-частини, потім повертаємося знову до бекенд. І тут інженер у мене питає: «А от як би ти вирішив задачу, яка у нас стоїть? Мікросервіси і все це». Я не довго думав і відповів: «Взяв би Spring Boot і не парився», тобто віддзеркалив їхнє рішення :) Смішно було.

У ту контору мене не взяли, бо знань з фронтенду було мало.

Співбесіда на Java-техліда у лідера ринку.РМ-ом проекту виявився мій колега з попередньої роботи, який мене добре знав та був готовий брати мене фактично без співбесіди, але треба ж було дотриматися усіх формальностей. Отож, розмовляло зі мною аж троє людей (чомусь лідери ринку дуже люблять побільше людей напхати у переговорку). Одразу перейшли до запитань щодо розподілених систем, Spring Cloud Netflix, тестування АРІ.

Основним запитанням, як і на багатьох інших співбесідах, була організація RPC, як забезпечити уникнення проблем з версіонуванням API, як це тестувати, документувати та перевіряти дотримання контрактів. Тут я трішки дав маху, тому що був не в курсі трендового зараз gRPC, який, наскільки мені зрозуміло, всі ці задачі з успіхом вирішує. Довелося відбріхуватися рестом та JSON-Schema. Далі були запитання про побудову стійких систем і ще чогось такого. Трішки зачепили AWS, але я не знав потрібного їм сервісу.

У цілому співбесіда пройшла непогано. Видно, що люди, з якими я мав справу, розуміються на тому, що говорять, і знають, кого шукають. У мене залишилися приємні враження.

Тут мені очікувано дали офер, але менше грошей, ніж я хотів, тому відмовився.

Ще я мав реально хардкорну співбесіду на позицію SRE в аутстаф-контору.По скайпу зі мною розмовляли двоє людей — технар та менеджер. Продукт у них досить складний, хайлоадний та супер-секурний — його не можна в клауди, все бер-метал і т. д. Судячи з усього, найбільші вимоги у них були до мережевих файлових систем та сховищ даних, от по ним мене і почали питати. Шкода, що я практично ні в зуб ногою ні про такі системи (типу Ceph), ні про внутрішні деталі їхньої реалізації, ні про складнощі, які виникають при експлуатації таких систем. Завжди мав S3 і не парився, а тут виявилося, що ще є люди, які самі те все менеджать.

Отже, мене почали питати про те, як шардувати дані. Які є варіанти, які є протоколи для того, щоб це все правильно робити (щоб не було brain split наприклад), які є варіанти генерації ключів для шардів. Тут я мав би розповісти про consistent ring hash, про який я щось колись читав, але майже не пам’ятав, що воно таке. Хлопці все намагалися мене наштовхнути на це рішення, але я занадто далеко від цих штук (веб-макака ж!), щоб на ходу придумати рішення. Майже 40 хвилин ми вирішували задачу, яким чином побудувати надійне сховище даних, і крутилися навколо схем хешування. Ще трішки торкнулися баз даних і базових команд юнікса, на тому й розійшлися. Вердикт мені дали очевидний: «Далі не пускати».

Не знаю, чи справді їм треба було таких жорстких інженерів, які добре шарять ту всю розподілену фігню, але я б в таких умовах і не хотів працювати, тому не шкодую що не пройшов далі :)

У минулій частині я писавпро співбесіду, де мені дали алгоритмічну задачу, хоча інтерв’юер сам визнав, що їм такі знання не потрібні, бо вони пишуть круди, і попередив про наступний етап дизайну, який теж немає змісту. Ось продовження.

Зв’язуємося по Zoom. Інтерв’юер довго вивчає моє CV (очевидно, що мітинги-мітинги, і не було часу підготуватися), і в нас відбувається такий діалог:

— Скільки у вас років досвіду з Java?
— 11 + ще з інституту пару років.
...
— Скільки у вас років досвіду роботи тімлідом?
— Подивіться в CV, там є абсолютно точні терміни.
— Скільки у вас років досвіду роботи тімлідом?
— ??? Я ж кажу — в CV все є.
— Скільки у вас років досвіду роботи тімлідом?
— Вам що, формочку якусь треба заповнювати, що ви такі питання задаєте?
— Ні, я просто хочу для себе розібратися, який у вас був досвід.
— Окей, якщо не хочете в CV дивитися, то 2 роки.

Починаю відчувати, що розмова якось туго йде, бо на тому кінці дроту сидить нереальний інтроверт, з якого треба слова кліщами діставати, щоб зрозуміти, чого він від мене хоче. У мене таке вперше, до цього я зі всіма легко налагоджував контакт.

Продовжуємо:
— Розкажіть мені щось про Spring.
— Що конкретно розказати?
— Ну, щось.
— ???
— Розкажіть, навіщо потрібен Spring Boot.
...
— Розкажіть мені щось про JVM.
— Що?
— Щось.
— Ви знаєте, я не Шипильов, щоб вам тут про JVM розповідати. Давайте, може, якесь конкретне питання?
...
— А тепер, м-м-м, у нас буде питання про дизайн. Треба задизайнити систему. Ось є фейсбук, гугл, ютуб, твіттер, ще щось високонавантажене. Виберіть собі щось та задизайніть.
— Що саме?
— Ну, щось зі списку, що вам подобається.

Тут у мене здали нерви. Більш дурнуватого питання про дизайн у мене не було, просто якийсь театр абсурду.

Відповідаю:
— Окей, я вибираю Hacker News. Це високонавантажений проект, він крутиться на одному сервері та зроблений на LAMP. От його і будемо робити )))

Додаю:
— Ви знаєте, я бачу, що з якоїсь причини у нас розмова дуже складно йде. Чи то я не можу вас зрозуміти, але мені якось складно без конкретних питань давати відповіді, тому що мені незрозуміло, що ви хочете з’ясувати. Сформулюйте задачу нормально, і будемо вирішувати те, що вам потрібно, а не те, що я собі придумаю. Давайте задачу з вашої роботи.

Інтерв’юер погодився та запропонував мені вирішити задачу про multi-tenancy рішення, в якому є багато багато ізольованих баз даних та один набір мікросервісів, який повинен якимось чином доступатися до тих даних. При чому самі мікросервіси не можна ізолювати один від одного, тому що тоді виростуть витрати на інфраструктуру. Я у відповідь щось там більш-менш адекватне запропонував, чим задовільнив інтерв’юера.

Під кінець діалогу спілкування стало вже ніби більш продуктивним, і питань «розкажіть мені щось» більше не було.

Мене були готові пускати далі, але несподівано виявилося, що в материнській компанії відбулися якісь ротації серед керівництва і весь найм заморозили.

Ще була співбесіда у аутсорс-контору на Java-помідора.Там хлопців теж сильно цікавило, яким чином побудувати RPC, тестувати контракти і оце все. Відповідь я вже мав — gRPC :) Зараз усюди мікросервіс через мікросервіс, тому ці речі точно необхідно знати.

У цій конторі мені готові були робити офер, але я сам відморозився від їхнього рекрутера, тому що мене якось завалило справами і не було часу з нею поговорити по скайпу, а текстом писати мені пропозицію рекрутер не захотіла. Досі трішки соромно, бо зазвичай я всім відповідаю.

Інтерв’ю в highload стартап на Java-техліда.Там, де мені треба булона співбесіді за півтори години написати робоче рішення. Отож, я мав розмову з головним архітектором, і він почав мене питати по задачі. Як зробити, щоб тут було більше даних? А от якщо в нас буде даних забагато і буде ООМ, то що робити? А як можна попередити таку ситуацію? У цілому всі питання були спрямовані на те, щоб розібратися, як кандидат буде вирішувати більш складні задачі, які виникають при значному збільшенні обсягу даних.

Цю співбесіду я успішно пройшов і отримав офер.

Здається, це всі питання про дизайн, які в мене були. Загалом мені сподобалися всі задачі-питання, хіба що крім жорстких хлопців з розподіленими системами. Я би рекомендував запитувати не про абстрактні фейсбуки з гуглами, а про реальні проблеми, які були чи є на проекті. А кандидату просто треба бути в курсі нових технологій і знати вирішення типових задач на побудову горизонтально масштабованих систем.

Менеджерські та фінальні співбесіди

Якщо ви успішно пройшли всі етапи, то, напевно, вам будуть готові робити офер. Перед цим традиційно проводиться співбесіда з менеджером проекту, власником компанії чи ще якоюсь іншою відповідальною особою. Тут, можливо, ще раз будуть з’ясовувати вашу мотивацію, наскільки ви підходите на цю позицію, а також дадуть можливість задати запитання. Ось тут я дуже раджу вам питати про все, що тільки можна питати. Типовий набір запитань, який я мав під рукою:

  • Кому я буду репортити?
  • Хто відповідальний за мій розвиток (якщо він є)?
  • Яка використовується методологія розробки?
  • Як організована комунікація? Які є канали, як вони використовуються? Що більше, що менше (пошта, Slack, Skype)?
  • Скільки часу витрачається на мітинги та іншу комунікацію?
  • Яким чином організовується документація на проекті?
  • Чи мають інженери доступ до продакшн-систем?
  • Як часто система деплоїться?
  • Як робиться DevOps?
  • Як організований контроль якості?
  • Скільки людей у команді? Хто є на боці замовника?
  • Які плани по проекту? Коли продакшн, коли саппорт? Які взагалі перспективи?
  • Які найбільші складнощі на проекті прямо зараз?
  • Чи бувають овертайми?
  • Яким чином ухвалюють ключові технічні рішення?
  • Які є можливості зростання на проекті?
  • Хто стейкхолдери, яка структура власності (якщо це стартап або продукт)?

Мене цікавили такі питання, тому що насправді я прихильник async/remoteпідходу, але, на жаль, у жодній компанії нічого схожого не було. Всюди слаки та мітинги, що поробиш.

Якихось цікавих співбесід на цьому етапі в мене не було. Лише зачеплю тему переговорів.

Мав співбесіду на Ruby-інженера у аутстаф-контору. Пройшов її та наступну із замовниками. Мені запропонували на $500 менше, ніж я просив, тому що в мене, цитую: «Недостатньо фундаментальних знань у Ruby». Сказали, що можуть повернутися до цього питання через півроку.

«Шукайте дурних», — подумав я. «Краще я вивчу книжку, прийду більш підготовленим і не буду чекати півроку, поки мені скажуть, що бюджет не дозволяє піднімати зп або що в мене знову недостатньо знань». У голос сказав: «Я звичайно все розумію, але це економія на сірниках». І відмовився.

Ще мав офер на позицію Java-техліда. Там мені запропонували на $300 менше, мотивуючи це тим, що в них по грейду більше не можна. Але якщо ось я пройду внутрішні курси на архітекта і стану архітектом, то дадуть більше. Я теж відмовився — ще чого. Невідомо, чи буде та позиція через півроку, невідомо, чи дадуть більше грошей і т. д.

Не раджу вам погоджуватися на такі обіцянки, хіба би вони були зафіксовані на папері. І то, папір може нічого не значитиме. Гроші на бочку одразу і все — це мій підхід.

Бонусні співбесіди

Ще я мав співбесіди у три різні компанії на позиції відповідно Solution Architect, Group Manager та VP of Engineering. Тут вже питання та підхід трішки інші, ніж на девелоперів та тімлідів. Розповім і про це, щоб розбавити нашу одноманітність технічних співбесід.

На Solution Architectспівбесіда була, напевне, найфейловішою, тому що в людей ентерпрайз, а в мене були всілякі дрібні стартапи. Якщо ви не в курсі, хто такий Solution Architect — це така людина, яка суміщає обов’язки продавця, дуже-дуже високорівневого технаря та бізнес-аналітика. Потрібно вміти малювати діаграми (чим складніше, тим краще) та робити презентації, вміти презентувати та захистити цю всю справу перед замовником, бути готовим до каверзних запитань від його архітектів, знати, які є «архітектурні» документи, розуміти всілякі методології і т. Д.

У більшості випадків на таких позиціях архітектор сам не займається розробкою. Для мене цінність роботи такого архітектора дуже сумнівна з технічної точки зору: як ти можеш щось там малювати, якщо сам не кодиш хоча б прототипи? Звісно, що в аутсорсі без таких людей нікуди: до кастомера ж не випустиш голих технарів-снобів. А ще додам, що в ентерпрайзі, де я працював, такі люди, як правило, виходили з бізнес-аналітиків. Їхньою роботою було скласти з квадратиків-модулів красиву картинку «рішення», яку продавали замовнику і навіть подекуди друкували на А3 та вішали десь у кабінетах. Зрозуміло, що до реального стану справ та картинка мала дуже віддалене відношення.

Щодо того, хто такий архітект, є крута стаття від Єгора Бугаєнко Are You an Architect?. Я з його концепціями повністю погоджуюсь.

В принципі я це все знав, але вирішив спробувати.

Отож, прийшов на співбесіду, і першим сюрпризом було те, що зі мною мав розмовляти в тому числі й мій одногрупник :) Яка в нього посада, я не знаю, але вона була однозначно високою — вище архітекта за їхніми внутрішніми грейдами. Крім нього, були РМ та програм-менеджер.

І ось ці всі люди мене по черзі починають питати, який у мене досвід в архітектурі, які документи я готував, як працювати з функціональними-нефункціональними вимогами, як робив планування навантаження та ресурсів (capacity planning), чи я це все якось захищав. Власне технічних питань не було: наприклад, як організувати read-heavy рішення, коли можна, а коли не можна NoSQL різних сортів та видів і т. д. Лише запитали про AWS, які сервіси я знаю.

Також значна частка питань була про розрулювання ситуацій із замовником, коли на його боці неадекватні люди, неадекватні вимоги, в контракті записали, а не зробили та інші політичні питання.

Ще поцікавилися, чи знайомий я з Best Practices індустрії. Пізніше виявилося, що є якісь стандартні методології та підходи.

Після перших 10 хв співбесіди я зрозумів, що мені тут ловити нічого, бо потрібного їм досвіду в мене не було. Але хлопці вирішили продовжити. Я думаю з тих міркувань, щоб передати мене іншій команді на іншу позицію. Власне так і відбулося.

У вердикті, крім того, що я нічого не знаю, написали: «He has very Technology Centric thinking». Думаю, що можна з натяжкою вважати це таким собі компліментом :)

До речі, щодо вердикту — я запросив у HR фідбек і рекомендації, і, на диво, мені їх надали досить розгорнуто. Щоправда, я зрозумів, що точно не хочу працювати Solution Architect :)

Друга співбесіда в мене була вже в іншу компанію на позицію Group Managerпари-трійки команд (загалом 20-25 голів).Їм потрібен більше менеджер, ніж технар. Враховуючи, що на аналогічній позиції з такою самою кількістю людей я вже відбатрачив у минулому кілька років, то мене розглянули. Сам я вирішив піти туди зі спортивного інтересу: дадуть офер — буду думати. Але великого бажання працювати менеджером у мене не було.

Спочатку був досить довгий (більше години) скрінинг по скайпу з рекрутером, де у мене з’ясовували минулий досвід. Потім почали задавати питання на конфлікт-менеджмент, типу «Є співробітник, який працює в команді, де роботи не так багато. Потрібно його перевести в інші, але він не хоче. Що будеш робити?»

Також мені дали можливість задати питання, але рекрутер була трішки не в курсі, як у них що працює, тому не змогла конкретно відповісти, чим же у них займаються груп менеджери. Лише обмежилась загальними фразами з опису вакансії. Врешті-решт я той скринінг якось пройшов, і мене запросили вже на очну співбесіду.

Я прийшов до офісу, де мене вже чекали HR директор компанії та один з тих самих груп менеджерів. І почалося: розкажіть про ваш минулий досвід, а чому змінили роботу, чому розглядаєте менеджерську позицію, як ви себе оцінюєте, як ви надавали фідбек (позитивний або негативний), чому ви думаєте, що нам підходите, а які у вас були складні кейси, як оцінювати людей, як взаємодіяти з іншими менеджерами, як ви будували CI/CD ланцюжок (???) і ще якісь такі питання.

Далі мені дали можливість з’ясувати, що таке в них груп менеджер. Виявилося, що це щось середнє між проектним координатором, ресурсним менеджером та тімлідом. Протягом усієї співбесіди мені не задали жодного технічного питання, хоча суть позиції була в тому, що це обов’язково мав бути виходець з девелоперів. Тому я сам запропонував хоч щось мене попитати — на що отримав досить просте запитання з організації черг.

Час закінчувався, тому HR директор, який увесь цей час бачив мене наскрізь (маю на увазі те, що я не хотів працювати у них), сказав, цитую: «Подумайте про свої недоліки, а ми з вами зв’яжемося наступного тижня». Я швидко відповів, що дуже багато працюю та буваю настільки лояльним до компанії, що нехтую власними інтересами. Відповідь не проканала :)

Через кілька днів ми з HR директором знову зв’язалися уже в скайпі. Я намагався щось мукати та бекати про власні недоліки, але вийшло не дуже. У результаті мені винесли вердикт: «Сам не знає, чого хоче» та «незрілість», — що не дивно, тому що я дійсно не дуже хотів у них працювати. Крім того, мої справжні цілі точно йшли в розріз з очікуваними відповідями на позицію, тому я й склав враження типа, який сам не знає чого хоче :) А HR директор не дарма свій хліб їсть та бачить одразу лівих кандидатів. Йому респект, що мене не пропустив :)

В цю ж контору я ще хотів спробувати пройти просто на девелопера, але мені м’яко відмовили через відсутність мотивації. А я не захотів їх далі переконувати, що дійсно хочу працювати.

Третя співбесіда у мене була в компанію на 50 людей на позицію VP of Engineering. На мене вийшли через лінкедін, і я погодився піти поговорити. Хто знає, що там. Може, дійсно цікаво.

Отож, спочатку мене чекав скрінинг по скайпу с HR. Були дефолтні питання про те, про се. Потім домовилися про ще один скрінинг вже з їхнім техдиром. Знову поговорили про те, про се. Їх дуже цікавив CI/CD ланцюжок чомусь — тут я трішки щось розумію, тому мене покликали поговорити вже очно.

Техдир почав з питання «яке твоє найбільше досягнення?», з чим у мене виникли невеликі труднощі, тому що таких аж досягнень у мене не дуже-то й було. Я щось відповів про те, як я Spring інтегрував у легасі систему і як це потім стало мейнстрімом у компанії, де я працював. Але звісно, що це його не дуже цікавило.

Далі трохи поговорили про процеси, чого вони очікують від VP. І мені здалося, що це насправді не VP, а якийсь мікс з девопса та архітекта. Обов’язково з технічним бекграундом. Тут техдир, сказав що він не бачить у мене релевантного досвіду, тому я їм не підходжу. Думаю, що він мав на увазі побудову процесу розробки у компанії з великою кількістю різнорідних команд. Такого досвіду у мене дійсно не було. Але він сказав: те, що я говорю, йому подобається, тому якщо він колись зробить стартап, то покличе мене СТОшнічати там :) На тому й розійшлися.

Очевидно, що якщо вже вас кличуть на таку позицію, то ви більш-менш розумієте, що до чого, і поради якісь давати тут немає сенсу. Я думаю, що потрібно добряче готуватися, мати в голові список досягнень, проектів, продуктів, які зробили під вашим керівництвом, мати готові рішення для типових проблем взаємодії між командами і стейкхолдерами і т. д. Сподіваюся, в майбутньому в мене будуть шанси пройти на такі вакансії.

Fin

На цьому все! За результатами проходження співбесід у 16 різних компаній за два місяці (жовтень та листопад) я провів 35 сесій, не враховуючи деяких співбесід з рекрутерами, які нічим не закінчились. Я витратив приблизно 40 годин чистого часу + 10 годин на вирішення тестових завдань. Отримав 3,5 офери (менше ніж 25% конверсії, що, як на мене, малувато). Від усіх відмовився з тих чи інших причин та залишився там, звідки й почав. Але вже краще розумію, що є на ринку, як скоротити час на проходження усіх кіл співбесід, як себе ефективніше поводити та як готуватися. Також мені залишилася купа своїх думок щодо цього всього, якими я з вами і поділився.

Чесно кажучи, стільки співбесід трохи виснажують, тому, напевне, з середини листопада я вже почав відмовлятися від нових позицій.

Як основний висновок цієї подорожі співбесідами я би хотів зазначити таке: хорошому інженеру з солідним досвідом немає ніякого сенсу працювати в українських аутсорс/аутстаф/offshore devcentre посередниках. Ви будете далі від кастомера, отримуватимете менше грошей, витрачатимете більше часу на комунікацію та політику, матимете менше перспектив. Шукайте віддалену роботу у стартапах та продуктових компаніях — там і гроші будуть серйозніші, і можливостей може бути більше. В ідеалі знайти віддалену роботу напряму від замовника із зарплатою інженера з Silicon Valley :)

Якщо вам сподобалась моя писанина, то не забувайте долучитися до мого Telegram-каналу.

Всім хорошої роботи та продуктивних співбесід у новому році!


Попередні частини:

Senior у пошуках роботи. Як я пройшов 20 співбесід з HR і що про це думаю

Senior у пошуках роботи. Як я пройшов 15 технічних співбесід і що про це думаю

Senior у пошуках роботи. Про задачі на технічних співбесідах і теоретичні питання

Viewing all 2429 articles
Browse latest View live