×Закрыть

Изучение С++ — посоветуйте книги и материалы

О себе: 15 лет, 0 опыта + огромное желание учится.

Нужен совет: выбрал C++(VS2017) как первый язык программирования. Какие книги сейчас актуальные? Имею представления что такое: переменная, масив, динамическая память, классы и наследование но не считаю эти знания доскональным.
P.S. С английским у меня не очень

LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Зачем плюсы сейчас учить есть же Rust!!!

Имею представления что такое: переменная, масив, динамическая память, классы и наследование но не считаю эти знания доскональным.

ИМХО, дальше чисто книги будет неэффективно, нужен пэт-проект. Заодно хороший вопрос, какие задачи ты хочешь решать на Це++.

Сам когда-то задавался этим вопросом в начале обучения в университете. С книжки Страуструпа лучше не начинать в начале своего пути, так как может быть сложно. Рекомендую вариант от авторов Дейтл и Дейтл. Всё очень подробно и плавно. Если читать, то обязательно в неэлектронном формате.

А я с нее начинал и там всё просто было. До этого K&R были. Но времена сменились.

А какое издание, какого года?

Год был точно не позже 2010. Не помню уже. Конечно имеет смысл брать только самое последнее издание из всех доступных.

C++ вообще не самый удачный выбор, для первого языка. За деревьями не увидишь леса. Начни лучше с C#, и то не самой последней версии (скажем 5.0). Или с Питона, на нем скрипты потом сможешь делать. Если хочется именно плюсы, то выкинь студию и возьми Qt — захочется же какой-нибудь UI, работу с сетью, json/xml и т.д. — а там все это есть, удобно и красиво. Причем его потом можно использовать и из Питона — делать UI приложения. В студии же у тебя будет голый STL и больше ничего (не думаю что ты захочешь писать на WinAPI или MFC). Можно конечно прикрутить Qt и к студии, но это не для новичков явно.

Пайтон — мова явно не новачка, вона хоч і проста(аж занадто проста), але її вседозволеність дозволяє відстрелити не тільки ногу а і все що рядом. Краще починати зі строго типізованої мови і тут С++ не найгірший варіант. А після неї перейшовши на ,наприклад, пайтон, можна більш глибоко розуміти як той чи інший компонент працює.

Так я и говорю, как вариант C#. Он и проще, и типизация есть, и фреймворк на все случаи жизни.

Вот кстати по Qt/Qml неплохой туториал — qmlbook.github.io

Simple Fast Multimedia Library
А вообще, C++, это стандарт, язык, какие среды разработки и библиотеки использовать — это уже личное дело автора

Брюс Эккель — Философия С++, введение в стандартный С++. второе издание.
А.В. Москвин — Азбука STL.
Бьярне Страуструп — Программирование и практика с использованием С++ ( как справочное руководство ).
Герб Саттер и Андрей Александреску — Стандарты программирования на С++.
Для начала хватит, дальше имена и фамилии авторов у тебя есть, у них есть литература посерьёзнее.

Ребят, я не обязательно буду кодить на плюсах. Просто для начал всё равно надо что-то выбрать. Мне почему-то понравились плюсы.

я не обязательно буду кодить на плюсах

ИМХО, лучше было сперва выбрать направление, а потом уже язык, характерный для этой сферы. Хотя если пока не определился с направлением, то плюсы наверное хороший выбор, хотя как первый язык С++ как по-мне не лучший вариант (ибо считается довольно сложным языком, тем более для новичка). Лучше взять C# как первый язык (ИМХО естесно), ну или Си (который как по мне попроще плюсов будет), а потом уже за плюсы браться.

Но если таки выбрал плюсы, то Бог в помощь в изучении)

Плюси чи не плюси, немає жодної проблеми знати на базовому рівні сучасні мови програмування. Знадобиться як мінімум для розширення круговиду. Для тих самих плюсів, наприклад, я радив би, як буде час, почитати щось на кшталт Java для C++ програмістів і подивитись Objective-C — все це не буде зайвим. В свою чергу, навіть якщо оберете згодом щось інше, знання плюсів зайвими не будуть.

никого не слушай. ставь себе задачу и имплементируй

Stephen Prata C++ Primer 7th edition, Scott Mayers Effective C++

Нужен совет: выбрал C++(VS2017) как первый язык программирования

А почему именно C++?

Имею представления что такое: переменная, масив, динамическая память, классы и наследование

И как это сочетается с тем, что плюсы у тебя — первый язык?
Или ты с этим концептами чисто в теории знакомился?

А почему именно C++?

Потому что типа круто и надеется, что его уже джуном за ним будет очередь из работодателей стоять.

Дядя Витя, не чмори ТС’а (раньше времени).

Имею представления что такое: переменная, масив, динамическая память, классы и наследование но не считаю эти знания доскональным.

Это не обоснование. Оное есть сейчас почти во всех языках программирования.

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

ТопикСтартера :)

Посмотрел несколько видео для ознакомления. Ну как несколько 😅 Около 100. Но так или иначе не думаю что там всё детально сказано

100 видео — многовато, ну ок, может тебе так проще усваивать.
Возвращась к твоему вопросу — я лично плюсы изучал по Шильду «С++ from ground up». Но до этого владел ПыПыХом на уровне крепкого миддла, и пописывал на Жабе апплеты (была такая фронтэндская технология).

Сейчас твоя проблема будет в том, что книги по плюсам для начинающих типа того же Шильда писаны под старый стандарт (опять же — лично мне его хватает, потому что работаю в основном с легаси проектами, но мой случай — довольно частный).
Книги же по современным стандартам (да, их несколько) написаны для специалистов.

Кроме того, плюсы хороши там, где нужен перформанс и/или близость к железу. Большинство «прикладных» (читай, формошлепских) задач, на других языках решается обычно быстрее. Но именно такие задачи в основном и аутсорсят в Украину.

В общем, еще раз крепко подумай, надо ли тебе осваивать плюсы именно 1-м языком.

Ну в процессе изучения увижу. Так или иначе у меня есть ещё время одуматься

Сейчас твоя проблема будет в том, что книги по плюсам для начинающих типа того же Шильда писаны под старый стандарт

Прата (6 издание) более-менее нормально подходит к этому вопросу. Там в основном тексте описываются старые подходы, а в виде отдельных сносок добавляется, мол, «а в 11 стандарте можно ещё и вот так».

В общем, еще раз крепко подумай, надо ли тебе осваивать плюсы именно 1-м языком.

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

о Шильду «С++ from ground up»

О! Плюс одни кстати..
Вот только эта книга уже устарела в тот момент когда я поней учился... Не то что бы совсем-совсем. Но примеры из неё как есть современный компилятор не компилировал. А с тех пор ещё всяких стандартов понавыходило...

UP: почитал дальше

Сейчас твоя проблема будет в том, что книги по плюсам для начинающих типа того же Шильда писаны под старый стандарт

НУ вобщем + ещё один.

Я можу тільки описати, як вивчав сам. Не претендую, що це оптимальний метод, але можливості порівняти не було. Дещо могло застаріти, але в цілому плюси розвиваються так, щоб не ламати сумісність, тож нове можна вивчати як нашарування, доповнення до старого.

1. Якась загальна проста книга по C++. Я в свій час читав Шилдта, але їх багато таких.
2. Якась загальна книга по STL та алгоритмах, щоб розповідали основні концепції, як воно все влаштоване. Їх також існує декілька штук
2. Мейерс: Ефективний C++, Більш ефективний C++, Ефективний STL. Дуже просто написані, легко читаються.
3. Саттер. В нього кілька книг, значно складніші за Мейерса, нуднуваті.
4. Дизайн та еволюція C++ Страуструпа. Бомбезна книга, яка розповідає чому C++ вийшов такий, як він є, дозволяє зрозуміти внутрішню логіку мови.
5. Вандервуд, Джосатіс. Шаблони C++. Центрова книга для розуміння шаблонів.

Для загального розвитку:

1. Патерни проектування Банди чотирьох.
2. Clean code Макконела.

Список, зрозуміло, не вичерпний. Також варто вчитися працювати з стандартом C++ (вміти шукати там потрібну інформацію) і багато педалити та дивитись чужий код (Boost, наприклад). Теоретичні знання без практики не працюють.

1. Як людина, яка хоче кодити, ти маєш перш за все вміти шукати матеріал і конкретно матеріал по цій темі на цьому форумі.
2. Як людина, яка з плюсами працює вже 6+ років, не радив би починати з нього. Досить багато складностей, не очевидного і Undefined Behaviour. Раджу поглянути на джаву чи С#. При бажанні, свічнутись потім на плюси буде легше.
3. Якщо все ж хочеш саме плюси, з тих, що читав сам, раджу читати в такій послідовності:
— www.amazon.com/...​r=1-1&keywords=c++ primer погугли, є переклад російською
— www.ozon.ru/...​ntext/detail/id/34747131
— www.ozon.ru/...​text/detail/id/135511867

Лезть в С++, без знания С? Ну-ну.
Как совет начни с С и потиху после начинай понимать концепции ООП и метапрограммирования в С++ варианте.

Ні, ти не правий. Нафіг він не здався. Роботу з вказівниками, посиланням ( pointer, reference ) він і так вивчить при роботі з плюсами, решта нафіг не впала.

В С++??? Можно ты на нем писать не будешь? Лучше на Питоне пиши или жабаскрипте.

Неможна дядьку, йди на пенсію)

Смотри, побьют тебе твои согребцы.

Основы C в достаточном объёме как правило и так объясняются в учебниках по C++.
Если человеку будет интересно знать нюансы, специфичные именно для C, — почитает K&R (или ещё что-нибудь по сям) дополнительно потом.

Основы там обычно ни-о-чем. А потом в коде начинается веселье — мы такое тут недавно уже видели с разворачиванием файла.

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

Основы C в достаточном объёме как правило и так объясняются в учебниках по C++.

Нет. Именно поэтому процентов 90% плюсовиков, включая многих авторов книг не понимают сути указателей и работы с памятью и заменяют понимание заучиванием.
Кстати по-настоящему хорошие спецы (не наши естессно) обычно все интервью строят вокруг работы с ними, а не вот этого вашего Майерса.

Майерс — это о том, как правильно писать на С++, когда ты его уже понял с большего и тебе нужно посмотреть правильные практики.

Нет. Именно поэтому процентов 90% плюсовиков, включая многих авторов книг не понимают сути указателей и работы с памятью и заменяют понимание заучиванием.

Откуда такая интересная статистика? Я, наивный, думал, что для эффективной работы с плюсами (включая векторы, смарт поинтеры и тому подобное) нужно понимать принципы работы с указателями. И в моём случае, как и в случае коллег, с которыми мне доводится работать, это так.
Должно быть, мы в меньшинстве :(

Кстати по-настоящему хорошие спецы (не наши естессно) обычно все интервью строят вокруг работы с ними, а не вот этого вашего Майерса.

По-настоящему хорошие спецы по сям — не спорю. Речь шла об изучении плюсов, где на одном умении работать с указателями далеко не уедешь. Хотя, безусловно, без него никуда.

Не обов’язково з нього починати, тим більш, що можна легко привчитися до поганого, а центрові R&K застарілі й нудні. Я от в свій час почав з асемблера, що, вважаю, було дуже правильним і дозволило зрозуміти, як воно все внизу влаштоване, а потім перейшов одразу на плюси. Старі C варто вивчати вже пізніше, конкретні практичні речі як-от: як на них роблять ООП, як робити error handling (щоб не влаштовувати гистерик при виді goto).

С вначале вводился как такой макро-ассемблер. Так что можно и с асма, но зачем, если есть С.

Выше уже описали страхи — указатели и ссылки. Но что делать в С++ без понимания их???

Старі C варто вивчати вже пізніше, конкретні практичні речі як-от: як на них роблять ООП

А вот это не нужно. прошу. есть уже в мире один идеальный уродец такого пути — gstreamer.

В сенсі «один»? Весь Linux на цьому побудований, openssl, навіть ядро Windows та, певно, будь-який великий проект.

Перед цим асемблер, щоб розуміти, що таке пам’ять

Для начала любую более-менее популярную книжку по плюсам для новичков. Лафоре, Прата, Дейтелы, что угодно. Здесь не принципиально. Но желательно, чтобы это была книжка с упражнениями для самостоятельной проработки в конце каждой главы.
Если такого нет — найди курс лабораторных работ по программированию для первокурсников любого университета или колледжа. Для базовой практики по началу сойдёт. Ибо параллельно с чтением нужно много кодить, щупая на практике всё прочитанное. Особенно по началу. Иначе оно не будет усваиваться.

После основ — Саттер и Александреску (их совместная книга с советами; «сольное творчество» пока рано).
Затем Майерса (всего, по порядку). Читать с открытым cplusplus.com / cppreference.com под рукой — пригодится, когда будешь встречать упоминания каких-либо фич из стандартной библиотеки, которые книжка по основам не так хорошо разжевала.
После этого сольные книжки Саттера.

И параллельно учи английский. Это не менее важно. Ибо после книжек хорошим источником для приобретения знаний будут выступления с CppCon и подобных конференций — а их на русский не переводят. Не говоря уже о том, что на английском доступно в разы больше полезных статей.

И в итоге поймешь, что мог бы решать те же самые задачи и получать те же деньги не насилуя мозг и прочитав ровно по одной книге по Java, Python или Go.

Ну и пиши на своих

Java, Python или Go

Я ж тебе не запрещаю.

Каждому своё.
Если человеку интересны плюсы, то чтение книг по ним не будет

насилуя мозг

И наоборот: если джава или пайтон ему субъективно не нравятся (знаю многих таких) — то их освоение будет доставлять боль, даже если там синтаксис попроще.

Если человеку интересны плюсы, то чтение книг по ним не будет

Он просто еще не знает, что ему предстоит читать Александреску.

У Александреску много всякого интересного. Та одна книженция про паттерны и policy-based design (с которой его так часто ассоциируют) — вовсе не обязательная для прочтения вещь. И уж точно не в начале обучения. Заметь, я её никак не упоминал в своём посте.

А «читать Александреску» в контексте книги «C++ coding standards» не страшно. Эта книга уж точно не тяжелее Майерса.

Александреску нудний, але не обов’язковий. Замість нього можна надихатись розбираючи Boost. Це значно цікавіше.

Замість нього можна надихатись розбираючи Boost.

Мусье знает толк в извращениях.

Посмеялся с фразы про одну книгу по Java)

А сколько по твоему надо прочитать, чтобы начать уверенно писать (фреймворки не в счет) ?

Двухтомник Хорстманна и Корнелла. Но без фреймворков очень тяжело найти проекты.

Но без фреймворков очень тяжело найти проекты.

Это уже будет вторая и третья книги после которых можно в бой. А православный плюсовик будет в это время будет зубрить Майерса с Саттером и до Qt или игровых движков доберется дай Б-г через год.

А вот слабо администрации сделать и прилепить FAQ по книгам по основным языкам, фреймворкам и теоретическим основам?

научиться пользоваться интернетами? )) в правом верхнем углу как результат вотЪ

dou.ua/search/?q=c++ книги

Мысль неплохая, возможно и не совсем в формате форума. Тут обычно про сыры да «завожу трактор». Кроме шуток, можно было бы отсечь повторяющиеся запросы по литературе.

Ничего лучше этой книги не видел proklondike.net/...​cpp/lafore_oop_v_cpp.html

О себе: 15 лет, 0 опыта + огромное желание учится.

Страуструп, конечно.

Страуструпы есть разные, но если вспомнить старую книжку — ты сошел сума.

На самом деле, его книга 2010 года вполне подойдет.

Чувак, по ссылке которую я там дал я вижу _3 разных_ книги Страуструпа, ни одна из них не есть 2010 года, все старше. Ту единственную из них, что я сам читал (ту самую Книгу Страуструпа.. Самую-Самую на 1000+ старниц) я ни одному новичку не посоветую ни в трезвом ни в пьяном уме, никакого года издания... она конечно книга отличная, но качестве первой книги не подходит вообще, и что бы учиться програмировать тоже подходит так себе. Все выше мое ИМХО.

Надо просто нормальную новичковскую книгу.
Потом Мейерсов и Саттеров, всех попорядку.

Мне в универе зашел «справочник по С++», тупо все стандартные возможности языка в алфавитном порядке. И много практики. Отец пытался читать «С++ для чайников», так ничего и не понял (хотя имел опыт работы на ЧПУ).

Подписаться на комментарии