Матрица компетентности программиста ч.II.
Область | Уровень | |||
2^n (Уровень 0) | n^2 (Уровень 1) | n (Уровень 2) | log(n) (Уровень 3) | |
Програм-
мирование |
||||
Среда программиро-
вания (IDE) |
В основном использует IDE для редактирования текста. | Способен эффективно пользоваться меню в IDE. Знает некоторые тонкости среды. | Для самых используемых функций среды знает горячие клавиши. | Написал свои макросы. |
API | Часто нуждается в обращениях к документации. | Помнит самые часто используемые API. | Обширные и глубокие знания
API. |
Написал библиотеки, которые оборачивают API, для упрощения задач, которые наиболее часто встречаются. Эти библиотеки также часто восполняют пробелы в API. |
Фреймфорки | Не использует никаких фреймверков за рамками основной платформы. | Знает, но не использует популярные фреймворки, доступные для его платформы. | Профессионально пользовался более чем одним фреймворком и хорошо разбирается в идиомах фреймворков. | Является автором фреймворка. |
Требования | Понимает выставленные требования и пишет код в соответствии со спецификацией. | Задает вопросы касающиеся не рассмотренных в спецификации случаев. | Понимает картину в целом и предлагает дополнительные аспекты, которые должны быть описаны в спецификации. | Может предложить лучшие альтернативы и следовать выставленным требованиям, основываясь на собственном опыте. |
Скрипты | Отсутствует знание скриптовых инструментов. | Batch-файлы/shell. | Perl/Python/Ruby/VBScript/
Powershell. |
Писал и публиковал повторно используемые скрипты. |
Базы Данных | Думает, что Excel - это база данных. | Знает основы баз данных, нормализацию, ACID, транзакции и может написать простые select'ы. | Может спроектировать хорошие нормализованные схемы БД, с учетом запросов, которые будут выполняться; умело использует представления, хранимые процедуры, триггеры и собственные типы данных. Понимает разницу между кластеризованными и не-кластеризованными индексами. Специалист в использовании ORM -тулзов. | Может осуществлять администрирование БД, оптимизацию производительности БД, индексную оптимизацию, писать сложные select'ы, может заменить использование курсора вызовами функций sql, понимает как данные хранятся внутри, как хранятся индексы, имеет представление о том, как зеркалятся и реплицируются БД и т.д. Понимает как работает двухфазный commit.
|
Опыт | ||||
Языки и профессиона-
льный опыт |
Императивные или объектно-ориентированные программирования | Императивные, объектно-ориентиро-
ванные и декларативные (SQL) языки программирования. Дополнительный бонус - если понимает разницу между статической и динамической, слабой и строгой типизацией, |
Функциональные языки программирования. Дополнительный бонус - если знает, что такое "ленивые вычисления", каррирование, продолжения. | Конкурентные
(Erlang, Oz) и логические (Prolog). |
Годы профессиональ-
ного опыта |
1 | 2-5 | 6-9 | 10+ |
Годы профессиональ-
ного опыта конкретной платформы |
1 | 2-3 | 4-5 | 6+ |
Знание предметной области | Не знает о понятии "предметная область". | Работал хотя бы над одним продуктом в своей предметной области. | Работал над несколькими продуктами в одной и той же предметной области. | Эксперт своей предметной области, проектировал и реализовывал несколько продуктов/решений в ней, хорошо разбирается в ее сущностях и протоколах. |
Знания | ||||
Инструментарии | Ограничены используемой IDE (VS.Net, Eclipse и т.д.) | Знает о некоторых альтернативах популярным стандартным инструментариям. | Хорошие знания редакторов кода, отладчиков, различных IDE, open-source альтернативах и т.д. (Например, это может быть кто-то, кто знает большинство тулзов из списка Скота Ганзельмана.)
Использует ORM-тулзы. |
Написал свои инструментарии и скрипты, дополнительный плюс - если эти скрипты были опубликованы. |
Code base (кодовая база) | Никогда не смотрел кодовую базу. | Имеет общее представление о расположении кода и о том, как его собрать. | Хорошие рабочие знания кодовой базы, реализовывал несколько багфиксов и, может быть, некоторые маленькие фичи. | Реализовал несколько больших фич в кодовой базе, может легко описать изменения, требуемые для реализации большинства фич или багфисков. |
Знание новейших технологий | Не слышал о новейших технологиях. | Слышал о новейших технологиях в своей области. | Скачивал alpha/preview/CTP
/beta-версии и читал некоторые статьи и руководства на эти темы. |
Пробовал сделать что-либо сам. Используя preview-версию сбилдил свою программу. Дополнительный плюс - если сделал свое решение доступным для других. |
Знание внутренних аспектов платформы | Нулевые знания внутренних аспектов платформы. | В основном, знает как работает платформа внутри. | Имеет глубокие познания внутренних аспектов платформы и может обрисовать, как платформа исполняет программный код. | Написал свои тулзы для расширения возможностей платформы или для извлечения дополнительной информации о работе платформы. Например расширения дизассемблера, декомпилятора, отладчика и т.д. |
Книги |
![]() Серии книг "... за 21 день" "... за 24 часа" "... для чайников". |
![]() Совершенный код Не заставляйте меня думать! Регулярные выражения |
![]() Человеческий фактор: успешные проекты и команды Приемы объектно-ориентиро-ванного проектирования. Паттерны проектирования Жемчужины проектирования Руководство по разработке алгоритмов Программист-прагматик Мифический человеко - месяц |
![]() Искусство программирования Структура и интерпретация компьютерных программ Concepts Techniques and Models of Computer Programming Database systems , by C. J Date Thinking Forth Little Schemer |
Блоги | Слышал о блогах, но не уделял им внимания. | Читает технические блоги, блоги о программировании и разработке ПО и регулярно слушает подкасты. | Ведет ссылочный блог, содержащий коллекции ссылок на полезные статьи и тулзы, которые [ссылки] он собирает. | Ведет блог, в котором содержится его собственные понимание вопросов программирования. |
Замечание 1:
Каждый следующий уровень включает в себя предыдущий , т.е. разработчик находящийся на уровне 3 должен удовлетворять критериям двух предыдущих уровней.
Замечание 2:
Версия документа от 17.05.2013. О дополнениях, ошибках сообщайте в issues. Спасибо всем, кто помог сделать этот документ лучше!
Замечание 3:
Эта перевод английской версии: Programmer Competency Matrix
Первая, более теоретическая часть таблицы - Матрица компетентности программиста ч.I.>>