В компании Design and Test Lab по карьере инженера-программиста вы сможете:

  1. Пройти путь стажер — программист — инженер — архитектор — эксперт.

  2. Иметь уникальную квалификацию надежного инженера-программиста.

  3. Получить ИЗМЕРИМЫЙ РОСТ квалификации инженера по 8 важнейшим параметрам надежного программирования.

  4. После окончания адаптации потенциал каждого работника должен быть выявлен и реализован!

Мы прописываем индивидуальный план профессионального роста и предлагаем постоянное повышение квалификации! См. подробнее: Карьера инженера-программиста (2020).

Цели

  1. Реализация заинтересованности сотрудников в профессиональном и карьерном росте.
  2. Обеспечение роста социального и материального.
  3. Предоставление возможностей для профессионального самовыражения и творчества.
  4. Формирование корпоративных условий социальной защищенности и социальных гарантий.

Идеология

  • Компания — средство реализовать свои профессиональные, творческие и социальные устремления.

  • От программиста к инженеру.

Лозунг

  • Честолюбие — это то, от чего в последнюю очередь отрекаются мудрецы!

Требования в карьере делятся на несколько типов:

  • знать, например: “знать шаблоны проектирования”;
  • уметь, применять, например: “уметь рефакторить”, “применять шаблоны программирования”;
  • соблюдать, например: “соблюдение стандартов документирования кода”.

Экзамены проводятся относительно избранных источников.

Правильное отношение к карьерным экзаменам

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

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

Подготовка к экзаменам

“Знание стандартов документирования кода”

Проверяется устным или письменным экзаменом.

Библиография:

“Знать шаблоны проектирования”

Проверяется устным или письменным экзаменом.

Библиография:

  • Эрих Гамма, Р. Хелм, Р. Джонсон, Дж. Влисс. “Приемы объектно-ориентированного проектирования. Паттерны проектирования”.

Вопросы:

  1. Назовите принцип объектно-ориентированного проектирования для повторного использования (по Гамме)?
  2. Назовите второе правило объектно-ориентированного проектирования (по Гамме)?
  3. Какая самая трудная задача в объектно-ориентированном проектировании (по Гамме)?
  4. В чем отличие класса объекта от типа объекта?
  5. Назовите механизмы повторного использования?
  6. Назовите назначение паттерна X?
  7. Назовите паттерн для назначения X?
  8. В чем отличие паттерна X от Y?
    • Abstract Factory от Builder
    • Abstract Factory от Factory Method
    • Strategy от State
    • Adapter от Decorator
  9. Где можно было бы применить паттерн X в текущих или прошлых проектах?

“Знать архитектуры приложений”

Проверяется устным или письменным экзаменом.

Библиография:

  1. Мартин Фаулер. “Шаблоны корпоративных приложений”.
  2. Эрик Эванс. “Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем”.
  3. Сэм Ньюман. “Создание микросервисов”.
  4. Владимир Обризан, Сергей Зайченко “Конспект эксперт-лекций по надежному программному обеспечению”.
  5. ISO/IEC/IEEE 42010 Systems and software engineering — Architecture description, 2011.
  6. Гради Буч. “Объектно-ориентированный анализ и проектирование”

Вопросы:

  1. Что такое архитектура (architecture)? Что такое архитектурное описание (architecture description)?
  2. Почему архитектурные ошибки очень дороги в исправлении, будучи обнаруженными на поздних этапах разработки?
  3. Какие методы раннего обнаружения архитектурных ошибок вы знаете?
  4. Что такое исполнимая спецификация?
  5. Что такое шаблон Спецификация (Specification)?
  6. Что такое шаблон Репозиторий (Repository)?
  7. Что такое информативный интерфейс?
  8. Поясните принцип command-query separation, зачем он нужен?
  9. Поясните многослойную архитектуру приложения, ответственности всех слоев.
  10. Что такое предохранительный уровень (anti-corruption layer)?
  11. Что такое адаптивность?
  12. Что такое конфигурируемость?
  13. Что такое тестопригодность?
  14. Что такое предметно-ориентированные языки? Как они способствуют надежному программированию?
  15. Что такое сущность (entity)? Что такое объект-значение (value-object)?
  16. Что такое агрегат?
  17. Что такое структура классов? Что такое структура объектов? В чем их отличие?

“Применять шаблоны проектирования”

Оформляется в виде задокументированного квалификационного требования. Минимум пять шаблонов проектирования. Задокументированное квалификационное требование защищается перед экспертами.

Предусловие: сдан экзамен “Знать шаблоны проектирования”.

В дипломной работе для каждого шаблона проектирования нужно указать:

  1. Его структуру и ассоциацию с структурой, указанной в библиографии;
  2. Для поведенческих шаблонов диаграмму последовательности, раскрывающей этот шаблон;
  3. Скопировать примеры кода в задокументированное квалификационное требование — самые важные части, подчеркивающие правильное применение шаблона.
  4. В конце работы привести ссылки на файлы в репозитории;
  5. Очень важно описывать применение шаблона в терминологии того или иного автора (Гамма, Фаулер).

Библиография:

  • Эрих Гамма, Р. Хелм, Р. Джонсон, Дж. Влисс. “Приемы объектно-ориентированного проектирования. Паттерны проектирования”.
  • Мартин Фаулер. “Шаблоны корпоративных приложений”.
  • Эрик Эванс. “Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем”.

“Знать рефакторинг”

Проверяется устным или письменным экзаменом.

Библиография:

  1. Мартин Фаулер. “Рефакторинг”.
  2. Джошуа Кериевски “Рефакторинг с использованием шаблонов”
  3. Владимир Обризан, Сергей Зайченко “Конспект эксперт-лекций по надежному программному обеспечению”.

Вопросы:

  1. Что такое рефакторинг? Дайте два определения.
  2. Что такое “запах кода”?
  3. Дайте характеристику кода с запахом с названием _______.
  4. Для кода с характеристикой ________ какой “запах” ему соответствует?
  5. Опишите суть рефакторинга с названием _______.
  6. Для кода с запахом _________ какой рефакторинг применяется?
  7. Для каких запахов кода применяется рефакторинг _____.
  8. Укажите рефакторинги способствующие тестопригодности.

“Уметь рефакторить”

Оформляется в виде задокументированного квалификационного требования. Минимум пять рефакторингов. Задокументированное квалификационное требование защищается перед экспертами.

Предусловие: должен быть сдан экзамен по “Знать рефакторинг”.

В курсовой работе для каждого рефакторинга нужно указать:

  1. запах кода;
  2. скопировать примеры кода в задокументированное квалификационное требование самые важные части, подчеркивающие правильное применение шаблона.
  3. В конце работы привести ссылки на файлы в репозитории;
  4. Очень важно описывать применение шаблона в терминологии того или иного автора (Фаулер, Кириевски).

Библиография:

  • Мартин Фаулер. “Рефакторинг”.
  • Джошуа Кериевски “Рефакторинг с использованием шаблонов”
  • Владимир Обризан, Сергей Зайченко “Конспект эксперт-лекций по надежному программному обеспечению”.

“Знание политики, дисциплин, процедур и правил компании”

Проверяется устным или письменным экзаменом.

Источники:

  • Бизнес-процесс программиста Design and Test Lab

Вопросы:

  1. Как часто нужно комитить код в репозиторий? Почему?
  2. Можно ли закомитить сразу три бага в одном комите? Почему?
  3. В какой статус переводится задача в Джире, когда начинается над ней работа?
  4. Обязательно ли запускать тесты перед пушем в репозиторий? Почему?
  5. Что делать, если застрял на задаче?
  6. Почему нельзя указывать реальные ключи доступа к сервисам?
  7. Почему важно, чтобы не было орфографических ошибок в коде?
  8. Сколько в одном юнит-тесте должно быть asserts?
  9. На основании чего составляется личный ежедневный план?
  10. Что значит “блокировать” по работе?
  11. Что делать с задачами, которые кого-то блокируют?
  12. Как нужно реагировать на комментарии на код ревью?
  13. Можно ли пушить в репозиторий код не проходящий тесты?
  14. Как должен быть настроен Битбакет?
  15. Как организуются бранчи в гите?

“Знать процедуру оценки изменения в проект”

Проверяется устным или письменным экзаменом.

Источники:

  • Design and Test Lab’s Change Management Procedure

Вопросы:

  1. Какая роль отвечает за управление изменениями в проекте?
  2. На что может повлиять изменение в проекте с т. з. разработчиков?
  3. На что может повлиять изменение в проекте с т. з. заказчика, клиента, потребителя?
  4. Какая роль уполномочена оценивать изменение в архитектуру проекта и программные модули?
  5. Какие бывают типы изменений?
  6. Приведите пример дешевых изменений в проект.
  7. Приведите пример дорогих изменений в проект.
  8. Какие данные заносятся в журнал изменений проекта?
  9. Изменение оценено, внесено в журнал изменений. Что происходит с ним дальше?
  10. Какие риски связаны с процедурой управления изменениями?
  11. Что нужно сделать после того, как изменение в проект было принято и утверждено?
  12. Что нужно предпринять, чтобы минимизировать количество изменений в проект?
  13. Когда начинается процедура оценки изменения в проект?
  14. Как удешевить изменение в бизнес-правила приложения?
  15. При оценке изменений, какое максимальное время может быть время на одну задачу?
  16. Приведите пример очень дорого изменения из личного опыта.

“Понимание основных концепций и атрибутов качества программного обеспечения”

Проверяется устным экзаменом.

Библиография:

  1. Ian Sommerville, “Software Engineering”.
  2. Владимир Обризан, Сергей Зайченко “Конспект эксперт-лекций по надежному программному обеспечению”.
  3. Гради Буч. “Объектно-ориентированный анализ и проектирование”

Вопросы:

  1. Перечислите знакомые вам атрибуты качества программного обеспечения?
  2. Дайте определение понятиям: сложность; надежность; отказоустойчивость; тестопригодность; производительность; доступность; адаптивность; конфигурируемость;
  3. Какими метриками определяется свойство ______?
  4. Охарактеризуйте ваш текущий проект с точки зрения атрибутов качества.

“Знание стандартов спецификации API (Swagger, gRPC)”

Проверяется устным экзаменом.

Библиография:

  1. Swagger
  2. Google API Design Guide
  3. gRPC
  4. Владимир Обризан, “Конспект лекций по надежному программному обеспечению”
  5. TBD: Service design patterns book.

Вопросы:

  1. Что такое API?
  2. Что такое REST API?
  3. На каком этапе разработки нужно разрабатывать спецификацию API?
  4. Что такое исполнимая спецификация?
  5. В чем преимущества исполнимой спецификации перед неисполнимой?
  6. Сравните стоимость ошибки в спецификации API со стоимостью ошибки в реализации API.
  7. Что такое Swagger?
  8. Для каких задач применяется Swagger?
  9. Что такое gRPC?
  10. В чем отличие эндпоинта (endpoint) от операции (operation)?
  11. Что такое ресурс? Что такое коллекция?
  12. Назовите основные структурные блоков Swagger-спецификации.
  13. На каких языках описывается Swagger-спецификация?
  14. Для чего используется блок components/schemas в Swagger-спецификации?
  15. Допустимы ли два одинаковых HTTP-метода для одного пути в Swagger-спецификации?
  16. В чем отличие типа данных number от integer в Swagger-спецификации?
  17. Какие способы валидации данных предоставляет Swagger-стандарт?
  18. Как задается паджинация (pagination)?
  19. Назовите типичные шаблоны проектирования REST API.
  20. Приведите пример совместимого и несовместимого изменения в REST API.

“Знать UML”

Проверяется устным экзаменом.

Вопросы:

  1. Что такое UML? Для чего используется?
  2. Какие типы диаграмм можно описать с помощью UML?
  3. Что описывает диаграмма классов?
  4. Что такое свойства (Properties) класса? Какими способами можно их описать?
  5. Что такое кратность (multiplicity) свойства? Как обозначается на диаграмме?
  6. В чем разница между ассоциацией (Association) и атрибутом (attribute)? В каких случаях вы бы предпочли обозначить элемент атрибутом, а в каком ассоциацией?
  7. Что такое двунаправленные ассоциации?
  8. Что такое операции (operations)? Что можно описать с их помощью?
  9. Что такое обобщение? Как обозначается на диаграмме?
  10. Что такое зависимость (dependency)? Как обозначается на диаграмме?
  11. В чем разница между агрегацией и композицией? Как обозначаются на диаграмме?
  12. Что описывают диаграммы последовательности?
  13. Как в диаграмме последовательности обозначить создание и удаление участников?
  14. Как в диаграмме последовательности обозначают циклы и условия?
  15. Как в диаграмме последовательности обозначают синхронные и асинхронные сообщения?
  16. Что описывает диаграмма состояний?
  17. Что описывает диаграмма деятельности?
  18. Отличия диаграмм деятельности, последовательности и состояний.

Библиография:

  • Мартин Фаулер. “UML. Основы”.

“Знание типичных рисков связанных с разработкой программного обеспечения”

Проверяется устным экзаменом.

Вопросы:

  1. Что такое риск?
  2. На каком этапе следует анализировать риски?
  3. Назовите основные этапы процесса управления рисками.
  4. Что такое реестр рисков?
  5. Какие стратегии применяются для реакции на риск (risk response strategies)?
  6. Что такое план А (план профилактики риска)?
  7. Что такое план Б (план преодоления последствий)?
  8. Приведите типичные риски, связанные с разработкой программного обеспечения?
  9. Приведите типичные симптомы, предшествующие риску _______.
  10. Приведите типичный план А для риска _______.
  11. Приведите типичный план Б для риска _______.
  12. Как осуществляется контроль за рисками?

Библиография:

  • Владимир Обризан, “Конспект лекций по надежному программному обеспечению”
  • Project Management Body of Knowledge, 5th Edition, 2013.
  • 130 Project Risks.

“Проверка и отладка программного кода на уровне межмодульных взаимодействий и взаимодействий с окружением ”

Проверяется устным или письменных экзаменом.

Вопросы:

  1. Что такое тестовый двойник? Какие они бывают? Их различия?
  2. Какие есть способы подстановки тестовых двойников?
  3. В чем отличие Dependency Injection от Dependency Lookup?
  4. Поясните принцип минимизации нетестируемого кода? Какими шаблонами это достигается?
  5. Поясните принцип изоляции тестируемой системы? Какими шаблонами это достигается?
  6. Поясните принцип проверки одного условие за тест?
  7. Поясните принцип тестирования аспектов по-отдельности?
  8. Что такое observability? Какие способы существуют и какие доступны на вашей платформе?
  9. Что такое ассерция (assertion)?
  10. Что такое humble object?

Библиография:

  • Владимир Обризан, “Конспект лекций по надежному программному обеспечению”.
  • Шаблоны тестирования xUnit. Рефакторинг кода тестов. Джерард Месарош. (рус, англ)
  • Произвольные источники по observability на выбор.

“Знание концепции бронирования важнейших узлов и отказоустойчивости ”

Проверяется устным или письменных экзаменом.

Контрольные вопросы:

  1. Что такое отказ?
  2. Что такое отказоустойчивость?
  3. Что такое катастрофический отказ? Приведите стратегию реагирования на катастрофический отказ.
  4. Что такое каскад отказов? Приведите стратегию реагирования на каскад отказов.
  5. Как определяется важнейший узел в приложении?
  6. Назовите типичные мифы распределенных систем?
  7. Что такое Service Level Indicator? Приведите примеры.
  8. Что такое Service Level Objective? Приведите примеры.
  9. Что такое среднее время наработки на отказ (mean time between failure)?
  10. Что такое среднее время восстановления работоспособности (mean time to repair)?
  11. В чем особенности тестирование отказоустойчивости?
  12. Какие архитектурные шаблоны способствуют повышению отказоустойчивости?

Практическое задание.

Дана диаграмма зависимости сервисов, а также вероятности отказов. Даны три типичные операции API:

  1. Аутентификация, которая включает в себя одну запись в базу данных.
  2. Сохранение файла, которая включает в себя одну запись в базу данных, и один запрос в сервис файлов.
  3. Покупка продукта, которая включает в себя чтение в базу данных, запрос в сервис платежей, и запись в базу данных.

Задание: расположите операции API от самой ненадежной к самой надежной.

Таблица. Вероятности отказа сервисов.

API Database Payment Files
Вероятность отказа 0,0001 0,001 0,001 0,005

Responsive image

Рис. Диаграмма зависимости сервисов.

Библиография:

  • Владимир Обризан, “Конспект лекций по надежному программному обеспечению”.
  • Site Reliability Engineering. (англ.)
  • Database Reliability Engineering. (англ.)
  • Chaos Engineering.