Стоит ли читать книги о программировании и IT?
И если да, то какие? Отвечают опытные разработчики и тимлиды.
Кадр: фильм «Алиса в Зазеркалье»
Мы попросили друзей из IT-сообщества рассказать о том, как они постигали свою профессию и сильно ли им в этом помогли учебные пособия. Мнения ожидаемо разделились.
Кто-то исповедует традиционные ценности в духе «книга — источник знаний», «от теории — к практике», а также «учиться, учиться и ещё раз учиться».
Кто-то, наоборот, «жизнь учил не по учебникам» и оттого искренне уверен, что пуля — дура, штык — молодец, а практика — лучший критерий истины.
Есть и такие, кто считает, что книга книге рознь и программисту вообще нужно читать о чём угодно, только не о программировании. В общем, давайте ознакомимся со всеми аргументами.
🌟С книгами знаться — ума набираться
Поклонников книжной мудрости оказалось немало. Неудивительно, ведь книга — самый простой способ получить знания от ведущих экспертов отрасли в удобном формате. А у тех, кто знает английский, возможности почти безграничны: при желании автора книги можно найти в соцсетях, озадачить вопросами и даже получить на них ответы.
Григорий Петров
DevRel в Evrone. Участвовал в создании Radmin, продвигал интерактивное телевидение NPTV и телефонию Voximplant.
Евангелист сообщества MoscowPython и нейрофизиолог-любитель.
Бытует мнение, что читать книги о программировании бессмысленно, потому что они устаревают быстрее, чем выходят, а всю актуальную информацию можно найти в интернете. Я так не считаю.
Да, книги устаревают, но обладают существенным преимуществом перед большинством интернет-источников: авторы книг прилагают огромные усилия, чтобы хорошо сформулировать материал. То есть у вас есть редкая возможность пройти персональное обучение у человека, который потратил много времени, чтобы разобраться в теме.
Конечно, хорошие книги нужно уметь выбирать. Большинство виденных мною книг о программировании — пустышки, авторы которых просто законспектировали поток своего сознания с кучей профессиональных ошибок. Но если постараться и найти что-то стоящее, вы получите несравнимо больше пользы для себя, чем если бы просто читали официальную документацию или короткие статьи в интернете.
Можете считать меня старомодным, но я уверен, что книги были и остаются лучшим источником знаний по программированию. Глубина подаваемой информации на курсах, как правило, недостаточная, документация создаётся не для того, чтобы кого-то учить. А вот хороший учебник одновременно научит конкретной технологии и оставит возможность порефлексировать, чтобы вернуться к прочитанному позже.
С фундаментальными знаниями всё ещё проще. Книги тут даже не альтернатива, которая лучше или хуже курсов: они просто единственные и незаменимые.
Анна Жаркова
Lead Mobile Developer в компании Usetech. Пишет нативные приложения под iOS (Swift, Objective-C) и Android (Kotlin, Java) и кросс-платформенные (Xamarin, Xamarin.Forms, Kotlin Multiplatform). В мобильной разработке больше восьми лет. Тимлид и ментор. Kotlin GDE. Преподаватель в Otus на курсах iOS Basic и Pro.
Я считаю, любому разработчику нужно читать книги. Много полезного материала было написано ещё 10, а что-то и 20 лет назад. Да, какие-то издания, посвящённые определённым технологиям, сейчас уже устарели — например, те же учебники по ранним версиям Android или iOS. А узкоспециализированные книги всегда грешили тем, что в них давалась только базовая информация, часто фрагментированно и без особых объяснений. Такие книги по содержанию напоминали мем «Как нарисовать сову».
Несмотря на то, что такие книги ещё продают и покупают, сейчас появилось много источников с более полезным, информативным изложением. Однако есть классика специализированной IT-литературы, которая актуальна сейчас и будет сохранять актуальность ещё долго. В основном это книги по общим принципам разработки, архитектуре, управлению проектом или командой и тому подобному.
Книги стоит читать хотя бы потому, что не все мысли получается выразить в коротких видео, скринкастах и одиночных статьях. Так можно научиться лишь самым простым практическим вещам: написать бота на JS за полчаса, настроить новый сервер, диагностировать и исправить проблему №5294 и так далее. Но фундаментальные знания, которые создавались и наслаивались десятилетиями, с наскока освоить не получится. Например, теорию баз данных, множеств, нейросетей, комбинаторики, эконометрики по статьям не изучишь — в их изучении без учебников никак.
Правда, читать их тоже нужно уметь. Самый лучший способ научиться этому — пройти очень известный бесплатный курс на Coursera «Learning How To Learn». Он на английском, но в Сети легко найти конспекты на русском от прошедших его людей. После курса станет понятнее, как изучать литературу по программированию.
Евгений Антонов
Тимлид, IT-консультант. Более 15 лет в IT-индустрии. Ведёт телеграм-канал «Тимлид Очевидность» и подкаст «Кода Кода».
На мой взгляд, книги дают более широкое и глубокое понимание разных аспектов разработки. Многие сейчас хотят сэкономить время и прочитать статью на Habr с выжимкой книги или посмотреть видео на YouTube за 10–15 минут. Но выжимка не объясняет, почему автор книги, который, без сомнения, вложил в неё свой многолетний опыт, пришёл к этим выводам. Ни контекста, ни понимания причинно-следственной связи. Вы получите вольный пересказ какого-то человека, и должны поверить, что делать а, б, в — правильно, а почему именно — неизвестно! В результате выше шанс, что такое «знание» выскочит из головы так же быстро, как и попало туда.
На практике я знаю примеры, когда советовал людям почитать книги по разработке, они отказывались и работали на одном и том же уровне годами. Потом начинали читать, приходили ко мне и признавались, что их профессионализм вырос. Они жалели, что не прислушались к этому совету раньше.
Ещё у меня есть доклад про то, как читать книги. Ведь пользу из чтения книги надо уметь извлекать.
❌ Книга книгой, да и своим умом двигай
Многие эксперты считают: нет лучше способа научиться разработке, чем написание собственных проектов. А книги — приблуды, которые только время пожирают и не приносят никакой практической пользы.
Никита Соболев
Сооснователь компании Wemake.services. Топ-70 по коммитам в CPython, топ-6 по коммитам в Mypy и Typeshed. Затворник, ретроград.
Новичкам я категорически не рекомендую книжки. Вы развиваетесь, когда что-то делаете, а книги — это иллюзия: читая, вы только делаете вид, что чему-то учитесь. Особенно когда читаете не ту книгу не в то время. Например, если вы стажёр, а схватились сразу за учебник для опытных программистов — вы себе скорее навредите. Ведь вы ещё не понимаете проблематики, которая стояла перед автором.
После такого «обучения» люди часто начинают «впихивать невпихуемое» абсолютно везде, а это плохо и для программиста, и для его кода. Так что не тратьте время на вольные изложения — лучше сразу заходите на GitHub и читайте первоисточники: документацию, исходные файлы проектов или текст стандарта.
Благодаря этому вы со временем научитесь ориентироваться в любом проекте, поймёте, на что обращать внимание в первую очередь, а на что нет, разберётесь, как работать с историей изменений.
Ещё лучше, если вы сделаете open-source-проект, который решает конкретную проблему, а потом будете развивать его и поддерживать. Так вы станете экспертом. Не можете создать свой проект — присоединяйтесь к уже существующему. Там вас встретят люди, по чьим работам и пишут все эти учебники. Они расскажут, как надо делать и как не надо.
Или идите в коммерческую разработку. Любая из них — это всегда говно и палки, и никакие практики из книг в ней неприменимы. Нужно либо создавать что-то своё, набивать шишки, либо находить себе ментора с уникальным опытом. Это полезнее, чем прочитать десятки томов и не написать ни строчки кода.
Стоит читать только книги по фундаментальным темам и наукам.
Я практически не читал книг по программированию. Например, сейчас у меня на полке стоит только издание Kotlin in Action, которое тоже не читал, а купил для студентов. Для меня же к моменту покупки там уже не было ничего нового.
Программирование — это инженерная дисциплина, которой, на мой взгляд, нельзя научиться по учебникам. Учебник может помочь понять, на какие особенности технологии обратить внимание. Но сейчас по всем технологиям существует такое количество хорошей публичной документации, что её обычно достаточно. А если чего-то не хватает в туториалах, детали специфического применения в избытке есть на профильных форумах и в статьях.
Но важно сделать две оговорки:
- Особенности восприятия у всех разные. Есть много людей, которые глазами воспринимают лучше, чем руками, — для них книги станут серьёзной помощью.
- Туториалы и профессиональные форумы обычно на английском. Если вы его знаете плохо, кроме чтения переводных учебников, ничего не остаётся. Но выучить английский придётся в любом случае. Без этого в разработке не обойтись.
Анастасия Заречнева
Инженер по тестированию, член программного комитета конференции Podlodka QA Crew, одна из основательниц и активная участница закрытого сообщества QA sisters.
Читать книги по программированию и при этом не практиковаться в написании кода, в применении описанных концептов — это как читать «Камасутру», даже не пытаясь хоть что-то из неё попробовать. Да, вы что-то узнаете, но не запомните. Всё равно придётся заново смотреть информацию, когда понадобится её применить. Поэтому лучше всё время держать издание при себе и по мере необходимости обращаться к нему, как к справочнику. Я так и делаю.
🛑 Книга книге рознь: одна учит, другая мучит
А теперь перейдём к конкретике: что же читать и, главное, как? Здесь тоже есть разные мнения.
Евгений Кателла
Ведущий Podlodka Podcast, организатор конференций Podlodka Crew. Руководил отделом Android-разработки в Rambler&Co. Сейчас отвечает за мобильное направление в «Яндекс Еде».
Читать любые книги, в принципе, не навредит. Если говорить про разработку — вижу больше пользы в абстрактных книгах про связанные с ней методологии, подходы и процессы. Примеры могут быть разными — от «Совершенного кода» до «Проекта „Феникс“» и «Цели».
Те, кто интересуется компиляторами, наверняка и так знают про серию так называемых Dragon Book, а большинство любителей хайлоада — про DDIA book, те самые книги с кабанчиком на обложке. Но рекомендовать их всем подряд, наверное, излишне.
Анастасия Заречнева
Инженер по тестированию, член программного комитета конференции Podlodka QA Crew, одна из основательниц и активная участница закрытого сообщества QA sisters.
Целиком я прочитала не так уж много книг по программированию или computer science. Обычно это что-то «на общее развитие»: например, про понимание работы алгоритмов, которыми мы пользуемся каждый день, или про развитие компьютеров. Горячо рекомендую «Код: тайный язык информатики» Чарльза Петцольда и «Девять алгоритмов, которые изменили будущее» Джона Маккормика.
В обеих книгах нет слишком глубокого погружения и лишней детализации. Некоторые главы вообще можно читать по диагонали, если нет необходимости вникать в низкоуровневое программирование. Но эти учебники помогают понять, что такое компьютер, как работает интернет, чем отличается HTTP от HTTPS, как всё это придумали, как работают поисковики и многое другое.
Если говорить про более специализированные книги, то это:
- «Гид по Computer Science» Уильяма Спрингера. Особенно рекомендую расширенное издание. Эта книга — про алгоритмы, теоретическую сторону программирования. То есть не для изучения конкретного языка, а для понимания основ.
- «Карьера программиста» Г. Лакмана Макдауэлла. Это издание — о том, как подготовиться к интервью, преимущественно в компаниях типа FAANG, но подойдёт и для более простых кейсов. Конечно, это не «готовые домашние задания», а скорее каркасы. Они помогают понять, что вы знаете, а что нет, и с какой точки зрения рассмотреть вопрос, чтобы ответить на него. Присутствует не только техническая, но и «человеческая» часть с обзором общих вопросов. Это настольная книга, чтобы периодически освежать в памяти навыки, которые вы не используете ежедневно.
В последнее время большую популярность набрал книжный клуб Гриши Скобелева { между скобок }. Мне кажется, это отличный способ совместного изучения литературы: люди читают книгу одновременно, обсуждают каждую главу, делают для себя заметки и в целом намного лучше усваивают материал. Как говорится, practice makes perfect: нужно постоянно верифицировать усвоенные из книг концепты и не делать больших перерывов в чтении.
Удивительно, но самые ценные для меня книги — вовсе не о программировании. Они о том, как жить в современном мире, о финансовой грамотности, карьерном росте и оптимизации техпроцессов. Все их я перечислял в твиттер-треде.
По программированию же в своё время мне очень понравились:
- «Паттерны проектирования» Эрика Фримена, Элизабет Робсон, издательство O’Reilly;
- «Объектно-ориентированное программирование. Язык Smalltalk» Ю. Кирютенко, В. Савельева;
- «Высоконагруженные приложения. Программирование, масштабирование, поддержка» Мартина Клеппмана;
- «Базы данных: основы, проектирование, использование» М. Малыхиной;
- 99 Bottles of OOP, Sandi Metz.
Анна Жаркова
Lead Mobile Developer в компании Usetech. Пишет нативные приложения под iOS (Swift, Objective-C) и Android (Kotlin, Java) и кросс-платформенные (Xamarin, Xamarin.Forms, Kotlin Multiplatform). В мобильной разработке больше восьми лет. Тимлид и ментор. Kotlin GDE. Преподаватель в Otus на курсах iOS Basic и Pro.
Всё ещё продолжают выходить интересные вещи по языкам программирования. Есть хороший справочник по Swift — книга Василия Усова «Swift. Основы разработки приложений под iOS, iPadOS и macOS». Его удобно брать с собой и читать в дороге. Есть справочники и по Kotlin, например книга Дмитрия Жемерова и Светланы Исаковой «Kotlin в действии», руководство по Java Герберта Шилдта, «C#. Полное описание языка» Джозефа Албахари — рекомендую читать их, если только входишь в эту среду или хочешь освежить свои знания. Главное при освоении любого языка — практика, но без теории понимания тоже не будет.
Также я порекомендовала бы литературу по общим знаниям — архитектура, паттерны, управление и коммуникации в проекте. Даже если человек не планирует уходить из разработки и становиться менеджером, всем нам нужно учиться управлять собой и своим временем, налаживать коммуникацию с начальством и коллегами. Для этого можно прочитать книги «Джедайские техники» или «Как пасти котов».
Из книг для обучения разработчика я бы посоветовала «Head First. Паттерны проектирования» Эрика Фримена. Там в доступной и лёгкой манере объясняется, как разработчику правильно использовать паттерны в своём коде на высокоуровневых языках программирования. Книга «Паттерны объектно-ориентированного проектирования» «банды четырёх» — удобная и полезная. А книги «Чистый код» Роберта Мартина, «Совершенный код» Стива Макконнелла стоит прочитать каждому разработчику.
Кому-то может показаться, что это полезно только джунам и мидлам, но и сеньор может найти для себя что-то интересное. В последнее время я читала книги по паттернам, потому что навыки нужно периодически освежать, и книги про Kotlin, потому что стараюсь отслеживать новое в этой области. Ещё я недавно рецензировала книгу про функциональное программирование и Kotlin Марчина Москала, которая распространяется на ресурсе Kt. Academy. Это был интересный опыт: я помогала скорректировать содержание книги, чтобы оно стало более доступным, параллельно узнавая новое для себя.
У некоторых людей существует своя система конспектов, они используют органайзеры. Я не веду конспекты, но рекомендую выделять важные вещи, если человеку так проще запоминать. В электронной книге можно подсветить нужный фрагмент текста хайлайтером, а в бумажной — подчеркнуть карандашом.
Хорошая книга может научить TDD и сократит период, когда вы будете раздражать коллег на работе непониманием основ.
Например, «Экстремальное программирование. Разработка через тестирование» Кента Бека. Настоятельно рекомендую: написано не как религиозная догма. То есть автор, будучи одним из главных популяризаторов TDD, отлично понимает, что у разработчика есть занятия поважнее, чем добиваться 100% покрытия кода.
Ещё одна книга, которую я советую многим, — «Программист-фанатик» Чеда Фаулера. Она про карьеру и развитие программиста. Не со всем, что предлагает автор, можно согласиться, но в этом и смысл хороших книг.
Саша Шинкевич
Фронтенд-разработчица из Минска. Спикер и организатор митапов по фронтенду MinskCSS и MinskJS и конференции FrontendConf.
Я бы выделила три категории книг, если исключать совсем профильные книги по языкам и технологиям:
- Книги про то, как писать код: по паттернам, проектированию, архитектуре. Они помогают заложить основы мышления программиста, структурировать в голове подходы к написанию кода, если во время изучения определённого языка программирования на это не было времени. Примерами таких книг будут «Совершенный код» Стива Макконнелла, «Идеальный код», «Код: тайный язык информатики», «Грокаем алгоритмы» и многие другие. Некоторые из них не совсем агностичны с точки зрения языка программирования, когда для наглядности берут, скажем, Python или Haskell и всё показывается на примерах из этих языков. Но так или иначе, в большинстве случаев всё, что написано в книгах из этой категории, можно применить к любому языку или парадигме программирования, то есть их можно считать универсальными.
- Книги об индустрии. Эта категория книг скорее учит читателя, как быть программистом и к чему быть готовым на карьерном пути. Зачастую в названии будут упоминаться слова «карьера», «путь», «программист», «идеальный» и другие синонимы и сочетания. В своих докладах я всегда рекомендую «Путь программиста» Джона Сонмеза. Эта относительно небольшая по объёму книга может стать хорошим подспорьем в карьере любого новичка в IT и даст примерное направление развития на несколько первых, самых сложных, лет. Другими примерами в этой категории буду книги «Идеальный программист», «Карьера программиста», «Программист-прагматик» и другие.
Сюда же я отнесла бы книги по менеджменту. Есть как специализированные — по управлению командой программистов, так и по общим темам, из других областей. Например, в книге «Как пасти котов» рассказывается о том, какие вообще бывают программисты и как с этими типами можно взаимодействовать — на примере котов. Это научпоп с небольшим налётом психологии, но его будет интересно почитать тем, кто интересуется менеджментом на базовом уровне. Порекомендую и «45 татуировок менеджера» Максима Батырева, хотя кто-то назовёт часть принципов, изложенных в этой книге, спорными. - Бизнес-литература. В этой категории в целом много полезных книг, хотя большинство из них можно ужать в 2–5–10 раз и смысловая нагрузка не потеряется. Мне когда-то давно понравилась книга «Нетворкинг для интровертов». Она о том, как понемногу выползать из своей скорлупы, начинать общаться с другими людьми. Это тоненькое издание, которое можно быстро прочитать, но оно поможет понять, в какую сторону двигаться, если вы воробушек-социофобушек и готовы только писать код.
Искренне рекомендую абсолютно всем «Радикальную прямоту» (Radical Candor) — о том, как правильно давать обратную связь в частности и строить открытую коммуникацию с людьми в целом. Там приводится несколько фреймворков, как это делать и как не делать. Я считаю, всем надо обязательно её прочесть, потому что обычно мы не умеем общаться.
Выводы: читать или не читать?
Большинство экспертов склоняются к ответу, что читать книги о программировании не только можно, но и нужно. Но, как обычно и бывает в таких спорных вопросах, есть несколько оговорок:
- Обязательно использовать прочитанное на практике. Пробовать внедрить практики и технологии в работу или пет-проект.
- Обращаться к книгам как к справочникам. Это нужно, чтобы найти более изящный и правильный способ решить задачу.
- Читать книги о методологиях и практиках. Это помогает повысить качество своей работы.
- Писать конспекты, делать заметки или выделять интересные мысли, чтобы вернуться к ним позже.
- Не заменять книгами чтение документации и спецификаций, кода чужих проектов. Только на реальном коде можно учиться, одними теоретическими примерами из справочников не обойтись.
И напоследок: «книги читай, а дела не забывай». Код сам себя не напишет!
* Решением суда запрещена «деятельность компании Meta Platforms Inc. по реализации продуктов — социальных сетей Facebook и Instagram на территории Российской Федерации по основаниям осуществления экстремистской деятельности».