Критерий оценки | Junior | Middle | Senior |
Декомпозиция задачи | Последовательные строчки кода. Copy/paste — для повторного использования кода. | Создает многократно используемые функции/объекты, решающие общие задачи. | Использует соответствующие структуры данных и алгоритмы. Создает общий/объектно-ориентированный код, инкапсулирующий условия задачи. |
Декомпозиция системы | Не способен думать о системе сложнее одного класса или файла. | Производит декомпозицию задачи и проектирует систему в пределах одной платформы или технологии. | Визуализирует и проектирует сложные системы с несколькими линейками продуктов, интегрирует с внешними системами. Проектирует системы поддержки работы: мониторинг, генерация отчетов, аварийные переходы на запасные ресурсы. |
Общение | Может выразить свои мысли/идеи, но не всегда четко. Есть нюансы с правописанием и грамматикой. | Его понимают. Хорошее правописание и грамматика. Общается эффективно. | Понимает и объясняет мысли/дизайн/идеи/специфику в точно выраженной форме. В общении соответствует ситуации. |
Организация кода в файле | Нет четкой организации в файле. | Методы сгруппированы логически и по вызовам. | Код разделен на регионы. Имеет грамотные комментарии со ссылками на файлы-исходники. |
Организация кода между файлами | Нет четкой организации кода с делением на файлы. | Физический файл выполняет одну функцию. Например, служит для объявления класса или для реализации одного функционала и т. д. | Организация кода на физическом уровне соответствует проекту. Наглядность способа проектирования реализации через имена файлов и структуру папок. |
Читабельность кода | Односложные, не всегда понятные или не отражающие действительность имена (файлов, переменных). | Хорошие имена файлов, переменных, классов, методов и т. д. Нет длинных функций. Нестандартный код, багфиксы и допущения в коде поясняются комментариями. | Допущения в коде сопровождаются командами Assert. Поток операций в коде естественный (без глубокой вложенности условий или методов). |
Безопасное программирование | Понимает концепцию, делает базовые вещи (чаще всего после напоминания). | Проверяет аргументы методов, возвращаемое значение и обработку исключений в потенциально важном коде. | Имеет собственную библиотеку, помогающую в безопасном программировании. Пишет юнит-тесты для имитации сбоев. |
Обработка ошибок | Пишет код для «идеального» случая без сбоев. | Обработка ошибок в коде (кидает исключение или генерирует ошибку). | Пишет код с функцией раннего определения ошибок. Придерживается последовательной обработки исключений в слоях кода и формулирует принципы процесса в системе. |
Требования | Понимает выставленные требования и пишет код в соответствии со спецификацией. | Видит картину в целом и сразу выявляет дополнительные аспекты с последующим описанием в спецификации. Задает вопросы, касающиеся неучтенных случаев. | Предлагает альтернативы и следует выставленным требованиям, основываясь на собственном опыте. |
Базы данных | Знает основы баз данных, транзакции. Пишет простые select-запросы. | Проектирует нормализованные схемы БД с учетом запросов. Умело использует представления, хранимые процедуры, триггеры и собственные типы данных. Понимает разницу между кластеризованными и некластеризованными индексами. Специалист в использовании ORM инструментов. | Осуществляет администрирование, увеличивает производительность и оптимизирует индексы БД. Пишет сложные select-запросы. Заменяет использование курсора вызовами функций SQL. Понимает принципы внутреннего хранения данных и индексов. Имеет представление о создании «зеркал» и репликации БД и т.д. |