Как вырастить из студента инженера-программиста?

    Привет! Меня зовут Денис Довженко, и я уже несколько лет провожу технические собеседования с кандидатами на позиции инженера-программиста 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.
    Dell Technologies
    Компания

    Комментарии 25

      +1
      Звучит здраво, вы молодцы, что поддерживаете студентов, так держать!
        +1
        Спасибо, что поддерживаете студентов не только морально, но и материально :)
          +2
          Со студентами НАДО заниматься. Хорошо, когда компания берет себе junior и развивает.
            +1
            Объяснение того, почему вызов функции f2() заставляет программу вылететь с SEGFAULT’ом, находится для большинства студентов далеко за гранью понимания.

            Я лет двадцать на плюсах пишу, но тоже не вижу, как программа может вылететь с SEGFAULT при вызове f2().

            UPD: А, все, увидел. Но так-то это от системы зависит, и вполне может не стрельнуть. 16 Мб на стеке вполне можно отводить, скажем, в линуксе — главное правильно rlimit настроить.
              0
              Вот я тоже долго думал в чем подвох.

              Может быть потому что у самого уже давно привычка объявлять локальные переменные большого размера типа d2 как static.

              Ну а вообще-то размер стека настравивается опциями линкера
                0
                *Если у вас хардварь, а если нет? stackoverflow.com/questions/2279052/increase-stack-size-in-linux-with-setrlimit
                  0
                  Если нет, то нет :-)

                  Ну трудно от студента требовать чтобы он на уровне подсознания в голове держал столько разных разностей. Понятно, что с опытом некоторые вещи становятся очевидными, но не сходу.
                    +1
                    Я студент, ценник за знания такого рода будет трезначным. Но могу не заморачиваться, вам как?
                    Уже эти разводки по раз 5 слышал. Реальность такова, что вопервых студентов рассматривают как дешевую раб силу. Второе никто не заинтересован изначально в студентах, ВУЗ не учит и не научит тому, что требуется для работы. Слышу вечно вздохи аххх, нету норм кадров — бред полный, у меня знакомый 16 лет имеет почти теже знания, что и я, разве что опыта меньше.
                    Парадокс в том, что если бы никто не ждал такие знания, их бы никто не спрашивал
                      0
                      Честно говоря, для меня все зависит от человека. Вот не так двано. Два новых разработчика. Один… Ну полный ноль. Только после института, да еще и не профильный (т.е. техническое, но не информатика). Второй доучивается, но вроде как какой-то опыт разработки имеет.

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

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

                      А со вторым… Все еще вопросы. Есть какая-то лихость — быстро слабать и скинуть. В результате сплошные возвраты на доработку. Все еще нужно кодревью делать и опекать.

                      Так что все от человека… Я скорее буду просто разговаривать, без замороченых тестов. Мне лично это больше даст чем формальное тестирование. Ибо завалить можно практически любого — ну вот скажите мне, чем опасна группа активации *CALLER в программе, создающей временную таблицу в QTEMP :-)
                      И тонкости поведения локальных, глобальных, статических переменных и файловых дескрипторов с разных типа групп активации (*NEW, *CALLER, именованых).
                      Это вопросы, которые для меня актуальны. Ибо там есть неочевидные тонкости, которые могут приводить к падению программы. А для большинства тут это просто набор слов.

                      Так что еще раз — нормальный человек с правильным устройством мозгов. Остальное на месте впитает. Было бы куда.
                        0
                        Не уловили смысл моего посыла. О чем статья? Если прочитать начало то там на самом деле просто смешной набор слов. Всем давно понятно, что апелировать к ВУЗам бессмысленно, жаловаться — бессмысленно. У ВУЗа стоит цель набрать, обучить, выпустить. Тут нет качественно и трудоустройство. Смысла говорить дальше и рассуждать, а нужны ли вузы в принципе как форма образования нет. Особого внимания разве что заслуживает кусок про джуниора которому чего то там не хватило. Особого внимания заслуживает перл про «Например, в случае C/C++ большинство студентов даже старших курсов не в состоянии внятно объяснить разницу между статической, динамически распределяемой и стековой памятью», потому как стандарт такого не определяет бугагащечки а оперирует такими понятиями как storage duration, memory model (ну я могу быть не прав год не кодил на крестах в голове пепел, но крайне уверен что так, потому как с++ старается быть платформонезависмым), особого внимания заслуживает то что указанны языки через дифис. Потом дан кусок кода стиль которого далек от каноническного современного с++ и любого гайдлайна. Далее идет туфта про то какие Dell хорошие, хотя сами они признают, что вынужденны этим заниматься так как кадров не хватает. Еще удовольствие вызывает часть описание стажировки, так и не понял каким образом это происходит и говорим ли мы о тк рф или о Письме Госкомвуза РФ №18-34-44ин/18-10. Но интерес то в чем, в том что нет гарантии, есть только «мы видим на собеседовании». Проще говоря, статья кривой пиар который видно даже сеньор не видел, могли бы и проверить че вообше постят, а в конце отберут как правило как раз тех кто ответил на вопросы, ответы на которые конечно никто не ждет.
                        P.S. Сеньор дела если это написал наверное краснеит сидит, хотел завалить завалили его)
                          0
                          Ну если в этом смысле… То да. Согласен.
                            +1
                            стандарт такого не определяет бугагащечки а оперирует такими понятиями как storage duration, memory model

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

                            особого внимания заслуживает то что указанны языки через дифис.

                            В этом отрывке прекрасно все. Особенно умилил «дифис». :)

                            Потом дан кусок кода стиль которого далек от каноническного современного с++ и любого гайдлайна.

                            Цель примера — не в том, чтобы поразить кандидата красотой стиля. И вообще, неизвестно еще, на какой проект берут кандидата. Может, там суровое легаси и кровавый энтерпрайз.

                            P.S. Сеньор дела если это написал наверное краснеит сидит, хотел завалить завалили его)

                            Думаю, он неприкрыто ржет, читая ваши разоблачения. :)
                              0
                              А что вы понимаете под типами памяти? Или вы считаете точность и педатичность плохим качеством?
                              Ошибка, конечно слэш.
                              Тогда в чем смысл? Выше вы указали, что проверяется не как хорошо кандидат зазубрил стандарт, но поведение языка с++ описывается стандартом. Я плохо понимаю.
                              Относиться с юмором хорошо, но мне было бы стыдно, напиши я о плохой подготовки студентов и допусти сам ошибки как в терминологии, так и в сути поставленных вопросов. Будь это мой личный блог или чат, я бы наверное пережил, но все же от лица компании, мне было бы стыдно, ведь я представляю не лично себя.
                                0
                                А что вы понимаете под типами памяти? Или вы считаете точность и педатичность плохим качеством?

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

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

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

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

                                Статья не обучающая — посему тут вполне допустимы расхожие термины.
                  0
                  Всегда можно придумать как сделать sigfault. А давайте заалоцируем функцию на странице с специальными правами и спросим студента почему… Не слишком легко, давайте мучить его свиньей и лукапами… не слишком легко давайте мучить его линковкой… не слишком легко, может помучаем его барьерами памяти. Всегда можно найти то что ты не знаешь или забыл да еше в таком языке как с++. Я бы назло любое ожидаемое поведение экзаменуемого перевел в неожидаемое поведение, а потом бы спрашивал — а как так?
                  «почему вызов функции f2() заставляет программу вылететь» — еше и так отвратительно сформулировали вопрос, вопервых не вызов, а исполнение, во вторых не вылететь, а аварийно завешиться, ну или получить сигнал. Так что любой ответ, что при вызове функции не произойдет аварийного завершения верен. Кстати отличная идея, так бы я и ответил, а потом бы наблюдал как экзаминатор бесится и говорит что я не прав
                    +2
                    А еше поправка это platform specific поведение.
                      +4
                      Кстати отличная идея, так бы я и ответил, а потом бы наблюдал как экзаминатор бесится и говорит что я не прав

                      Как бы вам объяснить-то…
                      Собеседование — это не экзамен, хотя и выглядит похоже. Задача собеседующего — понять, насколько студент совместим с будущей работой. Знания здесь, конечно, важны, но есть вещи и поважнее. Например, совместимость с коллективом, понимание принципов работы инструментов (в т.ч. компьютера, компилятора и проч). Плюс — желание разбираться в этом дальше. Плюс — умение понять, чего от студента, собственно, хотят.

                      В данном конкретном случае вы бы своим ответом продемонстрировали немотивированную агрессию и нежелание сотрудничать. На месте собеседующего я бы пожал плечами и вежливо закончил беседу.
                        0
                        «Все, что было в Вегасе, останется в Вегасе! Кроме герпеса его привозят с собой.»
                        Собеседование это конечно прежде всего обоюдный процесс, но если ты осмелился показать детали обшественности, причем твои вопросы содержат ошибки или знания не полные, и ты начинаешь вздыхать. эххх, кандидаты ничего не могут/не знают будь готов понести отвественность.
                        Это раз.
                        Второе, я как собеседуемый не могу быть уверен, совершил ли экзаменатор не точность в вопросе или это ловушка.
                        Третье, я не люблю ребячества и игры в самых умных. У меня сложилось пока что плохое впечатление о компании dell, каюсь импульсивен, но будь это собеседование в котором я бы почувствовал такое отношение сверху вниз, поступил бы так же.
                        0
                        Пример и описание были намеренно упрощены для кандидатов, почти не имеющих практического опыта. Но построены на основе реальной ситуации, когда программа аварийно завершилась с SIGSEGV (причём в условиях, когда получение core dump было затруднено). И интересно было посмотреть, как кандидат подойдёт к анализу, сможет ли увидеть, что массивы d1 и d2 размещены в областях памяти, обладающих различными свойствами. Это понимание, в отличие от барьеров памяти, должно быть заложено в самом начале изучения курса. Да, поведение специфично для платформы, но именно разработка на С++ под Linux и была указана в описании позиции.
                          0
                          Вы передергиваете. Упрощение примера, не является оправданием для введения кандидата в заблуждение вопрос поставлен «почему вызов функции f2() заставляет программу вылететь», но вызов функции не завтавляет программу вылететь, с++ не терпит условностей. Заставляет «вылететь» исполнение. Или задавайте более обший вопрос — есть ли в этом коде ошибки? Почему так происходит? Или уже задавайте верный вопрос. Вы искажаете стандарт. Отсутсвие опыта у кандидата не повод использовать волности, все допускают ошибки, надо признать и исправить.
                          0
                          Так что любой ответ, что при вызове функции не произойдет аварийного завершения верен.
                          Достаточно чуть-чуть перефразировать вопрос, например «При вызове функции f2() на нашей машине, программа завершается с SEGFAULT. Почему?»
                          и после этого буквоедство из разряда «при вызове не произойдет аварийного завершения» уже не прокатит :)
                            0
                            Да, но вопрос так не поставлен.
                        +1
                        Мое уважение таким проектам!
                          0
                          Добрый день! В статье, как говорится, «много буков», но в между строк читается тривиальная цепочка рассуждений.

                          1.Выпускники ИТ-факультетов современных ВУЗов не обладают навыками и знаниями для оптимизации программ под возможности «железа», на котором ПО будет работать.
                          2. Платить специалистам с соотвествующим опытом работы нужно хорошие деньги и сами специалисты часто в дефиците.
                          3. Что делать? Все просто. Давайте будем «хантить» талантливых студентов на младших курсах, с помощью фактически бесплатного участия в побочных проектах формировать у них узкую специализацию под наши нужды, попутно вкладывать в голову, что они «избранные», а компания, куда их отобрали для стажировки — «компания их мечты».
                          4. Тем самым убиваем двух зайцев. Во-первых, выращиваем под себя молодых специалистов, не принимая их в штат, и не тратя фонд з/п. Во-вторых, «столбим» их под себя, обучая подходам и требованиям, принятым именно в нашей компании, чтобы тяжелее было соскочить к конкуренту.

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

                          Уважаемые рекрутёры и менторы! Было бы странно, если бы ВУЗы в РФ готовили молодых специалистов именно под Ваши потребности. На Западе крупные компании для этого учреждают свои университеты, которые щедро финансируют.
                          Да, отечественная система образования страдает слабой проектноориентированностью, но корни этой проблемы в традициях еще советского подхода, основанного на глубокой базовой подготовке специалистов, в противовес рапространенной на Западе образовательной концепции выращивания узких спецов.
                            0
                            Ну вот у нас есть программы стажировок. Студентов старших курсов берут стажерами на 20 часов в неделю на полгода. На полставки.

                            Потом, если возникает взаимный интерес, человека приглашают в штат уже готовым специалистом.

                            Но у нас специфика — разработчиков, знающих RPG и AS/400 в России крайне мало. Так что в любом случае приходится готовить. Так что любой при приеме на работу первые три месяца проходит обучение — сначала тестовые задачи, потом несложные боевые (или околобоевые — допустим кому-то надо что-то вспомогательное сделать — дают).

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

                          Самое читаемое