Последовательность изучения C++
От: savgur Россия  
Дата: 28.06.10 16:06
Оценка:
Всем добрый день.

Подскажите, в какой последовательности изучать С++ и все что с ним напрямую связано?

На C++ перехожу с С, раньше читал пару бесполезных книжек по С++, сейчас дочитываю Страуструпа, затем думаю учить STL и boost, т.к. это вроде первоочередные библиотеки для изучения.
Может что-то еще посоветуете? Какую-то литературу с примерами и т.п.
Re: Последовательность изучения C++
От: Pavel Dvorkin Россия  
Дата: 28.06.10 16:14
Оценка: 2 (2) +2 :)
Здравствуйте, savgur, Вы писали:


S>Подскажите, в какой последовательности изучать С++ и все что с ним напрямую связано?


1. Классы, их организация, поля и методы классов.
2. Наследование.
3. Полиморфизм, виртуальные функции.
4. Шаблоны.
5. Исключения.
6. А уж потом и STL, и boost и что угодно.

И по каждому пункту — практика, практика и практика. Пока не уверен, что пункт i хорошо понимаешь — к пункту i+1 не переходить.
With best regards
Pavel Dvorkin
Re: Последовательность изучения C++
От: Vamp Россия  
Дата: 28.06.10 19:30
Оценка: +1 -1
S>Может что-то еще посоветуете? Какую-то литературу с примерами и т.п.
Четырехкнижие. 2 книжки Мейерса, а потом две книжки Саттера.
Да здравствует мыло душистое и веревка пушистая.
Re: Последовательность изучения C++
От: LaptevVV Россия  
Дата: 28.06.10 20:24
Оценка:
Здравствуйте, savgur, Вы писали:

S>Всем добрый день.


S>Подскажите, в какой последовательности изучать С++ и все что с ним напрямую связано?


S>На C++ перехожу с С, раньше читал пару бесполезных книжек по С++, сейчас дочитываю Страуструпа, затем думаю учить STL и boost, т.к. это вроде первоочередные библиотеки для изучения.

S>Может что-то еще посоветуете? Какую-то литературу с примерами и т.п.
Я б рекомендовал начать с книжки Стенли Липпмана из красной серии С++ IN Depth/ Липпман ее специально писал для программеров, которые работали на других языках, но потребовался С++.
А далее — по вкусу.
Классы, шаблоны, STL — в таком порядке.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Последовательность изучения C++
От: okman Беларусь https://searchinform.ru/
Дата: 28.06.10 23:27
Оценка: +1
Здравствуйте, savgur.
Вы писали:

S>Всем добрый день.


S>Подскажите, в какой последовательности изучать С++ и все что с ним напрямую связано?


S>На C++ перехожу с С, раньше читал пару бесполезных книжек по С++, сейчас дочитываю Страуструпа, затем думаю учить STL и boost, т.к. это вроде первоочередные библиотеки для изучения.

S>Может что-то еще посоветуете? Какую-то литературу с примерами и т.п.

Если я правильно понял, Вы собираетесь профессионально заниматься C++.
Тогда Вам лучше всего быстро пройти все эти beginners tutorials (я имею в
виду "бесполезные книжки по С++", а отнюдь не Страуструпа) и как можно скорее
приступить к освоению мастерских техник, стандартов кодирования и вообще
навыков "выживания" в мире кодинга.

Как ни странно, первоклассных книг по C++ совсем немного (думаю, что наберется
не более 15-20, в остальных придется тщательно выискивать "граммы радия среди
тонн руды"). На мой взгляд, примеры, которыми изобилует соответствующая литература,
особенно для начинающих, не дают почти никакого представления о реальных проблемах,
с которыми встречается программист, и только закрепляют плохие привычки, от которых
позже будет невозможно избавиться. Осознание этого факта приходит не сразу — как
правило, при встрече с первым большим проектом. C++ — слишком гибкий и опасный
для того, чтобы изучать его вот так, по главам. К тому же многие концепции,
которые были актуальными, скажем, в 90-ые, сейчас во многом устарели.

Очень рекомендую прочесть книгу "C++ для профессионалов" (Н. Солтер, С. Клепер),
затем попытаться осилить "Imperfect C++" (М. Уилсон). После этого можно смело
переходить на труды классиков — Саттера, Мейерса, Александреску, Бека, Эллисона,
Страуструпа, Макконнелла, Джосаттиса и других.

Удачи !
Re: Последовательность изучения C++
От: savgur Россия  
Дата: 29.06.10 00:04
Оценка:
За авторов и ответы спасибо, но т.к. пол книги осилил(хотя поняд 40%-50%, думаю не больше), надо закончить, дальше посмотрю что-то из того что посоветовали.
А вот на счет практитки вопрос: в работе всегда хватало чистого С и Ассемблера, т.к. специфика работы такая, а теперь вот собираюсь больше в software developing переходить, так вот, с практикой не знаю как быть, раньше толко простые, почти элементарные классы использовал в простых программках, недавно взялся за опенсорс проект, часть которого на C++, но пока не очень.
Может есть какая литература, с примерами, советами, методами, чтоб проникнуться возможностями C++, и закрепить их, а то без практики жевать книги всухую не очень полезно, часть плохо понимается, часть забывается.
Re[2]: Последовательность изучения C++
От: igna Россия  
Дата: 29.06.10 04:37
Оценка:
Здравствуйте, okman, Вы писали:

O>Очень рекомендую прочесть книгу "C++ для профессионалов" (Н. Солтер, С. Клепер),

O>затем попытаться осилить "Imperfect C++" (М. Уилсон). После этого можно смело
O>переходить на труды классиков — Саттера, Мейерса, Александреску, Бека, Эллисона,
O>Страуструпа, Макконнелла, Джосаттиса и других.

Удивительно, что Imperfect C++ оказался на 2-ом месте в порядке чтения. Это ведь и не учебник вовсе, скорее сборник взаимосвязанных статей про довольно сложные вещи написанный сложным языком. И кстати, есть русский перевод? В оригинале там еще и английский более сложный чем обычно в технических книгах.

PS. Или надо понимать буквально: только "попытаться осилить"?
Re[3]: Последовательность изучения C++
От: placement_new  
Дата: 29.06.10 05:10
Оценка:
Здравствуйте, igna, Вы писали:


I>Удивительно, что Imperfect C++ оказался на 2-ом месте в порядке чтения. Это ведь и не учебник вовсе, скорее сборник взаимосвязанных статей про довольно сложные вещи написанный сложным языком. И кстати, есть русский перевод? В оригинале там еще и английский более сложный чем обычно в технических книгах.


есть русский
Re: Последовательность изучения C++
От: Feonyf  
Дата: 29.06.10 05:31
Оценка:
Здравствуйте, savgur, Вы писали:

S>Подскажите, в какой последовательности изучать С++ и все что с ним напрямую связано?


Вот так:
1. берёте хорошего программиста (или двух)
2. ставите перед собой небольшую задачу. (Раз вы хотите стать программистом, наверняка они у вас уже есть.) (возможно программисты вам её поставят)
Требования к задачи:
1. простая с точки зрения естественных наук (математика физика и т.п.)
2. сложная, или не очень — с точки зрения программирования (сложность сами выбирайте)
в качестве первой такой задачи может быть например копирование файла из одного места в другое с показом процента от скопированного
3. начинаете проектировать, никого не спрашивая и ничего не читая.
В этом пункте язык программирования не должен влиять на проектирование.
Например: применительно к данной задаче копирования файла будет выглядеть примерно так: первая штука спрашивает у пользователя имя файла, другая штука читает с диска, третья штука пишет файл на диск, четвертая перекладывает байты файла от читателя к писателю и т.п.
4. начинаете реализовывать.
тут у вас станет возникать куча вопросов т.к. вы не знаете как переложить спроектированное Вами на язык которому вы учитесь. Вот тут Вам пригодятся хорошие программисты из первого пункта. Вы их спрашивайте — они вам отвечают. Поначалу вы будете спрашивать их очень много и вам, возможно, будет казаться что задача невыполнима. Но она выполнима, даже быстрее чем вы думаете. (тут зависит еще от программистов, конечно. Они должны по пути минимального сопротивления вас вести к цели).
Во время реализации Вы должны внимательно прислушиваться к вашим внутренним позывам. Примеры таких позывов:
1. возьму ка я скопирую этот текст программы и так будет быстрее.
2. большая штука получается. ну я то в ней разбираюсь да и ладно.
3. как бы не забыть это действие
и т.п.
как только они встречаются зовите программистов из п.1 на помощь
После каждой реализованной мини-штуки (они могут быть очень маленькими) можно звать программистов из п.1 Пусть они её проверят и подскажут.

Итого:
1. учимся проектировать и писать код
2. не останавливаемся на лишних вещах которыми "обогащены" книги для новичков
3. на выходе получаем довольно качественный проект+код, который уже можно использовать в реальных приложениях. (Наверняка, конечно, потребуется небольшая доработка)
Моя строка построения буста:
.\bjam link=static threading=multi runtime-link=static -j %NUMBER_OF_PROCESSORS% --with-filesystem --with-thread --with-date_time address-model=64
Re[2]: Последовательность изучения C++
От: ArtK  
Дата: 29.06.10 05:44
Оценка: +3
Здравствуйте, Vamp, Вы писали:

S>>Может что-то еще посоветуете? Какую-то литературу с примерами и т.п.

V>Четырехкнижие. 2 книжки Мейерса, а потом две книжки Саттера.

Саттера и Мейерса нужно читать после некоторого опыта программирования на плюсах, т.к.
на начальном этапе даже описываемые проблемы не совсем понятны, не то что рекомендации по избавлению от них.
Re: Последовательность изучения C++
От: igna Россия  
Дата: 29.06.10 06:01
Оценка:
Здравствуйте, savgur, Вы писали:

S>Подскажите, в какой последовательности изучать С++ и все что с ним напрямую связано?


Stroustrup, The C++ Programming Language

Plauger, Stepanov, Lee, Musser, The C++ Standard Template Library
(Обычно вместо этой книги рекомендуют Josuttis, The C++ Standard Library, но посмотри сколько там ошибок!)

Meyers, Effective C++: 55 Specific Ways to Improve Your Programs and Designs
Meyers, More Effective C++: 35 New Ways to Improve Your Programs and Designs
Meyers, Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library

Sutter, Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions
Sutter, More Exceptional C++: 40 New Engineering Puzzles, Programming Problems, and Solutions
Sutter, Exceptional C++ Style: 40 New Engineering Puzzles, Programming Problems, and Solutions

Кроме того полезно (почти необходимо) иметь стандарт C++.
Re[2]: Последовательность изучения C++
От: MasterZiv СССР  
Дата: 29.06.10 07:09
Оценка:
okman wrote:

> Как ни странно, первоклассных книг по C++ совсем немного (думаю, что

> наберется
> не более 15-20, в остальных придется тщательно выискивать "граммы радия
> среди

Есть такая книга. Дейтел + Дейтел. Хороший учебник по С++, я считаю.
Но это именно учебник, это как язык работает, а не как им надо пользоваться
(в стиле Меерса).
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Последовательность изучения C++
От: okman Беларусь https://searchinform.ru/
Дата: 29.06.10 08:06
Оценка:
Приветствую, igna.
Вы писали:

I>Удивительно, что Imperfect C++ оказался на 2-ом месте в порядке чтения. Это ведь и не учебник вовсе, скорее сборник взаимосвязанных статей про довольно сложные вещи написанный сложным языком. И кстати, есть русский перевод? В оригинале там еще и английский более сложный чем обычно в технических книгах.


I>PS. Или надо понимать буквально: только "попытаться осилить"?


Я считаю, что во многие аспекты языка лучше "въезжать" как можно раньше, иначе
будут проблемы. Обе рекомендованные книги, на мой взгляд, в наивысшей степени раскрывают C++
во всей его вопиющей красе. Русский перевод "Imperfect C++" есть. Кажется, "Практический
подход к решению проблем программирования C++" или что-то вроде того.
То, что сложная — да. Я раза 3 или 4 перечитывал, только после этого (и определенной практики)
многое стало проясняться.
Re[3]: Последовательность изучения C++
От: okman Беларусь https://searchinform.ru/
Дата: 29.06.10 08:17
Оценка: -1
Здравствуйте, 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++)
{
...
}

, потому что первая форма, как правило, реализуется более эффективно.
В итоге вторая форма закрепляется на уровне автоматизма и со временем
перекочевывает в большие разработки, что мы с вами можем наблюдать повсеместно.
Повторю, это только мое мнение.
Re[4]: Последовательность изучения C++
От: MasterZiv СССР  
Дата: 29.06.10 08:24
Оценка:
okman wrote:

>

> Да, хороший учебник. Хотя там и не рассматриваются шаблоны и STL.

Рассматриваются. Его было 3 или 4 издания. В последних -- рассматриваются.
Естественно, брать надо последние издания.

> Беда таких учебников в том, что в них обычно не делается попыток сразу

> привить правильные "рефлексы", типа того, чтобы писать так:

Там -- делается.

> , потому что первая форма, как правило, реализуется более эффективно.


Это всё брызги, пос сравнению со всеми остальными проблемами при изучении С++.
Это может и компилятор соптимизировать.
Posted via RSDN NNTP Server 2.1 beta
Re[5]: Последовательность изучения C++
От: okman Беларусь https://searchinform.ru/
Дата: 29.06.10 08:41
Оценка:
Здравствуйте, 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>Может что-то еще посоветуете? Какую-то литературу с примерами и т.п.

книга "Эффективное программирование на C++"
http://www.williamspublishing.com/Books/5-8459-0350-5.html
замечательная книга, я ее прочитал полностью, и частенько заглядываю, для повторения
Re[2]: Последовательность изучения C++
От: AlexGin Беларусь  
Дата: 29.06.10 09:44
Оценка:
Здравствуйте, savgur, Вы писали:

S>Может есть какая литература, с примерами, советами, методами, чтоб проникнуться возможностями C++, и закрепить их, а то без практики жевать книги всухую не очень полезно, часть плохо понимается, часть забывается.


Я уверен, что на: http://www.codeproject.com и на: http://www.codeguru.com и, прежде всего, на нашем RSDN!
Можно найти немало хороших примеров проектов учебных программ на C++ !!!
Re[2]: Последовательность изучения C++
От: AlexGin Беларусь  
Дата: 29.06.10 10:08
Оценка:
Здравствуйте, Feonyf, Вы писали:

F>2. большая штука получается. ну я то в ней разбираюсь да и ладно.


Да, сегодня разберусь, а через пару месяцев буду с ужасом смотреть на этот страшный,
нигде не комментированный piece of shit и ужасаться:

-OMG! Разве я мог написать такое!!! Ничего не понятно!
Re[4]: Последовательность изучения C++
От: igna Россия  
Дата: 29.06.10 10:14
Оценка:
Здравствуйте, 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 утверждает, что в работе повсеместно использует первую.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.