Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Как правильно изучать язык программирования C++?

Изучаю C++ на курсе, и мне кажется, что меня учат не всему. Из-за этого я отстаю от многих. Как мне быть с этим языком, если есть опыт программирования на языках C#, Python, Delphi?
ОбразованиеПрограммирование+4
Собиржон Матназаров
  ·   · 5,6 K
Диванный эксперт широкого профиля :)  · 15 нояб 2021
Изучаю C++ на курсе, и мне кажется, что меня учат не всему. Из-за этого я отстаю от многих. Как мне быть с этим языком, если есть опыт программирования на языках C#, Python, Delphi?
Если есть опыт с другими ЯП, стоит отталкиваться от того, что у них общего с C++, а что отличается - пытаться провести параллели с уже известным и доучить неизвестное. Из перечисленных (C#, Python, Delphi) я бы рекомендовал проводить параллели с C# - он наиболее похож. Только в C++ нет unsafe, т.к. C++ и так unsafe.)
Вообще, я бы рекомендовал ознакомиться со свежими стандартами C++ (11, 14, 17, 20), т.к. в них добавилось удобства и функционала, который есть в C#, но которого раньше не было в C++: для этого стоит покопаться здесь и тут. А ещё иметь в виду, что в C++ - даже в последних версиях - доступно маловато библиотек "из коробки" - знать как и уметь прикручивать сторонние (не из стандартной библиотеки) либы к своему проекту крайне желательно. В этом смысле могу порекомендовать сей сайт на "англицкой мове", содержащий многие из часто используемых и Open Source-ных. К слову, библиотеки языка C - также - как правило - могут использоваться в C++. Ещё стоит освоить CMake: хотя он непосредственно к C++ отношения не имеет, но при помощи данного скрипта обычно делают сборку проектов на C++ (т.е. какие исходники и с какими библиотеками и настройками компилятора следует собирать - прописывают в нём). Ещё есть такой фреймворк - QT. И ещё такой набор библиотек (обыкновенно, упоминаемые после STL) - boost. С практической точки зрения - т.е. для того, чтобы "взять и написать программу" - данного абзаца вполне достаточно: всё это изучать досконально не нужно - достаточно выделить время, просмотреть, почитать и выбрать нужное под конкретную задумку.
Большая часть разницы между C# и C++ сводится к трём пунктам:
1) Разница в синтаксисе (как писать/читать), всякие мелочи, вроде обязательной точки с запятой после определения класса. C# вынуждает использовать ООП - без вариантов. В C++ можно использовать как ООП, так и писать в процедурном или функциональном стиле - вопрос исключительно удобства и требуемой производительности.
2) В C++ большинство библиотек подключаются отдельно.
3) В C++ есть некоторые низкоуровневые нюансы, как правило, связанные с памятью или иными вопросами производительности. (По большому счёту, за вычетом личного вкуса/удобства/привычки, выбор между C# и C++ должен осуществляться с позиции того, как быстрее и качественнее написать код и того, насколько он должен быть производительным.)
В C# есть дженерики, а в C++ шаблоны (templates), суть похожа, но не идентична: в C++ это строго на этапе компиляции и - кроме того - с шаблонами C++ можно делать много разного - сверх просто обобщённого программирования (это применяется в некоторых библиотеках: самому использовать не обязательно, а знать, что такая возможность есть - стоит: в C# такого 146% нет - оно там и не нужно - для задач C# я имею в виду).
Стоит обратить внимание на некоторые низкоуровневые нюансы: устройство памяти процесса (чем отличается выделение памяти на стеке/в куче/глобально или static и т.д.; а равно и как это влияет на производительность и на реализацию ООП: любая переменная создаётся "где-то", а у этого "где-то" есть время жизни "lifetime", область видимости "scope"), на иерархию памяти компьютера (почему, например, проход по элементам вектора будет быстрее, чем у списка), на механизм исключений (т.к. они - при всём удобстве - снижают производительность, а потому, исключениями в C++ пользуются обычно для действительно исключительных случаев, а наличие/создание чего-нибудь проверяют в if-е). Ещё есть такие вещи как выравнивание (alignment) и встраивание кода (inline). Это, по сути, основное из низкоуровневого. (Ну, кроме потоков.)
И... По сути это всё. Всё остальное - Ctrl+C, Ctrl+V из C#, будет более-менее аналогичным.
Основные увлечения - программирование...  · 4 февр 2022
Немного юмора: А серьезно - универсальный ответ: писать программы, читать книжки, изучать исходники, общаться более опытными товарищами. Читать далее
Диванный философ, по совместительству инженер  · 9 нояб 2021
Если у Вас есть опыт программирования на Delphi попробуйте что-нибудь сделать на C++ Builder. По сути та же среда и та же архитектура компонентов что и в Delphi. Возможно курсы наоборот слабоваты для Вас если Вы уже Delphi-разр... Читать далее
В программировании с 1977 года. Последние года...  · 8 нояб 2021
Вот здесь немного про C++ и другие языки, чтобы не повторяться. Заключение обязательно почитайте. Понятия правильного или неправильного изучения C++ (и не только его) не существует. Это как с языком общения: Кто-то сразу... Читать далее
1 эксперт согласен
По образованию физик, работаю программистом  · 8 нояб 2021
Язык Си++ является языком более низкого уровня, чем перечисленные Вами. Если Вы поймёте, как работает Си++, то станете глубже понимать, что происходит в других языках программирования. Основное отличие заключается в том, что... Читать далее
Почитайте пару книг Андрея Столярова. Про введение в профессию программирование и отдельная часть по языку Си
Я - программист, который знает немного о циклах и...  · 1 дек 2021
При изучении такого товарища как C++, который оброс legacy фичами и вместил в себе все возможные и невозможные стили написания программ, нужно исходить из задач, какие вы собираетесь решать. Если вы будете работать в gamedev... Читать далее