Подскажите, в какой последовательности изучать С++ и все что с ним напрямую связано?
На C++ перехожу с С, раньше читал пару бесполезных книжек по С++, сейчас дочитываю Страуструпа, затем думаю учить STL и boost, т.к. это вроде первоочередные библиотеки для изучения.
Может что-то еще посоветуете? Какую-то литературу с примерами и т.п.
S>Подскажите, в какой последовательности изучать С++ и все что с ним напрямую связано?
1. Классы, их организация, поля и методы классов.
2. Наследование.
3. Полиморфизм, виртуальные функции.
4. Шаблоны.
5. Исключения.
6. А уж потом и STL, и boost и что угодно.
И по каждому пункту — практика, практика и практика. Пока не уверен, что пункт i хорошо понимаешь — к пункту i+1 не переходить.
Здравствуйте, savgur, Вы писали:
S>Всем добрый день.
S>Подскажите, в какой последовательности изучать С++ и все что с ним напрямую связано?
S>На C++ перехожу с С, раньше читал пару бесполезных книжек по С++, сейчас дочитываю Страуструпа, затем думаю учить STL и boost, т.к. это вроде первоочередные библиотеки для изучения. S>Может что-то еще посоветуете? Какую-то литературу с примерами и т.п.
Я б рекомендовал начать с книжки Стенли Липпмана из красной серии С++ IN Depth/ Липпман ее специально писал для программеров, которые работали на других языках, но потребовался С++.
А далее — по вкусу.
Классы, шаблоны, STL — в таком порядке.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, savgur.
Вы писали:
S>Всем добрый день.
S>Подскажите, в какой последовательности изучать С++ и все что с ним напрямую связано?
S>На C++ перехожу с С, раньше читал пару бесполезных книжек по С++, сейчас дочитываю Страуструпа, затем думаю учить STL и boost, т.к. это вроде первоочередные библиотеки для изучения. S>Может что-то еще посоветуете? Какую-то литературу с примерами и т.п.
Если я правильно понял, Вы собираетесь профессионально заниматься C++.
Тогда Вам лучше всего быстро пройти все эти beginners tutorials (я имею в
виду "бесполезные книжки по С++", а отнюдь не Страуструпа) и как можно скорее
приступить к освоению мастерских техник, стандартов кодирования и вообще
навыков "выживания" в мире кодинга.
Как ни странно, первоклассных книг по C++ совсем немного (думаю, что наберется
не более 15-20, в остальных придется тщательно выискивать "граммы радия среди
тонн руды"). На мой взгляд, примеры, которыми изобилует соответствующая литература,
особенно для начинающих, не дают почти никакого представления о реальных проблемах,
с которыми встречается программист, и только закрепляют плохие привычки, от которых
позже будет невозможно избавиться. Осознание этого факта приходит не сразу — как
правило, при встрече с первым большим проектом. C++ — слишком гибкий и опасный
для того, чтобы изучать его вот так, по главам. К тому же многие концепции,
которые были актуальными, скажем, в 90-ые, сейчас во многом устарели.
Очень рекомендую прочесть книгу "C++ для профессионалов" (Н. Солтер, С. Клепер),
затем попытаться осилить "Imperfect C++" (М. Уилсон). После этого можно смело
переходить на труды классиков — Саттера, Мейерса, Александреску, Бека, Эллисона,
Страуструпа, Макконнелла, Джосаттиса и других.
За авторов и ответы спасибо, но т.к. пол книги осилил(хотя поняд 40%-50%, думаю не больше), надо закончить, дальше посмотрю что-то из того что посоветовали.
А вот на счет практитки вопрос: в работе всегда хватало чистого С и Ассемблера, т.к. специфика работы такая, а теперь вот собираюсь больше в software developing переходить, так вот, с практикой не знаю как быть, раньше толко простые, почти элементарные классы использовал в простых программках, недавно взялся за опенсорс проект, часть которого на C++, но пока не очень.
Может есть какая литература, с примерами, советами, методами, чтоб проникнуться возможностями C++, и закрепить их, а то без практики жевать книги всухую не очень полезно, часть плохо понимается, часть забывается.
Здравствуйте, okman, Вы писали:
O>Очень рекомендую прочесть книгу "C++ для профессионалов" (Н. Солтер, С. Клепер), O>затем попытаться осилить "Imperfect C++" (М. Уилсон). После этого можно смело O>переходить на труды классиков — Саттера, Мейерса, Александреску, Бека, Эллисона, O>Страуструпа, Макконнелла, Джосаттиса и других.
Удивительно, что Imperfect C++ оказался на 2-ом месте в порядке чтения. Это ведь и не учебник вовсе, скорее сборник взаимосвязанных статей про довольно сложные вещи написанный сложным языком. И кстати, есть русский перевод? В оригинале там еще и английский более сложный чем обычно в технических книгах.
PS. Или надо понимать буквально: только "попытаться осилить"?
I>Удивительно, что Imperfect C++ оказался на 2-ом месте в порядке чтения. Это ведь и не учебник вовсе, скорее сборник взаимосвязанных статей про довольно сложные вещи написанный сложным языком. И кстати, есть русский перевод? В оригинале там еще и английский более сложный чем обычно в технических книгах.
Здравствуйте, savgur, Вы писали:
S>Подскажите, в какой последовательности изучать С++ и все что с ним напрямую связано?
Вот так:
1. берёте хорошего программиста (или двух)
2. ставите перед собой небольшую задачу. (Раз вы хотите стать программистом, наверняка они у вас уже есть.) (возможно программисты вам её поставят)
Требования к задачи:
1. простая с точки зрения естественных наук (математика физика и т.п.)
2. сложная, или не очень — с точки зрения программирования (сложность сами выбирайте)
в качестве первой такой задачи может быть например копирование файла из одного места в другое с показом процента от скопированного
3. начинаете проектировать, никого не спрашивая и ничего не читая.
В этом пункте язык программирования не должен влиять на проектирование.
Например: применительно к данной задаче копирования файла будет выглядеть примерно так: первая штука спрашивает у пользователя имя файла, другая штука читает с диска, третья штука пишет файл на диск, четвертая перекладывает байты файла от читателя к писателю и т.п.
4. начинаете реализовывать.
тут у вас станет возникать куча вопросов т.к. вы не знаете как переложить спроектированное Вами на язык которому вы учитесь. Вот тут Вам пригодятся хорошие программисты из первого пункта. Вы их спрашивайте — они вам отвечают. Поначалу вы будете спрашивать их очень много и вам, возможно, будет казаться что задача невыполнима. Но она выполнима, даже быстрее чем вы думаете. (тут зависит еще от программистов, конечно. Они должны по пути минимального сопротивления вас вести к цели).
Во время реализации Вы должны внимательно прислушиваться к вашим внутренним позывам. Примеры таких позывов:
1. возьму ка я скопирую этот текст программы и так будет быстрее.
2. большая штука получается. ну я то в ней разбираюсь да и ладно.
3. как бы не забыть это действие
и т.п.
как только они встречаются зовите программистов из п.1 на помощь
После каждой реализованной мини-штуки (они могут быть очень маленькими) можно звать программистов из п.1 Пусть они её проверят и подскажут.
Итого:
1. учимся проектировать и писать код
2. не останавливаемся на лишних вещах которыми "обогащены" книги для новичков
3. на выходе получаем довольно качественный проект+код, который уже можно использовать в реальных приложениях. (Наверняка, конечно, потребуется небольшая доработка)
Здравствуйте, Vamp, Вы писали:
S>>Может что-то еще посоветуете? Какую-то литературу с примерами и т.п. V>Четырехкнижие. 2 книжки Мейерса, а потом две книжки Саттера.
Саттера и Мейерса нужно читать после некоторого опыта программирования на плюсах, т.к.
на начальном этапе даже описываемые проблемы не совсем понятны, не то что рекомендации по избавлению от них.
okman wrote:
> Как ни странно, первоклассных книг по C++ совсем немного (думаю, что > наберется > не более 15-20, в остальных придется тщательно выискивать "граммы радия > среди
Есть такая книга. Дейтел + Дейтел. Хороший учебник по С++, я считаю.
Но это именно учебник, это как язык работает, а не как им надо пользоваться
(в стиле Меерса).
Приветствую, igna.
Вы писали:
I>Удивительно, что Imperfect C++ оказался на 2-ом месте в порядке чтения. Это ведь и не учебник вовсе, скорее сборник взаимосвязанных статей про довольно сложные вещи написанный сложным языком. И кстати, есть русский перевод? В оригинале там еще и английский более сложный чем обычно в технических книгах.
I>PS. Или надо понимать буквально: только "попытаться осилить"?
Я считаю, что во многие аспекты языка лучше "въезжать" как можно раньше, иначе
будут проблемы. Обе рекомендованные книги, на мой взгляд, в наивысшей степени раскрывают C++
во всей его вопиющей красе. Русский перевод "Imperfect C++" есть. Кажется, "Практический
подход к решению проблем программирования C++" или что-то вроде того.
То, что сложная — да. Я раза 3 или 4 перечитывал, только после этого (и определенной практики)
многое стало проясняться.
Здравствуйте, MasterZiv, Вы писали:
MZ>okman wrote:
>> Как ни странно, первоклассных книг по C++ совсем немного (думаю, что >> наберется >> не более 15-20, в остальных придется тщательно выискивать "граммы радия >> среди
MZ>Есть такая книга. Дейтел + Дейтел. Хороший учебник по С++, я считаю. MZ>Но это именно учебник, это как язык работает, а не как им надо пользоваться MZ>(в стиле Меерса).
Да, хороший учебник. Хотя там и не рассматриваются шаблоны и STL.
Беда таких учебников в том, что в них обычно не делается попыток сразу
привить правильные "рефлексы", типа того, чтобы писать так:
for (iter_t it = it.begin(), iter_t itEnd = it.end(); it != itEnd; ++i)
{
...
}
а не так:
for (iter_it it = it.begin(); it != it.end(); it++)
{
...
}
, потому что первая форма, как правило, реализуется более эффективно.
В итоге вторая форма закрепляется на уровне автоматизма и со временем
перекочевывает в большие разработки, что мы с вами можем наблюдать повсеместно.
Повторю, это только мое мнение.
okman wrote:
> > Да, хороший учебник. Хотя там и не рассматриваются шаблоны и STL.
Рассматриваются. Его было 3 или 4 издания. В последних -- рассматриваются.
Естественно, брать надо последние издания.
> Беда таких учебников в том, что в них обычно не делается попыток сразу > привить правильные "рефлексы", типа того, чтобы писать так:
Там -- делается.
> , потому что первая форма, как правило, реализуется более эффективно.
Это всё брызги, пос сравнению со всеми остальными проблемами при изучении С++.
Это может и компилятор соптимизировать.
Здравствуйте, MasterZiv, Вы писали:
MZ>okman wrote:
>> >> Да, хороший учебник. Хотя там и не рассматриваются шаблоны и STL.
MZ>Рассматриваются. Его было 3 или 4 издания. В последних -- рассматриваются. MZ>Естественно, брать надо последние издания.
>> Беда таких учебников в том, что в них обычно не делается попыток сразу >> привить правильные "рефлексы", типа того, чтобы писать так:
MZ>Там -- делается.
Тогда книга и впрямь классная.
>> , потому что первая форма, как правило, реализуется более эффективно.
MZ>Это всё брызги, пос сравнению со всеми остальными проблемами при изучении С++. MZ>Это может и компилятор соптимизировать.
...Ни один компилятор не удержит меня от написания класса с открытыми данными,
кучей перегрузок, имеющего жесткие зависимости и виртуальные функции при
отсутствии виртуального деструктора...
Re: Последовательность изучения C++
От:
Аноним
Дата:
29.06.10 09:08
Оценка:
Здравствуйте, savgur, Вы писали:
S>Всем добрый день.
S>Подскажите, в какой последовательности изучать С++ и все что с ним напрямую связано?
S>На C++ перехожу с С, раньше читал пару бесполезных книжек по С++, сейчас дочитываю Страуструпа, затем думаю учить STL и boost, т.к. это вроде первоочередные библиотеки для изучения. S>Может что-то еще посоветуете? Какую-то литературу с примерами и т.п.
Здравствуйте, savgur, Вы писали:
S>Может есть какая литература, с примерами, советами, методами, чтоб проникнуться возможностями C++, и закрепить их, а то без практики жевать книги всухую не очень полезно, часть плохо понимается, часть забывается.
Здравствуйте, okman, Вы писали:
O>Беда таких учебников в том, что в них обычно не делается попыток сразу O>привить правильные "рефлексы", типа того, чтобы писать так:
O>for (iter_t it = it.begin(), iter_t itEnd = it.end(); it != itEnd; ++i) O>{ O> ... O>}
O>а не так:
O>for (iter_it it = it.begin(); it != it.end(); it++) O>{ O>... O>}
Кстати, в Imperfect C++ тоже используется вторая форма, хотя Wilson утверждает, что в работе повсеместно использует первую.