Как изучать Структуру и Интерпретацию Компьютерных Программ (SICP)

Зачем и как изучить одну из важнейших книг в информатике

Содержание
  1. Очень краткое содержание
    1. Абстракция с помощью функций
    2. Абстракция с помощью данных
    3. Модульность, Объекты и Состояние
    4. Метаязыковые абстракции
    5. Вычисление с помощью регистровых машин
  2. Рекомендации
    1. Сколько читать
    2. Язык
  3. Оформление

СИКП — одноименная книга и легендарный учебный курс в MIT (Массачусетский технологический институт).

СИКП — не книга про языки программирования или разработку программного обеспечения, не книга по ООП, функциональному программированию или паттернам проектирования.

СИКП — книга об информатике (computer science). Восприятии компьютеров как абстрактных машин, используемых для манипулирования данными. Несмотря на то, что книга впервые опубликована в 1979, она до сих пор не потеряла свою актуальность и не потеряет в будущем. СИКП неизменно находится в топе лучших книг по обучению программированию на протяжении десятков лет.

This is one of the great classics of computer science. I bought my first copy 15 years ago, and I still don’t feel I have learned everything the book has to teach. — Paul Graham.

Стоит ли её читать? Однозначно стоит всем разработчикам на любых языках программирования с любым опытом. СИКП — достаточно сложная книга, поэтому появилось руководство, которое вы прямо сейчас читаете.

Очень краткое содержание

Абстракция с помощью функций

  1. Элементы программ
    • Выражения
    • Вычислительные стратегии
    • Подстановочная модель вычислений
  2. Функции и процессы порождаемые ими
    • Линейная рекурсия и итерация
    • Древовидная рекурсия
  3. Функции высшего порядка
    • Функции как аргументы
    • Функции как обобщения
    • Функции как возвращаемые значения

Абстракция с помощью данных

  1. Введение в абстракцию данных
    • Барьеры абстракции
    • Что такое данные?
  2. Иерархические данные и свойство замыкания
    • Представление последовательностей
    • Иерархические структуры
    • Последовательности как стандартные интерфейсы
  3. Символьные данные
    • Цитирование
  4. Множественные представления абстрактных данных
    • Тегирование данных
    • Программирование управляемое данными. Аддитивность.

Модульность, Объекты и Состояние

  1. Присваивание и локальное состояние
    • Преимущества присваивания
    • Недостатки присваивания
  2. Модель с окружениями
    • Правила вычисления
    • Применение
    • Фреймы как репозитории локального состояния
  3. Моделирование с изменяемыми данными
    • Изменяемый список
    • Представление очереди
    • Представление таблиц
  4. Многозадачность
  5. Потоки

Метаязыковые абстракции

Вычисление с помощью регистровых машин


Рекомендации

Первое, что нужно понимать: СИКП — не просто книга. Это университетский курс, записанный в виде книги. Он сложный и объёмный, его бесполезно проходить без практики. Практику придумывать не придётся. После каждой главы есть блок задач, которые авторы просят выполнить. Некоторые из них сугубо математичесские (просят что-то доказать), либо подразумевают хорошую математическую базу. Их можно и даже нужно пропускать, иначе вы можете очень быстро потерять мотивацию.

Сколько читать

СИКП условно можно разделить на две части. В первую часть входят главы 1, 2 и 3. Во вторую — 4 и 5. Разница в том, что во вторую часть входят главы, копающие очень глубоко, и пройти сквозь них может только по-настоящему увлеченный человек. По этой причине Хекслет рекомендует поставить себе планкой прохождение первых трех глав. Остальное можно с легкостью отложить на потом.

Язык

Для примеров и практики в книге используется язык Scheme (Ским), созданный авторами курса. Это один из диалектов семейства Lisp. Как и полагается любому Lisp-языку, Scheme имеет примитивный синтаксис, который можно изучить буквально за несколько часов. Он очень необычен для тех, кто имел дело только с широко распространенными языками, но обладает рядом серьезных достоинств, о которых говорится в книге.

Его выбор, в качестве основного языка для курса обоснован тем, что Scheme позволяет сосредоточиться на сути вещей вместо синтаксиса, увидеть чистые концепции в первозданном виде. Scheme как и любой Лисп, обладает невероятно высокой выразительностью благодаря тому, что в языке всё есть выражение, а инструкции отсутствуют вообще.

Вторая причина — гомоиконность. Свойство языков, в которых данные и код — одно и тоже. Этот тезис сложно понять на словах, его нужно прочувствовать на практике. Есть еще и третья причина — макросы, но они в книге не используются.

Однако, сам Scheme не развивается и уже не актуален. Его заменил язык Racket, который изначально был реализацией языка Scheme, но вырос во что-то большее. Другими словами, на базовом уровне Scheme и Racket выглядят идентично, что крайне удобно при прохождении СИКП. Хекслет рекомендует проходить СИКП именно на Racket. Специально для этого гайда мы подготовили репозиторий, который можно использовать как основу для кода. Не забудьте правильно настроить редактор. Lisp языки относятся к тем языкам, для которых нужна поддержка со стороны редактора для комфортной работы.

Оформление

На Гитхабе можно найти множество репозиториев, в которых лежат решения задач из СИКП на всех возможных языках программирования. Мы настоятельно рекомендуем поступать также: создать репозиторий в своем аккаунте и выкладывать в него все свои решения. Идеально, если каждое решение будет сопровождаться тестами. Такой подход хорош не только тем, что вы дополнительно прокачиваетесь в git и получаете дополнительную мотивацию, но и тем, что у вас появляется код, который можно показать при поиске работы. Более того, велика вероятность, что собеседовать вас будет человек, знающий про СИКП. Это добавит очков в карму и даст возможность продуктивно пообщаться.


Кирилл Мокевнин

Поделиться
Отправить