January 21, 2014

Джуниорити

— Взвооод! Ровняйсь! Отставить! Ровняйсь! Смирно! Открыть тетради, конспектировать!

Удивительно, но вопрос "как стать сеньором?" встречается в интернете намного чаще, чем "как стать джуниором?". Из этого может сложится впечатление, что вопрос как стать джуниором никого не интересует. Видимо, или все знают как им стать, или даже не задаются таким вопросом, и любой начинающий программист сразу считает себя джуниором по умолчанию. Таким образом, например, ваша бабушка — тоже джуниор. Абсурд? Да. Значит, нужно сформировать какие-то критерии, которым должен соответствовать джуниор, чтобы называться джуниором. Сразу оговорюсь, что я не люблю термин "джуниор", потому что это слово из лексики метасатанистов. А я не люблю ни метасатанистов, ни сам метасатанизм (о чем напишу отдельно), поэтому здесь и далее термин "джуниор" будет заменено на "подросток".

Итак, вводим новый термин.

Джуниорити — совокупность свойств, присущих подросткам.

Раскрыть это определение мне хотелось бы через ряд примеров.

Джуниорити — это обдумывать и предлагать минимум два варианта решения той или иной проблемы.

Любой программист сталкивается со сложными задачами, которые не удается разрешить с первого раза. От опытного программиста ожидается, что он их решит самостоятельно. Ожидать такого же от подростка этого не стоит, потому что недостаточно опыта. Тем не менее, отсутствие опыта не является той причиной, по которой можно отложить решение задачи. Грамотный подросток на каждую проблему или задачу должен придумать (сгенерировать, нагуглить, подслушать, подглядеть, списать) как минимум два варианта решения, чтобы обсудить их с наставником. А еще лучше три варианта или даже пять. Такой подход стимулирует мозг подростка самостоятельно решать свои проблемы.

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

Здесь все очень просто. Начинающий программист должен понимать и говорить на языке, на котором ведется диалог между инженерами. Когда наставник сказал: "Introduce explaining variable", то у подростка должно щелкнуть в голове: "Так, что-то такое было у Фаулера в книге по рефакторингу". После этого книгу нужно открыть, найти главу, прочитать, и провести требуемый рефакторинг. Для начала, подростку следует прочесть вот эти книги:

1. Эрих Гамма, Р. Хелм, Р. Джонсон, Дж. Влисс. "Приемы объектно-ориентированного проектирования. Паттерны проектирования".
2. Мартин Фаулер. "Рефакторинг. Улучшение существующего кода".
3. Эрик Эванс. "Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем".
4. Джефф Раскин. "Об интерфейсе".

Джуниорити — это вести документацию по проекту, протоколы совещаний.

С документаций по проекту — все ясно. Просто нужно брать и ее писать прям в коде с помощью специальных комментариев. С протоколами все немного сложнее. Большинство совещаний у подростка — это один на один со своим наставником. Самая большая ошибка — это не записать какую-то важную мысль наставника. Поэтому, после любого совещания нужно сесть и все законспектировать.

Джуниорити — это писать тесты.

Подросток должен уметь тестировать как свои программы, так и чужие. Начать следует с написания тестовых сценариев на естественном языке. На следующем шаге — разработать модульные тесты, на следующем шаге — приемочные тесты.

Джуниорити — делать код-ревю коллегам, а также изучать их ревю.

Обычно, в любой компании вклад коллег всегда на виду — Гит у всех выглядит одинаково. Подросток должен просматривать код своих коллег, оставлять замечания, а также смотреть, какие замечания они оставляют другим программистам. Учиться можно на своих ошибках, а также на чужих.

Джуниорити — это вести Джиру. Регулярно отчитываться и комититься.

Активность в Джире, отчеты по имейлу, комиты в репозитории — это все "пульс" подростка, по которому наставники определяют, жив он или мертв. Никому не нужен "мертвый" сотрудник, который боится попросить помощь своевременно, чтобы решить текущие проблемы и двигаться дальше.

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

Давайте запишем несколько производных терминов:

Прокачать джуниорити — последовательно и регулярно практиковать советы данные выше.

Гнать подростковую херню — игнорировать советы данные выше или наставником.

Вы спросите: а как же сеньоры? А сеньоров не существует. Программист или решает поставленную перед ним задачу или не решает. Логика здесь бинарная.