Язык языков! Такой "скромный" титул носит гроза всех первокурсников ХНУРЭ - великий и могучий С++. Лишь немногие, пробираясь сквозь дремучий лес указателей и глубины STL, задержаться, чтобы однажды решить для себя, что их дорога в IT лежит именно через плюсы. В этой статье мы с вами побеседуем со студентом нашего университета, чтобы узнать, каково это - стать C++ Software Developer.
- РАССКАЖИ НЕМНОГО О СЕБЕ. ЧЕМ ЗАНИМАЕШЬСЯ И КОГДА ПРИШЕЛ В ПРОФЕССИОНАЛЬНУЮ РАЗРАБОТКУ?
- Профессионально разработкой я начал заниматься на 3 курсе. До этого было участие в олимпиадах, и, конечно, написание лаб. Сейчас же я разработчик на языках С/C++ и создаю ПО для embedded систем.
- КАКИМ БЫЛ ТВОЙ ПУТЬ ИЗУЧЕНИЯ ПЛЮСОВ? ЧТО ЧИТАЛ, ЧТО ПРОХОДИЛ?
- Для начала расскажу, что по С++ читал я и насколько это было полезно.
1) Началось всё с книги «САМОУЧИТЕЛЬ С++ С ПРИМЕРАМИ И ЗАДАЧАМИ». Изначально она зацепила тем, что в отличие от остальных книг с 1100+ страницами, в ней было всего 400+. Оказалось, что неспроста. Книга дала СУПЕР поверхностную информацию. Поэтому первый мой совет тем, кто собирается серьёзно изучать плюсы –« Не надо идти на поводу у лени». С плюсами не схитришь. Надо читать все 1100+ страниц.
2) После этого я начал читать книгу БЬЕРНА СТРАУСТРУПА – «ПРОГРАММИРОВАНИЕ. ПРИНЦИПЫ И ПРАКТИКА ИСПОЛЬЗОВАНИЯ C++». Честно говоря, на 2 курсе я оказался для нее слишком глупым, как бы странно это не звучало. С неё лучше точно не начинать, но стоит вернуться, когда будешь уже с плюсами «на ты». Лучше, наверное, вместо этого стартовать с «Базового курса С++».
3) Дальше была книга, которую я могу назвать прямо ОФИГЕННОЙ – «ЯЗЫК ПРОГРАММИРОВАНИЯ СИ» ДЕННИСА РИТЧИ. У некоторых тут может возникнуть резонный вопрос: а при чем тут Си, если мы хотим выучить С++? Поясняю: многие разработчики С++ активно используют фичи языка Си, так что даже если вы уже дали себе установку, что вы трушный плюсист, Си - всё равно мастхэв!
4) Есть ещё две книги, которые не так сильно относятся к плюсам, но прочитать их нужно точно, чтобы в коде не творился АД! «КОМПЬЮТЕРНЫЕ СИСТЕМЫ АРХИТЕКТУРА И ПРОГРАММИРОВАНИЕ» и GOF (Примеры объектно-ориентированного проектирования. Паттерны проектирования). Она, кстати, есть в библиотеке ХНУРЭ, так что будет очень приятно почитать печатный вариант.
- А ЧТО НАСЧЕТ КУРСОВ? ЕСТЬ ЛИ ТОЛК ПРОХОДИТЬ ИХ ИЛИ СТОИТ ВКЛАДЫВАТЬ ВРЕМЯ ТОЛЬКО В КНИГИ?
- Оооо, есть один действительно ТОПОВЫЙ курс по плюсам, сертификат от которого не стыдно потом указать на LinkedIn.
HTTPS://STEPIK.ORG/COURSE/7
HTTPS://STEPIK.ORG/COURSE/3206
У курса 2 части, и вот во второй как раз рассказывают как плюсы работают под капотом, а это супер важно. Так что однозначно рекомендую. И не забудьте параллельно на CODEWARS наведываться хотя бы пару раз в день.
- КАКИЕ БАРЬЕРЫ МОГУТ ВОЗНИКНУТЬ ПРИ ИЗУЧЕНИИ ПЛЮСОВ? ЧТО КОНКРЕТНО МЕШАЛО ТЕБЕ?
- Для меня серьёзным барьером был GUI. Думаю, так у многих начинающих плюсистов. Мне он казался каким-то страшным зверем. Но на самом деле, тут всё намного проще, чем кажется. Важно просто понять, что тебе всё даёт твоя ОС, ничего самому пилить не надо. Просто берёшь и вызываешь функции, а если ещё проще - используешь, например, фреймворк QT.
Ещё проблема была: вот вроде знаешь ЯП, а что бы такого написать - не знаешь. Как оказалось, такая проблема очень распространена. Что с этим делать? Изучать предметную область. Простой пример: если хочешь написать компилятор, то и читай книги про разработку компиляторов, а не дальше углубляйся в устройство языка в надежде, что чудом обретешь знание создания компиляторов.
- КАК ПРОХОДЯТ СОБЕСЕДОВАНИЯ У ПЛЮСИСТОВ? В ЧЕМ ОСОБЕННОСТИ? ЕСТЬ ЛИ ТЕМЫ, НА КОТОРЫХ ВАЛЯТ?
Помню, одно собеседование у меня было чисто по КНИГЕ «СОВРЕМЕННЫЙ ЭФФЕКТИВНЫЙ С++» ОТ МЕЙЕРСА.
Интересным было собеседование в GameLoft. Сначала был тест с открытыми вопросами по разным тонкостям: работа с темплейтами, работа с памятью, утечка памяти и т.д. Ещё было несколько задачек, две из них помню до сих пор: перевести RGB цвет заданный в 32 битах в 16 бит, и оптимально вычислить пересекаются ли два квадрата, которые заданы точками.
В последней компании, куда я и прошёл, спрашивали про классы STL и как они работают. Помню, про fstream спросили и его связи с iostream. Также были вопросы про виртуальное наследование, виртуальную таблицу, виртуальные функции и что виртуальным быть не может. Т.к. устраивался я на embedded, то был тест, где был дан код, который оперирует битами, и надо было расписать что и как делается в нём. К счастью, на одном из предметов в университете я как раз неплохо научился с такими задачами справляться.
Не знаю, как насчет тем, на которых прям конкретно валят, но очень проблемный вопрос про undefined behavior, так что стоит быть готовым.
Лишь немногие, пробираясь сквозь дремучий лес указателей и глубины STL, задерживаются, чтобы однажды решить для себя, что их дорога в IT лежит именно через плюсы.
На этом стоит поблагодарить нашего собеседника за ценные советы и историю своего становления плюсистом. Надеемся, что эта статья поможет и вам, студентам ХНУРЭ, подготовиться к своему собственному пути к C++ Software Developer, и начать его, как нельзя более успешно!
Карина Темчур