C++ и карьера разработчика: интервью с Антоном Полохиным
Ключевые тезисы:
- C++ продолжает активно развиваться, заимствуя лучшие идеи из других языков и наоборот.
- Фундаментальные знания (архитектура ОС, процессоры, базы данных) важнее знания конкретного языка.
- Нейросети — полезный инструмент (дебаггинг, переводы), но не замена программисту, который понимает код.
- Практика и работа над реальными проектами (как в Boost) — ключ к профессиональному росту.
- Компиляторы часто генерируют код лучше человека, но знание ассемблера и низкоуровневых оптимизаций остаётся ценным.
О лекции и аудитории
Антон провёл лекцию в институте о жизни разработчика и технологиях вокруг C++. Он отметил высокий уровень вовлечённости студентов (около 80%) по сравнению с его собственным опытом обучения.
Работа в комитете по стандартизации C++
Антон представляет Россию в комитете. Его работа включает:
- Внесение предложений (пропозлов) в стандарт (например,
std::stacktrace, контекстные алгоритмы и итераторы для C++26). - Просвещение сообщества о новинках C++.
- Помощь разработчикам в донесении их идей до комитета.
- Отмечает, что поток улучшений для C++ снижается, так как язык становится всё более зрелым и устраивающим многих.
Нейросети в разработке: опыт и границы
- Сильные стороны ИИ: отличный инструмент для перевода документации и поиска багов (например, анализ стека вызовов).
- Слабые стороны для написания кода: непонимание задачи, генерация лишнего, неиспользуемого кода. Требует долгого и объёмного описания задачи на естественном языке.
- Ключевой вывод: нейросеть не несёт ответственности за код. Ответственность лежит на программисте. Важно понимать, что делает код.
- Blameless policy (политика безупречности): в инцидентах винят не человека, а систему, которая позволила ошибке дойти до прода. Решение — автоматические тесты и проверки, а не регламенты.
C++ vs C: сравнение и эволюция
- C: ограниченный язык (функции, структуры), требует большой внимательности к управлению ресурсами.
- C++: добавляет классы, перегрузку операторов, RAII, исключения, корутины, рефлексию. RAII — ключевое преимущество, автоматизирующее управление ресурсами через деструкторы.
- Перекрёстное опыление: языки заимствуют друг у друга удачные решения (например,
constexprиз C++ в C,inplace_vectorв C++ из Rust, designated инициализаторы из C в C++). - Мнение Линуса Торвальдса: его критика C++ (исключения, динамическая аллокация) не помешала включению Rust в ядро Linux, где эти "грехи" также присутствуют.
Любимые нововведения в C++
std::stacktrace(C++23) — долгожданная фича, которая была во многих языках.- Рефлексия (C++26) — compile-time рефлексия, уникальная для C++.
- Антон уже использует рефлексию C++26 в библиотеке Boost.PFR, что сделало код короче и, вероятно, ускорило компиляцию.
Библиотека Boost: полигон для стандарта
- Назначение: испытательный полигон для прототипов будущих стандартных решений C++.
- Примеры успеха:
optional,variant,shared_ptr,stacktraceперешли из Boost в стандарт. - Путь Антона в Boost: начал с изучения и улучшения
lexical_cast, затем стал мейнтейнером нескольких библиотек (Boost.TypeIndex,Boost.PFR,Boost.Stacktrace). - Принцип работы: "Повторяешь, пока не станет хорошо". Создание библиотеки — сложный, но эффективный способ глубоко изучить новую область.
Становление программиста и важность практики
- Мотивация: случайное событие в детстве (возможность вставить своё лицо в игру) подтолкнуло к программированию.
- Вызов: сложные и плохие учебники по Бейсику и C++ стали стимулом разобраться.
- Роль вуза: формирует алгоритмическое мышление, но больший скачок в знаниях дают первые месяцы реальной работы.
- Критически важна практика: Антон одобряет раннюю практику в институтах (как в Айсприн) и ведёт студентов, решающих реальные продовые задачи в Яндексе.
Ключевые дисциплины для будущего разработчика
Чтобы не быть заменённым нейросетью, нужно понимать, что и как делает машина:
- Архитектура ОС и процессоров (конвейеры, кэши).
- Базы данных (как работают, почему тупят запросы).
- Фундаментальные инструменты: системы контроля версий (Git), форматы данных (JSON, Protobuf), сетевое взаимодействие.
- Ассемблер (хотя бы для понимания, во что компилируется код). Полезный ресурс — Compiler Explorer (godbolt.org).
- Вспомогательные языки: Bash, Python для скриптов и автоматизации.
- C++ как язык для ниш, где он незаменим (высоконагруженные системы, железо).
Ассемблер и оптимизации: человек vs компилятор
- Современные компиляторы часто генерируют более оптимальный код, чем человек вручную (пример с инструкцией
BTдля проверки гласных). - Однако в высокопроизводительных проектах (например, FFmpeg) ручной ассемблерный код ещё даёт значительный прирост.
- Лучшая практика: если вы нашли, как оптимизировать кейс лучше компилятора — репортите это в баг-трекер компилятора, чтобы улучшить его для всех.
- Книга "Hacker's Delight" — рекомендованное чтение для понимания низкоуровневых оптимизаций.
Выводы:
Карьера разработчика строится на глубоком понимании основ, готовности брать сложные вызовы (как работа с Boost) и постоянном обучении. C++ остаётся живым языком благодаря сообществу и кросс-поллияции идей. Нейросети — помощники, но не конкуренты для думающего программиста.