Я работаю с учениками с начала 90-х годов, но особо не писал об этом здесь; Полагаю, пора!

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

В любом случае, немного истории ... Я начал программировать, когда мне было 9 лет, и стал профессионалом, когда мне было 17. Я стал одержим и не заботился о своем теле, и к 20 годам у меня развилась хроническая травма запястья. все еще есть десятилетия спустя. Может, мне стоило отойти от компьютеров, но к тому времени я уже подсел! Это были темные времена, но в конце концов я нашел решение ... Я мог продиктовать свой код кому-то еще, кто мог быть моими руками. Оказывается, это может быть очень эффективным и полезным (даже если для этого потребуется немного терпения).

Я использую термин подмастерье, потому что они никогда не просто машинистки ... Невозможно быть проводником всего этого кода, не усвоив при этом множество вещей. Я сравниваю это с изучением иностранного языка, отправляясь в чужую страну и слушая, как люди говорят на нем весь день. Во время работы я стараюсь объяснять вещи по ходу дела и побуждаю своего ученика задавать вопросы. Вначале мне, возможно, придется объяснять все по буквам, но со временем ученик усваивает закономерности, и я могу говорить на более высоком уровне. Чем больше они понимают, что мы делаем, тем более сильной командой мы становимся!

Когда я начал этим заниматься в начале 90-х, парное программирование не было широко известной практикой, но в настоящее время оно гораздо более распространено. То, что я делаю со своим учеником, очень похоже на парное программирование, за исключением того, что разрыв в опыте между моим учеником и мной шире, чем у большинства пар (иногда мои ученики начинают ничего не знать о программировании, хотя в наши дни это реже, когда все онлайн ресурсы для изучения кода), и мы никогда не меняем местами, кто печатает. Многие из преимуществ парного программирования по-прежнему актуальны:

  • Две пары глаз на коде - меньше ошибок
  • Мы сосредоточены на работе весь день; наличие там кого-то еще затрудняет откладывание дела на потом
  • Обмен знаниями; мой ученик учится у меня, и я учусь, разговаривая с ними
  • Мы можем обсудить проблемы проектирования и альтернативы, чтобы предложить лучшие решения.

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

Это очень тесные рабочие отношения ... Мы сидим всего в нескольких футах друг от друга и постоянно разговариваем вместе весь день, неделя за неделей. Многие из моих бывших учеников стали моими друзьями на всю жизнь. Также очень приятно видеть, как развивается их карьера после того, как они перейдут к следующему делу.

Часто люди спрашивают меня о моей программе ученичества и о том, как они могут воспроизвести ее в своей компании или в своем регионе. Во-первых: да, вам следует! Есть масса многообещающих начинающих программистов, которым просто нужно немного совета и возможность расти. Кажется, что недостатка в работе с программным обеспечением нет, но кому-то новичку сложно пробиться. Любой, кто может задействовать этот многообещающий талант, получает конкурентное преимущество. Между тем, ученики получают преимущество перед бесценным обучением, непосредственно участвуя в реальных проектах. Лучшее обучение и обмен знаниями означают лучших разработчиков, а значит, лучшую отрасль. Дополнительные мысли о том, почему (и как), см. В статье Роба Уоллинга Обучение работе с программным обеспечением - отстой: почему нам нужно откатить его на 1000 лет назад. Я также писал ранее о преимуществах культуры ученичества.

Я думаю, что то, что я делаю, дает неплохие результаты, но, конечно, это также адаптировано к моей ситуации ... В конце концов, главная потребность здесь в том, чтобы я мог выполнять свою работу. Если бы мне не нужно было, чтобы они печатали за меня, я бы хотел, чтобы ученик постепенно со временем переходил к более высоким уровням индивидуального вклада. На самом деле, я действительно рекомендую своему ученику использовать свободное время, чтобы сосредоточиться на своих собственных проектах и ​​пригласить их для обсуждения со мной, чтобы помочь закрепить их обучение. Во всяком случае, мои рекомендации:

  • Выберите человека, который подает надежды и увлечен, но не имеет большого опыта. Не отправляйтесь только на каникулы со студентами колледжа (как во многих программах стажировки), иначе вы пропустите всех людей, вышедших из учебных лагерей или обучившихся на онлайн-ресурсах.
  • Сразу же заставьте их работать над реальными проектами (будь то в компании или с открытым исходным кодом). Реальные проекты - единственный способ превратить теорию в навык. Чем раньше они начнут, тем скорее все уроки и упражнения, которые они сделали, обретут смысл. Кроме того, таким образом они работают продуктивно с самого начала.
  • Начните их с пары с кем-то, кто уже работает. Убедитесь, что отношения наставника и ученика ясны и обе стороны понимают, чего от них ждут. Я думаю, что для менее опытного программиста хорошо набирать текст, потому что в противном случае им легко отключиться, пока более опытный программист возится вокруг, но ваш опыт может отличаться. Поначалу это может показаться медленным, но вы делитесь ценной информацией, и по мере того, как ваш общий опыт будет расти, процесс будет ускоряться.
  • Следующим шагом было бы, чтобы они сделали свои собственные запросы на вытягивание и чтобы опытный программист их критиковал. Это тренирует разные части мозга, отличные от парного программирования, и помогает им занять место водителя. На самом деле, я полагаю, вы могли бы проделать этот шаг вживую, когда более опытный программист будет печатать, полностью основываясь на диктовке ученика, но при этом давая обратную связь. В любом случае у вас уже будет обширное общее понимание, на котором можно опираться.
  • Постепенно продвигайте их к более высоким уровням автономии, пока в один прекрасный день они не станут наставниками для следующего ученика!

Итак, это моя история и некоторые мысли о том, как подмастерье стать вам в лесную шею. Я знаю, что это уже происходит в некоторых частях индустрии (внутри компаний и в таких местах, как Apprenti), но я думаю, что было бы здорово, если бы этого было больше! Любая квалифицированная профессия со сложным набором инструментов и богатой культурой может извлечь выгоду из своего рода перекрестного опыления и диалога, порождаемого ученичеством, и я бы сказал, что разработка программного обеспечения, безусловно, отвечает всем требованиям.

Что вы думаете? Я уверена, что коснулась поверхности ... Задавайте мне вопросы, если они у вас есть!

Первоначально опубликовано на blog.iangilman.com.