habrahabr

О начинающих разработчиках и принципах работы с ними

  • четверг, 15 мая 2014 г. в 03:10:38
http://habrahabr.ru/post/222727/

image

За последние десять лет через меня прошло много начинающих разработчиков. Да и чего греха таить, я тоже когда-то был начинающим разработчиком. За это время я получил тысячи вопросов а-ля “как стать разработчиком”, а также просьб взять людей к себе на практику. К сожалению, даже под чутким руководством более опытных специалистов, далеко не каждому хватает сил и мотивации перейти на качественно новый уровень. Статистика — вещь упрямая: количество “пытающихся” и “достигающих успеха” распределяется согласно принципу Парето, т.е. 20/80, где из десяти человек максимум двоим удается пройти первоначальное испытание. Остальные отваливаются по дороге или процесс обучения у них растягивается на долгие годы. И все же, каким должен быть начинающих разработчик, какими навыками и знаниями он должен обладать? Об этом и пойдет речь в статье.

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

Первый вопрос, который я обычно задаю джуниору звучит так: в какой сфере ты бы хотел работать? Разрабатывать приложения для десктопа, например, или писать игры или мобильные приложения, или веб/облачные продукты, а может, вообще двигаться в сторону дизайна или тестирования? Это очень важно, ведь каждая область имеет уникальные свойства и знания, которыми нужно обладать. Хотя тут решение довольно простое: нужно предложить джуниору попробовать себя в разных областях, а через месяц спросить, что ему больше понравилось. Ну и потом двигаться в эту сторону.

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

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

А дальше мы начинаем беседовать. Наша беседа анализируется на наличие тех или иных фраз. Давайте разберем их по порядку.

Как меня за#бал университет, сплошная трата времени

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



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

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

Microsoft — г#вно, буду писать для Linux

Меняем Microsoft на C#, а Linux — на Java или Microsoft на Linux, а Linux — на Microsoft и получаем типичный портрет фанатика. С фанатиками вообще не нужно связываться. Для фанатиков важен процесс, а не результат, для них не важно, чтобы задача была выполнена самым оптимальным способом, а главное, чтоб было на “правильных” технологиях. Хочу добавить, что в первый год своего джуниорства я писал на Pascal, Turbo С++, Visual C++ (MFC и WinAPI), .NET 1.1, PHP, ColdFusion, Perl, Java, пока не понял, что мне ближе и понятней. Человеку, изначально зацикленному на конкретной технологии, будет очень сложно стать действительно хорошим специалистом.

Не буду скрывать, что “проблема технологий” часто встречается и уже среди сформировавшихся специалистов. Недавно был свидетелем демонстрации одного проекта, который можно было реализовать максимум за четыре часа штатными средствами ASP.NET MVC и jQuery. Но, во-первых, выполнение проекта было растянуто почти на год (справедливости ради нужно отметить, что это не был коммерческий проект), а, во-вторых, в демо фигурировали такие слова, как open source, node.js, база данных в виде json-файла. Всё это заливалось через командную строку на github, после чего компилировалось с помощью специальных скриптов, а затем еще один скрипт выкладывал HTML-страничку на хостинг.

image

Внезапно!

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

Ответственность — еще одна критически важная черта джуниоров.

Мне все понятно, вопросов нет

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

Здесь работает и обратное правило: если вопросы поступают слишком часто, значит гуглом джуниор пользоваться не умеет. А ведь…

...еще один важный навык джуниора — умение самостоятельно искать нужную информацию и ответы на свои вопросы.

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

А сколько я буду получать?

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

Рекорд побил один студент третьего курса, согласившийся поработать удаленно парт-тайм, имея опыт работы с конкретной технологией 1 месяц. Он захотел зарплату около $2000. Амбиции — это очень хорошо (сам такой), но меру нужно знать :)

С чего начать?

Это самый частый вопрос, который я получаю. Ответ достаточно простой: возьмите своё хобби (музыка, спорт, нумизматика) и сделайте для него сайт, мобильное приложение и/или игру. Напишите сначала сайт на PHP, потом на ASP.NET, потом разработайте Android-приложение, потом портируйте его на iOS. А потом попробуйте сайт выложить на хостинг, раскрутить, а мобильное приложение опубликовать в каком-то из app store. Вы получите минимальный, но все же опыт полного цикла разработки проекта от идеи до публикации и это вполне можно указывать в своем резюме. Да и в конце пути вы точно будете знать, что вам больше всего подходит.

А что компании и вузы?

Многие компанияи не готовы работать с джуниорами.

Причины называют разные:

— сейчас мы его научим, а он уйдет к конкурентам;
— мы молодая международная компания, мы работаем только с профессионалами и подготовленными специалистами;
— наши специалисты слишком суровы, чтобы тратить своё время на джуниоров;
— задача готовить специалистов полностью лежит на государстве и вузах, мы-то тут при чём?

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

Многие также рассматривают онлайн-платформы в качестве альтернативы классическому обучению, где, по сути, всё зависит только от желания и мотивации самих учащихся. Но в этом-то и в пробема. Ведь все замечательные инициативы, такие как iTunes U, Coursera и т.д. сталкиваются с ничтожно малым количеством тех, кто проходит полностью курс (цифра окончивших курсы колеблется в районе 1-3%). Именно поэтому наличие менторов обязательно для того, чтобы увеличить этот показатель хотя бы до 30%. И здесь необходима кооперация всех игроков ИT-рынка, включая государство.

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

Вместо выводов

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

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

И да, всё вышесказанное можно заменить одной фразой: садись и работай. И для многих этих слов достаточно.