Открываем факультет разработки на С++
С++ считается одним из самых сложных языков программирования. Тем не менее освоить его можно и «с нуля» в качестве первого языка разработки. Как, например, наш преподаватель и декан нового факультета разработки на С++, ведущий специалист в АО «Российские Космические Системы» Иван Овчинников. У него-то мы сегодня и узнаем, так ли страшен С++, и почему, несмотря на свою сложность, он по-прежнему востребован.
Особенности и сферы применения языка программирования C++
— Иван, привет! Расскажи, в чём особенности С++ как языка программирования? Чем он сложнее других языков?
Можно сказать, что С++ — один из самых влиятельных инструментов разработки и прародитель многих других языков программирования. Большая часть современных языков программирования (Python, JavaScript, Java) в итоге исполняется или компилируется в С++. Но быстрее всего будет работать та программа, которую не автоматически сгенерировали, а вручную создали разработчики. Поэтому языки С/С++ отличает огромная скорость исполнения и возможность полного контроля над происходящим.
С++ — это универсальный инструмент, который позволяет подобраться к «железу» ближе, чем любой другой высокоуровневый язык программирования. Конечно, С/С++ устроены нетривиально и многое в них не так просто понять и выучить. К тому же С++ довольно сложно выражает идеи объектно-ориентированного программирования — но это с лихвой окупается контролем над происходящим в программе.
— Поясни, что такое объектно-ориентированное программирование (ООП)?
Его особенность состоит в более комплексном подходе к программированию. В ООП мы рассматриваем каждую составную часть языка не просто как единицу кода, а как модель объекта из реального мира или программную абстракцию.
В ООП больше внимания уделяется архитектуре приложения и разделению ответственности участков кода, а также лучше поддерживается принцип DRY («Don’t Repeat Yourself» — «Не повторяй себя»).
— На какие языки похож С++? С каких языков проще всего переучиться на C++?
Языки, на которые похож С++, уже давно не используются, так что не буду их перечислять. Зато, наоборот, очень многие современные языки похожи на С/С++, потому что либо испытывали его влияние, либо вовсе являются его прямыми наследниками. Так что переучиваться на С++ будет проще, имея в качестве базы Java и Python, а ещё, возможно, Swift — но тут я не могу точно сказать, не так хорошо его знаю.
— В каких отраслях и для каких задач чаще всего используется С++? Каким компаниям нужны специалисты по С++?
С++ нужен в любой отрасли или компании, связанной с созданием аппаратного обеспечения:
- системное программирование;
- робототехника, в том числе медицинская;
- космическая отрасль;
- тяжёлая техника (у меня один знакомый вообще бульдозеры программирует).
А также современные автомобили, станки, кассовые аппараты, терминалы оплаты — всё это напичкано электроникой, которую нужно программировать, причём в большинстве случаев как раз на С/С++.
Где ещё применяется С++? Интернет вещей? Да. Компьютерное зрение? Большие данные? Информационная безопасность? Антивирусы? Игры? Серверные пакеты? Операционные системы? Да, да, еще раз да. Так что, как видите, без работы хороший разработчик С++ в ближайшее время точно не останется.
О карьерных перспективах разработчика С++
— Из чего обычно состоит рабочий день разработчика С++? Каковы его обязанности?
— Как и любой другой программист, разработчик С++ должен решать задачи бизнеса: составлять алгоритмы, детализировать требования заказчика, описывать поведение программ и компонентов, работать с трекерами задач и документировать свой код. Иногда пить чай и общаться с коллегами :)
— Чем отличаются обязанности начинающего и уже опытного специалиста по С++?
— Тут тоже нет разницы по сравнению с другими областями программирования: начинающие, как и везде, делают больше мелочей, которыми неинтересно заниматься опытным программистам. У опытных разработчиков шире масштаб решаемых задач — и больше самостоятельности, поскольку у них уже достаточно опыта и знаний.
— Какие скилы нужны для работы с С++?
— Поскольку язык считается довольно архаичным, такое понятие как soft skills многие работодатели игнорируют. Это не значит, что они не нужны — в конце концов, умение работать в команде и использовать системы контроля версий ещё никому не мешало. Особенно учитывая, что команды, в которых работают разработчики С++, часто бывают весьма специфичными, и в них много тех самых «суровых» технарей.
Но, поскольку у С++ довольно высокий порог входа в профессию, в подготовке к первым собеседования больший упор нужно сделать всё-таки на прокачку хард скилов: понимания ООП, многопоточности, STL, Boost.
— Насколько эксперты в С++ востребованы в России? Достаточно ли на рынке хороших специалистов?
— Специалисты по С++ стремительно «стареют»: первая волна популярности С++ была ещё в 1980-х, а вторая — набирает силу только в последние пару лет. Поэтому отрасль остро нуждается в свежей крови: людях, которые смогут и будут пропагандировать современные подходы к разработке и использование гибких методологий.
— Часто ли специалистов по С++ нанимают по фрилансу?
— Пока что в России это не так распространено — хотя пандемия, безусловно, привела к положительным сдвигам. Но отмечу, что на иностранных фриланс-биржах довольно много заданий на работу с С++. Так что тем, кто хочет работать не в штате (или не только в штате), стоит обратить на них внимание — в этом плане за рубежом технологии шагнули немного дальше, чем в России.
— Каков профессиональный путь выпускника вашего факультета? Сколько времени занимает рост от junior до senior?
— На мой взгляд, если уделять обучению достаточно внимания, то выпускник нашего факультета будет иметь уровень middle-ready. Конечно, без практического опыта коммерческой разработки стать middle-разработчиком после любого, пусть самого лучшего в мире обучения, невозможно. Но по уровню теоретических знаний мы выпускаем middle-ready специалистов, готовых после испытательного срока стремительно стать мидлами. А путь до сеньора всегда разный, тут всё зависит как от организации, так и от личных амбиций каждого конкретного студента.
— Сколько в среднем получают специалисты junior, middle и senior уровня?
— Если смотреть статистику, то в среднем junior-специалисты получают около 60 000 - 80 000 рублей в месяц, middle-специалисты —100 000 — 130 000 рублей, старшие специалисты — около 160 000 - 180 000 рублей. Но на деле разброс довольно большой, потому что много вакансий создаётся государственными организациями — а там зарплаты традиционно невысокие. Но при этом есть и отнюдь не единичны позиции, на которых разработчикам С++ спокойно предлагают 400 000 рублей в месяц, да ещё и с возможностью роста.
О факультете разработки на С++ в GeekUniversity, о программе обучения и о портфолио выпускника
— Скажи, в чём особенность данной программы обучения по сравнению с другими курсами, на которых учат разработке на С++?
Я сам стал программистом довольно поздно — в 29 лет, и до этого никак не был связан с IT-сферой. Поэтому я пристально слежу за тем, чтобы все темы сопровождались обильными и понятными объяснениями, которые помогли мне самому в своё время «с нуля» освоить С++ в качестве первого языка разработки.
Я рассказываю студентам о языке так, как рассказал бы себе начинающему — и требую того же от всех специалистов, которых привлекаю к преподаванию на курсе. Есть такой канал на Reddit — ELIF (Explain like I’m five — «Объясни, как пятилетнему») — вот по такому же принципу мы стараемся доносить до людей сложную информацию, в том числе и про «этот страшный Си».
Также я убеждён, что в процессе изучении языка (а он у хорошего специалиста никогда не заканчивается) важно постоянно практиковаться — поэтому у нас на факультете просто беспрецедентное количество практических проектов. Я считаю, что это гораздо лучше, чем писать один-два проекта в течение года — а после обучения всё равно их никогда не открывать снова.
— Почему в базовую часть обучения входит изучение рабочей станции Linux?
Я считаю, что Linux — краеугольный камень в изучении программирования. Без знания этой ОС вы не сможете создавать кроссплатформенные приложения, потому что не будете понимать, в каком окружении им предстоит работать. 96% устройств в интернете — это UNIX-подобные устройства. Куда без них?
UNIX, который стал родителем Linux и MacOS X, был написан на С. Собственно, С для того и создавали, чтобы написать на нём UNIX. Отсюда и свойства языка — его близость к аппаратному обеспечению. Можно сказать, что история развития современных ОС пересекается с историей языка C. И на примере Linux это хорошо видно.
Даже если вы твёрдо решили программировать исключительно для Windows, знание Linux расширит ваши горизонты — и позволит посмотреть на «дивный новый мир», от которого вы, возможно, напрасно отказываетесь.
— Расскажи, пожалуйста, чуть подробнее о блоках, посвящённых мобильной разработке на С++/QtQUICK и Unreal Engine.
Мы долго думали, что выбрать: компьютерное зрение или мобильную разработку, простенький OpenGL или UnrealEngine. Это было сложное решение, ведь хочется рассказать обо всём и сразу — и всё может оказаться потенциально полезным, интересным.
Мобильная разработка в итоге была выбрана, чтобы показать, что С/С++ не ограничивается только системным программированием, но может использоваться и для такой молодой отрасли, как программирование мобильных устройств.
А UE4 — это не просто «введение в игры», а демонстрация технологии, с помощью которой можно создавать виртуальную и дополненную реальность. Возможно, вы видели в фильмах про западную медицину, как люди тренируются делать операции на виртуальном сердце? Это же невероятно интересное направление — и нам очень хотелось дать нашим студентам возможность попробовать себя в нём.
— В описании программы указано, что она регулярно обновляется и модернизируется. Какие последние изменения в неё вносили?
Я в преподавании придерживаюсь принципа постоянной «работы над ошибками»: так что курс становится лучше буквально после каждого проведённого вебинара. Так, в этом году мы значительно переделали курс основ в сторону более плавного погружения, плюс прямо сейчас я перерабатываю и дописываю курс алгоритмов. Так что сложно сказать, что было в последнем «обновлении» программы — могу сказать только, что работа ведётся постоянно, в направлении от очень хорошего к лучшему.
— Как часто будут проходить занятия? Сколько времени они будут занимать? Предусмотрено ли программой выполнение домашних заданий?
Схема достаточно стандартная для курсов GeekBrains: двухчасовые вебинары два раза в неделю плюс практические задания после каждого занятия. Предполагаем, что выполнение каждого практического задания будет занимать у студента 3-4 часа, но тут всё, конечно, индивидуально.
— В описании курса указано, что на выходе студент получит «9 проектов в портфолио». Какого рода это будут проекты?
Мы постарались предусмотреть максимальную вариативность, подбирая проекты не только из разных областей бизнес-задач, но и из разных направлений программирования. Тут будет и пара простых игрушек, свой файловый менеджер, несколько сетевых утилит, редактор текста, простой менеджер задач, и, естественно, мобильное приложение.
Узнать подробнее о программе курса, преподавателях и условиях обучения, а также оставить заявку вы можете на странице факультета.