What’s up guys?

Computer Science – грубо говоря - наука о компьютерах. Она объединяет всё, что программист должен знать о компьютерах и работе с ними для создания эффективных программ и алгоритмов. Программисты бывают разные, и как правило отличаются только языком, на котором пишут, но всех их объединяет необходимость понимать основы этой науки для понимания того, как работает компьютер.

В этой статье мы поговорим о самых полезных книгах по Computer Science для самых разных уровней, которые дадут вам понимание того, как работают компьютеры и всё, что с этим связанно. Предлагаю незамедлительно начинать, и начнём мы с книг для новичков (по моему мнению).

Книги для новичков

Основных книг тут три:

  • Чарльз Петцольд – Код. Тайный язык информатики. Как говорит сам автор: «Необычная экскурсия по истории цифровых технологий, сформировавших современную эпоху». Книга для новичков действительно не плохая, она рассказывает о многих аспектах работы компьютера более-менее простым языком (если в школе вы учили математику и информатику – вы поймёте). Для старта это не плохая книга.

  • Владстон Феррейра Фило – Теоретический минимум по Computer Science (две книги, зелёная и оранжевая). Как написано на обложке первой части: «Все, что нужно знать программисту и разработчику». А вторая часть повествует про компьютерные сети, криптографию, науку о данных и машинном обучении. Эти книги действительно полезны, но лично мне не хватил информации из них для полного погружения в темы. Но они дают фундаментальную базу, знания в которой можно углубить, прочитав книги из следующих разделов.  Для новичков они хорошо подойдут.

Так же для новичков могу порекомендовать почитать что-нибудь про ту ОС, которую вы используете. По поводу Windows – книгу посоветовать не могу, а по Linux:

  • Колисниченко Д.Н. - Linux на примерах. Практика практика и только практика. Если у вас стоит цель освоить основные команды и работу в Linux, то читать всю книгу нет необходимости, но в любом случае – рекомендую.

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

Для среднего уровня и выше

Архитектура компьютера

В этой категории две книги:

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

  • Ноам Нисан и Шимон Шокен - Архитектура Компьютерных Систем. Более общая книга, которая больше будет полезна для того, чтобы научиться собирать компьютеры и понять, как всё это работает.  Но книга Таненбаума мне нравится больше.

Компьютерные сети

  • Э. Таененбаум и Д. Уэзеролл - Компьютерные Сети. Аналогично книге из предыдущей категории – это классика. Кинга переиздавалась уже много раз. Рассказывает практически всё о компьютерных сетях, начиная с физического уровня, заканчивая безопасностью в сетях. Как и некоторые другие книги этого автора может быть немного сложной для чтения, хотя, как по мне – нормально.

Больше по этой теме посоветовать ничего не могу.

Операционные системы

В этой категории три книги:

  • Э. Таненбаум. И Х. Бос – Современные Операционные Системы. Это так же, как и все остальные книги – классика. Описывает общие для всех ОС концепции работы и рассматривает конкретные примеры. В этой книги есть всё, что нужно знать для понимания работы ОС.

  • Эви Немент и др. -  Unix и Linux. Руководство Системного Администратора. Если вы хотите в совершенстве овладеть Linux – эта книга для вас. Она максимально подробно рассказывает об администрировании, работе с сетями, хранении данных и прочих процессах на Unix – подобных ОС.

  • Марк Руссинович и др. – Внутренние устройство Windows. Из названия книги, как мне кажется, всё понятно. Она рассказывает о том, как работает Windows. В книге рассматриваются такие темы как: архитектура системы, процессы, потоки, управление памятью и конечно безопасность.

Алгоритмы

Из этой категории я могу посоветовать серию книг:

  • Роберт Седжвик – Фундаментальные алгоритмы на С++. Даже если вы не знаете С++ - вам будет всё понятно, автор даёт подробные объяснения происходящего в алгоритме. Если знаете – прекрасно. По факту, книги содержат описание всех самых важных алгоритмов в CS и их вам должно хватить. Принцип работы каждого алгоритма описывается достаточно подробно.

 

И ещё момент, специально для тех, кто хочет полностью понимать происходящее, а книгах Таненбаума:

  • В.И. Юров – Assembler - *без комментариев


В целом, по теме CS – это всё. Не стоит так же забывать и про разнообразные разделы математики и физики, необходимые для понимания материала большинства из книги по Computer Science. Так же могу дать несколько советов по чтению подобных книг:

  • Не перегружайте себя информацией. Не надо читать слишком много за раз.

  • Как только встретили что-то, что вам в книге не понятно – сразу изучите эту тему. Если этого не сделать – будет только хуже.

  • Практикуйте всё, что можно практиковать. Если в книги приводится какой-либо алгоритм – поймите, как он работает и попробуйте воссоздать его, если программа – перепишите и разберитесь.

  • Пересказываете прочитанное. После прочтения теоретической, постарайтесь её пересказать (самому себе или кому-то другому) максимально подробно. Так вы лучше запомните материал.

  • Если есть возможность – читайте книги в оригинале. Так у вас меньше шансов наткнуться на ошибки переводчика и редактора.

Все книги, упомянутые в статье вы можете скачать здесь.

На этом подборка книг подошла к концу, всем, кто дочитал до этого момента спасибо!

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


  1. includedlibrary
    17.11.2023 17:25
    +4

    Все книги хорошие, все, кроме "Грокаем Алгоритмы". По мне так это бесполезная трата времени, нормально там алгоритмы не объясняются. Если я открою Кормена и прочту главу про хэш-таблицы, я смогу их реализовать. Если я открую "Грокаем Алгоритмы" и прочту главу про хэш-таблицу, я не смогу реализовать ничего.


    1. YarIkGU Автор
      17.11.2023 17:25
      +2

      Да, есть такое, сейчас исправлю. И ещё, в книгах серии "Грокаем" что-либо очень много ошибок в переводе или в самом материале.


      1. MiyuHogosha
        17.11.2023 17:25

        Часто это ошибки перевода\обновления до новых версий. Читал оригиналы, к ним полно еррат. Наши издатели конечно же ерраты не публикуют


  1. mamchyts
    17.11.2023 17:25
    +1

    А вот мне наоборот зашла серия "Грокаем". Есть почти все книги из серии. Хорошие книги для самого первого ознакомления с технологиями. Да, есть опечатки и неточности, но это есть во всех книгах. Я рассаматриваю данную серию, как интро. Дальше уже сам решаешь, хочешь вникать глуюже или нет.


    1. includedlibrary
      17.11.2023 17:25

      Я только "Грокаем Алгоритмы" читал, может остальные книги серии нормальные, я не знаю


  1. AndreyDmitriev
    17.11.2023 17:25

    Помилосердствуйте, "Ассемблеру" Юрова - двадцать лет книжке, там всё заканчивается на MMX (да и то без примеров), часть уже не актуальна, а 64 бит вообще не рассматривается.

    Если уж брать книжку по ассемблеру на русском, то хотя бы вот эту:


  1. pOmelchenko
    17.11.2023 17:25
    +3

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


  1. redf1sh
    17.11.2023 17:25
    +5

    Если уж начали писать про книги, то упоминайте классику.
    Про алгоритмы, если уж для "профи", то почему нет "Алгоритмы построение и анализ" Кормена и Штайна?
    Можно сюда же запихнуть "Алгоритмические трюки для программистов" Уоррена
    Более специфичные вещи: "Text Algorithms" Maxime Crochemore

    По архитектуре компьютера первый раз слышу про Ноам Нисана, но не приведены классические книги: Харрис и Харрис "Цифровая схемотехника и архитектура компьютера, Дэвид М. Харрис" и для мощных ребят "Computer Architecture A Quantitative Approach" за авторством Hennesy и Patterson.

    По ОС почему-то нет 4х томника Андерсона "Operation Systems Principles and Practice" и "Операционные системы Внутренняя структура и принципы проектирования" за авторством Столлингса. А про bash и команды Linux stackoverflow расскажет лучше, когда будете решать конкретную задачу.

    Почему-то нет книг по компиляторам. Вроде тоже CS. Cooper & Torzon "Engineering a compiler", фиолетовый дракон, "Advanced compiler design and implementation" Steven S. Muchnick, "Modern Compiler Implementation in C" Andrew W. Appel, "Linkers & Loaders" John R. Levine

    Виртуальные машины: "Virtual machines" Smith & Nair.

    Также в CS входят ещё куча всего, например программирование графики и компьютерное зрение, распределённые системы, базы данных и тд.


    1. Pashka23
      17.11.2023 17:25

      По архитектуре компьютера первый раз слышу про Ноам Нисана, но не приведены классические книги

      То что вы в первый раз про него слышите это ваши персональные проблемы. И книга, и курс на котором она базируется ("From nand to Tetris") широко известны по всему миру, за исключением разве что постсоветских стран (видимо, из-за долгого отсутствия перевода). Книга, кстати, включает в себя проекты по разработке и компилятора, и виртуальной машины, и ОС. И для вхождения в тему, имхо, подходит на порядок лучше Таненбаума и Харриссов вместе взятых.


  1. garwall
    17.11.2023 17:25

    Для новичков еще Брукшир хорош. (IMHO, конечно)



  1. vandalv
    17.11.2023 17:25

    Спасибо за статью. Было бы здорово добавить оригинальные названия книг.


  1. nameisBegemot
    17.11.2023 17:25
    -1

    Компьютер саенс не совсем про науку о компьютерах. В скорее больше про программную начинку - программирование, алгоритмы и прочее.

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

    Имхо, конечно