Что это?

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

Заполнение матрицы не отменяет резюме, но ссылка на заполненную матрицу удачно его дополняет.

Поделиться Progg it

Матрица профессиональной квалификации программиста

Обратите внимание на то, что каждый уровень является накопительным; то есть, чтобы сказать, что у вас уровень N, необходимо, чтобы владели всеми уровнями от нулевого до N включительно.
Теоретическая подготовка
  2n (Уровень 0) n2 (Уровень 1) n (Уровень 2) log(n) (Уровень 3) Комментарии
Структуры данных Не может объяснить разницы между Array (массивом) и LinkedList (связным списком) Способен объяснить принцип работы массивов, списков, словарей и использовать их для решения практических задач Осознаёт, какие компромиссы между объёмом занимаемой памяти и быстродействием имеют место в базовых структурах данных, какие операции и почему легче выполнять для массивов, а какие — для списков. Может привести и объяснить способы реализации хеш-таблиц и разрешений коллизий в них. Приоритетные очереди и способы их реализации. Знает и понимает продвинутые структуры данных: B-деревья, биномиальные и фибоначчи-кучи, красно-чёрных деревья, «выворачивающиеся» (Splay) деревья, слоёные списки (skip lists), префиксные и суффиксные деревья и т.п.
Алгоритмы Не способен найти среднее значение чисел в массиве (сложно поверить, но случаются и такие кандидаты) Знает основные алгоритмы сортировки, поиска, обхода и выборки даннных. Деревья и Графы. Простые «жадные » алгоритмы и алгоритмы вида «разделяй-и-властвуй» (вроде QuickSort). Способен понять смысл обозначения уровней в этой матрице. Способен распознать и программно решить задачи динамического программирования, хорошо знает алгоритмы работы с графами, вычислительные алгоритмы. Способен распознать класс сложности задачи и т.п. Работать с кем-то, у кого высшие оценки в данной категории было бы невероятной удачей.
Системное программирование Не знает, что такое компилятор, сборщик или интерпретатор. Базовое понимание компиляторов, сборщиков и интерпретаторов. Понимает, что такое машинный код, и как всё работает на аппаратном уровне. Некоторые знания в сфере виртуальной памяти. Понимает отличия пользовательского режима от режима ядра, многопоточность, примитивы синхронизации и то, как они реализованы. Способен читать машинный код. Понимает работу сетей, сетевые протоколы и программирование уровня сокетов. Понимает весь программный стек, детали аппаратной реализации (ЦПУ + Память + Кэш + Прерывания + Микрокоманды), сборки, статическое и динамическое связывание, компиляция, интерпретация, компиляция времени выполнения, сбор мусора, стек, куча, адресация в памяти...
Инфраструктура разработки
  2n (Уровень 0) n2 (Уровень 1) n (Уровень 2) log(n) (Уровень 3) Комментарии
Системы контроля версий Архивные папки по датам VSS и начинающий пользователь CVS/SVN Имеет опыт в использовании возможностей CVS или SVN, умеет создавать ветки и сливать, настраивать свойства репозитория и т.п. Знаком с распределёнными системами контроля версий. Пробовал Bzr/Mercurial/Darcs/Git
Автоматизация сборки Умеет собирать из ИСР (Интегрированная среда разработки - IDE) Умеет собирать из командной строки Может настроить скрипт для сборки системы Может настроить скрипт для сборки системы, а также генерации документации, установочных пакетов, заметок о выпуске и для установки соответствующих меток в системе контроля версий.
Знание средств разработки Ограничено «родной» ИСР (IDE) (VS.Net, Eclipse и т.п.) Знает о некоторых альтернативных средствах, представляет возможности других ИСР. Хорошее знание редакторов, отладчиков, ИСР, свободных альтернатив и т.п. Приветствуется знание, например, программ из из списка Скотта Хансельмана Сам автор утилит и скриптов, желательно опубликованных.
Работа со средой разработки (IDE) Использует ИСР для правки текстов. Детальнее знаком с интерфейсом, способен эффективно пользоваться средой посредством меню. Знаком с горячими клавишами для часто используемых операций. Создаёт собственные макросы и расширения.
Написание сценариев Не приходилось писать сценариев Командные скрипты ОС, JS for scripting Perl/Python/Ruby/VBScript/Powershell Создал и опубликовал повторно используемые сценарии.
Программирование
  2n (Уровень 0) n2 (Уровень 1) n (Уровень 2) log(n) (Уровень 3) Комментарии
Декомпозиция задачи «Линейное» кодирование; повторное использование путём копирования-вставки. Способен разбить задачу на несколько функций Способен создать повторно используемые функции/объекты, которые решают общую задачу Используя соответствующие структуры данных и алгоритмы получает обобщённый/объектно-ориентированный код, в котором инкапсулированы и нужным образом выделены те аспекты задачи, которые могут измениться.
Декомпозиция системы Не мыслит шире уровня отдельного класса/файла Способен декомпозировать задачу и спроектировать решение, но оставаясь в рамках той же технологии/платформы. Способен проектировать системы, простирающиеся на несколько технологий/платформ. Способен представлять и проектировать сложные системы из множества продуктов с интеграцией с внешними системами.
Организация кода в рамках файла Никаких признаков организации кода Методы сгруппированы логически или по уровням видимости Код оформлен в регионы и достаточно прокомментирован Файл чётко структурирован, документирован, все пробелы и новые строки расставлены в соответствии со стандартом кодирования. Файл выглядит идеальным.
Организация кода между файлами Не принимает во внимание организацию файлов в папки. Связанные файлы сгруппированы в папки. Каждый файл имеет чёткую единственную цель, например, определение одного класса, реализация одной возможности и т.п. Организация кода на физическом уровне соответствует дизайну. Просмотр имён файлов и папок даёт представление об архитектуре данного фрагмента системы.
Организация проектов в решении Разделение на проекты практически отсутствует (например, и слой UI, и логика, и данные - в одном проекте) Базовое разделение проектов по уровням. Бинарные внешние сборки, документация, внешний код, результаты сборки — всё логично организовано в соответствующие папки. Контролирует зависимости между проектами. Физическое расположение исходников в дереве соответствуюет логической структуре и организации системы. Просмотр имён файлов и папок даёт представление об архитектуре системы.
Читаемость кода Однобуквенные имена Смысловые имена для файлов, переменных, методов, классов и т.п. Нет длинных функций; необычный код, исправления ошибок, предположения — прокомментированы Допущения верифицируются с помощью Assert или контрактов кода. Поток выполнения выглядит естественно, нет слишком глубокой вложенности условий или вызовов.
Навыки общения Не может донести мысли/идеи коллегам. Орфографические и грамматические ошибки. Может донести мысли/идеи коллегам. Грамотная речь и письмо. Способен эффективно обсуждать архитектурные и прочие детали с коллегами. Способен понимать и сообщать мысли/архитектурные идеи/спецификации в непротиворечивой форме и в общении ориентируется на контекст (на понимание собеседниками друг друга). Может обучать других.
Автоматизированное тестирование Считает, что всё тестирование — работа тестировщика Пишет автоматические тесты, приходит к созданию хороших тестов для уже написанного кода Пишет код в манере РЧТ (разработка через тестирование, TDD) Способен настроить автоматизированные функциональные, нагрузочные и тесты интерфейса.
Защитное кодирование Не понимает, что это такое Проверяет все переданные параметры, декларативно проверяет допущения в коде. Проверяет возвращаемые значения и проверяет на исключения код, который может их выбросить. Имеет собственную библиотеку для защитного кодирования; пишет модульные тесты для проверки работы в случае некорректных условий.
Обработка ошибок Кодирует в расчёте на отсутствие ошибок. Базовая обработка кода, который может выбросить исключение/сгенерировать ошибку. Убеждается, что ошибки/исключения оставляют программу в корректном состоянии, освобождаются все ресурсы, требующие освобождения: память, подключения и др. Старается не допустить возникновения исключений путём упреждающих проверок, поддерживает общую стратегию обработки исключений во всех слоях приложения. Предлагает набор общий правил для обработки исключений во всей системе.
Отношение к требованиям Берёт требования и реализует их формально Ставит вопросы по упущеным ньюансам в требованиях Понимает общую картину и указывает на целые сферы, которые нужно уточнить/доописать Способен предложить лучшие альтернативы предлагаемым решениям исходя из личного опыта
Базы данных Считает базой данных Excel Знаком с основными концепциями, нормализаций, ACID, транзакциями, и способен писать простые запросы. Способен проектировать хорошие нормализованные схемы, учитывая при этом типичные запросы, которые будут производится. Профессионально использует отображения (View), хранимые процедуры, триггеры и типы, определяемые пользователем. Понимает отличие кластерных индексов от некластерных. Профессионально использует средства объектно-реляционного отображения. Способен осуществлять базовое администрирование БД, настройку производительности и оптимизацию индексов. Создавать сложные запросы, заменять использование курсоров на выражения SQL. Представляет, как данные и индексы физически организованы. Понимает, как база может быть зеркалирована, реплицируема. Понимает, как работает двухфазная фиксация (commit).
Опыт
  2n (Уровень 0) n2 (Уровень 1) n (Уровень 2) log(n) (Уровень 3) Комментарии
Профессионально используемые языки Императивные или объектно-ориентированные Императивные, объектно-ориентированные и декларативные (SQL). Понимает отличия статической и динамической, сильной и слабой типизации. Статический вывод типов. Функциональные. Ленивые вычисления, каррирование, продолжения (континуации, continuations) Параллельные (Erlang, Oz) и логические (Prolog)
Профессионально используемые платформы Одна 2-3 4-5 6+
Опыт работы, лет 1-2 3-5 6-9 10+
Самообразование и развитие
  2n (Уровень 0) n2 (Уровень 1) n (Уровень 2) log(n) (Уровень 3) Комментарии
Изучаемые языки/сфера интересов Императивные или объектно-ориентированные Императивные, объектно-ориентированные и декларативные (SQL). Понимает отличия статической и динамической, сильной и слабой типизации. Статический вывод типов. Функциональные. Ленивые вычисления, каррирование, продолжения (континуации, continuations) Параллельные (Erlang, Oz) и логические (Prolog)
Знакомство с технологиями «на гребне волны» Не следит за новыми выпусками платформ, сред разработки и т.п. Ознакамливается с планами выпусков, представляет, о каких продуктах идёт речь Загружает предварительные версии продуктов, читает статьи, руководства. Экспериментирует с предварительными версиями, создаёт пробные решения. Опубликовывает интересные результаты для сообщетва.
Блоги Слышал об этом, но всегда недоставало времени Читает профессиональные блоги и слушает подкасты регулярно. Имеет собственный блог с коллекцией ссылок на полезные статьи и утилиты. Ведет блог с собственными статьями и размышлениями на профессиональные темы.
Платформы и технологии
Перечислите 5 самых часто используемых вами платформ и технологий. Это — как набор тегов. Здесь может быть что угодно — PHP, ASP.NET MVC, Hibernate, J2EE, WPF, Web client dev и т.п. Разделителем является запятая.
Чтобы получить ссылку на вашу матрицу знаний, заполните эти поля и нажмите «Получить ссылку»:
Имя:
Отчество:
Фамилия:
Электропочта: Мы вышлем ссылку на эту почту
Получить ссылку