Собран проект. Поседевшие пальцы Собирают пердак. Старший брат: >>801836 (OP) Предыдущий: >>798022 (OP)
TL;DR
Q:
Я хочу тотчас вкатиться, а разбираться буду в процессе. Что я должен делать?
Q:
Не уверен, что хочу изучать C++. Как мне пощупать его без лишней ебли?
A:
Читаешь эту книжку , смотришь упражнения из нее и суешь в онлайн-компилятор . Сообщения компилятора об ошибках копипастишь в гугл, ответы на возникающие у тебя вопросы ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее.
Памятка ньюфагу
Вопросы по синтаксису идут на хуй
Лабы идут на хуй
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй
Все идут на хуй
Хейтер сосет члены на пару со своей мамашей
Небольшие фрагменты кода размещай в треде при помощи тега [code] и жабаскрипт-костыля . Для больших фрагментов используй внешние сервисы .
FAQ
Мотивация
Q:
Почему стоит использовать именно C++?
A:
Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три:
Скорость
C++ действительно быстрый язык — вместе с C , его прародителем, они с большим отрывом уделывают по скорости все остальные языки высокого уровня. Код на C++, как правило, медленнее аналогичного кода на C приблизительно на 0-20% а в ряде случаев C++ оказывается даже быстрее , причем замедление появляется только при использовании высокоуровневых конструкций (в C++ ты никогда не платишь за то, чего не используешь). Таким образом, если тебе требуется высокопроизводительный код, C++ станет отличным выбором.
Мощь
C++, являясь одним из наиболее выразительных и мощных языков, позволяет использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задачи. Как следствие, используя C++, ты можешь не думать о том, как обойти искусственные ограничения языка, а беспрепятственно выбрать наиболее подходящие к ситуации средства.
Популярность
C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q:
Но он же давно устарел!
A:
Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по С++, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q:
Сейчас все пишут на %languagename, а кресты сосут у него!
A:
Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд хотя это вполне возможно , но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q:
Хуле тут так сложно? Я открыл учебник, там какой-то ад!
A:
Попробуй учебники, изданные после 2011 года, в которых рассматриваются возможности новых стандартов (C++11 и C++14 ). Эти фичи не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное . Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Именно высокий порог вхождения повышает твою ценность как специалиста, не позволяя нанять вместо тебя индуса за еду . Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы , а уже потом вернуться к крестам.
Литература
Q:
Окей, я решил вкатиться. Какие же книги мне читать?
A:
Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
Кроме того, есть еще пара старых добрых учебников для ньюфагов. Часть информации в них устарела, но многие считают, что это компенсируется их большей, по сравнению с современными учебниками, понятностью:
Best practices
Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все:
Проектирование
Следует пролистать все перед переходом от лаб к написанию настоящего софта.
Последний пункт есть квинтэссенция ГИБКОСТИ , поэтому стоит прочитать его в любом случае, чтобы охуеть от того, как можно делать:
Ахтунг!
Предыдущие два раздела дополняют, а не заменяют классические книги о лучших практиках разработки без привязки к конкретному языку (Макконнелл , Uncle Bob , GoF ).
Справочники
Наиболее детальные описания языка. Удобно использовать как референс, читать от корки до корки не обязательно:
Кроме того, на ангельском доступны стандарты C++11 , C++14 , а также последняя версия черновика стандарта C++17 .
Тонкости языка
Книги для тех, кто возлюбил кресты всей душой и желает углубиться в детали:
Отдельные аспекты
Читать по необходимости:
Автор(ы)
Название
Год
Описание
Ссылка
Энтони Уильямс
Параллельное программирование на C++ в действии
2012
Про использование std::thread и других фич последних стандартов для разработки многопоточных приложений
https://goo.gl/qJfBkD
Николаи Джоссатис
C++. Стандартная библиотека
2012
Детальный справочник по STL и остальным частям стандартной библиотеки
https://goo.gl/PEyiMH
Дэвид Абрахамс и Алексей Гуртовой
Шаблонное метапрограммирование на C++
2009
"Мы встроили в шаблоны C++ функциональный язык программирования, чтобы ты мог программировать, пока программируешь"
https://goo.gl/isSt7j
Дэвид Вандевурд и Николаи Джоссатис
Шаблоны C++. Справочник разработчика
2003
После прочтения этой книги тебя не приведут в ужас даже исходники boost::MPL
https://goo.gl/0M4NpG
Роберт Седжвик
Фундаментальные алгоритмы на C++
2001
Стандартный курс алгоритмов с примерами на C++. Для его чтения не нужно знать мертвые языки, в отличие от этого вашего Кнута
https://goo.gl/4jwxSl (части 1-4) ,
https://goo.gl/yDuQgG (часть 5)
Другие обучающие материалы
Q:
Я не умею читать.
A:
Можешь посмотреть какой-нибудь онлайн-курс: раз , два , три
Q:
Не люблю, когда льют воду. Хочу коротких материалов по существу.
A:
Вот тебе блоги, факи, референсы и всякое такое:
Годный блог , в котором все просто и понятно тян не нужны кококок борщ
Блог с хорошо расписанными фичами новых стандартов
Краткие описания библиотечных функций и контейнеров - на русском или более подробно на ангельском
Блог Герба Саттера (на ангельском)
Блог Скотта Мейерса (на ангельском)
Блог еще одной тянки, много о Qt и оптимизации (на ангельском)
Куча других блогов (на ангельском)
Большой FAQ по C++ (на ангельском)
Видео с CppCon (на ангельском)
Софт и библиотеки
Q:
Я готов начать погроммировать! Куда мне писать код?
A:
На этапе написания хэллоуворлдов можно не ебаться с установкой софта, а использовать онлайн-компиляторы: раз , два , три , четыре . Для работы над более серьезными вещами удобнее всего установить какую-нибудь IDE. Ниже приведены несколько хороших вариантов:
Платформа
Название
Описание
Ссылка
Windows
Microsoft™ Visual Studio®
Общепризнанно самая продвинутая и удобная IDE, не имеющая равных по части автодополнения и возможностей отладчика. По ссылкам справа можно скачать бесплатную редакцию последнего выпуска (2015 Community Edition). Кроме того, существуют редакции с расширенными возможностями (Professional и Enterprise). Они стоят сотни денег, но если ты студент вуза, подписанного на Dreamspark Premium, то ты можешь получить их безвоздмездно (то есть даром). Многим новичкам интерфейс студии кажется чересчур сложным, так что обязательно прочти этот гайд , если у тебя возникают проблемы с компиляцией хэллоуворда
https://goo.gl/qgAAc6 (русская версия) или
https://goo.gl/WIPW9L (ангельская версия)
Все
CodeLite
Простая, легковесная, кроссплатформенная, швабодная IDE. Менее навороченная, чем студия, но среди бесплатных вне конкуренции. Вероятно, это наилучший вариант для новичка с *nix. Под Windows же требует чуть больше ебли с установкой компилятора MinGW/LLVM
http://codelite.org/ ,
"sudo aptitude install codelite codelite-plugins"
для установки под *nix
Все
CLion
IDE, призванная похоронить Visual Studio пока не особо получается . Она стоит денег, но можно украсть почти не протухшую версию на торрентах или получить бесплатную лицензию на год по скану студбилета, если ты студент. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует
https://www.jetbrains.com/clion
Здесь ты можешь найти все остальные существующие IDE, если ни одна из вышеперечисленных тебе не приглянулась.
Разумеется, установка IDE вовсе не обязательна. Ты можешь использовать текстовый редактор в связке с каким -нибудь компилятором , выбросить мышку, отрастить бороду и примкнуть к Церкви Святого Столлмана. Но лучше тогда сразу отправляйся в тред сишников, если не хочешь быть обоссанным другими сектантами за использование б-гомерзкого C++.
Q:
Не буду я все делать сам! Подавайте сюда софт, который все сделает за меня и подотрет мне жопу!
A:
Без проблем:
Статический анализатор , который умеет находить в коде ошибки и неоптимальные места. Швабодный. Есть плагин для Visual Studio
Более навороченный, но коммерческий аналог
Встроенный в clang статический анализатор
Детектор утечек для Visual Studio. Предельно прост в прикручивании
На порядок более мощная и сложная утилита для *nix, служащая тем же целям
Гугловские утилиты для контроля корректности кода
Гугловский фреймворк для автоматизации тестирования
Также не стоит забывать о том, что правильные посоны экономят свое время и нервы, используя мегагодные git и cmake во всех проектах.
Q:
Мне надоело писать велосипеды, какие у вас тут популярные либы?
Q:
Нужно зделать %монструозная_хуйня_нейм, но я обосрался от одной мысли о написании ее с нуля, что же делать?
A:
Гляди сюда:
boost
Бесспорно, это самый популярный набор C++-библиотек. Не будет лукавством сказать, что C++ во многом обязан популярностью именно ему. Воистину всеобъемлющий, boost способен удовлетворить твои самые скотские фантазии. В нем есть практически все - от математических функций до сетевых компонент, от инструментов тестирования до динамических типов. Функции для работы с твоей мамашей там тоже есть. Разумеется, все это швабодное и работает на любых платформах. И да, boost является своеобразным инкубатором хороших библиотек, поэтому наиболее удачные из них с большой вероятностью можно будет увидеть после принятия очередного стандарта уже как часть стандартной библиотеки.
Недостатком boost можно считать его размер - более 300 мегабайт. Большинство компонент boost не являются независимыми, и попытка использовать один единственный контейнер обернется фактическим подключением 2/3 всего присутствующего в комплекте. Таким образом, если boost не будет использоваться на полную, лучше юзать другие, более специализированные библиотеки.
Литература:
Автор(ы)
Название
Год
Ссылка
Ариндам Мукерджи
Learning Boost C++ Libraries
2015
https://goo.gl/b0gPN1 (на ангельском)
Qt
Существует швабодный кроссплатформенный фреймворк-надмножество C++ под названием Qt. Он содержит довольно большое количество компонент (для работы с сетью, базами данных, для юнит-тестирования и др.), но киллер-фичей и основным полем его применения являются возможности по разработке графических интерфейсов. Qt сам по себе, как расширение языка, предоставляет для этого более удобные средства, чем обычные библиотеки, а использование специализированных IDE наподобие Qt Creator позволяет в буквальном смысле собирать интерфейсы мышкой, а код писать только по существу.
Тем не менее, использование Qt нельзя однозначно назвать хорошей практикой. Во многом это уже не C++, а другой язык, со своими концепциями и паттернами. Qt-код требует дополнительного препроцессинга при помощи встроенных в Qt утилит (т.н. метаобъектная компиляция), поэтому не получится просто подключить Qt как обычную библиотеку и использовать свой любимый компилятор без дополнительного софта. Нельзя сказать, что это существенное препятствие, но есть мнение, что использование Qt нарушает дух C++, раздувает машинный код и порождает макак-любителей кодогенерации.
В настоящее время основные версии Qt - 4.8 и 5.х, полной обратной совместимости между ними нет как в пистоне, ага .
Литература:
Другие хорошие библиотеки
Несколько специализированных библиотек для часто встречающихся задач. Все — маленькие, быстрые и простые в освоении:
libcurl - сишная библиотека для работы с сетью (существует также curlpp - крестовая обертка для нее, но использовать ее не стоит, ибо разработка заброшена еще в 2009 году)
SFML - работа с графикой и аудио
FLTK - графические интерфейсы
И еще куча библиотек на любой вкус.
Q:
Я прочитал все вышеперечисленное, теперь я гуру! Что дальше?
A:
Дальше переходишь по ссылке , пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.