В компании Design and Test Lab по карьере инженера-программиста вы сможете:
-
Пройти путь стажер — программист — инженер — архитектор — эксперт.
-
Иметь уникальную квалификацию надежного инженера-программиста.
-
Получить ИЗМЕРИМЫЙ РОСТ квалификации инженера по 8 важнейшим параметрам надежного программирования.
-
После окончания адаптации потенциал каждого работника должен быть выявлен и реализован!
Мы прописываем индивидуальный план профессионального роста и предлагаем постоянное повышение квалификации! См. подробнее: Карьера инженера-программиста (2020).
Цели
- Реализация заинтересованности сотрудников в профессиональном и карьерном росте.
- Обеспечение роста социального и материального.
- Предоставление возможностей для профессионального самовыражения и творчества.
- Формирование корпоративных условий социальной защищенности и социальных гарантий.
Идеология
-
Компания — средство реализовать свои профессиональные, творческие и социальные устремления.
-
От программиста к инженеру.
Лозунг
- Честолюбие — это то, от чего в последнюю очередь отрекаются мудрецы!
Требования в карьере делятся на несколько типов:
- знать, например: “знать шаблоны проектирования”;
- уметь, применять, например: “уметь рефакторить”, “применять шаблоны программирования”;
- соблюдать, например: “соблюдение стандартов документирования кода”.
Экзамены проводятся относительно избранных источников.
Правильное отношение к карьерным экзаменам
Правильное отношение к карьерному экзамену — повысить свой уровень квалификации, иметь больше знаний и навыков, чтобы эффективнее решать поставленные задачи, получить больше ответственности и больше полномочий.
Неправильное отношение — сдать экзамен для галочки, выучить-сдать-забыть, и весь другой деструктивный негатив.
Подготовка к экзаменам
“Знание стандартов документирования кода”
Проверяется устным или письменным экзаменом.
Библиография:
- Мартин Фаулер. “UML. Основы”.
- Objective-C, Swift: Apple Markup Formatting Reference
- Python: Documenting Python
- JavaScript: JSDoc
- Java: JavaDoc
“Знать шаблоны проектирования”
Проверяется устным или письменным экзаменом.
Библиография:
- Эрих Гамма, Р. Хелм, Р. Джонсон, Дж. Влисс. “Приемы объектно-ориентированного проектирования. Паттерны проектирования”.
Вопросы:
- Назовите принцип объектно-ориентированного проектирования для повторного использования (по Гамме)?
- Назовите второе правило объектно-ориентированного проектирования (по Гамме)?
- Какая самая трудная задача в объектно-ориентированном проектировании (по Гамме)?
- В чем отличие класса объекта от типа объекта?
- Назовите механизмы повторного использования?
- Назовите назначение паттерна X?
- Назовите паттерн для назначения X?
- В чем отличие паттерна X от Y?
- Abstract Factory от Builder
- Abstract Factory от Factory Method
- Strategy от State
- Adapter от Decorator
- Где можно было бы применить паттерн X в текущих или прошлых проектах?
“Знать архитектуры приложений”
Проверяется устным или письменным экзаменом.
Библиография:
- Мартин Фаулер. “Шаблоны корпоративных приложений”.
- Эрик Эванс. “Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем”.
- Сэм Ньюман. “Создание микросервисов”.
- Владимир Обризан, Сергей Зайченко “Конспект эксперт-лекций по надежному программному обеспечению”.
- ISO/IEC/IEEE 42010 Systems and software engineering — Architecture description, 2011.
- Гради Буч. “Объектно-ориентированный анализ и проектирование”
Вопросы:
- Что такое архитектура (architecture)? Что такое архитектурное описание (architecture description)?
- Почему архитектурные ошибки очень дороги в исправлении, будучи обнаруженными на поздних этапах разработки?
- Какие методы раннего обнаружения архитектурных ошибок вы знаете?
- Что такое исполнимая спецификация?
- Что такое шаблон Спецификация (Specification)?
- Что такое шаблон Репозиторий (Repository)?
- Что такое информативный интерфейс?
- Поясните принцип command-query separation, зачем он нужен?
- Поясните многослойную архитектуру приложения, ответственности всех слоев.
- Что такое предохранительный уровень (anti-corruption layer)?
- Что такое адаптивность?
- Что такое конфигурируемость?
- Что такое тестопригодность?
- Что такое предметно-ориентированные языки? Как они способствуют надежному программированию?
- Что такое сущность (entity)? Что такое объект-значение (value-object)?
- Что такое агрегат?
- Что такое структура классов? Что такое структура объектов? В чем их отличие?
“Применять шаблоны проектирования”
Оформляется в виде задокументированного квалификационного требования. Минимум пять шаблонов проектирования. Задокументированное квалификационное требование защищается перед экспертами.
Предусловие: сдан экзамен “Знать шаблоны проектирования”.
В дипломной работе для каждого шаблона проектирования нужно указать:
- Его структуру и ассоциацию с структурой, указанной в библиографии;
- Для поведенческих шаблонов диаграмму последовательности, раскрывающей этот шаблон;
- Скопировать примеры кода в задокументированное квалификационное требование — самые важные части, подчеркивающие правильное применение шаблона.
- В конце работы привести ссылки на файлы в репозитории;
- Очень важно описывать применение шаблона в терминологии того или иного автора (Гамма, Фаулер).
Библиография:
- Эрих Гамма, Р. Хелм, Р. Джонсон, Дж. Влисс. “Приемы объектно-ориентированного проектирования. Паттерны проектирования”.
- Мартин Фаулер. “Шаблоны корпоративных приложений”.
- Эрик Эванс. “Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем”.
“Знать рефакторинг”
Проверяется устным или письменным экзаменом.
Библиография:
- Мартин Фаулер. “Рефакторинг”.
- Джошуа Кериевски “Рефакторинг с использованием шаблонов”
- Владимир Обризан, Сергей Зайченко “Конспект эксперт-лекций по надежному программному обеспечению”.
Вопросы:
- Что такое рефакторинг? Дайте два определения.
- Что такое “запах кода”?
- Дайте характеристику кода с запахом с названием _______.
- Для кода с характеристикой ________ какой “запах” ему соответствует?
- Опишите суть рефакторинга с названием _______.
- Для кода с запахом _________ какой рефакторинг применяется?
- Для каких запахов кода применяется рефакторинг _____.
- Укажите рефакторинги способствующие тестопригодности.
“Уметь рефакторить”
Оформляется в виде задокументированного квалификационного требования. Минимум пять рефакторингов. Задокументированное квалификационное требование защищается перед экспертами.
Предусловие: должен быть сдан экзамен по “Знать рефакторинг”.
В курсовой работе для каждого рефакторинга нужно указать:
- запах кода;
- скопировать примеры кода в задокументированное квалификационное требование самые важные части, подчеркивающие правильное применение шаблона.
- В конце работы привести ссылки на файлы в репозитории;
- Очень важно описывать применение шаблона в терминологии того или иного автора (Фаулер, Кириевски).
Библиография:
- Мартин Фаулер. “Рефакторинг”.
- Джошуа Кериевски “Рефакторинг с использованием шаблонов”
- Владимир Обризан, Сергей Зайченко “Конспект эксперт-лекций по надежному программному обеспечению”.
“Знание политики, дисциплин, процедур и правил компании”
Проверяется устным или письменным экзаменом.
Источники:
- Бизнес-процесс программиста Design and Test Lab
Вопросы:
- Как часто нужно комитить код в репозиторий? Почему?
- Можно ли закомитить сразу три бага в одном комите? Почему?
- В какой статус переводится задача в Джире, когда начинается над ней работа?
- Обязательно ли запускать тесты перед пушем в репозиторий? Почему?
- Что делать, если застрял на задаче?
- Почему нельзя указывать реальные ключи доступа к сервисам?
- Почему важно, чтобы не было орфографических ошибок в коде?
- Сколько в одном юнит-тесте должно быть asserts?
- На основании чего составляется личный ежедневный план?
- Что значит “блокировать” по работе?
- Что делать с задачами, которые кого-то блокируют?
- Как нужно реагировать на комментарии на код ревью?
- Можно ли пушить в репозиторий код не проходящий тесты?
- Как должен быть настроен Битбакет?
- Как организуются бранчи в гите?
“Знать процедуру оценки изменения в проект”
Проверяется устным или письменным экзаменом.
Источники:
- Design and Test Lab’s Change Management Procedure
Вопросы:
- Какая роль отвечает за управление изменениями в проекте?
- На что может повлиять изменение в проекте с т. з. разработчиков?
- На что может повлиять изменение в проекте с т. з. заказчика, клиента, потребителя?
- Какая роль уполномочена оценивать изменение в архитектуру проекта и программные модули?
- Какие бывают типы изменений?
- Приведите пример дешевых изменений в проект.
- Приведите пример дорогих изменений в проект.
- Какие данные заносятся в журнал изменений проекта?
- Изменение оценено, внесено в журнал изменений. Что происходит с ним дальше?
- Какие риски связаны с процедурой управления изменениями?
- Что нужно сделать после того, как изменение в проект было принято и утверждено?
- Что нужно предпринять, чтобы минимизировать количество изменений в проект?
- Когда начинается процедура оценки изменения в проект?
- Как удешевить изменение в бизнес-правила приложения?
- При оценке изменений, какое максимальное время может быть время на одну задачу?
- Приведите пример очень дорого изменения из личного опыта.
“Понимание основных концепций и атрибутов качества программного обеспечения”
Проверяется устным экзаменом.
Библиография:
- Ian Sommerville, “Software Engineering”.
- Владимир Обризан, Сергей Зайченко “Конспект эксперт-лекций по надежному программному обеспечению”.
- Гради Буч. “Объектно-ориентированный анализ и проектирование”
Вопросы:
- Перечислите знакомые вам атрибуты качества программного обеспечения?
- Дайте определение понятиям: сложность; надежность; отказоустойчивость; тестопригодность; производительность; доступность; адаптивность; конфигурируемость;
- Какими метриками определяется свойство ______?
- Охарактеризуйте ваш текущий проект с точки зрения атрибутов качества.
“Знание стандартов спецификации API (Swagger, gRPC)”
Проверяется устным экзаменом.
Библиография:
- Swagger
- Google API Design Guide
- gRPC
- Владимир Обризан, “Конспект лекций по надежному программному обеспечению”
- TBD: Service design patterns book.
Вопросы:
- Что такое API?
- Что такое REST API?
- На каком этапе разработки нужно разрабатывать спецификацию API?
- Что такое исполнимая спецификация?
- В чем преимущества исполнимой спецификации перед неисполнимой?
- Сравните стоимость ошибки в спецификации API со стоимостью ошибки в реализации API.
- Что такое Swagger?
- Для каких задач применяется Swagger?
- Что такое gRPC?
- В чем отличие эндпоинта (endpoint) от операции (operation)?
- Что такое ресурс? Что такое коллекция?
- Назовите основные структурные блоков Swagger-спецификации.
- На каких языках описывается Swagger-спецификация?
- Для чего используется блок components/schemas в Swagger-спецификации?
- Допустимы ли два одинаковых HTTP-метода для одного пути в Swagger-спецификации?
- В чем отличие типа данных number от integer в Swagger-спецификации?
- Какие способы валидации данных предоставляет Swagger-стандарт?
- Как задается паджинация (pagination)?
- Назовите типичные шаблоны проектирования REST API.
- Приведите пример совместимого и несовместимого изменения в REST API.
“Знать UML”
Проверяется устным экзаменом.
Вопросы:
- Что такое UML? Для чего используется?
- Какие типы диаграмм можно описать с помощью UML?
- Что описывает диаграмма классов?
- Что такое свойства (Properties) класса? Какими способами можно их описать?
- Что такое кратность (multiplicity) свойства? Как обозначается на диаграмме?
- В чем разница между ассоциацией (Association) и атрибутом (attribute)? В каких случаях вы бы предпочли обозначить элемент атрибутом, а в каком ассоциацией?
- Что такое двунаправленные ассоциации?
- Что такое операции (operations)? Что можно описать с их помощью?
- Что такое обобщение? Как обозначается на диаграмме?
- Что такое зависимость (dependency)? Как обозначается на диаграмме?
- В чем разница между агрегацией и композицией? Как обозначаются на диаграмме?
- Что описывают диаграммы последовательности?
- Как в диаграмме последовательности обозначить создание и удаление участников?
- Как в диаграмме последовательности обозначают циклы и условия?
- Как в диаграмме последовательности обозначают синхронные и асинхронные сообщения?
- Что описывает диаграмма состояний?
- Что описывает диаграмма деятельности?
- Отличия диаграмм деятельности, последовательности и состояний.
Библиография:
- Мартин Фаулер. “UML. Основы”.
“Знание типичных рисков связанных с разработкой программного обеспечения”
Проверяется устным экзаменом.
Вопросы:
- Что такое риск?
- На каком этапе следует анализировать риски?
- Назовите основные этапы процесса управления рисками.
- Что такое реестр рисков?
- Какие стратегии применяются для реакции на риск (risk response strategies)?
- Что такое план А (план профилактики риска)?
- Что такое план Б (план преодоления последствий)?
- Приведите типичные риски, связанные с разработкой программного обеспечения?
- Приведите типичные симптомы, предшествующие риску _______.
- Приведите типичный план А для риска _______.
- Приведите типичный план Б для риска _______.
- Как осуществляется контроль за рисками?
Библиография:
- Владимир Обризан, “Конспект лекций по надежному программному обеспечению”
- Project Management Body of Knowledge, 5th Edition, 2013.
- 130 Project Risks.
“Проверка и отладка программного кода на уровне межмодульных взаимодействий и взаимодействий с окружением ”
Проверяется устным или письменных экзаменом.
Вопросы:
- Что такое тестовый двойник? Какие они бывают? Их различия?
- Какие есть способы подстановки тестовых двойников?
- В чем отличие Dependency Injection от Dependency Lookup?
- Поясните принцип минимизации нетестируемого кода? Какими шаблонами это достигается?
- Поясните принцип изоляции тестируемой системы? Какими шаблонами это достигается?
- Поясните принцип проверки одного условие за тест?
- Поясните принцип тестирования аспектов по-отдельности?
- Что такое observability? Какие способы существуют и какие доступны на вашей платформе?
- Что такое ассерция (assertion)?
- Что такое humble object?
Библиография:
- Владимир Обризан, “Конспект лекций по надежному программному обеспечению”.
- Шаблоны тестирования xUnit. Рефакторинг кода тестов. Джерард Месарош. (рус, англ)
- Произвольные источники по observability на выбор.
“Знание концепции бронирования важнейших узлов и отказоустойчивости ”
Проверяется устным или письменных экзаменом.
Контрольные вопросы:
- Что такое отказ?
- Что такое отказоустойчивость?
- Что такое катастрофический отказ? Приведите стратегию реагирования на катастрофический отказ.
- Что такое каскад отказов? Приведите стратегию реагирования на каскад отказов.
- Как определяется важнейший узел в приложении?
- Назовите типичные мифы распределенных систем?
- Что такое Service Level Indicator? Приведите примеры.
- Что такое Service Level Objective? Приведите примеры.
- Что такое среднее время наработки на отказ (mean time between failure)?
- Что такое среднее время восстановления работоспособности (mean time to repair)?
- В чем особенности тестирование отказоустойчивости?
- Какие архитектурные шаблоны способствуют повышению отказоустойчивости?
Практическое задание.
Дана диаграмма зависимости сервисов, а также вероятности отказов. Даны три типичные операции API:
- Аутентификация, которая включает в себя одну запись в базу данных.
- Сохранение файла, которая включает в себя одну запись в базу данных, и один запрос в сервис файлов.
- Покупка продукта, которая включает в себя чтение в базу данных, запрос в сервис платежей, и запись в базу данных.
Задание: расположите операции API от самой ненадежной к самой надежной.
Таблица. Вероятности отказа сервисов.
API | Database | Payment | Files | |
---|---|---|---|---|
Вероятность отказа | 0,0001 | 0,001 | 0,001 | 0,005 |
Рис. Диаграмма зависимости сервисов.
Библиография:
- Владимир Обризан, “Конспект лекций по надежному программному обеспечению”.
- Site Reliability Engineering. (англ.)
- Database Reliability Engineering. (англ.)
- Chaos Engineering.