Другие языки программирования и технологии

Почему язык программирования C++ считается одним из самых сложных языков программирования?

И как его лучше осваивать и учить? По урокам на ютубе или по учебникам?
С++ очень глубок и многогранен. Там куча всяких возможностей на все случаи жизни и если стоит задача выучить все их, то сложность будет очень высокой. Скажу сразу - писать нормальные программы можно прекрасно обойдясь без большей их части :)

С другой стороны, его предок С - очень простой язык. С момента создания его кое чем дополнили (например ввели комментарии в стиле С++), но он так простым и остался. Так вот, если начинать учить, то я бы рекомендовал сначала поразбираться с обычным С. А потом, по мере изучения, углубляться в плюса. Важные моменты, с которыми нужно досконально разобраться в С до того, как лезть в дебри - это структуры и указатели. Это потом очень поможет.

Главные фичи плюсов - это объектно ориентированное программирование (ООП) и шаблоны.
Суть ООП в том, что программист создает и работать с объектами. Объект - это совокупность данных и связанного с ними кода, который что-то реализует. И при этом есть возможность скрыть реализацию внутри этого объекта, оставив для управления ею заранее продуманный интерфейс. Это офигенно важно, так как защищает реализацию от криворуких уродов и не дает им нагадить по крупному. Пример из жизни - пульт от телевизора. Вы видите на нем кнопки и нажимаете на них, чтобы объект (пульт) что-то сделал. Эти кнопки - интерфейс. А реализацию можно увидеть, если разобрать его и заглянуть внутрь. Там будет плата с микросхемами, батарейки и т. п. Факт в том, что вам совершенно не нужно знать, что там внутри и как все это работает, достаточно знать, какая кнопка за что отвечает. А для того, чтобы вы не лезли внутрь у пульта есть корпус. В классе С++ тоже можно указать, что можно увидеть снаружи, а что нельзя. Окружив таким "корпусом" вашу реализацию, вы создаете предпосылки для того, чтобы она работала именно так, как надо.
Суть шаблонов в том, что если мы знаем, как что-то сделать, то это знание может быть применено к разным сущностям, и от этого оно не изменится. Вот, например, вы сможете кушать и из круглой, и из квадратной тарелки. До того, как придумали шаблоны, для круглой тарелки программист был бы вынужден писать свой код, а для квадратной - свой. А теперь можно просто написать код "про то, как надо кушать", а под нужную тарелку он подстроится автоматически. Это, на самом деле, очень круто.

Касательно того, по каким источникам лучше учить - лично я за бумажные книги.
СЗ
Сергей Запевалов
9 624
Лучший ответ
Вова Соколенко Я в школе не осилил Паскаль), но у меня есть интерес к математике и к программированию. Я не хочу пока изучать программирование, потому что с математикой проблемы. А с математикой проблемы, потому что учитель в школе её плохо преподовал, точнее как, неинтересно, они тупо решали задачи, а я сейчас просто решаю примеры, задачи по математике изучаю с 0. В итоге мне очень интересно, а то что это учитель с отличниками решает только на доске и не орёт на них. А они не понимают.
Потому, что стандартизаторы с каждым новым стандартом пихают в него всё больше модных рюшечек - которые никак не влияют на качество кода.

Крайне сложно научиться программированию на языке, который уже требует хорошего знания программирования - хотя бы для правильного выбора из множества дублирующих друг друга конструкций. И как научиться дисциплине написания кода на языке, который провоцирует говнокодинг?

А научиться программировать по "урокам" на ютубе в принципе невозможно.
ДВ
Денис Ведяев
59 816
Олег Пичугин > уже требует хорошего знания программирования
Устраиваемся в команду стажером, там подскажут, что здесь нужен вектор, здесь bip::vector, а лист вообще нафиг не нужен по большому счету
Вова Соколенко Поэтому учебник для того и рассчитан, чтобы "Учить"
> Почему язык программирования C++ считается одним из самых сложных языков программирования?

Потому что это действительно так. Чтоб это понять, надо изучить C++ и какой-нибудь другой язык программирования. Как я слышал, даже объём спецификации языка C++ очень большой.

> И как его лучше осваивать и учить? По урокам на ютубе или по учебникам?

Всё лучше изучать по книгам. "Уроки" были бы полезны, если бы их вели профессионалы, а не недоучки. Хорошие онлайн курсы наверно есть, но новичок не может отличить хорошие курсы от плохих.
Неплохие курсы на https://stepik.org/, но курс по C++ я не смотрел. Преимущество курсов на stepik.org - там есть задания, ответы проверяются.
Школьнику лучше изучать более простой язык, например C#, он проще и удобней.
Вова Соколенко А если сначала начать учить язык ассемблера, а потом C++, то это неплохой вариант изучения программирования?
Я понимаю ваше удивление. По тому коду, что предлагается для написания и обсуждения на Ответах - С++ это очень ПРОСТОЙ язык программирования. Потому что 90% не отличает его от С. И потому что ООП - это следующая ступень в изучении программирования.
Так вот, С++ по по Ответам ничем не сложнее Паскаля - древнего как мамонт, но крайне надежного в изучении новичками.
С++ имеет такую особеннось...
Написать можно очень по разному или очень похоже.
При этом будит работать... Но при этом в любом варианте могут возникнуть вообще рандомные ошибки.

А учить его лучше разборами примеров.
Находишь алгоритм или что-типо...
Понимаешь, что делает...
Смотришь реализацию на Языке, пытаешься понять, почему зачем и как...
Владимир Пан
Владимир Пан
15 046
Олег Пичугин Что мне делать, если скучно? Рандомные ошибки редко возникают. Раз в две, три недели. Я уж и на C++ пишу, и в проекте крупном, и без документации, и совмещаю с другой работой, чтобы уставать, а оно все 'авно.