Короткий ответ
- Если ваша цель — действительно «низкоуровневое» программирование (системное ПО, драйверы, встраиваемые системы, высокопроизводительные компоненты) — выбирайте C++.
- Если цель — как можно быстрее получить джуниор‑работу в индустрии (серверы, облачная инфраструктура, DevOps, сети), или вам нравится простота, быстрая итерация и параллельность на уровне языка — выбирайте Go.
Можно и комбинировать: сделать C/C++ вашей базой (вы уже начали), а Go изучить как «быструю» опцию для трудоустройства — это разумный путь.
Почему так
- C++
- Плюсы: очень близок к железу, контроль памяти, максимальная производительность, огромная экосистема для системного ПО, игр, финансового ПО, embedded; изучение C++ даёт глубокие знания по устройству компьютера, которые легко переносятся на другие языки.
- Минусы: крутая кривая обучения, много тонкостей (UB, управление памятью, шаблоны, современный стандарт), собеседования часто глубже по «фундаменту».
- Трудоустройство: есть вакансии и стажировки, но чтобы конкурировать, нужно сильное портфолио/интерн/практика.
- Go
- Плюсы: прост в изучении, быстрый рост продуктивности, встроенная поддержка конкурентности (goroutine, channels), хорош для сервисной разработки и инфраструктуры, большой спрос в стартапах и на cloud-инструментах.
- Минусы: не «низкоуровневый» в классическом смысле (нет ручного управления памятью), меньшая пригодность для embedded/реального времени/нужд с очень тонкой оптимизацией.
- Трудоустройство: можно быстрее получить первые интервью и офферы при целенаправленной прокачке навыков.
Как выбрать (практическое правило)
- Хочешь работать с ядром ОС, драйверами, low‑latency trading, game engine, embedded — C++.
- Хочешь работать в backend, облачной инфраструктуре, SRE, контейнерах, сетях — Go (или Go + немного C++).
- Если не уверен и у тебя есть время в магистратуре — начни с C++ (формирует прочную базу) и параллельно выучи Go как «быструю» и практичную технологию.
Реалистичный план действий (на год)
Вариант A — основной C++ + Go как доп:
1. 0–3 месяца: укрепить C и основы C++
- Синтаксис, указатели, память, структуры данных, ООП, RAII, std::vector/string.
- Практика: небольшие программы, разбирайтесь с gdb, valgrind.
2. 3–9 месяцев: современный C++
- Шаблоны, move semantics, smart pointers, STL, concurrency, CMake.
- Проект: небольшой сетевой сервис на C++ или часть проекта с требованием производительности.
- Параллельно: выучить Go за 1–2 месяца (курс/книга + 2–3 маленьких проекта).
3. 9–12+ месяцев: стажировка/портфолио/собеседования
- Готовься к интервью: алгоритмы/DS (LeetCode), C++‑вопросы по памяти, оптимизации.
- Подать на стажировки в компании, где есть интерес к низкоуровневому ПО.
Вариант B — быстрый путь к работе (Go в приоритете):
1. 0–2 месяца: основы Go (tour, Go by Example).
2. 2–5 месяцев: практические проекты (HTTP-сервисы, CLI‑утилиты, concurrent tasks).
3. 5–8 месяцев: готовиться к интервью (алгоритмы + системный дизайн для backend).
4. Параллельно изучайте C++ фундамент в университетских курсах — это даст вам «тяжёлую» базу.
Конкретные навыки и инструменты, которые понадобятся
- Для C++: современный стандарт (C++11/14/17/20), STL, smart pointers, move semantics, UB, отладка (gdb), профилирование, valgrind/ASan, CMake.
- Для Go: go modules, goroutines, channels, net/http, context, тестирование, деплой контейнеров (Docker), знакомство с Kubernetes — плюс умение писать REST/GRPC‑сервисы.
- Обоим: git, Linux, TCP/IP основы, основы алгоритмов и структур данных.
Ресурсы (кратко)
- C++: "A Tour of C++" (Stroustrup) — обзор; "C++ Primer" — подробный; "Effective Modern C++" — практики; онлайн‑курсы, e‑olymp/LeetCode для практики.
- Go: The Go Programming Language (Donovan & Kernighan); A Tour of Go; Go by Example; Gophercises; практические проекты и статьи по concurrency.
Как решать, если всё ещё сомневаетесь
- Представьте 2–3 конкретных вакансии, которые вам нравятся. Какие требования? Если в большинстве явно C++ — начните с C++. Если большинство — Go/backend — начните с Go.
- Подумайте, в каком типе задач вам интереснее проводить 8 часов в день: «разбираться с управлением памятью, оптимизировать подсистемы» (C++) или «быстро строить устойчивые сетевые сервисы, работать с облаком» (Go).
Итог
Поскольку вы уже начали с C и C++ и хотите низкоуровневое программирование, логично делать C++ основным направлением — это даст глубокую базу и не закроет путь к Go в будущем. Но если приоритет — как можно быстрее получить первую работу в индустрии — стоит добавить Go и целенаправленно готовиться к backend/infra‑вакансиям параллельно с учебой.
Если хотите, могу:
- Составить персональный учебный план на 6 месяцев под ваши занятия в магистратуре.
- Посоветовать стартовые проекты и упражнения для портфолио (для C++ или Go).