Литература по программированию и около того

Всем привет, второй пост, выложу список литературы по программированию (конкретно по С++ и некотором около технологиям и фреймворкам). Не очень люблю всякие онлайн курсы, ибо как мне кажется довольно поверхностное повествование. 


С++ - прекрасный язык, но в голом виде мало кому нужен, как правило необходимо знание какого-нибудь GUI/Game engine фреймворка, БД, сети, работа с видео-кодеками. Крайне не рекомендуют изучать С++ с изучения Си. Литература:

1) cplusplus.com - справочник по языку, так же можно найти статьи по WinAPI итд.

1) Эккель "Философия С++ Vol 1&2" - вводная книга по языку, правда старая и не включает стандарт С++11(новый стандарт)

2) Липпман "С++ базовый курс" - вводная книга по языку, включает С++11.

3) Джосаттис  "Стандартная библиотека" (2ое издание по стандарту С++11) - можно использовать как справочник.

4) Серия книг Герба Саттера "Решения сложных задач на С++" "Решение новых сложных задач на С++" с Александреску "Стандарты программирования С++"  - Интересные вещи разбираются, читать выборочно т.к. например умные указатели(smart pointers, а разбираемый auto_ptr - считается depricated) уже вошли в стандарт С++11.

5) Серия книг Скотта Мейерса "Эффективный С++" примерно тоже самое серия Саттера, единственное у Саттера нет книги по новому стандарту, у Мейерса есть - шикарная штука.

6) Уильямс "Парарллельное программирование на С++ в действии" - многопоточность стала поддерживаться на уровне стандарта(раньше была реализация от сторонних вендоров) и чтиво по мьютексам, атомарным переперченным.

7) Стивенc "UNIX разработка сетевых приложений" "Unix взаимодействие процессов" - первая книга по сетям, подробный разбор как работают такие протоколы как TCP UDP написание своих клиентов и серверов, вторая - по IPC. Книга по UNIX, подойдут так и для Windows, в реальных проектах не думаю что придется писать свой клиент с нуля.

8) Стивенс "Unix. Профессиональное программирование" - хорошая(лучшая?) книга по POSIX.

9) Рихтер "Windows для профессионалов" - WinAPI

10) Бланшет "QT 4: программирование GUI на С++" - хорошая вводная хоть по Qt хоть и по 4 версии, Саммерфильд "Qt Профессиональное программирование" - в догонку, бесплатная книга по QML (необходимы базовые знания JS), самая лучшая онлайн документация с кучей примеров, готовых решений, уроков на ютубе

11) "Примеры объектно-ориентированного проектирования" (Gang of Four) или Александреску "Современное проектирование на С++" - книги по паттернам, вторая чуть сложнее

12) Седжвик "Алгоритмы на С++" - жестокое чтиво по алгоритмам графам и все такое, с доказательством с задачами.

13) ::boost - открытая библиотека по С++, можно сказать пре-стандарт


C++11 - стандарт 11 года, который внес много нововведений, С++14 - текущий стандарт, по сути доработка над С+11, С++17 - будущий стандарт.


PS Старался охватить основные темы и привести лучших авторов(хоть все книги есть на русском - рекомендую оригинал). Не стал включать книги по смежным темам - SQL, HTML, JS итд.

Почему включил Qt, а XXX не включил?- имхо Qt самый востребованный фреймворк по С++.


PPS Для работы возможно потребуется знание таких технологий как git, svn, tfs, cmake, qmake, qbs

Вы смотрите срез комментариев. Показать все
1
Автор поста оценил этот комментарий

"Крайне не рекомендуют изучать С++ с изучения Си"
Ну хз я учил С++ начиная с Си и ни о чем не жалею.
На С++ чтобы объяснить даже базовый Hello World надо рассказать о std::ostream, перегрузке операторов и даже затронуть тему ООП. Неподготовленным ушам это просто гора инфы на голову, многовато для первого опыта

раскрыть ветку (28)
Автор поста оценил этот комментарий
неподготовленному и не нужно это объяснять. для того чтобы уметь складывать 1 и 1 не нужно изучать теорию чисел, так же и тут
раскрыть ветку (27)
Автор поста оценил этот комментарий

В таком случае рассказ будет наполовину состоять из "эту строчку мы объясним когда-нибудь потом".

раскрыть ветку (26)
Автор поста оценил этот комментарий
и что в этом страшного? каким вообще образом человеку, который начинает с хелоуворлд (т.е. с нуля) ты собираешься объяснять ostream?
раскрыть ветку (22)
Автор поста оценил этот комментарий

Дак я про то и говорю, Си в этом плане попроще будет

раскрыть ветку (21)
Автор поста оценил этот комментарий
вместо cout рассказывать про printf будешь? а для новичка много разницы?
раскрыть ветку (16)
Автор поста оценил этот комментарий

Ну как бы достаточно сказать
"вот main printf - это функции, main мы вот с вами пишем, а printf есть в стандартной библиотеке. Позже мы разберем тему функций подробнее. " - всего одна тема которую мы потом изучим - функции. А в случае с С++ их будет как минимум 3 - перегрузка операторов (operator<<), классы (std::ostream) ну и функции. Т.е. 1 против 3.

раскрыть ветку (15)
Автор поста оценил этот комментарий
в случае плюсов мы говорим так:
"вот cout - это объект, представляющий собой стандартный поток вывода, пишем мы тоже в main, а cout тоже есть в стандартной библиотеке, позже разберём тему классов подробнее".

перегрузка операторов как таковая - это скорее подраздел для более глобальной темы функций. классы - было бы странно, если бы мы не изучали классы изучая с++. вообще говоря, эти темы (функции и классы) изучаться будут неизбежно (если, офк, хотим хоть сколь-нибудь серьёзно этим заниматься), так что проблемы как таковой я не вижу.
раскрыть ветку (14)
Автор поста оценил этот комментарий

Я не говорю что проблема.
Просто сишку можно изучать несколько более последовательно, оставляя маньше вопросов висящими в воздухе.

раскрыть ветку (13)
Автор поста оценил этот комментарий
это да, только я не совсем понимаю: а в чём собственно проблема таких вопросов? изучая математику, например, таких вопросов, фактически, на порядки (без преувеличения) больше, но ведь страшного в этом ничего нет :/
раскрыть ветку (12)
Автор поста оценил этот комментарий

Хм... С вопросами - никаких проблем.
Я ведь просто ответил на дизрекомендацию начинать учить Си с С++ и объяснил почему считаю иначе. А ещё я думаю что имеет смысл учить стандарты языка последовательно (С, потом, например, можно начать с С++ 03, потом С++ 11, потом С++ 14) потому что разные проекты могут использовать разные версии языка и знание того, какими фичами ты сейчас можешь пользоваться очень полезно. А из-за того, что C++ обратно совместимый, ничего лишнего изучено не будет (ну разве что по мелочи).

раскрыть ветку (11)
Автор поста оценил этот комментарий

не согласен, еще время тратить на изучение всяких маллоков, каллоков, фри, указателей на функции вместо методов, а после переучиваться и думать классами. Помнится приходилось работать с гавнокодом на Си++ истоки которого были на Си(возврат инта в виде кода ошибки, передача только по указателям, строки в виде указателя на массив, сраные  макросы).

нененене, нахуй Си

Есть мнение что С++ без обратной совместимости с Си станет намного лучше и будет быстрее развиваться.

раскрыть ветку (3)
Автор поста оценил этот комментарий
не согласен, еще время тратить на изучение всяких маллоков, каллоков, фри, указателей на функции вместо методов, а после переучиваться и думать классами.

Повезет если ученик не любопытный и ему пофигу как оно внутри работает. В ином случае все равно придется сказать что эта самая new это оператор - обертка над системным выделением памяти, вызывающий конструктор после выделения памяти.

Дальше, весь текст, по сути, оффтоп, но я болтать о проге люблю :)

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

"передача только по указателям"
Хз, от ситуации зависит.

"строки в виде указателя на массив"
согласен, сейчас это можно заменить на std::string. Но это болезнь всех легаси проектов, а не С++

"Есть мнение что С++ без обратной совместимости с Си станет намного лучше и будет быстрее развиваться."
Я тоже так думаю. Но изначально я говорил об обучении. Си проще в изучении так как в С++ сильно больше абстракций

раскрыть ветку (2)
Автор поста оценил этот комментарий
а такой козырь как сраные макросы бить нечем и они действительно сраные?)
раскрыть ветку (1)
Автор поста оценил этот комментарий

Сорри, я пропустил макросы, на работе хотел побыстрее ответить)
Макросы очень спорный момент. Раньше без них было никуда. Сейчас на себя все взяли шаблоны. Почти все можно заделать шаблонами. Но я приемлю использование макросов локально в cpp файлах. Например когда есть куча методов, в которых есть switch по огромному enum'у.

ПЫСЫ: я тут си защищаю только как язык, который легче учить, а не как язык, который лучше чем С++.
С++ мой любимый и единственный :)

Автор поста оценил этот комментарий

Нормальная практика (как правило идет ссылка еще и на главу где этот вопрос разбирается), очень нравится в этом плане Адам Фримен, а вот Страуструп - хгммм ...

раскрыть ветку (2)
Автор поста оценил этот комментарий

Я тоже не осилил Страуструпа читать, а его ещё новичкам советуют.
Может кодер он и годный, но объяснять явно не его призвание)

раскрыть ветку (1)
Автор поста оценил этот комментарий
Начинал с "принципов и практики" Страуструпа - психанул, забросил, потом открыл для себя Эккеля - оказалось все элементарно. Быть может из-за того что английский не является родным для Страуструпа.
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку