четверг, сентября 21, 2006

Хорошие книги по C++ для продолжающих

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




"Effective C++: 55 Specific Ways to Improve Your Programs and Designs", автор Scott Meyers. Чаще всего название сокращают до "Effective C++". Скотт Мейерс рассказывает, что книга оказалась очень удачна тем, что разбита на маленькие независимые друг от друга главы. И ее очень удобно читать урывками, когда нет времени: в транспорте, в перерывах между занятиями. У этой книги есть продолжение - "More Effective C++: 35 New Ways to Improve Your Programs and Designs". Вот по ее поводу Мейерс сокрушается, что не удалось выдержать тот же стиль, и она по популярности проигрывает первой.
Книга эта написана довольно давно, поэтому осторожнее относитесь к фразам "это еще не во всех современных компиляторах реализовано" и подобным. Это современность была несколько лет назад.
Обратите внимание на цифры в названиях. Изначально в "Effective C++" было 50 советов, но в третьем издании Мейерс добавил еще 5 и получилось, что их теперь 55. В наших книжных магазинах названия переводены слегка по-разному, но по числам в названии всегда можно понять о какой именно книге идет речь.
"Эффективное использование C++. 55 верных советов улучшить структуру и код ваших программ" на Ozon.ru
"Наиболее эффективное использование C++. 35 новых рекомендаций по улучшению ваших программ и проектов" на Ozon.ru




"Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions." Книга Герба Саттера, которая также имеет продолжение - More Exceptional C++. Составлена на основе его Guru of the Week. Это набор интересных вопросов по C++ с ответами на них. Я не читала книгу, а читала Guru of the Week. У Саттера на сайте написано какие именно выпуски входят в какие книги, плюс в книгах есть еще дополнительные, для затравки, я так понимаю. :-)
"Решение сложных задач на С++" на Ozon.ru
"Новые сложные задачи на C++" на Ozon.ru




"Язык программирования С++", Бьерн Страуструп. Часто на вопрос "Я хочу изучать С++, что бы мне такое почитать?" отвечают - "А почитай Страуструпа!". Это безопасный совет - Страуструп не мог написать плохо о языке своего собственного сочинения. Но вот начинать с этой книжки нельзя категорически. Её рекомендуют еще со стародавних времен, когда по С++ особенно нечего было читать. Но те времена давно прошли. Для человека незнакомого с С++ (возможно, и не знакомого с программированием вообще) - это как нокаутирующий удар. Он не просто ничего не поймет, но больше никогда и не вернется к изучению этого ужасного сложного языка. Почему так? Книга написана очень тяжелым языком. Ёмкие предложения, ничего лишнего. Остальные книги читаются легче, некоторые даже разбавлены веселыми примерами, анекдотами, а здесь такого нет. Не надо начинать с нее. А вот продолжить - стоит. Во-первых, несмотря на тяжелый язык есть что-то в ней неуловимо притягательное, когда втянешься в чтение. Во-вторых, считается, что каждый достойный С++ программист просто обязан прочитать эту книгу, так уж сложилось. Читать ее следует медленно, проникаясь духом великого и могучего языка С++, у меня ее чтение вызывает философско-пофигистические настроения...
Возможно, кому-то покажется интересным такой момент: главы этой книги сопровождаются упражнениями.
В оригинале эта книга называется "The C++ Programming Language", тут никаких сюрпризов.

"Язык программирования С++" есть на lib.ru.
"Язык программирования C++ Специальное издание" на Ozon.ru




"Современное проектирование на C++", Андрей Александреску. Книга посвящена в основном шаблонам. Это сложная в чтении книга, не надо спешить при ее чтении, над каждым примером кода придется подолгу медитировать. Процесс чтения напоминает американские горки - дух захватывает периодически.
После некоторых размышлений, я все-таки решила включить эту книгу в этот раздел, а не в раздел для фанатов. Потому что эта книга стала очень модной в последние годы и пользуется бешеной популярностью. Модный хардкор такой. :-)
При применении изложенных там приемов нужно полностью понять код и идею, иначе можно такого наворотить... Несмотря на то, что я из этой книги узнала много нового, применять эти приемы на практике мне не приходилось. Я все же стараюсь обходиться более простыми решениями.
Название оригинала: Modern C++ Design: Generic Programming and Design Patterns Applied
"Современное проектирование на C++" на Ozon.ru


Это продолжение разговора о хороших книгах по С++. Начало тут.

22 коммент.:

Анонимный комментирует...

JFYI, у Майерса и Саттера в тех же сериях есть ещё "Effective STL" и "Exceptional C++ Style".

Анонимный комментирует...

А, совсем забыл. У Саттера и Александреску вышла совместная книжка "C++ Coding Standarts". Не знаю, есть ли в русском переводе.

Анонимный комментирует...

"C++ Coding Standarts". Не знаю, есть ли в русском переводе.

Есть. Называется "Стандарты программирования на С++"

Анонимный комментирует...

Элджера, Элджера. http://www.piter.com/book/978580460045/
А я тоже писал такую статью. Поменьше, правда - как смог.
http://singalen.livejournal.com/29690.html

Анонимный комментирует...

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

Вспомнилась шутка:
"- Язык PL/1 плох так, что сложен в изучении! (менеджер)
- Нам-то что? Мы его уже знаем. (программисты на PL/1)"

Alena комментирует...

у Майерса и Саттера в тех же сериях есть ещё "Effective STL" и "Exceptional C++ Style".

Угу, "Effective STL" будет в рассказе о книгах по STL.

И зря вы так Страуструпа. Если в тексте нет ничего лишнего, то он наоборот, понимается легко.

Это исключительно мое субьективное мнение. Я периодически встречаю мнение, что это вообще лучшая книга по С++.

Stoune комментирует...

Вы знаете Алёна, как альтернатива Александреску, я бы советовал прочитать "Шаблоны С++. Справочник разработчика" Авторы: Дэвид Вандевурд, Николаи М. Джосаттис (http://www.rsdn.ru/res/book/cpp/Template.xml). Прочитав её я понял что то о чём пишет Александреску может быть доступно простым смертным. Ну и последнее откровение Мэтью Уилсон
C++. Практический подход к решению проблем программирования (+ CD-ROM)
в оригинале Imperfect C++: Practical Solutions for Real-Life Programming (http://www.ozon.ru/context/detail/id/2657586/). После её прочтения я понял, что для того чтобы делать действительно елегантные и сложные вещи, аля Александреску, необязательно иметь последний компилятор 2010 года выпуска. Некоторые примеры будут работать даже на VC++5.0(eVC). И как вы правильно заметили, читаешь Александреску, круто, но вот использовать в реальной жизни не приходится. Методики Уилсона, я начал использовать почти после прочтения первых глав, хотя до кое-чего сам дошол.

Alex Ott комментирует...

Я бы посоветовал еще следующее:
- Фундаментальные алгоритмы на С++ - Седжвик
- Стандартная библиотека С++ -- хорошо использовать в качестве справочника
- Для образования стоит прочитать статью "A Critique of C++ and Programming and Language Trends, 3ed"
- Хороши также книжки про Boost - "Beyond the C++ Standard Library. An introduction to Boost" и "C++ Template Metaprogramming"
- еще для образования можно почитать "C++ Network Programming", оно есть на русском
- Есть еще " Exceptional C++ Style. 40 New Engineering Puzzles, Programming Problems, and Solutions", но есть ли она на русском - не помню

Анонимный комментирует...

Стоит отметить, что на lib.ru есть только второе издание, которое по сравнению с третьим немного неточное ;)
Вот тут можно найти несколько книг по С++ в электронном виде, включая 3е дополненное издание Страуструпа, Александреску, Мейерса. В общем полезный ресурс:)

Анонимный комментирует...

Уважаемая Алена!
Выражаю Вам глубокую признательность,
за заслуги перед продвежением С++ в темные массы!8)))
Был немного удевлен(надо сказать приятно удивлен 8)), когда увидел блог
девушки, посвященный программингу и, темболее С++!

Желаю Вам удачи в этом благородном деле!8)

С уважением, DeepRat aka C1@# (vprofi@mail.ru)

Alena комментирует...

Уважаемая Алена!
Выражаю Вам глубокую признательность,
за заслуги перед продвежением С++ в темные массы!8)))


Спасибо, стараюсь :-)

Анонимный комментирует...

Веприк said...я бы советовал прочитать "Шаблоны С++. Справочник разработчика" Авторы: Дэвид Вандевурд, Николаи М. Джосаттис (http://www.rsdn.ru/res/book/cpp/Template.xml).
Давненьк разыскиваю даннуюю книженци, возможно у кого-то имеется электронный вариант. Буду очень благодарен

Анонимный комментирует...

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

Анонимный комментирует...

Программирование: принципы и практика использования C++
Бьярне Страуструп

Programming: Principles and Practice Using C++
Bjarne Stroustrup

http://www.williamspublishing.com/Books/978-5-8459-1621-1.html

Книга уже продается, хотя год издания 2011 :D И в действительности подходит начинающим. В отличие от "Язык программирования С++", которая больше как справочник имхо. Но по охвату материала обе хороши.

Unknown комментирует...

Михаил Фленов - Программирование на C++ глазами хакера

Анонимный комментирует...

Здравствуйте, Алена! Огромное спасибо за Ваш блог!!!
Посоветуйте пожалуйста продолжающему изучать С++... Прочел Дэвис "С++ для чайников" и Шилдт "С++ Базовый курс"... Что дальше? Судя по требованиям к соискателям на должность С++ developer, необходимы знания MFC и API. Порекомендуйте пожалуйста литературу в этой области.
Заранее благодарен, Евгений.

Alena комментирует...

Анонимный
Здравствуйте, Алена! Огромное спасибо за Ваш блог!!!

Пожалуйста :-)

Посоветуйте пожалуйста продолжающему изучать С++... Прочел Дэвис "С++ для чайников" и Шилдт "С++ Базовый курс"... Что дальше? Судя по требованиям к соискателям на должность С++ developer, необходимы знания MFC и API. Порекомендуйте пожалуйста литературу в этой области.
Заранее благодарен, Евгений.


Требования сильно зависят от того, что именно вы будете разрабатывать. Знания MFC и WinAPI нужны были для разработки оконных приложений под Windows и было это довольно давно.
Тут я ничего посоветовать не могу, потому что этим не занимаюсь.

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

Евгений комментирует...

Со специализацией уже определился, точнее меня определили будущие работадатели, сказали под Linux нужно писать. Прошел техническое собеседование по основам С++, чтоб попасть на 3-х месячный курс обучения в большой ИТ-конторе:) Ведущий группы порекомендовал читать пока такие книги:
Крэг Ларман "Применение UML 2.0 и шаблонов проектирования."
Гамма - "Приемы объектно-ориентированного проектирования. Паттерны проектирования."
Я так понимаю - это классика...
Какое Ваше мнение об этих книгах?
Если MFC и API не актуальны, то что же используют под Windows? С#?

Alena комментирует...

Евгений
Крэг Ларман "Применение UML 2.0 и шаблонов проектирования."
Гамма - "Приемы объектно-ориентированного проектирования. Паттерны проектирования."
Я так понимаю - это классика...
Какое Ваше мнение об этих книгах?


Первую не читала. Вторая - хорошая книга и да, классика.

Если MFC и API не актуальны, то что же используют под Windows? С#?

C#, угу.

Анатолий комментирует...

Я вообще-то всегда считал, что Скотт Майерс взял эти примеры из своей практики...Они очень ценны так позволяют перейти на уровень профессионала и даже эксперта. Но как выяснилось это лажа, Скотт Майерс просто писатель. а не хороший программист. Он просто зарабатывает деньги! Потому что почитав источник его советов Guru of the weeks я увидел, что они все оттуда. А туда пишут разные программисты... Т.е. это коллективный труд, а не его персональная заслуга. кстати, в Guru of the weeks намного больше примерчиков всяких и это актуально ибо всё время пополняется. И вы можете туда отправить что-то ценное, если найдёте и это послужит уроком других. Обмен опытом это очень хорошо!!! Правда там по английски, но для меня всё равно... Читайте Guru of the weeks и не надо никаких книг покупать! К тому же это ещё и бесплатно.

Roman G. комментирует...

В целом все книги в описании устарели. Язык и стандарт развивается. На сейчас я бы посоветовал последнее на сейчас издание Страуструпа (пока только на английском) и Майерса описывающие C++ 11 и С++ 14.

Alena комментирует...

Roman G.

В целом все книги в описании устарели. Язык и стандарт развивается. На сейчас я бы посоветовал последнее на сейчас издание Страуструпа (пока только на английском) и Майерса описывающие C++ 11 и С++ 14.

Так и пост 2006 года. Вот новый: http://alenacpp.blogspot.com/2015/05/11.html