Как выбрать, мотивировать и развить начинающего программиста?

Представьте, что вам нужно нанять нового программиста, однако вы на 100% уверены, что на местном рынке нет опытных (того, что вам нужно) разработчиков и вам нужно работать с новичками. Пару месяцев назад мы наняли такого разработчика с оговоркой, что он будет учиться и учиться удовлетворять потребности компании, однако этого не произошло, и его успехи разочаровывают. В любом случае, он уезжает через две недели, и нам понадобится новый. Важно отметить, что у нас есть политика 6-месячного тестового периода, которую я не могу изменить.

Моя идея заключалась в том, чтобы нанять не 1 программиста на полгода, а 2 программистов на 3 месяца и сделать это как игру — ставить цели, устраивать соревнования, ставить финальное испытание и выбирать лучшего, из которого уйдет другой (в в лучшем случае у нас будет 2 хороших программиста :) -- в основном проблема в нехватке качественных программистов, которых мы можем найти на местном рынке, и аутсорсинг абсолютно не вариант, я уже страдал этим раньше).

Есть ли у вас идеи, как мотивировать будущего программиста стать величайшим во вселенной за 3-6 месяцев? Мне нужны быстрые результаты в кратчайшие сроки, иначе директор скажет: «Этого недостаточно, нам нужен другой». и все начнется сначала (а это такая боль).

«создать соревнование» — что произойдет, если лучший программист окажется менее конкурентоспособным человеком? Я бы предостерег от такого подхода, поскольку он может лишить избирательных прав людей, которые могут быть (во всех других отношениях) очень сильными кандидатами.
Этот вопрос больше подходит Programmers.SE
Я думаю, что эта ссылка должна немного помочь: randsinrepose.com/archives/2011/04/19/…
@Marcie: Верно, но это также вопрос управления командой, который здесь полностью соответствует теме.
Ты играешь с огнем. Они могут попытаться затмить друг друга или подорвать друг друга, или, что еще хуже, один подорвет другого, и в конечном итоге вы сохраните предательское XXX, прежде чем разберетесь, что произошло.
@Marcie - Помните, что у вас есть близкие голоса с вашим текущим уровнем репутации. Я предлагаю людям использовать их по вопросам, которые, по их мнению, должны быть закрыты/перенесены.
Я задал следующий вопрос здесь, на мета. Я хотел бы узнать мнение активных пользователей этого сайта по поводу таких вопросов: meta.pm.stackexchange.com/questions/222/…

Ответы (8)

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

Если вы хотите разработать начинающего программиста, вам нужно:

  • Правильное отношение. Вообще говоря , люди не хотят учиться , что печально, но это также означает, что те, кто действительно учатся, обычно действительно блестят. И отношение к обучению не имеет ничего общего с текущими навыками — это просто отношение. Это то, что вы должны искать во время интервью.

  • Есть у кого поучиться. Это может быть коллега с соседнего стола или наставник в организации, или менеджер, или почти любой, кто подходит на эту роль так, как вы хотите. В идеале пусть они работают вместе, но как минимум вы должны предоставить «учителю» достаточно времени, чтобы проверить работу, выполненную новичком, и регулярно делиться с ним некоторыми идеями о возможных улучшениях.

  • Время учиться. Частые неудачи в плане саморазвития — это ожидание того, что люди вырастут, и не предоставление им времени для обучения. Мы не можем ожидать, что люди станут рок-звездами программистов, когда у них практически нет возможности чему-либо научиться, поскольку они погребены под грузом срочной работы.

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

  • Четкие ожидания. Вы также не должны забывать об установлении четких ожиданий. Пока мне не сказали, что моя основная цель — показать достойную кривую обучения, я мог бы сосредоточиться на чем-то другом. Если я не научусь, ты, наверное, все равно захочешь избавиться от меня, но это уже другая история. Ожидания должны быть сформулированы очень четко.

Короче говоря: найдите человека с правильным отношением и помогите ему в его усилиях по обучению.

"правильное отношение" - это, должно быть, ключ, который я упустил до сих пор, спасибо, Павел.
@pawel - Я не думаю, что вы написали какие-либо книги на эту тему? Я бы хотел иметь «официально опубликованный» источник, на который можно было бы указать людям. Эти моменты не могли быть более точными, и их нельзя было игнорировать в деловом мире.
@Shauna - я бы сказал, что это просто здравый смысл, но я знаю, насколько дефицитным может быть ресурс в деловом мире. Кстати: если кому-то нужен «официально опубликованный» источник, чтобы понять такие вещи, я думаю, что для них все равно мало надежды :)
@pawel - Ха-ха, действительно, в обоих случаях. Судя по нескольким ответам, которые я получил от вас за короткое время в этой группе SE, я все же считаю, что вам следует написать книгу. :)
@pawel: «Вообще говоря, люди не хотят учиться»: я с этим не согласен, особенно для новичков. Большинство из них осознают тот факт, что они мало что знают, и стремятся узнать больше. Но все же возможно, что и не будут, по причине, которую вы перечисляете после этой фразы: нет времени, не у кого учиться и т.д. Я думаю, что многие люди позволяют другим устанавливать свои приоритеты и в итоге не учатся, но не потому, что не хотят.
@Traroth, если только эго не мешает. Слишком много раз я видел, как новички думают, что они уже все поняли. Это тоже человеческая природа (посмотрите, как подростки реагируют на родителей, или примените расхожее изречение «Я знаю достаточно, чтобы быть опасным» к чему-то еще), но это неприемлемо.

Перво-наперво: вам нужно нанять кого-то ценного. Это означает кого-то, кто умен и добивается цели. Нет лучшей ссылки, чем эта статья: http://www.joelonsoftware.com/articles/GuerrillaInterviewing3.html

После этого вам нужно инвестировать в его/ее обучение. Если новичок остался один после того, как вы его наняли, его мотивация продлится недолго. Тренируйте его, давайте мотивирующие задания, а не какую-то ерунду, и все должно получиться.

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

  • На самом деле нет подходящих людей... не зная вашего окружения, я не могу комментировать вероятность этого;
  • Ваша организация не привлекает нужных людей. Это может быть репутация, финансы или отрасль непривлекательна.

Почему бы не рассмотреть совершенно другой подход? - наймите подрядчика на несколько месяцев и посмотрите, сделает ли он работу. Это не аутсорсинг, по крайней мере, в моей книге! Если это получится, то у вас есть технический результат, который вы хотите - правда, без нового разработчика на будущее. Если не получится, возможно, вы ждете чуда, а у новичка не будет никаких шансов, каким бы хорошим он ни был. Вы хотите сделать нового человека «величайшим во Вселенной» за несколько месяцев… простите за прямоту, но это просто нереально, и вы обречены на разочарование за разочарованием, если это действительно то, кем вы являетесь. ожидание.

Здесь может помочь парное программирование . Попробуйте объединить более опытных людей с менее опытными.

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

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

Разработчики не взаимозаменяемые виджеты. У них довольно разнообразный набор личностей, и они будут реагировать по-разному в зависимости от их личности и окружающей среды.

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

Я думаю, что это глубоко несправедливо по отношению к разработчику, который НЕ получает работу. Я бы никогда не занял позицию, в которой мое долголетие зависело бы от «победы» над другим коллегой в каком-то соревновании.

У вас действительно есть время, чтобы создать полную учебную программу вместе с итоговым тестом? Это лучшее использование ваших ресурсов?

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

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

Ничто не заменит соответствующий опыт.

Это цитата Криса Стерлинга из его книги « Управление долгом программного обеспечения: построение для неизбежных изменений» . Он считает, что для достижения успеха в разработке программного обеспечения каждому необходимо предоставить возможность получить соответствующий опыт (в предметной области, технологии и т. д.). Люди, у которых есть соответствующий опыт, должны поделиться им. Шесть месяцев должно хватить.

В главе об управлении долгом опыта платформы автор подтверждает ваш опыт: «Когда разрыв между теми людьми, которые имеют существенные знания о технологии и предметной области, и теми, кто является новичком, слишком велик, одного объединения в пары, вероятно, недостаточно». Он предполагает, что действия по обмену знаниями и совместные конфигурации команд — это два способа, с помощью которых организации могут решать проблемы, с которыми вы сталкиваетесь.

Что касается обмена знаниями , я думаю, что программы обучения могут быть для вас лучшим вариантом. Я имел хороший успех с парой различных подходов в моей организации. Во-первых, это Tech Labs , где каждый может сообщить о проблеме разработки, с которой он столкнулся, и попросить некоторых из более старших членов команды проконсультироваться с ним по этой проблеме. Они делают это на групповом форуме, чтобы другие люди, столкнувшиеся с проблемой, могли узнать, как с ней справиться. Это также позволяет идентифицировать конкретные примеры проблем как анти-шаблоны, где это уместно, чтобы в будущем можно было использовать лучшие шаблоны проектирования. Вторая стандартная коричневая сумка .сессия, на которой люди собираются за обедом, чтобы узнать о новой для них теме. Темы «коричневых пакетов», которые мы проводили, обычно сосредоточены на принципах, которые члены команды затем могут применить на практике.

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

  • Сначала сделайте нового члена команды SDET, чтобы у него была возможность понять и протестировать код, написанный другими.
  • Дайте новому члену команды задание по рефакторингу, чтобы он ознакомился с кодовой базой, прежде чем взяться за нее «в лоб».
  • Поддержите наставника, который тратит 50% своего времени на практическую поддержку нового члена команды.
  • Создайте сообщество практики вокруг определенных специализированных областей, где нет общего распространения знаний, в котором могут участвовать новые члены команды.

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

  1. во-первых, экономический контекст благоприятен для программистов в большинстве мест. (полное раскрытие: я работаю адъюнкт-профессором в области компьютерных наук/инженерии и консультантом по управлению проектами) Большинство моих нынешних студентов (мы учимся в июне, они получают степень бакалавра и магистра в сентябре) уже нашли работу (в основном, как программисты для студентов бакалавриата). На самом деле у нас гораздо больше предложений о работе, чем у студентов. Предлагая конкурс, таким образом, риск быть не подтвержденным на работе с вероятностью 50% недостаточно для молодых программистов в этом контексте.

  2. Давайте сделаем то, что должен делать PM: представим, что мы и есть эти ребята.

Когда два программиста достаточно обсудят вместе, они быстро узнают, кто из них наиболее способный.

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

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

Так что в обоих случаях не нужно соревноваться...

Я думаю, вы должны найти другой способ мотивировать ОДИН очень хороший потенциал. Чтобы найти этого парня, потратьте много времени с помощью технического специалиста из вашей организации. Затем убедитесь, что новичок понимает, что если он быстро научится в первые 3 или 6 месяцев, он будет очень хорошо вознагражден (деньгами, временем, обязанностями, интересными проектами).

Как только это будет сделано, наставничество — лучший способ убедиться, что кто-то будет учиться эффективно (наставник дает ориентацию в обучении, ускоряя процесс, отделяя зерна от плевел — чему нужно учиться от того, что не важно).

спасибо, интересная точка зрения и много пометок, сделанных в моем блокноте