1

Всем привет!

Есть вопрос: с чего начать изучение C++?

Я знаю, что это сложный язык, потому спрашиваю у вас. У каждого языка программирования есть основа, без которой просто никуда. Что вы посоветуете пройти для начала?

Заранее спасибо.

smily_prg
  • 303

7 Answers7

11

Ох, ну сейчас я накидаю список.

Язык Си

Поскольку язык С++ включает в себя язык Си, который намного проще изучить, я бы советовал начинать с него. В частности с Шилдта - "Полный справочник по Си". Это единственная книга, в которой я не встретил просто кучу устаревшей информации с ошибкой в каждом втором примере(привет книге K&R).

Однако, изучение Си не обязательно, хотя я и рекомендую.

Что же касается самого с++

  1. Роберт Лафоре - "Объектно-ориентированное программирование в С++"

    Замечательная книга по С++ для новичков. Написана простым, лаконичным и понятным языком, материал разбирается детально и подробно. Рекомендую как самую первую по С++. Есть примеры для решения. Читать, одно удовольствие. Единственный минус, которыя я отметил - автор сильно и часто перехваливает достоинства языка по тексту книги.

  2. Герберт Шилдт - Полный справочник по C++

    Прочитав Лафоре, можно углуюлять в детали языка и посмотреть своеобразный справочник-учебник по С++. Здесь будет сказано все то, чего не было сказано в первой книге.

Далее идет список, который я не читал, но книги из него рекомендуют так же на многих ресурсах как самые лучшие.

  • Брюс Эккель, Чак Эллисон - "Философия C++. Введение в стандартный C++."
  • Брюс Эккель, Чак Эллисон - "Философия C++. Практическое программирование."
  • Стенли Липпман, Жози Лажойе - "Язык программирования C++. Вводный курс"
  • Стенли Липпман - "Основы программирования на С++. Том 1"

Отлично, это был С++, но так же есть его библиотека STL, которой посвящены так же отдельные книги и Boost. А так же разбор продвинутых техник программирования на С++.

  1. Питер Нортон Скотт Мейерс - "Эффективное использование STL"
  2. Николай Джосьютис - "C++ Стандартная библиотека. Для профессионалов."
  3. П. Плаугер, А. Степанов - "STL. Стандартная библиотека шаблонов C++"

Обязательно ознакомьтесь потом с BOOST, книг к сожалению не знаю.

  • Питер Нортон Скотт Мейерс - "Наиболее эффективное использование C++. 35 новых способов улучшить стиль программирования."
  • Нортон Скотт Мейерс - "Эффективное использование C++. 50 рекомендаций по улучшению ваших программ и проектов."
  • Питер Нортон Скотт Мейерс - "Эффективное использование C++. 55 верных советов улучшить структуру и код ваших программ."
  • Герб Саттер - "Новые сложные задачи на C++"
  • Герб Саттер - "Решение сложных задачи на C++"
  • Андрей Александреску, Герб Саттер - "Стандарты программирования на С++. 101 правило и рекомендация"

  • Не забудьте прочитать книгу четырех о шаблонах проектирования.

Страуструп

Если Вы прочитали множество приведенных книг и получили достаточно опыта, то самое время переходить к трудам Страуструпа. Книги его написаны академическим языком и читаются достаточно сложно. Некоторые рекомендуют начинать с него, но только от того, что сами с него начинали, когда на рынке больше никакой годной литературы не было. ОДнозначно не берите его первым, но он обязателен для хорошего программиста С++.

Еще не надоело клепать скучные консольные приложения? Самое время перейти к изучению QT. Или же изучения программированию под Windows.

QT

  • Макс Шлее "Qt 4.8. Профессиональное программирование на С++"
  • Бланшет, Саммерфилд - "Qt4 Программирование GUI на С++"
  • Марк Саммерфилд - Qt Профессиональное программирование (High tech) - 2011
  • Андрей Боровский - Qt4.7+. Практическое программирование на C++ - 2012

Немного Windows мозгодробилки, но вместо WinAPI можно почитать что-то более высокоуровневое, всякие там MFC, WTL. Да, первые две книги для windows 95, но с тех пор WinAPI вообще не менялся, книги являются отличным пособием.

  • Чарльз Петцольд - "Программирование для Windows 95. Том 1"
  • Чарльз Петцольд - "Программирование для Windows 95. Том 2"
  • Джеффри Рихтер - "Windows для профессионалов"

Ну в общем-то сюда еще можно добавлять всякие нужные книги, прямо не связанные с С++, но думаю вы и сами на них натолкнетесь в процессе изучения. Так же всякие DirectX, OpenGL, базы данных и т.д и т.п. Что-то можно высмотреть еще тут: хорошие книги по С++

А еще, если вы windows ориентированный разработчик, лучше использовать для проектирования интерфейса GUI язык C#, а на С++ писать для него библиотеки. Но это уже потом.

Удачи, если вы захотели стать профессионалом в области С++.

И помните про статью: Научитесь программировать за десять лет (Питер Норвиг).

Alex Krass
  • 17,744
  • 2
    @Alex Krass, отличная подборка. – Nofate Dec 03 '14 at 21:59
  • @Nofate, спасибо.

    Если нахожу достойную литературу для чтения по разным направлениям, сохраняю для себя названия или ссылки. В ответ оставалось только разбить по порядку и категориям.

    – Alex Krass Dec 03 '14 at 22:43
  • @Alex Krass Спасибо за ваш подробный и понятный ответ. – smily_prg Dec 04 '14 at 11:18
  • @Alex Krass, если в K&R, как Вы пишете, в каждом втором примере ошибка, то не покажете ли, нескоторые из них?
    (думаю, кроме использования gets() (если оно там осталось))
    – avp Dec 04 '14 at 12:16
  • @avp, я исключительно пытаюсь уберечь психику тех, кому не повезет заполучить плохое издание. Слишком много выложенных в интернете версий похожи, а то и хуже, на эту(первая же ссылка в яндексе и гугле!): lib.ru K&R

    Просто пройдитесь по примерам, я думаю Вы и сами все поймете. Все написано капсом, условия IF (C==' ' \!\! C=='\N'), ни слова про подключение заголовков, не указан тип возвращаемого main значения, старое определение функций с подписанными внизу переменными и т.д и т.п. Я просто не надеюсь на удачу и что повезет найти хорошее издание

    – Alex Krass Dec 04 '14 at 13:05
  • 1
    @avp, я знаю, что это книга по своему хороша, хоть и не очень структурирована как по мне. Но слишком уж много плохих версий. Если хотите посоветовать кому-то K&R, то укажите хотя бы точное издание, год, издательский дом, или лучше ссылку с указанием брать только его и избегать других. Иначе это может стоит очень больших нервов изучающего. – Alex Krass Dec 04 '14 at 13:09
  • @Alex Krass, видимо Вам попался этот кошмар .

    А вот этот вариант(English) или этот на русском выглядят вполне пристойно.
    (правда, сходу увидел gechar вместо getchar в English (но исправлено в Russan!!!))

    --

    Конечно, последний раз я внимательно читал эту книгу лет 20 назад, так что с уверенностью рекомендовать какое-либо издание не возьмусь.

    – avp Dec 04 '14 at 15:35
  • @Alex Krass Следующий вопрос прямо здесь. Язык C, как я помню, можно использовать для написания систем (но этим я заниматься не стану, ибо систем уже хватает), написания приложений на Windows. Можно ли на языке C писать программы под другие системы, например Linux, UNIX, Mac OS X и т.д.? – smily_prg Dec 04 '14 at 16:05
  • @smily_prg, запросто.

    Вообще-то большинство программ в этих системах написаны именно на Си.

    А сам язык как раз и появился при разработке UNIX.
    (а Вы еще не читали эту историю?)

    – avp Dec 04 '14 at 16:30
6

Если опыта в программировании большого нет, то вместо С++ можно попробовать гораздо более простые "системные" языки с меньшим багажом, такие как Go, Rust.

Если всё таки C++ необходим, то для адекватного изучения С++ придётся книгу ~1000 страниц изучать, например, C++ Primer (издание, обновлённое для c++11). Если опыт программирования уже есть, то рекомендуют "Accelerated C++".

Завершение небольших проектов -- хороший способов изучения новых языков: 1000+ Beginner Programming Projects.

Научитесь программировать за десять лет (Питер Норвиг).

jfs
  • 52,361
  • @smily_prg, особое внимание обратите на "Научитесь программировать за десять лет"
    (совершенно серьезно, прочтите эту статью).
    – avp Nov 30 '14 at 18:56
  • @jfs Большое спасибо. Уже посмотрел и очень доволен. – smily_prg Dec 01 '14 at 11:58
  • Go можно назвать системным языком наравне с Rust? – Vladimir Gamalyan Sep 02 '16 at 00:30
  • @VladimirGamalian Как Go так и Rust называют системными языками. Каждый из них использует концепции, с которыми стоит быть знакомыми (вне зависимости будете в них работать или нет). Языки достаточно различны, что практики из обоих языков полезно изучить. – jfs Sep 02 '16 at 00:52
  • @jfs наверное вопрос терминологии. Для меня Go с его непрямым управлением памятью (gc) не вписывается в понятие "системный". – Vladimir Gamalyan Sep 02 '16 at 03:20
  • @VladimirGamalian если вы думаете что "системный" язык не может иметь gc, то вы ошибаетесь (прочтите хотя бы первый вопрос в Go FAQ: цель проекта). Вне зависимости от того как слово "системный" определено, изучение Go полезно как в плане написания программ, которые раньше на C++ писались, так и в программировании на самом C++ позднее (например, чтобы знать какое подмножество языка использовать можно эффективно). Часть, связанная с ручным управлением памяти, ярко представлена в Rust. Не вижу оснований, чтобы минусовать ответ. – jfs Sep 02 '16 at 08:08
  • @jfs минус не мой ) То, что они в своем факе пишут, это больше реклама. Тоже самое они говорят про исключения - они тяжелые, и мы их не стали включать в язык. Я не против того, что полезно его изучить, меня только смутило позиционирование его как системного. – Vladimir Gamalyan Sep 02 '16 at 08:18
  • @VladimirGamalian: они используют термин в общепринятом значении. Слово "системный" имеет полезные для заданного вопроса коннотации (поэтому я его использовал), но не стоит слишком серьёзно к отличию от "прикладных" языков относится--граница достаточно условна. – jfs Sep 02 '16 at 09:04
3

Начните с Си. И обязательно в *nix (сейчас, очевидно Linux).

Для начала просто откройте K&R, читайте и пишите примеры.

Это даст Вам правильное понимание основ
(возможно потом (и с приобретением опыта реального программирования) желание использовать C++ уже пропадет, хотя изучать его все равно придется, поскольку слишком много кода все же написано на нем).

avp
  • 46,098
  • 6
  • 48
  • 116
  • @avp Спасибо за ответ. Есть следующий вопрос, что такое K&R и почему обязательно начинать именно в Linux, чем не подойдет Windows? – smily_prg Dec 01 '14 at 12:00
  • 2
    K&R это книга от авторов языка Си. Можно легко найти в сети, можно купить бумажную версию в магазине.

    С Linux надо начинать, хотя бы потому (не хочу углубляться в дебри систем), что в Windows разделителем в пути файла является символ \, который несет особое значение в строковых константах (то что Вы пишете в "abc") в C.

    Ну, это досадная мелочь, на самом же деле речь о логичности системы.

    – avp Dec 01 '14 at 12:46
  • @avp Скорее всего когда вы писали *nix вы могли иметь ввиду UNIX. – smily_prg Dec 04 '14 at 16:08
  • 2
    @smily_prg, именно так.

    Точнее *nix это обозначение любой unix-подобной системы (в т.ч. Linux, Mac OS X, Solaris, AIX и десятков других).

    Говорят, что для понимания их сути достаточно осознания принципов работы всего 5 системных функций -- open, read, write, fork и exec.

    – avp Dec 04 '14 at 16:15
2

1) извините, но Шилдта очень ругают, да и книги старые очень. Не советую.

2) создатель языка С++ Бьярн Страуструп крайне не советует начинать изучение C++ с языка C

3) личный опыт: лучше хорошая c++ либа, чем хорошая c-либа.

4) что читать: The C++ Programming Language, CppCoreGuidelines, книга "Скользкие места C++" очень хороша.

5) читать хорошие блоги и сайт комитета по стандартизации C++

strangeqargo
  • 5,774
1

Ответьте себе на вопросы: "Зачем мне C++?", "Что я хочу получить, используя его?". Поставьте интересную и нужную для Вас цель: игру, программу, что угодно, и идите к ней, учите инструментарий.

Что-то из Страуструпа можно почитать

b2soft
  • 421
  • 3
    Страуструп сложно, по-моему, для начинающих, не так ли? – Zumrat Nov 30 '14 at 06:17
  • И да, и нет. Для меня Страуструп - своеобразный справочник: и начинающий сможет понять что и как, и профессионал не раз откроет какие-то мелочи распознать. – b2soft Nov 30 '14 at 18:40
  • @b2soft дело в том, что мне нужны не все сразу с мелочами. Для начала мне хотелось бы изучить основу языка, но что можно назвать основой? – smily_prg Dec 01 '14 at 11:52
  • у страуструпа есть две книги - огромная, но обязательная, если серьезно в плюсы - собствено "язык программирования C++" и маленькая, облегченная "C++ primer", начинать можно со второй – strangeqargo Sep 03 '16 at 15:14
0

Я обычно начинаю все языки учить с видеороликов на YouTube. Попробуйте это, потом когда более-менее основу будете знать, переходите на книги, читайте Хабр, там очень много полезного есть, а потом всё будет изучаться по принципу снежного кома. Удачи :)

Angus123
  • 2,555
  • 5

    начинаю все языки учить с видеороликов на YouTube.

    И много языков выучили?

    – Nofate Nov 30 '14 at 12:49
  • @Angus123 @Nofate Я конечно мог бы выучить что-нибудь на YouTube. Но дело в том, что если есть полный курс, то туда засунут много ненужного, а если, например, есть действительно хорошая серия туториалов - я не против, но проблема заключается в том, что хорошие полные курсы всегда платные. Поскольку C++ один из самых сложных языков программирования, то мне хотелось бы подойти к нему более серьезно. – smily_prg Dec 01 '14 at 11:56
  • 5
    @smily_prg, я ни в коем разе и не предлагаю учиться по "видеороликам". – Nofate Dec 01 '14 at 13:25
  • @Nofate Я прислушаюсь к вашему совету. – smily_prg Dec 03 '14 at 18:50
0

Мой одногруппник очень нахваливал Г.Шилдта. У него много разных учебников, в том числе и по С++

Omfis
  • 95