Как лучше изучить современный С++

Приветствую. У меня проблема — благодаря невысоким проектов, на которых я работал, мой уровень знания основного рабочего инструмента — С++ — застрял приблизительно на уровне С++ 98. После очередного твердого решения апгрейднуться была избрана для штудирования книга Effective Modern C++. Уже на первой главе — understanding template type deduction — столкнулся с тем, что слабо понятна логика происходящего и большинство вещей нужно «просто запомнить» — и это не работает. Что это — старость или неудачно выбранный источник знаний? Есть ли книги, которые помогли бы обновить знания до современного уровня без «просто запоминания», а с пониманием как и почему? Буду благодарен за любые советы.

👍НравитсяПонравилось0
В избранноеВ избранном0
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
застрял приблизительно на уровне С++ 98

Это последние нормальные «плюсы», которыми можно пользоваться.

Последующие версии — хипстерская блажь, которую если увидишь на проекте, то беги...

з

С++ 98.

да хоч на Go-шку
так як від С++11 зміна парадигма, вважай «нові плюси», тобто прийдеться «старі плюси» спочатку забути, а потім вивчити «нові плюси» по-новому

«как забыть С++ за 21 день» для чайников — была такая книга.

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

Найскладніше — це move semantics, тому що вони там запилили це езотеричне rvalue reference, яке реально як дзен, бо іменоване rvalue reference не є істинним rvalue reference. Ну там ще є variadic templates, але навіть якщо ви дупля не рубите в них, то у більшість контор візьмуть мабуть. Ну ще лямбди, але вони простіші теж. Інше все легке, або не потрібне і гуглом по спекам робиться. Вам не треба ідеальне знання, головне — типові випадки використання і косяки.

думаю, простіше вивчити це в Rust, набагато простіше чим

rvalue reference

в плюсах, ІМНО

дзен тільки для гур плюсів

Шо ж тебе так плюсы неугодили, во всех плюсотемах отписываешься :-)

карма, що не проект на С++ то епік фейл,
склалось вреження, що плюс це для тих кому подобається «їсти гівно і страдати» © (тм)

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

про JS мова не йшла,
а йшло про мув семантику, яка в Rust само собою як таке що розуміється, а не С++

rvalue reference

, як і зрозуміліше із замиканнями,
але плюсятники возбудилися не ясно чого,
хоча С++ костиль над С, і до цього костиля щось ліплять постійно, то лямбди, то мув семантику, то асинки, то проміси і фючери, то цілий буст

«Если и третий муж бьёт по морде, может, дело не в мужьях, а в морде?»

у мокшан за порєбріком, мабуть так і є: я ж вище писав: «їсти гівно і страдати» — феномен датського кацапізму

Хм, а хіба за поребріком не прийнято якраз свою косорукість виправдовувати зовнішніми обставинами? (Обама насмітив в под"єздє, англічанка гадіт і т.д.)

Насправді можу точно сказати, що рівень рукожопства не залежить від мови.

Ну не знаю, якось воно мені зайшло.
Складніше з варіадік темплейтами, наче і зрозумів, але насправді дуже мало де його можу використовувати.
Тому мене й досі терзают смутные сомнения...
Чи я не до кінця їх зрозумів, чи з мене поганий дизайнер ПЗ, чи вони насправді рідко використовуются.

вони насправді рідко використовуются

Ну так, в мене таке саме враження, може якщо якусь дуже базову лібу писати. Мав тестові на них. При чому от в тих тестових — вони дійсно в тему були і тестові не виглядали дуже натягнутими. Ну але хоч базові темплейти — треба. Але і упоротих по Александреску, які люблять це ліпити де не треба — мені здається не дуже люблять.

understanding template type deduction

это хорошо и надо это понимать. Маловероятно, что придётся использовать на практике, но всё может быть. В любом случае уже вспомнишь куда смотреть в случае чего.
С такими концепциями как SFINAE, RAII, RTTI, RVO тоже ознакомься, могут спрашивать на собесах. Я, например, подобные вещи использовал, но не знал ранее как они называются, на этом можно спалиться.

SFINAE, RAII, RTTI, RVO

Це все до С++ 11. Ну хоча можливо автор просто не знає С++, ну але його навіть Страуструп не знає, з іншого боку.

думаешь, если человек «застрял» на С++ 98, то обязательно в курсе? Возможно, но напомнить не лишнее

Почему? До C++11 всё это тоже актуально

Вот серьезно, из 10 собесов по С++ на 2х спрашивали про SFINAE.
На 2м я не выдержал и спросил, использовали ли они его когда то на реальном проекте.
Они сказали, что был у них когдо то один заумный чувак, он запилил этот Свинае в какой то шаблонной либе. В итоге так никто и не понял как оно там все работает и после чувака все это выпилили и больше к Сфинаям они не возвращались.

На y2b есть довольного неплохой и короткий курс лекций от Jet Brains на Английском языке о современном С++. Также там много чего подобного есть, если нужны какие-то сперва фундаментальные знания, другими словами информации море и в любом виде.

ко всему перечисленному — парочка ненапряжных каналов, чтобы быть в курсе «трендов»
www.youtube.com/user/lefticus1/videos
www.youtube.com/...​c/TheChernoProject/videos

understanding template type deduction

с козырей зашёл ))

Треба писати богато коду на сучасному с++. І бажано пройти код-рев’ю. Можливо це не та порада, яку ви шукали, зате працює і недорого)

Не парься сильно, я тоже эту книжку Мэйерса перечитывал.
В большинство тем не получалось сходу вьехать, приходилсь перечитывать и писать код с примерами по этим темам, только потом что то понимать начинал.

Professional C++ Fifth Edition ( Marc Gregoire)

на уровне С++ 98

достаточно, ну если уже совсем совесть заела, то добавь ++11

ЗЫ. Остальное добавишь в рабочем порядке

Для повноцінної поради потрібно наступні дані:
— Ви новачок, тільки почали вивчати програмування і зараз намагаєтеся опанувати С++11+.
— Ви маєте досвід у програмуванні, багато працювали з С++98, знаєте як працюють всі базові механізми мови, як то вказівники та операції з ними, ООП і робота з класами, цикли, приведення типів, контейнери, ітератори та алгоритми з STL, знаєте на яких структурах даних побудовані які контейнери і як ці контейнери організовані в пам’яті( можете відповісти чому для вектора присутня інвалідація вказівників, а для ліста чи мапи ні ), маєте хоча б базове розуміння багатопоточності та примітивів синхронізації. Як бонус, читали іншу книгу Маєрса rozetka.com.ua/ua/280165328/p280165328
Маючи цей бекграунд хочете оновити свої знання з 11+ стандартами.

Для першого варіанту відповідь буде одна і її навіть озвучувати тут не буду. В інтернеті тонна матеріалів для початківців, обираєте будь-який і вйо.
Для другого — Effective Modern C++ хороша книга, але я б радив все ж почитати переклад, якщо ви не маєте fluent+ англійську. Принаймні мені з моїм upper-intermediate було її важкувати читати в оригіналі.
Перші глави там непрості для сприйняття, але тим не менш, стає все зрозуміло коли пробуєш це на практиці. Також допомагає гуглити незрозумілі теми з книжки і читати альтернативні джерела + писати код. Це довго але в голові добре відкладається.

Якщо оцінюєте «посередині» між озвученими мною, радив би підтягнутися до другого варіанту, а потім переходити на 11.

P.S. І також дуже раджу літкод, навіть якщо не плануєте влаштовуватись в гугл :)))
Порозв’язувати пару десятків easy-medium задачок дуже допомогає структурувати знання і краще розібратись із мовою.

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

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

Літкод дозволяє відточити до автоматизму або як мінімум познайомитись із купою функціоналу по тому ж STL який ти ніколи або вкрай рідко зустрінеш в реальних проектах.

Ризикну посперечатись, що рандомний С++ розробник в українській галері використовує лише 10-20% від наявного в STL.
А задачки на літкоді часто вимагають використання набагато більшого.

ещё раз. Оно вылетит, если не будешь применять в работе, а эта роскошь разнообразия доступна далеко не всем. Или литкод нужно литкодить ради выполнения задачек на литкоде?

Ну ок, конкретні приклади:
— Одного разу прочитавши і застосувавши ідіому uk.wikipedia.org/...​ki/Правило_Erase_—_Remove ти її не забудеш, як мінінмум, будеш знати як це швидко нагуглити
— Одного разу прочитавши про відмінність map VS unordered_map і застосувавши ту і ту в потрібних задачах вже не забудеш це
— Та ж сама фігня з алгоритмами en.cppreference.com/w/cpp/algorithm
погравшись із якимось алгоритмом на 2-3 задачках, ти запам’ятаєш роботу з ним, навіть якщо забудеш конкретний синтаксис, який можна швидко гуглити.

Список можна продовжувати далі.
Ось для цього треба задачки.

это простые и, можно сказать, базовые вещи. Их и без литкода знаю именно потому что где-то когда-то вычитал и применяю в работе (но алгоритмы не все конечно). Но порой в литкоде встречается такое, что нереально надолго запомнить, потому что нет периодического обновления нейронных связей в голове по ним) Вобщем тема размыта сама по себе и конкретики тут быть не может, опыт и практика у людей разные.

Інтерв’юваючи десятки людей на галерах, як наших кандидатів так і забугорних, я щоразу дивуюся, як багато з цих базових речей люди незнають, навіть маючи по 10+ досвіду та сіньйорські лички. І я не про літкод задачі, а саме про вищеозвучені речі та подібні їм.

значить в когось завищені оцінки, ви не в FAAN(M)G інтерв"юваваєте?

Ні, з останнього, що багато інтерв’ював — Люксофт, кандидати з України, Латинської америки та індуси, проекти розділені між різними локаціями.
Був приємно здивований, у нас все ще частіше трапляються більш кваліфіковані.

это обычное дело, просто людям не так везло с задачами. А прыгать с одного места на другое не всех возбуждает. Многие делают просто то, что нужно, не расширяя при этом особо кругозор.
Поэтому, кстати, всегда умиляюсь когда разрабы сами приписывают себе синьеров, лидов и прочие аттрибуты, которыми их наградила текущая контора)) А потом, после перехода на немного другой стек (напр., был бэкенд разраб, и перешёл на десктоп-разраба), для другой конторы оказывается что он джун, забавно ведь)

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

Тоже самое верно про пет проекты и опенсорц

Абсолютно згідний, але петпроджект дозволить потренувати архутектурні скіли + кодинг, а тут лише кодинг за короткий час.

Маерс и Александреску далеко не для «первой книги». Рекомендую «Шаблоны С++» Вандервуд, Джоссати, Грегор (второе издание) Там есть подробное описание происходящего.

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