В этой подборке — не только классические рекомендации книг для C++ программистов. Обычно советуют издания про паттерны, развитие стандарта или успехи большой компании. Но за всем этим изобилием «экспертных советов» и best practices теряется одна простая мысль: язык программирования — это средство выражения мысли от одного разработчика другому, а также средство описания пользовательского API в самом широком смысле.

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

Первые 5 книг этой подборки — в меньшей степени про технику, в большей степени об осознанности деятельности C++ программистов любого уровня. Остальные — «золотой фонд» классической литературы для C++ разработчиков.



Привет, Хабр! Меня зовут Роман Маковский, я руководитель прикладной кроссплатформенной разработки в МойОфис. Работаю здесь почти восемь лет, и за это время поучаствовал в множестве проектов на различных малоизвестных платформах.

За время моей работы департамент увеличился в 10 раз, так что я успел пообщаться и обменяться знаниями с массой талантливых программистов. Такой опыт, в числе прочего, помог мне расширить кругозор в области профессиональной литературы. Часть изданий я открыл для себя самостоятельно, но с другими ознакомился именно с подачи коллег.

В одном из прошлых материалов нашего блога мы советовали главные книги для Golang-разработчиков. Сегодня же я поделюсь с вами рекомендациями литературы для C++ программистов — расскажу как о классических изданиях, так и довольно необычных (в контексте темы C++ ), но по-своему интересных и полезных книгах. Поехали!

М. Минский «Машина эмоций: здравое мышление, искусственный интеллект и будущее человеческого разума»

Узнать о книге.

В этой книге человеческий мозг представлен как определенный механизм, выполняющий заданные алгоритмы, а наши эмоции — как еще один способ мышления, включающийся для решения конкретных задач. Здесь собрано много занимательной информации про искусственный интеллект и достижения человечества в этой сфере. Книга располагает к тому, чтобы покопаться в себе, вникнуть в природу своих эмоций.

Достоинства:

  • сложные вещи написаны простым языком;

  • интересная теория формирования эмоций.

Недостатки:

  • много отсылок к соседним главам в тексте.

Д. Беккер «Меньше значит больше»

Узнать о книге.

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

Достоинства:

  • каждый узнает в этой книге себя;

  • вдохновляет на очищение и расхламление;

  • много примеров из жизни.

Недостатки:

  • в начале кажется нудновато;

  • почти на каждой странице упоминается религия, это уводит от темы.

Б. Фрост «Атомарный дизайн»

Узнать о книге.

Атомарный дизайн — методология Брэда Фроста, в соответствии с которой интерфейс делится на простейшие компоненты. Суть метода в том, что дизайн начинает создаваться с мелких частиц, своего рода атомов — шрифта, полей, рамок и так далее. То есть начинаем строить интерфейс с мелочей и постепенно объединяем их в систему. Таким образом, получаем возможность использовать какие-то части дизайна повторно, а также комбинировать их или подвергать изменениям. Это универсальный подход: подавляющее большинство дизайнеров уже давно используют принципы «Атомарного дизайна». Правда, методики у всех разные, каждый вносит свои изменения и адаптирует под свой проект.

Книга написана в интересном стиле, все объясняется на простейших примерах, то есть формат подачи информации доступен для каждого. Да, много специфических терминов, но каждый из них расшифровывается, важные моменты выделяются тезисно, что помогает разложить все в голове по полочкам.

Достоинства:

  • простая подача информации;

  • тезисное выделение важных моментов.

Недостатки:

  • редко обновляется материал.

Голден Кришна «Хороший интефейс — невидимый интерфейс»

Узнать о книге.

Книга содержит интересные рассуждения автора об избавлении от графических интерфейсов там, где в них нет необходимости. Ранее Голден Кришна работал на должности ведущего дизайнера Samsung, сейчас он — сотрудник Google. На протяжении многих лет он продвигал идею интерфейсов без экрана, а в 2016 году его книга произвела фурор, и многие компании воспользовались этим методом.

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

Достоинства:

  • читать действительно интересно.

Недостатки:

  • много воды;

  • это не учебное пособие, больше философия.

Э. Юдковский «Гарри Поттер и методы рационального мышления»

Узнать о книге.

Книга Юдковского объединяет несколько жанров: здесь и научпоп, и художественное повествование. Если вы зачитывались оригиналом, то это издание вам определенно понравится. Тот же Гарри, но в совершенно других обстоятельствах, совсем другая линия сюжета. Здесь все логичнее и рациональнее, многие герои выступают как более сформированные личности, нежели в оригинальном романе. Книга затрагивает такие темы, как теория вероятности, когнитивное искажение, проблема предотвращения глобальных катастроф. Существует миллион противоречивых отзывов об этом издании, поэтому лучше прочитать его самому и составить собственное мнение.

Достоинства:

  • даже после прочтения оригинала эта книга не выглядит подделкой;

  • тонкий юмор автора.

Недостатки:

  • чрезмерная надменность главного героя;

  • местами затянуто.

Элизабет Халл, Кен Джексон, Джереми Дик «Инженерия требований»

Узнать о книге.

Эту книгу можно назвать библией специалистов по инженерии, ведь требования — неотъемлемая часть любого процесса разработки программных и аппаратных систем. Издание поможет каждому читателю понять основные принципы современной инженерии требований.

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

Здесь собрана исключительно научная информация: авторы объясняют роль системной инженерии в решении задач по созданию систем, описывают язык UML2, рассказывают об изучении связи между требованиями и моделированием и раскрывают много других важных моментов.

Достоинства:

  • много информации по конкретной теме, без воды;

  • понятный язык изложения.

Недостатки:

  • не для новичков в инженерии.

Бьёрн Страуструп «Дизайн и эволюция С++»

Узнать о книге.

Эта книга написана создателем языка программирования С++ Бьёрном Страуструпом. Она позволяет углубиться в историю создания С++, понять, почему он создан именно таким, какие изменения и поправки в него вносились. Вы можете узнать конкретнее о каждом языковом средстве, автор подробно анализирует моменты добавления в язык исключений, шаблонов, виртуальных функций и так далее.

Издание может стать настольным для всех программистов, которые ежедневно используют С++ в своей деятельности, а также послужить источником важной информации для студентов, обучающихся программированию. Написана понятным языком, сформирована разделами: достаточно просто отыскать необходимую информацию.

Достоинства:

  • интересные факты из истории программирования;

  • юмор автора в столь несмешной теме.

Недостатки:

  • в некоторых моментах затянуто;

  • много терминологии.

Джон Оустерхаут «Философия дизайна программного обеспечения»

Узнать о книге.

Эта книга идеально подходит тем, кто только начинает профессионально заниматься программированием либо заканчивает обучение в университете. У автора очень четкое понимание того, как проектировать программное обеспечение и как облегчить программные проекты, адаптировать их под себя. Оустерхаут рассказывает про то, как решить проблему сложности программного обеспечения при помощи простого дизайна, это помогает передать и четко изложенная документация.

Здесь изложены идеи высокого уровня и примеры того, как применить их в ежедневной работе. Некоторые концепции уже встречались в другой литературе, о многом вы уже могли слышать от кого-то, но отдельные моменты обязательно вас заинтересуют. Например, концепция глубоких и поверхностных модулей, тактическое и стратегическое программирование и многие другие интересные вещи.

  • в книге 170 страниц, а краткость — сестра таланта;

  • есть действительно стоящие советы.

Недостатки:

  • мало примеров кода по всем темам;

  • излишняя самоуверенность автора.


В следующих материалах блога мы продолжим делиться с Хабром рекомендациями книг и других полезных материалов для разработчиков, а также публиковать подробные статьи с экспертизой наших специалистов. Подписывайтесь на блог МойОфис и следите за нашими новостями!

Комментарии (15)


  1. JordanCpp
    09.08.2022 16:00
    +16

    Я бы добавил в копилку книги:

    1. Искусство программирования Unix

    2. Идеальный код. Как научиться видеть красоту в программировании.

    3. Жемчужины программирования.


    1. RomeoGolf
      09.08.2022 19:01
      -2

      С учетом Беккера и Юдковского можно добавить и Сенеку «Нравственные письма к Луцилию», или, скажем, Кропоткина "(тоже) Нравственные начала анархизма". Почему бы и нет? В строгом соответствии с заголовком статьи…


  1. s_f1
    09.08.2022 18:29
    +13

    У меня только один вопрос – почему, собственно, С++?
    Чем Юдковский ближе к «плюсам» чем, например, к Бейсику или Фортрану?


    1. artemisia_borealis
      09.08.2022 21:08

      «Классический» ответ на такие вопросы звучит в данном случае: чем Юдковский.

      Но я бы посмотрел на перечень шире. Обратите внимание, что в первую очередь объединяет все эти книги — они прямоугольные. И лишь последняя несколько выбивается пропорциями (не случайно, она — по дизайну).

      Думаю сюда можно добавить ещё ряд прямоугольных книг, но сильно отличающихся внутренней структурой:
      — «Игра в классики» Кортасара определённо нашла бы приверженцем среди С++ программистов, долгое время погружённых в многолетнее легаси и открывающих в случайных местах много интригующих загадок. В этой книге порядок чтения выбирается читающий;
      — Здесь также уместна была книга Павича «Хазарский словарь» (обеих версий), закрепляющая мысль, что UB встроено в наше мышление и, вообще, это — хороший паттерн проектирования, ибо он позволяет избежать унылого прямоугольного кода;
      — «Книга о самых невообразимых животных» К. Хендерсона также найдёт отклик у любого адепта boost и stl, поддержав их во взглядах на жизнь.


      1. RomeoGolf
        10.08.2022 07:05
        -4

        «Книга о самых невообразимых животных» К. Хендерсона
        «Fantastic Beasts and Where to Find Them» Н. Саламандера к ней в пару хорошо пойдет, мне кажется…


    1. myoffice_ru
      10.08.2022 11:54
      +6

      Вы правы, некоторые книги из списка полезны в равной степени для любых инженеров: как упоминалось в начале текста, язык программирования — это не в последнюю очередь способ описать мысль. В статьях про книги мы, прежде всего, делимся взглядами наших экспертов. Их опыт, подходы и знания формировались под влиянием разных произведений.


  1. ReadOnlySadUser
    09.08.2022 19:32
    +4

    Не очень понятно зачем мне книга Страуструпа, и уж тем более зачем её читать? Чем не угодил cppreference и core guidelines в качестве справочника?

    Я бы вместо неё рекомендовал всем С++ разработчикам прочесть Rust book. Совсем хорошо - попробовать пописать на языке, но необязательно углубляться.

    В Rust хорошо то, что он поднимает на поверхность все болячки С++, на которые бывалые разработчики уже давно положили болт, и предлагает классные решения этих проблем. Напрямую в С++ конечно это использовать нельзя, но зато слегка выправляет мозги и учит делать более чистые API для своих программ.


    1. bfDeveloper
      09.08.2022 19:35
      +5

      Вы путаете книги. Дизайн и эволюция - не справочник, а история создания. Она про причины принятых решений, в то время как cppreference - справочник с результатами принятых решений.


      1. ReadOnlySadUser
        09.08.2022 19:48

        А смысл её читать? Ну, разве что только в археологических целях или любопытства для? Что полезного даёт знание истории возникновения фич разработчику, который уже умеет программировать на С++?

        Опять же, cppreference - пускай и справочник, но core guidelines - нет. И там намного всё лучше расписано, на мой взгляд.


        1. Tiendil
          10.08.2022 00:22
          +3

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


          1. ReadOnlySadUser
            10.08.2022 03:07
            +6

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


            1. Malizia
              10.08.2022 10:16
              +6

              Это больше исторический документ чем список оправданий. И воспринимать его следует как историю создания языка, что этому способствовало и какие решения и почему были приняты. Это сейчас мы можем сравнивать результаты тех принятых решений с современными разработками, идеями, принципами. А тогда этого не было или было не так явно выражено, не было такого комьюнити как сейчас, не было доступа к информации для всех желающих как сейчас - мир был другим, цели и возможности были другими, люди и идеология были другими.

              Лично я получил массу удовольствия от чтения данной книги, от возможности окунуться в то время когда язык зарождался, обретал знакомые очертания.


              1. ReadOnlySadUser
                10.08.2022 14:54
                -1

                Да какие претензии. С точки зрения литературытв целом, каждый может читать что угодно, это дело вкуса. Я просто полагаю, что здесь книги для профессионального развития и в чём ценность описанного вами мне не очень понятно)


                1. Malizia
                  10.08.2022 15:24
                  +2

                  А что такое профессиональное развитие? Если это изучение новых техник для достижения результатов, то эта книга мало что даст. Если это опыт, то Страуструп делится им в этой книге - опыт проектирования, опыт развития, опыт внедрения, опыт проживания важных моментов.


  1. checkpoint
    10.08.2022 13:16
    +4

    Из современного рекомендую книгу "The Art of Writing Efficient Programs" нашего соотечественника Федора Пикуса. В книге рассмотрены вопросы профилирования и оптимизации программ на C++ через призму супескалярных вычислений. Мимоходом разобрана атака Spectre.