Читают ли программисты книги для программистов?..

В рамках очередного захода на обучение по специализации «разработчик» на днях стало интересно провести очередной опрос-эксперимент. Нескольким знакомым программистам (хорошо знакомым людям, которых я знаю, как профессионалов своего дела) задал в телеграме следующий вопрос:

Поделитесь личным топ-5 книг по программированию / для программиста. Комментарии приветствуются.
Хочу собрать небольшую статистику

Кроме того этот же вопрос продублировал в соцсетях: VK и Facebook.

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

Наблюдения:

Ответы в чат написали ровно половина опрошенных (5). Из обеих соцсетей был получен всего один ответ. Среднее количество книг на человека: 3.3. Перечисленные списки нельзя назвать топом — чаще всего это всё прочтённое (а может и не прочтённое). С комментариями (по книгам) был только один ответ. Всего одно пересечение: дважды упомянутые «Паттерны проектирования» Банды Четырёх.

Наиболее частый комментарий:

книги не особо актуальны сейчас

*Heavy sigh*

Я бы сказал, книги никогда не были особенно распространены. Где-то видел утверждение, что 95% людей не читает и 100 книг за жизнь. Ничем не подкреплённое, но на интуитивном уровне воспринимается похожим на правду.

Теперь для тех, кто не читает книг, просто есть дополнительный аргумент. Интернет. Статьи. Курсы. Обучающие видосики. Не забуду ответ одного из кандидатов на мой любимый вопрос «Из каких источников вы черпаете информацию для поддержания и развития своего профессионального уровня?» — «Подписан на канал в твиттере, где публикуют новости по питону».

Статьи, курсы и видосики — это хорошо. Без иронии. Доступность информации — неоценимое благо современности, хотя и имеет побочные эффекты. И вот ещё. Но сам-то я помню времена, когда приходилось в вузе или специально отведённые часы на работе по адово медленному диалапу выкачивать страницы с описанием работы библиотек или решениями каких-то задач, печатать их на матричном принтере для изучения дома и хранить в папке для будущих случаев возможной потребности. К слову, тогда и с книгами было не очень. Или очень не.

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

Статья хороша, когда надо конкретно разобраться с каким-то вопросом. Или менее конкретно в какой-то теме. Или совсем абстрактно в какой-то области. Не всегда из конкретной статьи можно понять, где именно в общем масштабе предметной области её место, и сколько ещё белых пятен вокруг. Не всегда из абстрактной статьи можно понять, куда рыть дальше, чтобы разобраться в теме на уровне структурированного и системного понимания. Ещё реже, даже если понятно (скажем, статья в научной стилистике, содержащая множество ссылок на иные источники), человек пойдёт действительно копать дальше и глубже. Да сколько статей мы вообще не читаем, или читаем на треть, и добавляем в избранное (или просто оставляем открытую вкладку браузера) в надежде «потом прочесть»?

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

Дело в том, что мозг ничего не забывает (условно — связи формируются, даже если мы их не осознаём), решения мы принимаем неосознанно — а осознанно лишь рационализируем их, — так что очень важно «загружать» в разум побольше систематизированной информации о мире. Для более адекватных решений. Даже если в момент прочтения книги содержимое кажется непонятным, или кажется, что его невозможно запомнить, оно сыграет свою роль в моменты изучения последующих источников.

Личный пример — психология. На старте попыток подойти к изучению психологии я выяснил, что нет какой-то ясной точки входа в эту местами всё ещё допарадигматическую науку. Ну и стал читать просто что попалось. А попался тогда Выготский — «Мышление и речь» и «Психология искусства». Это потом я выяснил, что не все люди с психологическим высшим образованием могут читать Выготского. А когда читал, я этого не знал и просто мучился («Много слов, типа «синкретизм», «онтогенез», «бихевиоризм» и т.д кажутся, вроде, по-русски написанными, но не несущими никакой смысловой нагрузки для меня.»). Я помню тогда свою мысль «окей, я просто буду это загружать в память». И спустя несколько месяцев и ещё с пол десятка книг и N статей в голове внезапно образовалась система и общее понимание. В частности, чем отличается «внутренняя речь», «устная речь» и «письменная речь» и почему у людей такие трудности во взаимопонимании и изложении своих мыслей (подсказка — разница контекста в голове, вокруг которого строится мышление. И речь).

В эту же тему — Зигмунд Фрейд с его витиеватым и местами притянутым за уши стилем повествования на тему «Я», «Сверх-я» и «Оно», затем Канеман с его «Системой 1» и «Системой 2» и затем при прочтении «Не бери в голову» Криса Пэйли накатывает инсайт и озарение — я понимаю, как работают эти сознательная и бессознательная подсистемы. Не уверен, что книга Криса Пэйли, которую, судя по всему, мало кто знает, показалась бы мне такой сногсшибательной, не прочитай я предыдущих авторов.

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

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

К чему я это всё?

Почему-то от людей, называющих себя инженерами, я ожидал такой же тяги к системному и максимально всеохватывающему познанию профессиональной системной области и разного рода систем, с ней связанных — информационные (программно-аппаратные комплексы, инструменты, операционные системы, языки программирования), организационные (организация рабочего процесса, особенности группового взаимодействия), отраслевые (особенности жизненного цикла и реализации пайплайнов, принятые в данный момент подходы, правила и договорённости) и на чём они базируются — чем обусловлены все эти SDLC, SRS, US/JTBD, MVP, Agile, DevOps, KISS, DRY, SOLID, CI, CD, CT, TDD, BDD и парное программирование. Потому что если есть понимание основ, становится ясно, что все новые аббревиатуры и баззворды — суть обёртки над здравым смыслом. А если нет понимания основ — то какая-то херня, «отвлекающая от работы».

Набрать эти фундаментальные знания из статей практически невозможно. Даже если не учитывать, что изрядную часть этих статей пишут люди, сами не разобравшиеся в предмете описания. А уж из повседневного опыта — нереально. Хотя бы потому что (возвращаемся к началу) малая часть людей (а значит и коллег, в том числе менеджеров и лидов) читает книги. Есть вероятность, что вам повезёт — программная разработка — более интеллектуальная и требующая усилий и дисциплины область — но я бы не стал закладываться на то, что повезёт познать всё необходимое.

Курсы могли бы помочь, но они есть далеко не по всем темам и областям. К примеру, сам я, погружаясь в своё время в область разработки ПО, прошёл на Coursera и Udemi всё, содержащее DevOps в своём названии. Но всё оказалось водой и песком, даже на 5% не столь полезными, насколько была одна книга Continuous Delivery.

Хороших книг мало (как и хороших статей, кстати). И чтобы научиться определять хорошие книги (статьи), возможно, нужно прочитать (и поморщиться) десятки, скажем так, не таких хороших. Но потом включается фильтр, и плохой контент распознаётся почти мгновенно.

И постепенно вырисовывается «радужная серия» (technicolor rainbow — отсылка к фильму «Хакеры» 1995 года. Книги, упоминаемые в эпизоде, кстати, реальные) необходимого контента, несущая системное понимание предметной области и путь к формированию эффективных способов достижения профессиональных результатов.

Меж тем, именно каждая правильная книга, что мы встречаем на пути, есть ни что иное, как очередной ключ к следующей загадке собственной жизни. Поскольку каждый из нас проходит свой уникальный лабиринт книг, игра получается индивидуальной: читая книгу, человек словно попадает в сильное электрод-магнитное поле, которое удерживает его в определенном “тоннеле знаний”, где каждый новый том во многом определяет выбор следующих. Именно поэтому (отчасти) тот, кто с упоением и рано погружается в физмат, Фейнман и Шредингера, вряд ли будет читать книги Марининой – вектор интересов “намагничивается” в другую сторону.

Евгений Черешнев

Ну и напоследок полученные ответы по итогам опроса:

Юля:

-Банда четырех, Паттерны проектирования
-Гарсиа, Молина, Системы баз данных
-О’Коннэл Как успешно руководить проектами. Серебряная пуля

Владимир:

  • Из того, что читал от корки до корки — Кормен. Алгоритмы: построение и анализ (Introduction to Algorithms — в оригинале)
  • Я также читал часть “Искусства программирования” Кнута
  • По сборочной системе CMake кстати есть офигенная книга CMake Professional

Катя:

  • грокаем алгоритмы
  • Вальсируя с медведями

Женя:

Скорее вспомнил:

  • Психбольница в руках пациентов
  • Паттерны проектирования

Стас:

  • мифический человекомесяц
  • pair programming illuminated
  • just for fun
  • гибкое моделирование (С. Эмблер)

Рома:

  • «Совершенный код» Макконнел — я не читал целиком, но отдельные главы показались очень полезными, особенно для начинающих — про такое на курсах по проге редко рассказывают, а вещи оч полезные типа как назвать переменную. Я абсолютно серьезно; обычно код студентов выглядит как месиво нечитаемое, потому что все учат только синтаксис языка, а про стиль вообще забывают.
  • «Язык С в 21 веке» Клеменс — если хочется познать всратые практики которыми пользуются люди которые в настоящее время упорно продолжают жрать кактус и писать на С. Но лучше так, чем продолжать традиции 80ых
  • Выразительный javascript — не помню кто автор, ну типа ну норм
  • «Эффективный С++» Мейерса — вроде и полезно и должно быть интересно, но нихрена из нее не помню и читать было скучно. При этом презентации Мейерса просто огонь.
  • «Структурное программирование на С++» Полубенцевой — просто норм понятный учебник; но опять же к автору я ходил на лекции вживую
  • «Effective C» Seacord — я вычитывал перевод поэтому вынужден был прочесть — книжка полное говно, ужасный слог, автор тупо цитирует стандарт языка со всеми его шизофреническими зубодробительными формулировками; но окей, гонорар сам себя не заплатит, я понимаю. Что-то новое я узнал, конечно, но на кого эта книга ориентирована я не знаю вообще
  • «Что-то там С++» Павловская — в юности мне ее все совали, а я так и не осилил, оч скучно листинги на 3 страницы читать
  • «Энциклопедия профессора Фортрана» — Не шибко про программирование, но в детстве было весело :)

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

Читают ли программисты книги для программистов?..: 6 комментариев

  1. Меня тоже немного расстраивает тяга познавать всё через курсы на Ютюбе, да статьи на условном Хабре. Хотя изредка сам так делаю.
    Вообще запомнился случай, как на одной работе по итогам пройденного испытательного сказали, что среди моих минусов — слишком углубляюсь в проблемы (сказал человек изучающий всё по статьям). Я девопс и всегда стараюсь хотя бы примерно разбираться в проектах на уровне кода, независимо от языка, чтобы не бежать к разрабам с трейсом и глупыми вопросами. Приходилось листать книги по Java, Python, Node.js и много чему ещё. Так вот этого человека, который меня «обвинил» в слишком глубоком погружении — ни раз уже ловил на очень поверхностных знаниях буквально всего. И это приносило заметные проблемы, т.к. мы пересекались на некоторых проектах. Ну ладно. Это крик души.
    Касаемо книг — сложно сказать. Я как-то с названиями не очень. Прочитал и забыл, а они все электронные. Я техническую литературу принципиально читаю только в электронном виде, т.к. она имеет свойство устаревать и мне в своё время было тяжело выбрасывать книги Delphi 5 и Windows Server 2003. Но в целом нравится у O’Reily серия Up and Running. Из повлиявших на моё развитие книг была книга середины 2000х про устройство Линукс, по Kubernetes. Несколько книг по Python. По Windows Server. Единственная, которую запомнил по названию: «Хакинг. Искусство эксплойта» . Но тоже уже старенькая.
    Вообще в защиту не читающих книги скажу, что сейчас по многим рабочим инструментам шикарная официальная документация. Собственно тут я уже от «корки до корки» её читаю. :)

  2. Я в опрос не попал, так что просто в комментарии оставлю свой список книг, которые дают отличный фундамент:
    1. Thinking in Java: Bruce Eckel
    2. Effective Java: Joshua Bloch
    3. Java Concurrency in Practice: Goetz Brian

    Может быть кого-то напряжет, что в названии каждой книги есть «Java», но это просто канонический ООП язык, на котором легко показывать классические программерские примеры. В этих книгах замечательно раскрыты темы того как писать чистый и эффективный код (применимо и к другим языкам программирования), приведены основные паттерны а также много нужного для понимания модели памяти и многопоточности.

    Еще пара отличных книг:

    4. Test-Driven Development by Example: Kent Beck
    5. Designing Data-Intensive Applications: Martin Kleppmann

    1. Восхитительный ответ и по форме, и по содержанию. Не знаю, почему я до тебя не дошёл сразу, решив ограничиться бывшими и текущими коллегами. Спасибо, что сам написал!

  3. Дочитала до конца, конечно. Вопрос про книги меня лично заставил задуматься — а кто я вообще? 🤭 до сих пор не знаю — недопрограммист-недосисадмин, так, жму на разные кнопки. Почти встала в очередной раз на путь к программированию. От делфи никак не могу отойти — ну, для решения текущих задач почти хватает. И тут эта мобилизация ☹️, в итоге, снова 24/7 на связи желательно находиться, на серваках периодически какие-то манипуляции делать. Направление — СКУД, ОПС, видео.

Добавить комментарий для Людмила Отменить ответ

Please log in using one of these methods to post your comment:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s