Одна из сложных частей изучения языка программирования после того, как у вас уже есть несколько из них, заключается в том, что бывает трудно найти материал, который должным образом соответствует вашему уровню. Вводное Написание первых строк на $ LANG, как правило, слишком простое - я съеду собственное глазное яблоко, если мне нужно будет прочитать еще одно объяснение из 6 абзацев for петля. С другой стороны, в Advanced $ LANG Programming есть больше советов, которые вам нужны, но предполагается, что вы слишком много знаете об основах, чтобы действительно помочь.

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

Кстати, я собираюсь бросить вам довольно длинный список книг. Мне нравится подходить к книгам по программированию, имея в виду очень расплывчатое определение «чтения» - бегло просмотреть его, сосредоточиться на тех частях, которые имеют отношение к вам, и пропустить части, которые не имеют отношения к делу. Не важно, чтобы вы запомнили точный порядок инициализации элементов struct; важно, чтобы вы знали, что существует определенный порядок их инициализации. Затем, когда вы получите сообщение об ошибке, потому что «member foo будет инициализирован после элемента bar», вы будете знать, где искать ответ.

Делай, как я говорю, а не как я

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

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

Мой заказ:

Я сразу пропустил все, что есть в названии Исключение, поскольку Руководство по стилю Google C ++ это запрещает, но я полагаю, что серию статей Скотта Мейерса Exceptional C ++ тоже стоит прочитать.

Мой рекомендуемый порядок:

  • Ускоренный C ++
  • Более эффективный C ++
  • Эффективный современный C ++

Что читать

  • Ускоренный C ++

Фантастическое, динамичное введение в сам язык. В нем отсутствуют функции C ++ 11, но если вы работаете в существующей кодовой базе, вы, вероятно, сможете выяснить около 90% волшебства, лежащего в основе auto и unique_ptr, из код, который вы видите. К концу книги вы должны уметь понимать большинство обнаруженных вами сообщений об ошибках и запускать (неуклюжий, унидиоматический) код, который проходит тесты.

  • Более эффективный C ++

Вот ваше первое введение в мельчайшие подробности стиля C ++. В нем описывается правильное использование различных языковых функций, которые вы, вероятно, не видели в другом написанном вами коде, например, когда помечаете функции виртуальными, передачей по значению против ссылки против указателя и т. Д. К концу книги вы должны иметь достаточно глубокое понимание компромиссов, которые предлагает вам язык, и у вас должна быть возможность писать чистый, разумный код (до тех пор, пока разумное решение не полагается на C ++ 11. Особенности).

  • Эффективный современный C ++

Смысл этой книги в том, чтобы научить вас типовой машинке, лежащей в основе:

auto foo = std::make_unique<Bar>(1, 2, 3);

Это гораздо более сложный процесс, чем вы думаете. Я думаю, что всю книгу стоит прочитать, но это немного более утомительно, чем Более эффективный C ++, потому что менее очевидно, насколько она актуальна для вашей повседневной работы. Вот почему я рекомендую вам прочитать его после More Effective C ++, в отличие от меня. Это больше похоже на вишенку на твердом стиле C ++ 98, чем на отдельное руководство по написанию языка.

TL; DR в том, что функции C ++ 11 хороши, и вы должны использовать их всякий раз, когда можете. К концу книги у вас будет четкое понимание того, почему они хороши, что они предлагают вам и как они вписываются в остальной язык.

Что пропустить

  • Современный дизайн C ++

Я думаю, что если вы не пишете библиотеки, вам, вероятно, никогда не понадобится знать методы, описанные в этой книге. Многие из них попадают в категорию «интересных, но ваши коллеги будут вправе отвезти вас обратно и расстрелять, если вы когда-нибудь использовали это в производственном коде». В мире, вероятно, есть около пяти человек, для которых написание пользовательского распределителя будет правильным шагом, например, и ваша компания, вероятно, должна иметь ровно одну реализацию Singleton, работающую в ее кодовой базе.

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

  • Эффективный C ++

Хотя я уверен, что эта книга была очень полезной, когда она была написана, крайне маловероятно, что вам будет полезно прочитать ее в 2016 году. По сути, это 320 страниц, цель которых убедить вас, что ООП - это хорошо и императив старого стиля C плохо. Но если вы научились программировать в любое время за последние 10 лет, другой язык уже преподал вам эти уроки - например, программиста на Java не нужно убеждать, что использование классов - хорошая идея.

Целевая аудитория книги - программист на C середины 90-х годов, который не уверен, что изучение новой парадигмы программирования того стоит. Есть некоторые уроки, которые по-прежнему будут полезны в 2016 году, если вы выучили C до C ++ (например, никогда не используйте malloc), но вы можете получить их у своих коллег и из руководства по стилю вашей организации.

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

Хакерский полдень - это то, с чего хакеры начинают свои дни. Мы часть семьи @AMI. Сейчас мы принимаем заявки и рады обсуждать рекламные и спонсорские возможности.

Чтобы узнать больше, прочтите нашу страницу о нас, поставьте лайк / напишите нам в Facebook или просто tweet / DM @HackerNoon.

Если вам понравился этот рассказ, мы рекомендуем прочитать наши Последние технические истории и Современные технические истории. До следующего раза не воспринимайте реалии мира как должное!