Привет! Меня зовут Денис Довженко, и я уже несколько лет провожу технические собеседования с кандидатами на позиции инженера-программиста C/C++. Если с кандидатами на позиции Senior SW Engineer и выше основной разговор ведётся об опыте работы, то отбор будущих интернов и джуниоров опирается на усвоенные в университете знания и способность решать учебного же уровня задачи. Здесь-то и выясняется, что даже в ведущих технических вузах учат «не тому» и «не так». А подготовку к переходу из состояния «студент» в состояние «инженер» хорошо бы начинать чуть ли не с первых дней обучения.

В статье я расскажу о том, как мы в Санкт-Петербургском Центре Разработок Dell Technologies помогаем студентам готовиться к успешному продвижению по пути инженера-программиста.



Образование, или Где и как учиться?


В школе нас приучают к тому, что всякая задача имеет единственное правильное решение. К окончанию бакалавриата у некоторых студентов появляется ощущение того, что оно может быть далеко не единственным, но критерии выбора решения, наиболее подходящего к условиям задачи, пока недоступны их пониманию. Да и вообще, в голове бакалавра обычно сидит абсолютная уверенность в том, что инженер-программист — не более, чем дрессированная обезьянка (codemonkey). Ведь именно такие навыки вырабатываются лабораторными работами: прочитать задание по диагонали и быстренько накодить. Но какой же студент начнёт делать лабораторные раньше, чем за неделю до сессии? И вдруг на собеседовании злые дядьки требуют от него хотя бы минимальной алгоритмической культуры, рассуждают о каких-то «процессах разработки», заставляют решать заковыристые задачи… Получается, что ступенька джуниора для бакалавра высоковата, а магистру уже кажется недостаточно статусной.

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

Ещё очень часто бывает, что «программирование» изучается в отрыве от аппаратных средств компьютера, архитектура ПО сдвинута на старшие курсы, а умением читать техзадание и вовсе никто не заморачивается. Есть, конечно, и исключения, например, курс «Промышленное программирование на C++», который на протяжении нескольких лет ведёт в питерском Политехе мой коллега А.В.Мартынов.



В результате на собеседованиях, а то и в написанном участниками студенческих проектов коде я часто замечал воспроизведение примеров «из учебника», когда автор просто не задумывется о возможных ограничениях. Например, в случае C/C++ большинство студентов даже старших курсов не в состоянии внятно объяснить разницу между статической, динамически распределяемой и стековой памятью, а вопросы про взаимосвязь ключевых слов языка со storage duration and linkage просто приводят их в ужас. На собеседованиях я пытался давать на разбор примеры наподобие приведённого ниже (заметим, максимально упрощённого), но сейчас этого уже не делаю. Объяснение того, почему вызов функции f2() заставляет программу вылететь с SEGFAULT’ом, находится для большинства студентов далеко за гранью понимания.

#include <iostream>

using namespace std;

extern void populate(int* data, unsigned long size);

const unsigned long ARRAY_SIZE = 2048 * 2048;

int d1 [ARRAY_SIZE];

long f1()
{
  populate(d1, ARRAY_SIZE);
  long ret = 0;
  for (unsigned long i = 0; i < ARRAY_SIZE; ++i) {
    ret += d1[i];
  }
  return ret;
}

long f2()
{
  int d2 [ARRAY_SIZE];
  populate(d2, ARRAY_SIZE);
  long ret = 0;
  for (unsigned long i = 0; i < ARRAY_SIZE; ++i) {
    ret += d2[i];
  }
  return ret;
}

int main()
{
  cout << f1() << endl;
  cout << f2() << endl;
  return 0;
}

Полагаю, работодателям, студентам и руководству вузов пора признать, что конфликт интересов существует. Сильно упрощая картину, его можно свести к таким утверждениям:

  • Студент хочет прилагая минимум усилий получить диплом и рассматривает это как неизбежный этап на пути к высокооплачиваемой работе.
  • Учебное заведение хочет всеми правдами и неправдами добиться высокого рейтинга, что увеличивает разнообразные фонды, в том числе фонд оплаты труда профессорско-преподавательского состава. И в распространённых методиках расчёта рейтинга, например, такой, показатель «трудоустройство студентов» составляет аж 2% от общей суммы.
  • Работодатель мысленно кричит «да начните вы, наконец, готовить нормальных выпускников, которых не нужно несколько лет доучивать, а то и переучивать, расходуя на это время сотрудников уровня от senior и выше».

И эти проблемы видны даже в ведущих технических вузах, что же тогда говорить о менее «раскрученных»?


Dell Technologies Day в офисе нашего Санкт-Петербургского Центра Разработок

На недавно прошедшем форуме «Найти IT» к стенду Dell Technologies потянулось неожиданно большое количество студентов, рассказывающих примерно такую историю: «Я не набрал запредельных баллов по ЕГЭ, испугался высоких требований вузов к абитуриентам на IT-специальности и поэтому пошёл в заборостроительный институт N. К концу второго курса, внезапно осознал, что строительство заборов – не моё, возьмите меня в программисты». Тем самым, почти дословно воспроизводится сюжет повести Айзека Азимова «Профессия», опубликованной более полувека тому назад. С позиции современного школьника или студента младших курсов, изображенный мир будущего почти идеален: нет необходимости посещать уроки или лекции, делать домашние задания. Просто в определённый день приходишь в центр обучения, за считанные минуты напрямую в мозг записывается информация с носителя (в повести они названы «обучающими лентами»), и можно расслабиться – процесс обучения завершен.

Фрагмент повести «Профессия»
– Не думайте, что это шутка, – сказал Джордж горячо. – Ленты попросту вредны. Они учат слишком многому и слишком легко. Человек, который получает знания с их помощью, не представляет, как можно учиться по-другому. Он способен заниматься только той профессией, которой его зарядили. А если бы, вместо того чтобы пичкать человека лентами, его заставили с самого начала учиться, так сказать вручную, он привык бы учиться самостоятельно и продолжал бы учиться дальше. Разве это не разумно? А когда эта привычка достаточно укрепится, человеку можно будет прививать небольшое количество знаний с помощью лент, чтобы заполнить пробелы или закрепить кое-какие детали. После этого он сможет учиться дальше самостоятельно.
– А мы? – спросил Джордж. – Мы, исключения? Один на десять тысяч?
– Вам ничего нельзя объяснить. В том-то и дело. Ведь в этом заключается последнее испытание. Даже после отсева в День образования девять человек из десяти, попавших сюда, оказываются не совсем подходящими для творчества, и нет такого прибора, который помог бы нам выделить из этой десятки того единственного, кто нам нужен. Десятый должен доказать это сам.
– Каким образом?
– Мы помещаем вас сюда, в приют для слабоумных, и тот, кто не желает смириться с этим, и есть человек, которого мы ищем. Быть может, это жестокий метод, но он себя оправдывает. Нельзя же сказать человеку: «Ты можешь творить. Так давай, твори». Гораздо вернее подождать, пока он сам не скажет: «Я могу творить, и я буду творить, хотите вы этого или нет». Есть около десяти тысяч людей, подобных тебе, Джордж, и от них зависит технический прогресс полутора тысяч миров. Мы не можем позволить себе потерять хотя бы одного из них или тратить усилия на того, кто не вполне отвечает необходимым требованиям.

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

Со своей стороны, компании, заинтересованные в притоке квалифицированных кадров, тоже должны брать на себя ответственность за подготовку студентов. Во второй части статьи я расскажу о нескольких программах поддержки школьников и студентов в построении профессиональной карьеры в IT на примере питерского Центра R&D Dell Technologies.

Как компаниям «ковать» кадры?


Народная мудрость гласит: «Воспитывать ребёнка надо, пока он поперёк лавки лежит». Исходя из этой максимы в Dell Technologies разработана многоступенчатая система взаимодействия с будущими инженерами: от обучения школьников старших классов и до участия инженеров Центра в комиссиях по защите бакалаврских и магистерских работ.

С 2018 года мы дружим с организаторами IT-курсов для школьников Digital Banana. В прошлом году наши инженеры помогали проводить хакатон для школьников, выступали с лекциями и мастер-классами на фестивале «Цифровые джунгли». Ещё одна образовательная программа для школьников старших классов, Student STAR, поддерживается на международном уровне. Пошёл уже восьмой год участия нашего Центра Разработок в этой программе: ежегодно в июне около 30 выпускников 10-го класса физматшкол на неделю погружаются в мир Software Engineering. И если об измеримых результатах сотрудничества с Digital Banana говорить ещё рано, то выпускников Student STAR прошлых лет мы уже видим среди студентов ведущих технических вузов.

Поиск перспективных будущих инженеров продолжается и среди первокурсников. В сотрудничестве с фондом имени Леонарда Эйлера в шести университетах, входящих в партнёрскую сеть Dell Technologies (Политех, СПбГУ, ИТМО, ЛЭТИ, ГУАП, ПГУПС), по результатам первой сессии лучшим студентам выплачивается именная «Стипендия успешного первокурсника». А на втором курсе стипендиаты получат возможность принять участие в программе наставничества. Статья о ней, кстати, была опубликована в этом блоге на Хабре несколько лет назад. Могу только добавить, что на фотографиях последних лет снова можно увидеть те же лица – многие наши mentee успешно закончили университет, стали сотрудниками Dell Technologies, а теперь вернулись в программу наставничества уже в роли менторов, преподавателей и кураторов.


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

Следующий этап – «программа совместных студенческих проектов», которая даёт студентам возможность участвовать в проекте R&D прямо в университете. И вовсе не обязательно всем участникам такого проекта быть студентами того же университета, к ним могут присоединяться и учащиеся других – даже условных «заборостроительных» – университетов. Задачи на совместные проекты уже берутся из нашего реального бэклога, из тех, которые хотелось бы сделать для проекта, но высока вероятность откладывания «на потом» под давлением более приоритетных задач. В совместном проекте роль тимлида выполняет сотрудник университета, а наши инженеры выступают заказчиками. Дополнительные бонусы от участия в совместном студенческом проекте в том, что хорошо показавшие себя студенты в первую очередь будут рассматриваться как кандидаты на позицию интерна, а результаты совместных проектов могут быть использованы в качестве материала для курсовых или дипломных работ.

История совместных проектов с университетами насчитывает немало безусловно успешных кейсов. Например, разработка одной из утилит для СХД Unity начиналась, как совместный проект с ГУАП. Был и курьёзный случай, когда техническое задание по совместному проекту оказалось слишком сложным для студентов третьего курса ИТМО (я пытаюсь спихнуть часть ответственности с себя, как одного из кураторов этого проекта), а вот продержавшиеся до финала участники смогли продемонстрировать умение справляться с трудностями и практически в полном составе стали нашими интернами. Сейчас они уже полновесные инженеры.

Инженеры Dell Technologies, которые присоединились к нашей команде после совместного прохождения студенческого проекта: Анастасия Зиннер, Никита Тюкачев, Владислав Алексеев

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

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

За рамками этой статьи остались многие другие способы взаимодействия со студентами. Например, выступления с лекциями на студенческих форумах или регулярно проводящиеся в нашем офисе «дни технологий», на которые может приходить любой желающий. Учитывая нынешнюю ситуацию на рынке труда, компаниям приходится тратить время и средства на подготовку кадров внутри компании или вне её. Хочется верить, что наши действия не только позволяют подготовить квалифицированных специалистов для себя, но и внести вклад в рост инженеров и развитие индустрии в целом.

Автор материала – Денис Довженко, Software Senior Principal Engineer.