0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p><strong>Вместе с ассистентом кафедры фундаментальной и прикладной математики ФКИ МГУ Софьей Сазоновой рассказываем, стоит ли учить С++, правда ли он такой сложный и сколько зарабатывают C++ разработчики.</strong></p>
1
<p><strong>Вместе с ассистентом кафедры фундаментальной и прикладной математики ФКИ МГУ Софьей Сазоновой рассказываем, стоит ли учить С++, правда ли он такой сложный и сколько зарабатывают C++ разработчики.</strong></p>
2
<h2>Содержание</h2>
2
<h2>Содержание</h2>
3
<ul><li><a>C++: что делает, как он появился и какие у него преимущества</a></li>
3
<ul><li><a>C++: что делает, как он появился и какие у него преимущества</a></li>
4
<li><a>Что пишут на С++</a></li>
4
<li><a>Что пишут на С++</a></li>
5
<li><a>Что нужно знать разработчику на C++</a></li>
5
<li><a>Что нужно знать разработчику на C++</a></li>
6
<li><a>Подходит ли C++ для начинающих</a></li>
6
<li><a>Подходит ли C++ для начинающих</a></li>
7
<li><a>Можно ли стартовать сразу с С++, не изучая С</a></li>
7
<li><a>Можно ли стартовать сразу с С++, не изучая С</a></li>
8
<li><a>Что популярнее: С или С++</a></li>
8
<li><a>Что популярнее: С или С++</a></li>
9
<li><a>Сколько зарабатывает разработчик С++</a></li>
9
<li><a>Сколько зарабатывает разработчик С++</a></li>
10
<li><a>Как и с чего стартовать в С++: книги и ресурсы</a></li>
10
<li><a>Как и с чего стартовать в С++: книги и ресурсы</a></li>
11
</ul><h2>C++: что делает, как он появился и какие у него преимущества</h2>
11
</ul><h2>C++: что делает, как он появился и какие у него преимущества</h2>
12
<p>В 1980-х годах датский программист Бьерн Страуструп моделировал распределение вызовов между телефонными станциями. Работал он на С, похожем на машинный код в виде инструкций из двоичного кода.</p>
12
<p>В 1980-х годах датский программист Бьерн Страуструп моделировал распределение вызовов между телефонными станциями. Работал он на С, похожем на машинный код в виде инструкций из двоичного кода.</p>
13
<p>Во многом С не устраивал Страуструпа: был слишком медленным и не поддерживал объектно-ориентированное программирование - то есть не мог представить программу как набор объектов, не был понятным и наглядным.</p>
13
<p>Во многом С не устраивал Страуструпа: был слишком медленным и не поддерживал объектно-ориентированное программирование - то есть не мог представить программу как набор объектов, не был понятным и наглядным.</p>
14
<p>Тогда Страуструп решил усовершенствовать С, скрестив его с другим ретро-языком Simula. В C++ появились классы, строгая проверка типов, inline-функции и другие элементы, которые упрощают и ускоряют процесс кодинга.</p>
14
<p>Тогда Страуструп решил усовершенствовать С, скрестив его с другим ретро-языком Simula. В C++ появились классы, строгая проверка типов, inline-функции и другие элементы, которые упрощают и ускоряют процесс кодинга.</p>
15
<p>Сначала усовершенствования воспринимались просто как надстройка над базовым языком. Но очень быстро "С с классами" стал надежным рабочим инструментом для миллионов разработчиков.</p>
15
<p>Сначала усовершенствования воспринимались просто как надстройка над базовым языком. Но очень быстро "С с классами" стал надежным рабочим инструментом для миллионов разработчиков.</p>
16
<blockquote><p>"С++ (C plus plus) можно назвать более высокоуровневым, чем С: в отличие от последнего, он оперирует абстракциями.</p>
16
<blockquote><p>"С++ (C plus plus) можно назвать более высокоуровневым, чем С: в отличие от последнего, он оперирует абстракциями.</p>
17
<p>У С++ есть несколько важных преимуществ:</p>
17
<p>У С++ есть несколько важных преимуществ:</p>
18
<ul><li>Скорость. С++ обрабатывает данные быстрее большинства высокоуровневых языков.</li>
18
<ul><li>Скорость. С++ обрабатывает данные быстрее большинства высокоуровневых языков.</li>
19
<li>Кроссплатформенность. В отличие от многих других, в том числе от еще более высокоуровневого С#, С++ не зависит от платформы: разработку можно легко перенести с одной операционной системы на другую.</li>
19
<li>Кроссплатформенность. В отличие от многих других, в том числе от еще более высокоуровневого С#, С++ не зависит от платформы: разработку можно легко перенести с одной операционной системы на другую.</li>
20
<li>Универсальность. С++ поддерживает множество стилей программирования, например, процедурное программирование, объектно-ориентированное программирование. Также С++ предоставляет абстракцию данных. Благодаря этому его можно использовать для решения практически любых задач".</li>
20
<li>Универсальность. С++ поддерживает множество стилей программирования, например, процедурное программирование, объектно-ориентированное программирование. Также С++ предоставляет абстракцию данных. Благодаря этому его можно использовать для решения практически любых задач".</li>
21
</ul><p>Скорость, универсальность и кроссплатформенность делают С++ чем-то вроде универсального оружия. Бьерн Страуструп называет его "незримой основой всего". Где используют С с плюсами? В тех частях системы, которые не видны пользователям, но являются основой работы всего сервиса, например, в игровых или поисковых движках и системах управления базами данных.</p>
21
</ul><p>Скорость, универсальность и кроссплатформенность делают С++ чем-то вроде универсального оружия. Бьерн Страуструп называет его "незримой основой всего". Где используют С с плюсами? В тех частях системы, которые не видны пользователям, но являются основой работы всего сервиса, например, в игровых или поисковых движках и системах управления базами данных.</p>
22
</blockquote><blockquote><h3>Читайте также:</h3>
22
</blockquote><blockquote><h3>Читайте также:</h3>
23
<p>"История IT. 1970: События, люди, технологии":<a>Павел Калашников про запуск UNIX-времени</a>, создание Pascal и патент на компьютерную мышь</p>
23
<p>"История IT. 1970: События, люди, технологии":<a>Павел Калашников про запуск UNIX-времени</a>, создание Pascal и патент на компьютерную мышь</p>
24
</blockquote><h2>Что пишут на С++</h2>
24
</blockquote><h2>Что пишут на С++</h2>
25
<p>На C++ создают высоконагруженные приложения, драйверы, графические стандарты и игры. Например, на С++ написана система управления базами данных MySQL - основа для множества высоконагруженных приложений, - главные продукты Microsoft, культовые игры Counter Strike и World of Warcraft.</p>
25
<p>На C++ создают высоконагруженные приложения, драйверы, графические стандарты и игры. Например, на С++ написана система управления базами данных MySQL - основа для множества высоконагруженных приложений, - главные продукты Microsoft, культовые игры Counter Strike и World of Warcraft.</p>
26
<p>На С++ пишут код, который должен выполняться быстро и надежно, поэтому он часто является основой для балансировщиков нагрузок на серверах и сложных графических алгоритмов. На C++ можно написать код для GPU - графического процессора. Так, например, создаются шейдеры для игр и графического ПО: они параллельно запускаются на GPU и позволяют без задержки выполнять сложные вычисления.</p>
26
<p>На С++ пишут код, который должен выполняться быстро и надежно, поэтому он часто является основой для балансировщиков нагрузок на серверах и сложных графических алгоритмов. На C++ можно написать код для GPU - графического процессора. Так, например, создаются шейдеры для игр и графического ПО: они параллельно запускаются на GPU и позволяют без задержки выполнять сложные вычисления.</p>
27
<p>На С++ можно писать сложные, нетривиальные алгоритмы - для этого у него есть огромная библиотека STL (Standard Template Library), где реализована большая часть алгоритмов и структур данных. Иногда С++ используют, чтобы оптимизировать код, добавить ему скорости и производительности или настроить приложение под конкретные платформы.</p>
27
<p>На С++ можно писать сложные, нетривиальные алгоритмы - для этого у него есть огромная библиотека STL (Standard Template Library), где реализована большая часть алгоритмов и структур данных. Иногда С++ используют, чтобы оптимизировать код, добавить ему скорости и производительности или настроить приложение под конкретные платформы.</p>
28
<blockquote><p>"Несмотря на универсальность, у языка есть и свои ограничения. Например, на С++ неудобно обрабатывать логи - файлы с информацией о действиях в программе - или собирать серверную статистику. Писать алгоритмы для машинного обучения или серверы для обработки запросов тоже будет сложно: в первом случае больше подойдет Пайтон с большим количеством фреймворков, во втором - Java или C#".</p>
28
<blockquote><p>"Несмотря на универсальность, у языка есть и свои ограничения. Например, на С++ неудобно обрабатывать логи - файлы с информацией о действиях в программе - или собирать серверную статистику. Писать алгоритмы для машинного обучения или серверы для обработки запросов тоже будет сложно: в первом случае больше подойдет Пайтон с большим количеством фреймворков, во втором - Java или C#".</p>
29
</blockquote><p>Существует миф, будто С++ подходит только для сложных приложений, потому что даже простые операции, написанные на нем, выглядят как сложные команды. Но эти проблемы легко решить благодаря огромным библиотекам с открытым исходным кодом по С++, которые содержат много вспомогательных функций и серьезно упрощают работу. Поэтому писать на С++ можно что угодно: и большой высоконагруженный сервис, и несложные программы для вычисления площади или решения систем алгебраических уравнений.</p>
29
</blockquote><p>Существует миф, будто С++ подходит только для сложных приложений, потому что даже простые операции, написанные на нем, выглядят как сложные команды. Но эти проблемы легко решить благодаря огромным библиотекам с открытым исходным кодом по С++, которые содержат много вспомогательных функций и серьезно упрощают работу. Поэтому писать на С++ можно что угодно: и большой высоконагруженный сервис, и несложные программы для вычисления площади или решения систем алгебраических уравнений.</p>
30
<h2>Что нужно знать разработчику на C++</h2>
30
<h2>Что нужно знать разработчику на C++</h2>
31
<blockquote><p>"Если вы планируете карьеру С++ разработчика - учите общие алгоритмы и структуры данных. Без них не обходится ни одно собеседование.</p>
31
<blockquote><p>"Если вы планируете карьеру С++ разработчика - учите общие алгоритмы и структуры данных. Без них не обходится ни одно собеседование.</p>
32
<p>Если захотите программировать на С++ и заниматься сложными вычислениями, придется разобраться в параллельном программировании, когда команды выполняются одновременно несколькими процессорами. Также нужно будет изучить открытый стандарт для распараллеливания OpenMP. Инженерам по разработке ПО важно знать дискретную математику, статистику, алгоритмы.</p>
32
<p>Если захотите программировать на С++ и заниматься сложными вычислениями, придется разобраться в параллельном программировании, когда команды выполняются одновременно несколькими процессорами. Также нужно будет изучить открытый стандарт для распараллеливания OpenMP. Инженерам по разработке ПО важно знать дискретную математику, статистику, алгоритмы.</p>
33
<p>Еще одно направление развития - компьютерная графика и геймдев, где нужно писать шейдеры и OpenGL. Здесь пригодится знание сопряжений с OpenCL - фреймворком для параллельных вычислений в графических процессорах - или CUDA, компилятора с расширениями, необходимыми для написания кода на GPU".</p>
33
<p>Еще одно направление развития - компьютерная графика и геймдев, где нужно писать шейдеры и OpenGL. Здесь пригодится знание сопряжений с OpenCL - фреймворком для параллельных вычислений в графических процессорах - или CUDA, компилятора с расширениями, необходимыми для написания кода на GPU".</p>
34
</blockquote><blockquote><h3>Читайте также:</h3>
34
</blockquote><blockquote><h3>Читайте также:</h3>
35
<p>Что нужно знать программисту<a>перед собеседованием</a>и как успешно его пройти</p>
35
<p>Что нужно знать программисту<a>перед собеседованием</a>и как успешно его пройти</p>
36
</blockquote><h2>Подходит ли C++ для начинающих</h2>
36
</blockquote><h2>Подходит ли C++ для начинающих</h2>
37
<p>Есть еще один не менее распространенный миф о С++. Говорят, что это сложный язык, который не подходит для старта в профессии.</p>
37
<p>Есть еще один не менее распространенный миф о С++. Говорят, что это сложный язык, который не подходит для старта в профессии.</p>
38
<p>Легко понять, почему его называют непростым. Вот пример классической программы "Hello, World!" на С++:</p>
38
<p>Легко понять, почему его называют непростым. Вот пример классической программы "Hello, World!" на С++:</p>
39
<p>А это пример на Python:</p>
39
<p>А это пример на Python:</p>
40
<p>Вот что<a>говорит</a>о сложности С++ создатель языка Страуструп:</p>
40
<p>Вот что<a>говорит</a>о сложности С++ создатель языка Страуструп:</p>
41
<p>"C++ действительно непрост, и чтобы научиться его использовать, необходимо приложить определенные усилия. Но людям вообще хочется невозможного: еще более простого языка, с еще большим количеством фич и сохранением работоспособности существующего кода".</p>
41
<p>"C++ действительно непрост, и чтобы научиться его использовать, необходимо приложить определенные усилия. Но людям вообще хочется невозможного: еще более простого языка, с еще большим количеством фич и сохранением работоспособности существующего кода".</p>
42
<p>С++ может стать отличным стартом в IT, но только если вы готовы приложить усилия. В отличие от многих высокоуровневых языков - Python, Java - он не такой "удобный". Один из минусов C в том, что он не читается интуитивно, приходится самому работать с памятью: следить, чтобы не было утечки данных и освобождать место для работы программы. Для этого сначала нужно разобраться с основами устройства компьютера и его функциями.</p>
42
<p>С++ может стать отличным стартом в IT, но только если вы готовы приложить усилия. В отличие от многих высокоуровневых языков - Python, Java - он не такой "удобный". Один из минусов C в том, что он не читается интуитивно, приходится самому работать с памятью: следить, чтобы не было утечки данных и освобождать место для работы программы. Для этого сначала нужно разобраться с основами устройства компьютера и его функциями.</p>
43
<p>Но усилия многократно окупаются ростом уровня подготовки. С С++ можно начинать, если вы настроены серьезно и готовы копать глубоко. Этот язык даст отличную базу, которая поможет уверенно двигаться вперед и решать проблемы не только на уровне кода.</p>
43
<p>Но усилия многократно окупаются ростом уровня подготовки. С С++ можно начинать, если вы настроены серьезно и готовы копать глубоко. Этот язык даст отличную базу, которая поможет уверенно двигаться вперед и решать проблемы не только на уровне кода.</p>
44
<blockquote><p>"На мой взгляд, C++ - оптимальный язык для старта, потому что он дает базу. Если человек хочет быть разработчиком и разбираться в этой теме глубоко, то не стоит начинать с языков с низким порогом вхождения, таких как Python или JavaScript.</p>
44
<blockquote><p>"На мой взгляд, C++ - оптимальный язык для старта, потому что он дает базу. Если человек хочет быть разработчиком и разбираться в этой теме глубоко, то не стоит начинать с языков с низким порогом вхождения, таких как Python или JavaScript.</p>
45
<p>Конечно, на их основе быстрее можно научиться программировать. Но из-за их простоты можно легко упустить важные вещи и не знать в итоге, как устроена память, адресация и многое другое. Это сложно, но важно. По моему опыту, людям, которые начинали, скажем, с JavaScript, потом сложнее глубоко погружаться и разбираться, почему программа так и не работает".</p>
45
<p>Конечно, на их основе быстрее можно научиться программировать. Но из-за их простоты можно легко упустить важные вещи и не знать в итоге, как устроена память, адресация и многое другое. Это сложно, но важно. По моему опыту, людям, которые начинали, скажем, с JavaScript, потом сложнее глубоко погружаться и разбираться, почему программа так и не работает".</p>
46
</blockquote><h2>Можно ли стартовать сразу с С++, не изучая С</h2>
46
</blockquote><h2>Можно ли стартовать сразу с С++, не изучая С</h2>
47
<p>Эта тема - предмет вечных дискуссий в комьюнити. Одни - и в их числе<a>сам Страуструп</a>- говорят, что С учить не обязательно. Вполне можно стартовать сразу с С++, где не нужно работать напрямую с символами и памятью и тратить время на сложности, с которыми пришлось бы возиться в С.</p>
47
<p>Эта тема - предмет вечных дискуссий в комьюнити. Одни - и в их числе<a>сам Страуструп</a>- говорят, что С учить не обязательно. Вполне можно стартовать сразу с С++, где не нужно работать напрямую с символами и памятью и тратить время на сложности, с которыми пришлось бы возиться в С.</p>
48
<p>Чтобы увидеть разницу, посмотрите, как выглядит на С создание email-адреса:</p>
48
<p>Чтобы увидеть разницу, посмотрите, как выглядит на С создание email-адреса:</p>
49
<p>А вот как это же действие выглядит на С++. Никаких сложных операций с символами и памятью:</p>
49
<p>А вот как это же действие выглядит на С++. Никаких сложных операций с символами и памятью:</p>
50
<p>Другая точка зрения: на примере С лучше разбираться в базовых теоретических вещах, поэтому для тех, кто "копает глубоко", лучше подойдет последовательное изучение обоих языков.</p>
50
<p>Другая точка зрения: на примере С лучше разбираться в базовых теоретических вещах, поэтому для тех, кто "копает глубоко", лучше подойдет последовательное изучение обоих языков.</p>
51
<p>Посмотрите, как разработчики решают задачу из олимпиадного программирования на С пятью разными способами. Судя по их решениям, кажется, что зная С, можно потом без проблем выучить многие другие языки - настолько хорошую базу знаний дает этот язык.</p>
51
<p>Посмотрите, как разработчики решают задачу из олимпиадного программирования на С пятью разными способами. Судя по их решениям, кажется, что зная С, можно потом без проблем выучить многие другие языки - настолько хорошую базу знаний дает этот язык.</p>
52
<blockquote><p>"Вопрос в том, чего вы хотите достичь. Если нужно глубоко разобраться в теме, то лучше сначала изучить что делает C. С его помощью можно разобраться с базовой архитектурой компьютеров и теоретическими основами, включая побитовые операции, обращение с динамической памятью и числами с плавающей точкой. Мы обычно преподаем именно так: даем фундамент, а на второй год изучения переводим студентов на С++ с его особенностями и фишками".</p>
52
<blockquote><p>"Вопрос в том, чего вы хотите достичь. Если нужно глубоко разобраться в теме, то лучше сначала изучить что делает C. С его помощью можно разобраться с базовой архитектурой компьютеров и теоретическими основами, включая побитовые операции, обращение с динамической памятью и числами с плавающей точкой. Мы обычно преподаем именно так: даем фундамент, а на второй год изучения переводим студентов на С++ с его особенностями и фишками".</p>
53
</blockquote><h2>Что популярнее: С или С++</h2>
53
</blockquote><h2>Что популярнее: С или С++</h2>
54
<p>Как С, так и С++ уже который год стабильно входят в топ-5 самых популярных языков. Причем одни индексы оценивают их по отдельности, другие включают в общую категорию.</p>
54
<p>Как С, так и С++ уже который год стабильно входят в топ-5 самых популярных языков. Причем одни индексы оценивают их по отдельности, другие включают в общую категорию.</p>
55
<p>Например, по<a>данным</a>индекса TIOBE в ноябре 2022 года С находится на втором месте, уступив самому популярному языку в мире Python. С++ отстал от С на два пункта и занял четвертое место.</p>
55
<p>Например, по<a>данным</a>индекса TIOBE в ноябре 2022 года С находится на втором месте, уступив самому популярному языку в мире Python. С++ отстал от С на два пункта и занял четвертое место.</p>
56
<p>В<a>исследовании</a>Stack Overflow за 2022 год, наоборот, С++ находится на шестом месте, а С - на седьмом.</p>
56
<p>В<a>исследовании</a>Stack Overflow за 2022 год, наоборот, С++ находится на шестом месте, а С - на седьмом.</p>
57
<p>А вот в<a>индексе</a>PYPL оба языка попали в одну категорию и находятся на четвертом месте, уступая другому родственному языку - C#.</p>
57
<p>А вот в<a>индексе</a>PYPL оба языка попали в одну категорию и находятся на четвертом месте, уступая другому родственному языку - C#.</p>
58
<blockquote><h3>Изучите основы языка C</h3>
58
<blockquote><h3>Изучите основы языка C</h3>
59
<p>У Хекслета есть платформа для изучения основ программирования с нуля - Code Basics. Пройдите<a>бесплатный курс по изучению языка С</a>. Обучение на Code Basics начинается с азов, информация структурирована и подается от простого к сложному.</p>
59
<p>У Хекслета есть платформа для изучения основ программирования с нуля - Code Basics. Пройдите<a>бесплатный курс по изучению языка С</a>. Обучение на Code Basics начинается с азов, информация структурирована и подается от простого к сложному.</p>
60
</blockquote><h2>Сколько зарабатывает разработчик С++</h2>
60
</blockquote><h2>Сколько зарабатывает разработчик С++</h2>
61
<p>На С++ пишут практически во всех крупных компаниях, поэтому он может стать хорошим инструментом для карьерного роста.</p>
61
<p>На С++ пишут практически во всех крупных компаниях, поэтому он может стать хорошим инструментом для карьерного роста.</p>
62
<p>Уровень зарплаты зависит не только от опыта, но и от знания фреймворков, алгоритмов, библиотек. Исходя из<a>вакансий</a>компаний, опубликованных на HeadHunter, в среднем джуниор-разработчик может претендовать на зарплату 120-150 тыс. рублей, а мидл- и сеньор-разработчик - от 200 тыс. рублей.</p>
62
<p>Уровень зарплаты зависит не только от опыта, но и от знания фреймворков, алгоритмов, библиотек. Исходя из<a>вакансий</a>компаний, опубликованных на HeadHunter, в среднем джуниор-разработчик может претендовать на зарплату 120-150 тыс. рублей, а мидл- и сеньор-разработчик - от 200 тыс. рублей.</p>
63
<h2>Как и с чего стартовать в С++: книги и ресурсы</h2>
63
<h2>Как и с чего стартовать в С++: книги и ресурсы</h2>
64
<p>Перед погружением в язык изучите базовую теорию по объектно-ориентированному программированию - это поможет быстрее погрузиться в тему.</p>
64
<p>Перед погружением в язык изучите базовую теорию по объектно-ориентированному программированию - это поможет быстрее погрузиться в тему.</p>
65
<p>Для тех, кто решит начать с изучения языка С:</p>
65
<p>Для тех, кто решит начать с изучения языка С:</p>
66
<ul><li>Герберт Шилдт "<a>Полный справочник по С</a>"</li>
66
<ul><li>Герберт Шилдт "<a>Полный справочник по С</a>"</li>
67
</ul><p>А если захотите стартовать сразу в С++, пригодятся книги:</p>
67
</ul><p>А если захотите стартовать сразу в С++, пригодятся книги:</p>
68
<ul><li>Герберт Шилдт "<a>Полный справочник по C++</a>"</li>
68
<ul><li>Герберт Шилдт "<a>Полный справочник по C++</a>"</li>
69
<li>Бьерн Страуструп "<a>Язык программирования C++</a>"</li>
69
<li>Бьерн Страуструп "<a>Язык программирования C++</a>"</li>
70
<li>Бьерн Страуструп "<a>Программирование. Принципы и практика использования C++</a>"</li>
70
<li>Бьерн Страуструп "<a>Программирование. Принципы и практика использования C++</a>"</li>
71
</ul><p>В процессе изучения языка не забудьте про STL и BOOST:</p>
71
</ul><p>В процессе изучения языка не забудьте про STL и BOOST:</p>
72
<ul><li>Питер Нортон Скотт Мейерс "Эффективное использование STL"</li>
72
<ul><li>Питер Нортон Скотт Мейерс "Эффективное использование STL"</li>
73
<li>Николай Джосьютис "C++ Стандартная библиотека. Для профессионалов"</li>
73
<li>Николай Джосьютис "C++ Стандартная библиотека. Для профессионалов"</li>
74
<li>П. Плаугер, А. Степанов "STL. Стандартная библиотека шаблонов C++"</li>
74
<li>П. Плаугер, А. Степанов "STL. Стандартная библиотека шаблонов C++"</li>
75
</ul><p>А еще здорово помогут:</p>
75
</ul><p>А еще здорово помогут:</p>
76
<ul><li><a>Сайт стандартизации С++</a></li>
76
<ul><li><a>Сайт стандартизации С++</a></li>
77
<li><a>YouTube-канал о С и С++</a></li>
77
<li><a>YouTube-канал о С и С++</a></li>
78
<li><a>Русскоязычное сообщество разработчиков</a></li>
78
<li><a>Русскоязычное сообщество разработчиков</a></li>
79
</ul>
79
</ul>