Автор блога simpleprogrammer.com Джон Сонмез (John Sonmez) предложил собственный эквивалент уже ставшего классическим «Теста Джоэла». Новая анкета призвана помочь программистам оценить свои навыки.
15-летие «Теста Джоэла»
В августе 2000 года программист Джоэл Спольски (Joel Spolsky) написал в блоге пост под заголовком «Тест Джоэла»: 12 шагов к лучшему коду».
С тех пор многие разработчики при поиске работы используют этот тест для оценки потенциального работодателя: является ли компания подходящей для работы? В свою очередь многие ИТ-компании обращаются к «Тесту Джоэла» как к своего рода самопроверке, которая помогает им понять, какие составляющих их работы стоить улучшить.
Если вам не доводилось слышать про «Тест Джоэла», он выглядит так.
- Пользуетесь ли вы системой контроля версий?
- Можете ли вы собрать продукт за один шаг?
- Выполняете ли вы ежедневные билды?
- Используете ли вы базу данных ошибок?
- Исправляете ли вы ошибки перед написанием нового кода?
- Есть ли у вас актуальный план работ?
- Есть ли у вас спецификация?
- Предоставлены ли вашим программистам спокойные условия для работы?
- Используете ли вы новейшее дорогое оборудование?
- Есть ли у вас тестеры?
- Пишут ли кандидаты на работу код во время собеседования?
- Проводите ли вы коридорное тестирование удобства использования программ?
Подробнее о каждом из пунктов можно почитать по-русски здесь.
Вот как сам Спольски объяснял суть одноимённого теста:
«В «Тесте Джоэла» прекрасно то, что вы сможете быстро ответить «да» или «нет» на каждый из вопросов. Вам не придётся подсчитывать количество строк кода в день или среднее количество ошибок на модуль. За каждый положительный ответ начисляйте один балл. Главный недостаток теста в том, что его действительно не следует применять для оценки безопасности программного обеспечения ядерных электростанций.
12 баллов — отлично, 11 — хорошо, 10 и менее — у вас серьёзные проблемы. Большинство существующих организаций, производящих программное обеспечение, набирают всего 2 или 3 балла, и им нужна серьёзная помощь, потому что компании вроде Microsoft работают на 12-ти всё время».
«Простой тест программиста»
«А как насчёт «Теста Джоэла» для программистов?» — задался вопросом автор блога simpleprogrammer.com Джон Сонмез. И предложил собственный вариант теста для оценки навыков разработчиков программного обеспечения.
1. Можете ли вы эффективно использовать систему контроля версий?
«Различные системы контроля версий можно использовать по-разному. Однако независимо от того, какую систему применяете, вы должны знать, как с её помощью сделать больше, чем просто получить или сохранить исходный код.
Чтобы эффективно использовать систему контроля версий, вы должны ориентироваться в таких понятиях, как ветвление и слияние. Вы должны знать, как разрешать конфликты при слиянии и понимать, как использовать ветки при одиночной разработке или работе в команде.
Поскольку управление версиями важно практически для каждого разработчика, вы должны быть экспертом в использовании различных систем контроля версий и иметь представление о базовых концепциях, применимых ко всем таким системам».
2. Умеете ли вы решать алгоритмические задачи?
«Я поражен тем, как много программистов не могут решить довольно простые алгоритмические задачи. Особенно с учётом того, что такого рода задания фигурируют в ходе едва ли не любого серьёзного собеседования на работу.
Любой разработчик должен решить стандартную алгоритмическую задачу: «Напишите функцию, чтобы определить, являются ли два слова анаграммами». Конечно, вы должны уметь решать задачи и посложней этой на доске перед потенциальным работодателем».
3. Программируете ли вы более чем на одном языке или с использованием более одной технологии?
«Лучшие программисты — те, кто может использовать оптимальные инструменты для выполнения конкретной задачи. Они понимают, что различные проблемы лучше всего решать с помощью различных технологий, а не пытаются использовать только то, что знают.
Действительно хороший программист стремится приобрести как можно более разносторонний опыт и знания, овладев больше чем одним языком программирования и посвятив время изучению нескольких стеков технологий.
Конечно, специализация имеет огромное значение, но не менее важно хорошо разбираться в нескольких технологических областях, даже если вы не используете эти знания каждый день».
4. Что вы делаете для повышения собственного уровня образования и навыков каждый день?
«В условиях, когда новые технологии появляются и обновляются практически ежедневно, невозможно идти в ногу со временем, не уделяя должного внимания самообразованию и саморазвитию. Выделите 15 минут в день на чтение программистских блогов, технической литературы и т.п. и спустя несколько лет вы поймёте, насколько это важно».
5. Называете ли вы вещи своими именами?
«Хороший разработчик ПО пишет ясный и понятный код. Невозможно написать ясный и понятный код, если вы не можете назвать переменные, методы, классы и всё остальное, что вы создаете и что имеет наименование».
Для совершенствования в этом направлении автор рекомендует две книги: «Code Complete» и «Clean Code».
6. Можете ли вы эффективно излагать идеи?
«Общение — один из важнейших навыков, который влияет почти на всё, что мы делаем в мире разработки. От написания писем и объяснения архитектуры идеи на доске до общения с клиентами и коллегами — процесс разработки ПО подразумевает много общения».
По мнению автора, отличный способ развить коммуникативные навыки — писать на постоянной основе. Например, завести собственный блог или авторскую колонку на dev.by (есть идеи и желание — пишите на editor at dev.by).
7. Понимаете ли вы базовые шаблоны проектирования?
«Для того, чтобы считаться хорошим программистом, вам не обязательно часто использовать шаблоны проектирования. Однако вы должны по крайней мере иметь представление о самых распространённых из них, используемых в технологиях и языках программирования, с которыми вы работаете».
Для ликбеза в этом направлении Джон Сонмез рекомендует прочитать «Design Patterns» или «Head First Design Patterns».
8. Умеете ли вы эффективно отлаживать программу?
«Многие думают, что умеют отлаживать программы, хотя на самом деле всего лишь знают, как использовать инструменты отладки. Отладка — больше, чем пошаговое исследование строк кода в поисках ошибки. Хороший программист знает, что отладка начинается с выдвижения гипотезы о том, что может быть не так, и только затем применяется отладчик, чтобы доказать или опровергнуть эту гипотезу. Ни для кого не секрет, что большинство разработчиков тратят львиную долю времени не на написание, а на отладку кода. Потому программисты, умеющие эффективно отлаживать код, всегда в цене».
9. Тестируете ли вы собственный код?
«За качество написанного кода отвечает не столько QA-отдел компании, сколько сам разработчик. Хороший программист несёт ответственность за качество написанного им кода, и прежде, чем передать его QA или кому-либо ещё, тестирует его на ошибки. Я твёрдо верю в то, что хороший программист — это и хороший тестировщик».
Автор рекомендует немного устаревшую, но не утратившую ценности книгу «Testing Computer Software».
10. Делитесь ли вы знаниями?
«Одна из главных характеристик отличного программиста — способность открыто и свободно делиться знаниями. Это не только помогает команде и коллегам, но и вам: я абсолютно уверен в том, что вы никогда не выучите что-то, пока вы научите этому других. Самый ценный сотрудник в команде не тот, кто больше всех знает, а тот, с чьей помощью ценность всех остальных участников команды увеличивается».
11. Используете ли вы лучшие из доступных инструментов в работе?
«Не имеет значения, каким инструментам вы отдаёте предпочтение, но у вас должен быть набор инструментов, которые на ваш взгляд, являются оптимальными для выполнения ваших задач. Программист, который болеет за свою работу, обязан тратить время на поиск и изучение инструментов, которые помогут ему повысить эффективность».
12. Можете ли вы написать полноценное приложение?
«Многие могут вносить изменения в уже написанный код и исправлять ошибки, но гораздо меньше разработчиков способны написать полноценную программу от начала до конца.
Хороший программист, возможно, не в состоянии самостоятельно создать огромное корпоративное приложение, но должен уметь написать хотя бы несложное приложение — свидетельство того, что у специалиста есть фундаментальное понимание о том, как построен софт и как он работает».
Честная оценка — приоритет
«Очевидно, что это простой тест, который и близко не включает в себя всё, что должен уметь хороший программист», — отмечает Джон Сонмез. Он рекомендует использовать анкету для примерной самооценки или во время интервью с кандидатом, чтобы получить общее представление о его способностях.
Автор «Простого теста программиста» обращает внимание, что важно честно оценивать себя по всем 12 критериям: «Это значит, что вы ставите себе 1 балл только в том случае, если можете с уверенностью сказать, что полностью соответствуете критериям. Если таким образом вы набираете ниже 8 баллов, не отчаивайтесь. Это просто означает, что вам есть над чем работать. В то же время, любой человек с баллом выше 8 не должен иметь проблем с поиском хорошей работы в разработке ПО».
А что думаете вы?
Предложение Сонмеза вызвало довольно бурное обсуждение в комментариях под постом. А что вы думаете о «Простом тесте программиста»?
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.