Как любую профессиональную литературу, книги по программированию можно разделить на фундаментальные и нет. К фундаментальным, например, можно отнести книги по алгоритмам и структурам данных, написанию тестов, программированию в базах данных, шаблонам проектирования и языкам программирования, которые прочно вошли в отрасль (Java, C++, C#).
Такие книги не теряют свою актуальность со временем и, на мой взгляд, обязательны к прочтению всеми программистами, желающими стать востребованными профессионалами. К нефундаментальным можно отнести книги по инструментам и фреймворкам. Такие книги устаревают достаточно быстро, и тратить на них время или нет — это личное решение каждого. Кто-то может набить шишки без книг, кому-то нужно «пошуршать страницами». В любом случае пользоваться такими книгами можно как справочниками — их структура обычно к этому располагает. Стоит ли смотреть онлайн-курсы или читать бумажные книги — вопрос индивидуальный. Кто-то лучше воспринимает информацию с экрана монитора, кому-то нужен текст.
Итак, к фундаментальным книгам я бы отнёс следующую профессиональную литературу:
Д. Кнут «Искусство программирования» (The Art of Computer Programming);
Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес (больше известные как GoF) «Приёмы объектно-ориентированного проектирования. Паттерны проектирования» (Design Patterns: Elements of Reusable Object-Oriented Software);
Мартин Фаулер «Шаблоны корпоративных приложений» (Patterns of Enterprise Application Architecture);
Роберт К. Мартин «Чистый код. Создание, анализ и рефакторинг» (Clean Code: A Handbook of Agile Software Craftsmanship);
Стив Макконнелл «Совершенный код» (Code Complete);
Мартин Грабер «Понимание SQL» (Mastering SQL).