Код
#статьи

C++ в 2k21: где используется, какие перспективы, что надо знать для старта

С++ устарел и его скоро заменит Rust? Как бы не так. Разработчик Антон Соснин рассказал о перспективах «плюсов», языковом комьюнити и своей работе.

OlyaSnow для Skillbox Media

Антон Соснин

эксперт

об авторе

В Twitter — @0xfe0d, программист. Пишет платформу для компьютерного зрения на C++ и CUDA в Arrival. Ведёт Telegram-канал «Айти Тудэй».


Ссылки


Я не выбирал C++. Скорее язык выбрал меня. Сначала его преподавали в школе, потом в университете, а теперь я решаю с его помощью рабочие задачи. Когда-то присматривался к JavaScript и Java и даже что-то писал, но всё равно возвращался к «плюсам».

Мне нравится двигать пиксели с помощью алгоритмов. Поэтому я пишу платформу компьютерного зрения в Arrival, в основном на С++ и CUDA. А до этого делал фоторедактор в компании Movavi.

Где используют C++

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

Главное преимущество С++ — на нём можно создавать программы, которые быстро исполняются. Но только если правильно написать.

На первой работе я писал на C++ и Qt десктопные кросс-платформенные продукты для Windows и Mac. Очевидно, стек выбрали из-за требований к быстродействию. Сейчас модно писать гуй на Electron, но все жалуются, что он ест много памяти и тормозит. А вот Qt тормозит, только если вы его плохо написали.

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

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

Вот где сегодня используют С++:

  • Веб-сервера. Их пишут на С++ чаще всего — например, в том же «Яндексе». Для этого нужно понимать, как работают протоколы и сетевые соединения.
  • Графика и сложные вычисления. Почему бы не С++? Хотя есть Python, программы на котором будут работать так же быстро, если их «правильно готовить», — ведь в конечном итоге это тоже просто вызовы функций.
  • Десктоп. Раньше большую часть десктопных приложений писали на С++, но теперь всё чаще используют Java и C#.
  • Мультимедиа. Приложения для аудио и видео пишут на С или C++. У «плюсов» есть замечательная библиотека FFmpeg для работы с видео — всем приходится её использовать, никуда от неё не денешься.

А ещё, если у тебя есть собственная уникальная железяка, для неё может понадобиться компилятор со своим подмножеством С++. Как правило, «плюсы» на такие проекты выбирают потому, что они соответствуют стандарту и код получается вполне качественным.

Где не стоит использовать C++? Везде, где можно обойтись без него. Но если жизнь не оставляет шансов, пишите на здоровье ;) Кстати, один из минусов языка — скудная стандартная библиотека.

Перспективы С++

Я заметил, что сейчас самый распространённый в коммерческой разработке стандарт — C++17. О 20-й версии обычно только говорят: мол, пора бы уже переходить. Но переходить не спешат. А вот от С++14 постепенно разработчики отходят — сейчас эту версию в основном используют на проектах с большими объёмами legacy.

Иногда в Twitter и блогах встречаю мнение, что не сегодня завтра C++ умрёт — а его заменит, например, Rust. Я в это не верю. Как минимум потому, что есть куча кода, который нельзя переписать на другие языки, а значит, кому-то придётся поддерживать «плюсы». Бизнес уже вложил слишком много денег в язык — выбрасывать его на помойку он не станет.

С другой стороны, у меня есть ощущение, что в далёком будущем С++ ждёт судьба Fortran. Он будет жить, на нём даже будут что-то писать, останутся библиотеки. Но всем этим добром будут пользоваться избранные — узкопрофильные специалисты.

Да, со временем C++ наверняка заменит какой-нибудь молодой и перспективный язык — и пусть это будет Rust. Однако такая замена произойдёт не через пять и даже не через десять лет. Тот же Fortran был довольно популярным десять лет назад, когда я учился в университете. Угасать он начал относительно недавно — всё-таки старичку уже 60 лет, а нашим «плюсам» всего 40. Поэтому работы для программистов, пишущих на C++, на наш век точно хватит.

Комьюнити вокруг C++

У С++ есть сообщество: не такое крупное, как у Python или Java, но живое и растущее. Ежегодно проходит конференция С++ Russia, на которой выступают разработчики и инженеры мирового уровня. Недавно JUG Ru Group (это компания — организатор IT-конференций) взяла её под своё крыло.

Конференция С++ Russia 2019. Фото: группа C++ User Group во «ВКонтакте»

Ребята из С++ Russia часто проводят стримы у себя на канале.

Раньше в Санкт-Петербурге и Москве устраивали митапы по несколько раз в месяц. Сейчас активность утихла, все перетекли в онлайн или молчат. В других городах активность и до пандемии была низкой.

Ещё есть крутой чат в Telegram на русском языке — pro.cxx. Там много людей, и среди них есть те, кто выступает на конференциях. Им можно задать вопрос, но с банальщиной соваться не стоит — для этого есть supapro.cxx. Это не снобизм, просто поток вопросов очень большой, а на уровень Stack Overflow тратить время в основном сообществе не хотят.

С чего начать изучение C++

Я познакомился с С++ ещё в школе: с детства любил математику и компьютеры, поэтому с нетерпением ждал уроков по информатике и программированию. Потом поступил в НГТУ и получил степень бакалавра по прикладной математике и информатике. Направление посоветовал друг — мол, там интереснее, потому что учат не только программированию.

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

Знать один язык и быть востребованным программистом не получится. В коммерческой разработке понадобятся дополнительные навыки.

CMake. Каким бы ужасным ни был CMake, с его помощью всё ещё собирают проекты. Вообще, в С++ много инструментов, которые когда-то собрали на коленке, а они как-то прижились и стали стандартом.

Системы управления пакетами. В С++ из коробки таких нет, в отличие от того же Cargo в Rust. Но есть Conan — правда, он написан на Python и, чтобы с ним работать, придётся столкнуться со «змейкой». Зато c Conan не нужно собирать зависимости вручную или искать подходящие архивы с бинарниками по неизвестным сайтам или репозиториям.

Git. Сегодня это 100% must have. Ещё лет пять назад приходили разработчики, которые видели Git в первый раз, — и уже тогда такое незнание вызывало недоумение. Но сейчас Git уже прочно обосновался в списке обязательных инструментов для коммерческой разработки.

Кадр: клип Hotline Bling / Drake

Основы Computer Science. Для разработчика на «плюсах» опасно не знать в общих чертах, как спроектирован компьютер. Часто приходится работать с памятью напрямую: и чем меньше понимаешь логику центрального процессора, ОЗУ и других железяк, тем больше шансов зафакапить проект. Помимо этого пригодятся структуры данных, алгоритмы и, в зависимости от направления, прикладная математика.

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

Toolkit. Полезно знать особенности IDE, фреймворков и утилит. Например, JavaScript-программисту полезно знать, как устроен V8 или другой движок, разбираться в окружении — тех же Chrome DevTools.

Английский язык. Без него можно жить — я даже знаю программистов, которые просто закидывают документы в переводчик и читают. Когда я учился и только начинал работать, мой английский был на уровне школьной четвёрки. А когда по работе понадобилось более глубокое знание английского, нашёл преподавателя и освоил язык. Жить сразу стало легче — хотя бы потому, что теперь я мог спокойно смотреть главные зарубежные конференции (там очень интересные доклады).

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

Мне нравятся книги Скотта Майерса — например, «Эффективное использование C++» и «Наиболее эффективное использование С++». Ещё советую выступления Николаи Джосаттиса — слушал их с открытым ртом. Уверен, что и книги у него не менее интересные. Ещё есть большая книга по C++ на GitHub, которую пишут несколько авторов, а редактирует Бьёрн Страуструп, — «Как правильно использовать С++».

C++ как первый язык программирования

Кто-то говорит, что нужно начинать кодить с «плюсов», потому что это серьёзный язык, а значит, в будущем вы сможете писать меньше говнокода (но это не точно). А кто-то советует начать с языков попроще — вроде Python.

Я же считаю, что начинать надо с того, что тебе нравится и подходит. Если задачу лучше решить на C++, пиши на «плюсах». Хочешь запрограммировать велосипед (или самокат), горишь этим и знаешь, какие инструменты нужны, — изучай прямо сейчас и программируй. Потом можно пойти дальше: освоить Qt или библиотеки для работы с железом. Или уйти в другой язык — Python, Java, Rust. Правил и проторённых дорожек тут нет.

Я бы сравнил язык программирования с музыкальным инструментом. Если не нравится, как он лежит в руке или звучит, — хорошо не сыграешь. Если устаёшь от указателей и утечек памяти, вряд ли станешь хорошим разработчиком. А бывает, взял Python или JavaScript и сразу всё получилось. Видишь результат и наслаждаешься: ты теперь творец.

А вот насколько трудно изучать С++ как первый язык, я сказать не могу — потому что у меня на старте не было выбора и учить пришлось именно его. Однако высоким порог вхождения в IT через «плюсы» я бы не назвал. Всё стандартно: открыл IDE и пишешь, читаешь файлики.

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

Кадр: фильм «Волшебная страна»

В чём я точно уверен — так это в том, что после C++ легче браться за другие высокоуровневые языки. Недавно, например, по работе я читал код на Rust и довольно быстро разобрался в программе, хотя и удивился некоторым нюансам. Вообще, постоянно изучать другие языки программирования полезно для общего кругозора — чтобы знать альтернативные способы решения разных задач.

No pain, no gain

И напоследок небольшая исповедь. Я не суперпрофессионал в С++. Просто работаю и стараюсь делать аккуратно, но это не значит, что я никогда не стрелял себе в ногу.

Если хотите учить С++, учите и не бойтесь, что будете знать его хуже других программистов. Понимать и помнить все тонкости языка довольно сложно. Это тяжёлая работа, которая требует постоянного напряжения: нужно ходить по собеседованиям, держать в голове большой объём информации и уметь вовремя её вытащить.

Собеседований тоже не нужно бояться. Воспринимайте их как череду походов, на которых понемногу вспоминаете всё о С++ и узнаёте, что нужно подтянуть. Не знаю, как в других языках, но на собеседованиях по С++ можно полтора часа говорить только о языке и ни о чём другом. И если уж в C++ вы разберётесь, то и в остальном проблем не будет. Такая вот мотивационная речь.

Можно окончить университет, но так и не узнать, что такое коммерческая разработка. Поэтому лучше записаться на курс «Профессия Разработчик на С++» в Skillbox и учиться у тимлидов и сеньоров из крупных компаний.


Научитесь: Профессия Разработчик на C++ с нуля Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована