Как подготовить начинающих программистов к современной (сложной) веб-среде?

39

В настоящее время наша компания разрабатывает приложения, в большинстве случаев предназначенные для веб-серверов Ruby on Rails и группы различных клиентов REST, от систем киосков в Java до встроенных устройств на C / C ++ (помимо интерфейсов для стандартных веб-браузеров). Нам нужно расширить нашу команду, и, не сумев найти хороших старших программистов, мы решили приложить некоторые усилия для обучения младших программистов, которые будут расти вместе с компанией.

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

Когда я начал программировать 15 лет назад, я использовал только Delphi и Source Safe и с самого начала мог создавать полезное программное обеспечение. Они оба были простыми инструментами, и было легко вникать во внутреннюю среду окружающей среды. Постепенно я начал использовать сторонние фреймворки, переключился на CVS, SVN и, наконец, Git, изучил части, которые делают сегодняшнюю сеть, такие как HTTP, JavaScript, CSS, REST и т. Д. Сегодня, даже после многолетнего опыта, я не знаю о том, как работает Ruby on Rails внутри, так же, как я это делал в прошлом о Delphi, и для меня это было важно, чтобы я мог соединить основные блоки обучения с инструментами, которые я использовал.

Мне кажется, что программистам, которых я нанимаю, понадобится много времени, чтобы интегрироваться с командой и создать что-то полезное, потому что есть много вещей, которые нужно научиться использовать единую среду (Rails): Ruby, HTML, CSS, JavaScript, REST, тестовые случаи, доступ к базе данных (с волшебным построением SQL внутри фреймворка!), MVC, три разных менеджера пакетов (apt для Ubuntu, gem и bundler для Ruby), ssh, git, Apache и Phusion Passenger для развертывания и т. Д.

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

Ромуло Цеккон
источник
8
Второй, последний абзац звучит так, как будто вы не заметили важного изменения, произошедшего за последние 15 лет: программисты-универсалы практически исчезли . Чтобы любой человек знал все детали, на которые вы ссылаетесь, он должен был бы, ну, быть в промышленности в течение 15 лет. У вас могут быть лучшие результаты в поиске / обучении специалистов, которые очень хорошо знают одну или две из перечисленных вами вещей, и в создании команды из разных нужных вам специалистов ( затем пересекаются). В качестве альтернативы можно найти старших инженеров с 15-летним опытом работы, таких как вы, но это не простая задача.
Джимми Хоффа
Просто к вашему сведению, крутая кривая обучения означает, что вы выучите что-то действительно быстро. Это смущает некоторых людей при неправильном использовании :)
Alternatex
Я всегда использовал это выражение как значение «трудный» (английский не мой родной язык), но Википедия говорит, что это неоднозначно, поэтому я не знаю лучшего выбора здесь: en.wikipedia.org/wiki/Learning_curve :)
Rômulo Ceccon

Ответы:

39

Многим людям не понравится эта идея, но я защищаю ее везде, где могу: независимо от языка программирования и среды, если у них нет опыта и есть ли задачи по обслуживанию, которые возникают из реальных сообщений об ошибках клиентов из ваших, постарайтесь удостовериться, что они назначены для такого рода задач, по крайней мере, на 30-40% (+) своего времени. «Вот отчет об ошибке, посмотрите на него, решите. Если вы не знаете, о чем идет речь, пообщайтесь с опытными коллегами, поищите в Google, что угодно». Реальной работы над реальными проблемами нетигрушки, по крайней мере: не только игрушки. Также убедитесь, что кто-то с большим опытом взглянул на то, что он делал, прежде чем его выпустить и отправить клиенту, конечно. Убедитесь, что новый коллега получает честные отзывы о том, что он сделал от коллег и клиентов. Тщательно выбирайте эти задачи, чтобы не перегружать их, но имейте в виду, что однажды вы захотите, чтобы они выполняли свою работу независимо.

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

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

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

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

Томас
источник
Я делаю то же самое. Хороший ответ.
Роклан
Я начал свою карьеру с исправления дефектов в первый год. Когда я перешел к другим проектам, я чувствую, что исправление ошибок сделало меня намного лучше, потому что я знал, что не нужно делать.
Брэндон
8

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

Но, если они компетентны, первый шаг - отправить их в класс. Однонедельный курс обучения обойдется вам в 2000-3000 долларов США. Тем не менее, это даст им практический опыт работы с инструктором, который (надеюсь) понимает материал, и планом урока, предназначенным для их ускорения. Отправка кого-то с книгой и директивой «выучить это» не будет столь же ценной и, скорее всего, будет стоить дороже (стоимость занятия примерно равна одной потраченной впустую неделе программиста).

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

Парсифаль
источник
4

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

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

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

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

Роберт Харви
источник