Матрица компетентности программиста ч.i.

Область Уровень Комментарии
2^n (Уровень 0) n^2 (Уровень 1) n (Уровень 2) log(n) (Уровень 3)
Теория
Структуры данных Не осознаёт отличия между связным списком и массивом. Может растолковать и применять на практике массивы, связные перечни, словари и т.д. Осознаёт минусы и плюсы применения тех либо иных базисных структур данных (размер памяти, время исполнения операций с данными, в чем отличие между связными списками и массивами в этом замысле). Может растолковать как реализовать хэш-таблицы и как обработать коллизии. способы и Приоритетные очереди их реализации, и т.д. Знание сложных структур данных, таких как B-дерево, Биномиальная куча и Фибоначчиевская куча, АВЛ-дерево, Красно-тёмное дерево, Косое дерево, Перечень с пропусками, TRIE-структуры и т.д.
Методы Не имеет возможности отыскать среднее значение массива чисел. (Не легко поверить, но видятся и такие кандидаты на собеседовании.) Базисные способы поиска и сортировки. поиск и Обход в структурах данных. Деревья, Графы, несложный путь и разделяй и властвуй-методы. Осознаёт ассоциацию уровней данной матрицы. Может выявить и написать ответ динамическим программированием, прекрасно знает методы на графах, прекрасно знает численные способы, может идентифицировать неприятности класса NP. Трудиться с теми, кто имеет хороший рейтинг в TopCoder — это немыслимая успех!
Системное программирование Не знает что такое компилятор, компоновщик либо интерпретатор. Базисное познание компиляторов, интерпретаторов и компоновщиков. Осознаёт, что такое ассемблерный код и как трудятся программы на уровне железа. Маленькое познание виртуальной памяти и пэйджинга. Осознаёт чем отличается kernel mode от user mode, что такое мульти-трединг. Знает методы синхронизации и как реализованы примитивы синхронизации. Может просматривать ассемблерный код. Осознаёт, как трудятся сети, сетевые протоколы и может реализовать передачу данных через сокеты. Осознаёт как трудится целый программный стэк: железо (CPU + Память + Кэш + Прерывания + микрокоды), бинарный код, ассемблер, статическая и динамическая линковка, компиляция, интерпретация, JIT-компиляция, сборка мусора, куча, стэк, адресация памяти.
Навыки
Контроль предположений исходников Бэкап исходников в папку с датой бэкапа. VSS и базы CVS/SVN в качестве пользователя. Эксперт по возможностям CVS и SVN. Знает как создать, разветвить, слить репозитарий и т.д. Знает распределенные совокупности VCS. Трудится с Mercurial/Darcs/Git
Автоматиза- ция build’ов Знает как запустить Build из среды программирования. Может билдить из командной строчка. Может настроить скрипт для сборки главной совокупности. Может настроить скрипт для документации и сборки системы, для сборки инсталляторов.Сделает и добавит код скрипта в совокупность контроля предположений исходников.
Автоматизация тестирования Уверен в том, что тестирование — это работа тестеров. Может создавать собственные хорошие юнит-тесты для кода, что пишет на данный момент. Пишет код в стиле Test-driven Development (TDD). Может создавать автоматические тесты на функционал, интерфейс пользователя и загрузку/производительность.
Программирование
Декомпозиция задачи Легко последовательные строки. Copy/Paste — для повторного применения кода. Может разбивать ответ задачи на пара функций. Способен создавать многократно применяемые функции/объекты, каковые решают неспециализированные задачи. Применяет соответствующие структуры данных и методы. Формирует неспециализированный/объектно-ориентированный код, что инкапсулирует те условия задачи, каковые смогут быть поменяны.
Декомпозиция совокупности Не может думать о совокупности более сложной, чем один класс либо файл. Может произвести декомпозицию задачи и спроектировать совокупность в пределах одной платформы либо технологии. Может спроектировать совокупность, которая охватывает пара разработок/платформ. Может визуализировать и проектировать сложные совокупности с несколькими линейками продуктов, учитывать интеграциею с внешними совокупностями. Кроме этого обязан мочь проектировать совокупности помощи работы: мониторинг, генерация отчетов, аварийные переходы на применение запасных ресурсов.
Общение Не имеет возможности выразить собственные мысли/идеи. Не хорошо с грамматикой и правописанием. Его знают. Хорошие правописание и грамматика. Может действенно общаться. Может осознавать и растолковывать мысли/дизайн/ идеи/специфику в совершенно верно выраженной форме. В общении соответствует обстановке. Важность общения для программиста довольно часто недооценивают. С повышением аутсорсинга разработки ПО в те страны, где британский где британский не есть родным языком, данный вопрос стал более актуальным. Я знаю пара проектов, каковые провалились вследствие того что программисты не могли осознать суть дискуссии
Организация кода в файле Нет четкой организации кода в файле. Способы сгруппированны логически и по вызовам. Код разделен на регионы, имеет хорошие комментарии, в т.ч. со ссылками на другие файлы исходников. Файл имеет разделы license header, summary, хорошие комментарии, табуляции и непротиворечивую расстановку пробелов. Файл обязан смотреться красиво.
Организация кода между файлами Не приходит в голову идея четко организовать код посредством разделения на файлы. Похожие файлы группируются в папку. Любой физический файл рекомендован для чего-то одного, к примеру, помогает для объявления одного класса либо для реализации одного функционала и т.д. Организация кода на физическом уровне совершенно верно соответствует проекту. Глядя на структуру папок и имена файлов, можно понять как спроектирована эта реализация.
Организация дерева исходников Все в одной папке. Простое разделение кода в логические подкаталоги. Нет круговых зависимостей. Бинарники, либы, документация, билды, сторонний код — все разложено в соответствующие папки. Структура дерева исходного кода соответствует организации и логической иерархии кода в проекте. Глядя на структуру папок и имена файлов, можно понять как спроектирована эта совокупность. Отличие между этим пунктом и прошлым пребывает в масштабе организации. Организация дерева исходников относится ко всему комплексу продуктов, каковые определяют совокупность.
Читабель- ность кода Односложные имена. Хорошие имена файлов, переменных, классов, способов и т.д. Нет долгих функций, а нестандартный код, багфиксы и допущения в коде поясняются комментариями. Допущения в коде сопровождаются assert’ами. Поток операций в коде естественный — нет глубокой вложенности условий либо способов.
Надёжное программи- рование (defensive coding) Не осознаёт данной концепции. Контролирует все доводы и ставит assert’ы на критические допущения в коде. Убеждается, что проверил возвращаемое значение и что обрабатывает исключения в возможно бажном коде. Имеет собственную библиотеку помогающую в надёжном программировании, пишет юнит-тесты каковые эмулируют сбои.
Обработка неточностей Пишет код для совершенного случая, в то время, когда все трудится и нет сбоев. Обработка неточностей в коде, что или кидает исключение, или генерирует неточность. Убеждается, что по окончании того, как случилась неточность/исключение, программа работает , а ненужные более ресурсы, коннекшоны и память были корректно высвобождены обработчиком неточности. Пишет код так, дабы определять вероятные неточности на раннем этапе, придерживается последовательной стратегии обработки исключений во всех слоях кода, разрабатывает неспециализированные правила обработки исключений во всей совокупности.

Замечание 1:

Любой следующий уровень включает в себя прошлый , т.е. разработчик пребывающий на уровне 3 обязан удовлетворять параметрам двух прошлых уровней.

Версия документа от 17.05.2013.

Вторая, еще более содержательная часть таблицы — Матрица компетентности программиста ч.II.

Британская версия: Programmer Competency Matrix

Презентация Клуба программистов

Похожие статьи:

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Adblock
detector