В Інтернеті є безліч статей, які називають певні книжки з програмування обов’язковими до прочитання, але всі вони радять ті самі старі книжки. Знайти хороші й актуальні ресурси стало справді складно.

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

Не змушуйте мене думати (Don’t Make Me Think, Revisited)

  • Автор: Стів Круг.
  • Рік видання: 2013
  • Підходить для: початківців

Автор робить тему зручності користування вебсайтами справді цікавою. Окрім легкого стилю викладу, він додає дотепності, щоб утримувати вашу увагу від першої до останньої сторінки.

Книжка спонукає замислитися над зручністю користування й доступністю. Усі розділи логічні й лаконічні. У ній є безліч прикладів, що пояснюють погляд автора й показують, як різні учасники вебпроєктів можуть зробити сайт зручнішим у використанні.

На мій погляд, цю книжку має прочитати кожен: дизайнери — щоб вивчити золоті правила перед початком роботи, програмісти — щоб зрозуміти технічні вимоги до реалізації зручності користування, а менеджери проєктів — щоб змусити мозок думати. І подивитися на світ по-новому.

Peopleware: продуктивні проєкти й команди (Peopleware: Productive Projects and Teams)

  • Автори: Том ДеМарко й Тім Лістер.
  • Рік видання: 2013 (третє видання)
  • Підходить для: початківців

Книжка Peopleware, написана двома консультантами з програмного забезпечення, — відома праця про управління розробкою ПЗ. У ній наголошується, що більшість проблем у розробці програмного забезпечення пов’язані з людьми, а не з технікою.

У книжці досліджуються конфлікти між перспективою індивідуальної роботи, корпоративною ідеологією та теорією робочого простору. Більшість тем подано у вигляді принципів, підкріплених авторитетними джерелами або конкретними історіями.

Її має прочитати кожен, хто працює (неважливо, керівник він чи підлеглий), адже в ній дуже стисло й прямо розповідається, як створювати успішні й ефективні команди.

Ефективна робота зі застарілим кодом (Working Effectively with Legacy Code)

  • Автор: Майкл Фізерс
  • Рік видання: 2004
  • Підходить для: середнього рівня

Книжці 18 років. Проте її зміст не старіє. У ній наведено каталог із 24 методів усунення залежностей, які дають змогу безпечно вносити зміни до вашої програми.

Книжка вчить працювати з великими, неперевіреними застарілими програмами, точно визначати місця в коді, де потрібні зміни, і працювати із застосунками, які не мають належної структури.

Ви знайдете безліч методів, які можна застосовувати будь-якою мовою чи на будь-якій платформі, зокрема C, C++, C# і Java. Деякі прийоми здаються застарілими, але ніколи не знаєш, коли вони можуть знадобитися.

Створіть власну нейронну мережу (Make Your Own Neural Network)

  • Автор: Тарік Рашид
  • Рік видання: 2016
  • Підходить для: початківців і тих, хто вже має досвід

Чого зазвичай очікуєш, купуючи книжку про штучний інтелект? Визначення на кожній сторінці? Теореми й доведення? Багато математики? Безліч сухих абзаців? Що ж, ця книжка інша. Ви отримаєте саме те, що потрібно, щоб зрозуміти тему й застосувати її на практиці, — ні більше, ні менше.

Вона навчить вас створювати власну нейронну мережу (на Python) і навчати її розпізнавати написані від руки цифри. Книжка поділена на три частини:

Частина 1: знайомить із математичними поняттями, що лежать в основі нейронних мереж.

Частина 2: розповідає про основи мови програмування Python і про те, як створити нейронну мережу, здатну навчитися розпізнавати рукописні цифри.

Частина 3: досліджує способи підвищити продуктивність нейронної мережі й протестувати її на власному почерку.

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

Код: прихована мова комп’ютерного обладнання та програмного забезпечення (Code: The Hidden Language of Computer Hardware & Software)

  • Автор: Чарльз Петцольд
  • Рік видання: 2000
  • Підходить для: початківців і тих, хто вже має досвід

Ця книжка відкриває світ обчислень у форматі короткої лінійної розповіді. Починаючи зі старіших технологій, як-от азбука Морзе, шрифт Брайля й булева логіка, автор поступово доходить до сучасності, розповідаючи про HTTP і WWW.

Потім він пояснює пізніші розробки, зокрема ASCII, операційні системи й арифметику з рухомою комою. Щоб розділи були цікавішими, він також помірно використовує метафори й аналогії.

Якими б не були ваші технічні навички, ця книжка вас зачарує й, можливо, навіть пробудить у вас технофіла.

Мова програмування C++ (The C++ Programming Language)

  • Автор: Б’єрн Страуструп
  • Рік видання: 2000
  • Підходить для: від середнього рівня до експертів

Написана самим батьком C++, ця книжка — найпопулярніша й найчитаніша у світі книжка про C++. Вона забезпечує повний і авторитетний огляд мови C++, її основних методів проєктування та стандартної бібліотеки.

Цю книжку на 1300 сторінок можна поділити на три частини. Перша частина (розділи 2-5) — прискорений курс із C++. Друга частина (розділи 6-29) — навчальний розділ про структури. В останній частині (розділи 30–44) розглядається стандартна бібліотека, яка є такою ж важливою й невіддільною частиною C++, як і сама мова.

Якщо ви хочете швидко вивчити мову, ця книжка не для вас. Але якщо ваша мета — стати майстром (а на це потрібно багато часу й зусиль), вона саме для вас. Це довге й дуже технічне читання, у якому детально розглянуто всі аспекти мови — від основ до езотерики.

Вступ до алгоритмів (Introduction to Algorithms)

  • Автори: Томас Кормен, Кліффорд Стейн, Рональд Рівест, Чарльз Лейзерсон
  • Рік видання: 2001
  • Підходить для: початківців і тих, хто вже має досвід

У цій книжці докладно описано широкий спектр алгоритмів: від класичних алгоритмів теорії графів до спеціальних алгоритмів теорії чисел, обчислювальної геометрії та зіставлення рядків.

Усе пояснено дуже простою мовою, без шкоди для глибини висвітлення чи математичної строгості. Але не чекайте на звичайну кулінарну книгу алгоритмів, яку можна просто скопіювати чи завантажити.

Якщо ви новачок, кожен розділ потрібно читати уважно. Вправи наприкінці кожного розділу допоможуть краще зрозуміти щойно прочитану концепцію. Просто приділіть цьому підручнику достатньо людино-годин — і ви дізнаєтеся про конкретні підходи до визначення того, наскільки важко ви змушуєте працювати комп’ютер.

Ефективна Java (Effective Java)

  • Автор: Джошуа Блох.
  • Рік видання: 2017
  • Підходить для: від початківців до експертів

Від часу першого видання (опублікованого у 2001 році) Effective Java дуже змінилася. Автор оновив книжку, щоб урахувати переваги нової версії Java й можливостей бібліотеки.

Як і в попередніх виданнях, кожен розділ містить кілька секцій (кожна написана як просте самостійне есе, що розкриває тонкощі платформи Java) та оновлені фрагменти коду.

У книжці розглянуто майже всі важливі можливості Java, а також хороші й погані практики використання деяких бібліотек, якими ми користуємося сьогодні. Оскільки запам’ятати все складно (навіть досвідченим програмістам), раджу тримати її під рукою як довідник, коли програмуватимете.

Вільний Python (Fluent Python)

  • Автор: Лучано Рамальйо
  • Рік видання: 2015
  • Підходить для: експертів

Завжди приємно читати авторів, які справді розуміють мову програмування й уміють добре її пояснити. Лучано Рамальйо — один із таких авторів. Він пише про Python із захопленням, але не замовчує його підводних каменів і недоліків.

Деякі розділи здаються дуже простими, інші ж розглядають особливості й складнощі та зачіпають саму суть мови. У книжці йдеться про модель даних Python, структури даних, функції як об’єкти, потік керування й метапрограмування.

Загалом ця книжка на 700 сторінок познайомить вас із ключовими можливостями й бібліотеками Python та навчить робити ваш код швидшим, коротшим і читабельнішим.

Досконалий код (Code Complete)

  • Автор: Стів Макконнелл
  • Рік видання: 2014 (друге видання)
  • Підходить для: від початківців до експертів

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

Книжка поділена на сім частин: перші шість закладають основу, розповідають про написання якісних програм, змінні, оператори й удосконалення коду. Сьома частина присвячена майстерності розробки програмного забезпечення (характеру, стилю, макету й документації).

На мій погляд, цю книжку має прочитати кожен програміст із досвідом 2-3 років. Хоча вона не підходить для всіх процесів розробки програмного забезпечення й деякі її частини можуть застаріти, вона, безперечно, передає ідеї, які мають зрозуміти й прийняти всі програмісти.

7. Глибинне навчання

  • Автори: Ієн Ґудфеллоу, Йошуа Бенджіо й Аарон Курвілль.
  • Рік видання: 2016
  • Підходить для: експертів

У книжці наведено величезну кількість подробиць про нейронні мережі та їхні глибинні версії. Автори впорядкували складні теми так, щоб плавно доносити свої ідеї.

Книжка поділена на три частини:

150 сторінок довідкового матеріалу: охоплюють важливі поняття чисельних обчислень, теорії ймовірностей, теорії інформації та машинного навчання.

300 сторінок про застосування: це основна частина, що охоплює глибокі мережі прямого поширення, моделювання послідовностей, згорткові мережі й алгоритми оптимізації. У ній розглядаються різноманітні застосування в обробці природної мови, біоінформатиці та відеоіграх.

200 сторінок про дослідницькі теми: охоплюють теоретичні теми, як-от вивчення представлень, методи Монте-Карло й глибокі генеративні моделі.

Ця книжка призначена для тих, хто вже знайомий із концепцією глибинного навчання й хоче вивчити її теоретичні основи. Вона також дуже добре підійде аспірантам і дослідникам, чия робота пов’язана зі штучним інтелектом.

Штучний інтелект: сучасний підхід (Artificial Intelligence: A Modern Approach)

  • Автори: Стюарт Рассел, Пітер Норвіг
  • Рік видання: 2015
  • Підходить для: початківців і тих, хто вже має досвід

Ця книжка — не лише чудовий вступ до штучного інтелекту, а й оглядовий курс із технічного письма. Вона не вимагає значних попередніх знань, окрім знайомства з математичними позначеннями й базового розуміння ефективності алгоритмів або обчислювальної складності.

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

У ній також розглянуто практичні наслідки в тій самій галузі, зокрема розпізнавання мовлення, машинний переклад, робототехніку та багато іншого. Читайте, перечитуйте й бережіть її — ви пожинатимете плоди ще довго.

Чистий код: посібник із гнучкої розробки програмного забезпечення (Clean Code: A Handbook of Agile Software Craftsmanship)

  • Автор: Роберт Сесіл Мартін.
  • Дата виходу: 2007 р.
  • Підходить для: початківців і тих, хто вже має досвід

Автор «Чистого коду» найбільш відомий розробкою численних принципів проєктування програмного забезпечення. У цій книзі він представив найкращі гнучкі практики очищення коду «на льоту».

У ній багато фрагментів коду, і вам потрібно визначити, що в них не так, а що в цьому коді правильно. Книга навчає вас розпізнавати поганий код і показує, як його слід було написати від самого початку.

Є три розділи. Перший знайомить із шаблонами, принципами та практиками написання чистого коду. Другий містить багато різноманітних тематичних досліджень. Третій містить список евристик, зібраних під час вивчення конкретних випадків.

Хоча більшість прикладів орієнтована на Java, цю книгу може прочитати кожен, хто зацікавлений у створенні якіснішого коду, — розробник програмного забезпечення, керівник команди, системний аналітик чи керівник проєкту.

Зламай кодове інтерв’ю (Cracking the Coding Interview)

  • Авторка: Гейл Лаакманн Макдавелл.
  • Рік виходу: 2011
  • Підходить для: початківців і тих, хто вже має досвід

Cracking the Coding Interview — це найповніший і найдокладніший посібник про те, як пройти співбесіду з програмування чи розробки програмного забезпечення.

Спочатку пояснюється «чому» технічної співбесіди, як готуватися до нетехнічних запитань, як аналізувати й розбирати проблеми, як писати ефективний код і як реагувати на прийняття чи відмову.

Далі ви знайдете понад 180 запитань і відповідей із програмування, які становлять основну частину книги. Кожен розділ починається з обговорення базових знань і підходів до розв’язання схожих проблем, а потім переходить до конкретних методів їх вирішення. У книзі ви також знайдете посилання, за яким зможете самостійно завантажувати, компілювати й аналізувати розв’язання.

Осягнути алгоритми (Grokking Algorithms)

  • Автор: Адитья Бхаргава
  • Рік видання: 2015
  • Для кого: програмістів середнього рівня та експертів

Це доступний погляд на одну з основних тем інформатики. Книга навчить вас застосовувати алгоритми до реальних проблем, із якими ви стикаєтеся у повсякденному житті програміста.

Усе починається з простих завдань, як-от пошук і сортування. У міру розвитку навичок мислення ви перейдете до складніших тем, таких як хешування, графи, жадібні алгоритми, MapReduce, P і NP, стиснення даних та багато іншого. Усе пояснено за допомогою ілюстрацій і наочних прикладів.

Незалежно від того, розробляєте ви мобільні застосунки, відеоігри чи бізнес-інструменти, ви опануєте алгоритмічні методи розв’язання проблем, які раніше були вам не до снаги. Наприклад, ви зможете зрозуміти, як працює стиснення даних за допомогою кодування Гаффмана, написати програму перевірки орфографії з використанням алгоритмів на графах і багато іншого.