Обложка: Стоит почитать: обзор на книгу Эндрю Танненбаума «Архитектура компьютера»

Стоит почитать: обзор на книгу Эндрю Танненбаума «Архитектура компьютера»

Андрей Скиба
Андрей Скиба

Senior Python Developer Учи.ру

Могу с уверенностью сказать, не только по своему опыту, но и по опыту многих моих друзей и коллег, что почти всегда вход в профессию разработчика происходит не с основ, скажем так, компьютерной грамотности. А уже где-то посередине между полным новичком и гуру.

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

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

Конечно, нельзя сказать, что это стопроцентно необходимое пособие для начинающего программиста, и без знаний из этой книги делать в профессии нечего. Но в книге есть несколько ключевых аспектов, важных для понимания многих вещей из IT. А именно:

  • Основная идея «Архитектуры компьютера», на мой взгляд, состоит в том, что сам компьютер и все те протоколы и системы, которые обеспечивают его работу, организованы слоями. То есть каждый уровень абстракции изолирован от остальных уровней, находящихся выше. А наружу предоставляет только некий интерфейс взаимодействия с ним. Скажем, программируя на ассемблере, мы не задумываемся, как устроены транзисторные вентили на кристалле процессора. Или программируя 3D-графику, нам не нужны подробности работы графических шин и так далее. Хотя это никак не ограничивает нас в нашей работе.
  • В книге приводится довольно подробный обзор различных систем и протоколов компьютера. С одной стороны, это может показаться излишним и не очень современным. Но с другой даёт важную пищу для размышлений о том, как можно в принципе решать проблемы, с которыми мы сталкиваемся. Например, при проектировании приложений. Описывая историю появления того или иного протокола, Танненбаум показывает путь, который пришлось пройти проектировщикам ЭВМ в разные годы при достижении своих целей. И какие проблемы проектирования встретились у них на пути.
  • В конце глав есть великолепные, часто неожиданные вопросы и задания, которые интересно читать и выполнять. Помимо вопросов по основному содержанию главы встречаются и житейские, и даже юридические!

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

В интернете всегда есть масса материалов отдельно по каждому их этих пунктов. Но то, что Танненбаум их соединил в одном пособии, как мне кажется, — очень важный момент. В этой же связи также хочется отметить, что автор часто подчёркивает вещи, различные для Windows и Unix-like систем, о которых полезно знать.

Ещё я бы хотел отдельно отметить сам дух книги «Архитектура компьютера». Танненбаум по праву считается идейным вдохновителем Линуса Торвальдса. И уже одно это должно мотивировать нас знакомиться с трудами Эндрю. «Его книги вывели меня на новый уровень», — сказал однажды Линус. Вряд ли можно было бы придумать рекламу лучше. Танненбаум написал книгу живо, остроумно, без лишних деталей — это выгодно отличает её от аналогичных изданий. Я бы однозначно рекомендовал эту книгу всем, кто считает себя причастным к миру IT.