Здравствуйте, rumit7, Вы писали:
R>Думаю так:
R>0) то, что указано Вами +
R>1) С.Макконнелл "Совершенный код" must read!
R>2) David R. Butenhof "Programming with POSIX threads". Еще статьи Д.Вьюкова + были очень интересные статьи на сайте data-race.com;
R>3) М.Фаулер "Рефакторинг";
R>4) и все это дело тщательно перемешивать с практикой!
R>P.S. Не могли бы Вы написать отзыв на каждую из перечисленных Вами выше книг? Было бы очень интересно прочитать, какая из книг Вам понравилась и чем?
Ок, кратно выскажу свое мнение.
Здравствуйте, _software_engineer_, Вы писали:
___>Осилил уже
___>(за последние года 3 с половиной)
Effective C++
Здесь разжевываются основы, как употребление const, плюсовые касты (до прочтения книжки просто юзал c-style cast), использование копирующего конструктора и оператора присваивания (в том числе, как запрещать копирование, помещая их в private).
Тут же дается правило не возвращать локальные переменные по ссылке. У меня были с этим траблы даже тогда, когда вроде бы уже год программировал (не на работе, просто для себя) на плюсах.
Отсюда же узнал, что public-наследование следует употреблять только в случае отношения "is-a" между классами.
Effective STL
Еще до прочтения наступил на грабли с std::remove_if и vector<bool>
Был в восторге от того, что узнал, как с помощью mem_fun и mem_fun_ref дергать функции-члены у объектов в контейнерах одной строчкой в foreach, а не самописном цикле. А еще писал свой аллокатор.
Много очевидных вещей (для программистов, представляющих, что у стандартных контейнеров под капотом) расписано: не менять значение ключей ассоциативных контейнеров, временная сложность тех или иных операций
How to Think Like a Computer Scientist: Learning with Python
Описываются совсем основы программирования для никогда с ним не сталкивавшихся. Циклы, условия, функции, классы, исключения. На Питоне. Практической пользы для меня было 0, но сильно зацепил Python своим отличием от C-подобных языков
Dive Into Python
Приводятся интересные идиомы Питона, такие как (да, это баян уже)
', '.join(str(i) for i in range(10))
или использование в (убогих) лямбдах трюка с and-or вместо условного оператора.
Генераторы. Являющиеся документацией комменты и еще много вкусного.
Начал использовать юнит-тесты на Питоне как раз после прочтения этой книжки.
C++ Common Knowledge
При небольшом количестве страниц очень высокая концентрация полезных практик для начинающего программиста. Если бы знал, прочитал эту книжку в самом начале освоения плюсов.
Ссылки, const, RAII, чтение и написание хитровывернутого объявления прототипа или указателя на функцию без typedef, на пальцах объясняется инстанцирование и специализация шаблонов, указатели на члены, placement new.
Отсюда мне понравилась техника cross cast.
Introduction to Algorithms
Кормен рулит
Хороший справочник по алгоритмам. Решение упражнений про heap (структуру данных) помогло пройти собеседование, т.к. надо было придумать/вспомнить способ отсортировать большой массив int'ов на диске, по условию превосходящий размер оперативки.
Так же справочник пригодился для написания order-statistics tree (тот же велосипед на тему std::map, но еще можно обратиться к элементу по индексу, как в массиве, только за логарифмическое время)
Windows via C/C++
Попала ко мне эта книжка еще в школе переводная под названием "Создание эффективных Win32-приложений с учетом специфики 64-разрядной версии Windows". Сначала слегка разочаровлся в ней: а где же окна, гуй? зачем так много и уныло про потоки, виртуальную память и прочую чушь? на кой мне эти примитивы синхронизации?
А потом выборочно полистал и втянулся. Впервые узнал, что такое выравнивание, какое и зачем нужно. Так же с маппед файлами — писал хэллоу ворлды, которые с начинкой файлов работают, как с массивом. Посмотрел архитектуру памяти. Написал программку, роняющую win 98, записав пару сотен байт по разыменованному указателю сразу после 0x00010000. Сделал первую dll. Узнал про хуки и попробовал писать.
А в прошлом году нашел время почитать свежее издание.
More Effective C++
Из полезного для меня на момент прочтения — разжевывание виртуального наследования и proxy-классы.
Design Patterns
Та самая книжка GoF. Ожидал, что паттерны будут сложнее, чем они оказались на самом деле. Очень вовремя попался на глаза Command и позволил намного проще, чем я пытался сделать сам, реализовать изменение настроек в приложении с возможностью отката и возврата.
Не понравился Template Method (зачем наследоваться, чтобы всего навсего виртуальную функцию переопределить? не лучше ли упряжка из Factory и Strategy, где конкретно в плюсах фабрике будет передаваться функтор... а, ладно, это мысли вслух).
Head First Design Patterns
Меньше паттернов расписывается, но более полезных и часто встречаемых. Например, Observer и Command. Пожалуй, было бы лучше начать знакомство с паттернами именно с этой книжки, а только потом перейти к GoF.
Немного раздражают примеры на Java)
Bundle of Algorithms in C++
Мне показалось, что читается легче Кормена. На практике пока ничего применять не довелось. Так только, пришло легкое просветление на тему, что притянуть под задачу о потоке минимальной стоимости
Отступление в сторону. На втором курсе "Discrete Mathematics with Combinatorics" Андерсона здорово помогло понять на пальцах сортировки слиянием, пирамидальную быструю, бинарные деревья поиска, bfs и dfs поиск на графах, поиск кратчайшего пути и основы динамического программирования, посчитать нод методом Евклида, найти простые числа решетом Эратосфена и много-много-много всего. Вроде бы не программирование совсем, но здорово вставило. До сих пор все помню.
C++ Templates: The Complete Guide
Описан поиск Кёнига. Также помогло осилить, как писать traits. Еще интересной показалась идиома expression templates, только пока на практике не нашел, куда бы применить не для арифметики.
Читалось весьма туго.
Exceptional C++
Тема, как писать exception safe and exception neutral классы, раскрыта более чем.
Еще раз отношение между классами is-a, has-a, implemented-in-terms-of. Наследование vs композиция.
После прочтения стало бросаться в глаза, что в нашем проекте даже basic exception guarantee не обеспечивается
More Exceptional C++
Наконец-то увидел пример техники copy-on-write. Раньше много раз слышал, но было то некогда, то лень посмотреть.
Вообще книжки Саттера понравились именно стилем в форме задач, чтобы сначала самому попыжиться, дойти до решения.
Задача написать функцию, возвращающую указатель на себя.
Modern C++ Design
Пока еще не дочитал.
Не совсем обзор получился. Могу
Здравствуйте, _software_engineer_, Вы писали:
___>Осилил уже
___>(за последние года 3 с половиной)
___...
___>Сейчас читаю
___>Modern C++ Design
___>Посоветуйте, в каком направлении продолжать грызть профессию?
Думаю так:
0) то, что указано Вами +
1) С.Макконнелл "Совершенный код" must read!
2) David R. Butenhof "Programming with POSIX threads". Еще статьи Д.Вьюкова + были очень интересные статьи на сайте data-race.com;
3) М.Фаулер "Рефакторинг";
4) и все это дело тщательно перемешивать с практикой!
P.S. Не могли бы Вы написать отзыв на каждую из перечисленных Вами выше книг? Было бы очень интересно прочитать, какая из книг Вам понравилась и чем?
"Тот, кто читает книжки по программированию не программируя, впадет в заблуждение. Тот, кто программирует, не желая читать книжки по программированию, окажется в затруднении."
я примерно также думаю