0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p><strong>СИКП - одноименная книга и легендарный учебный курс в MIT (Массачусетский технологический институт).</strong></p>
1
<p><strong>СИКП - одноименная книга и легендарный учебный курс в MIT (Массачусетский технологический институт).</strong></p>
2
<p>СИКП - не книга про языки программирования или разработку программного обеспечения, не книга по ООП, функциональному программированию или паттернам проектирования.</p>
2
<p>СИКП - не книга про языки программирования или разработку программного обеспечения, не книга по ООП, функциональному программированию или паттернам проектирования.</p>
3
<p>СИКП - книга об информатике (computer science). Восприятии компьютеров как абстрактных машин, используемых для манипулирования данными. Несмотря на то, что книга впервые опубликована в 1979, она до сих пор не потеряла свою актуальность и не потеряет в будущем. СИКП неизменно находится в топе лучших книг по обучению программированию на протяжении десятков лет.</p>
3
<p>СИКП - книга об информатике (computer science). Восприятии компьютеров как абстрактных машин, используемых для манипулирования данными. Несмотря на то, что книга впервые опубликована в 1979, она до сих пор не потеряла свою актуальность и не потеряет в будущем. СИКП неизменно находится в топе лучших книг по обучению программированию на протяжении десятков лет.</p>
4
<blockquote><p>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.<em>- Paul Graham</em>.</p>
4
<blockquote><p>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.<em>- Paul Graham</em>.</p>
5
</blockquote><p>Стоит ли её читать? Однозначно стоит всем разработчикам на любых языках программирования с любым опытом. СИКП - достаточно сложная книга, поэтому появилось руководство, которое вы прямо сейчас читаете.</p>
5
</blockquote><p>Стоит ли её читать? Однозначно стоит всем разработчикам на любых языках программирования с любым опытом. СИКП - достаточно сложная книга, поэтому появилось руководство, которое вы прямо сейчас читаете.</p>
6
<h2>Содержание</h2>
6
<h2>Содержание</h2>
7
<ul><li><a>Очень краткое содержание</a></li>
7
<ul><li><a>Очень краткое содержание</a></li>
8
<li><a>Рекомендации</a></li>
8
<li><a>Рекомендации</a></li>
9
<li><a>Оформление</a></li>
9
<li><a>Оформление</a></li>
10
<li><a>Дополнительные ссылки</a></li>
10
<li><a>Дополнительные ссылки</a></li>
11
</ul><h2>Очень краткое содержание</h2>
11
</ul><h2>Очень краткое содержание</h2>
12
<h3>Абстракция с помощью функций</h3>
12
<h3>Абстракция с помощью функций</h3>
13
<ol><li>Элементы программ<ul><li>Выражения</li>
13
<ol><li>Элементы программ<ul><li>Выражения</li>
14
<li>Вычислительные стратегии</li>
14
<li>Вычислительные стратегии</li>
15
<li>Подстановочная модель вычислений</li>
15
<li>Подстановочная модель вычислений</li>
16
</ul></li>
16
</ul></li>
17
<li>Функции и процессы порождаемые ими<ul><li>Линейная рекурсия и итерация</li>
17
<li>Функции и процессы порождаемые ими<ul><li>Линейная рекурсия и итерация</li>
18
<li>Древовидная рекурсия</li>
18
<li>Древовидная рекурсия</li>
19
</ul></li>
19
</ul></li>
20
<li>Функции высшего порядка<ul><li>Функции как аргументы</li>
20
<li>Функции высшего порядка<ul><li>Функции как аргументы</li>
21
<li>Функции как обобщения</li>
21
<li>Функции как обобщения</li>
22
<li>Функции как возвращаемые значения</li>
22
<li>Функции как возвращаемые значения</li>
23
</ul></li>
23
</ul></li>
24
</ol><h3>Абстракция с помощью данных</h3>
24
</ol><h3>Абстракция с помощью данных</h3>
25
<ol><li>Введение в абстракцию данных<ul><li>Барьеры абстракции</li>
25
<ol><li>Введение в абстракцию данных<ul><li>Барьеры абстракции</li>
26
<li>Что такое данные?</li>
26
<li>Что такое данные?</li>
27
</ul></li>
27
</ul></li>
28
<li>Иерархические данные и свойство замыкания<ul><li>Представление последовательностей</li>
28
<li>Иерархические данные и свойство замыкания<ul><li>Представление последовательностей</li>
29
<li>Иерархические структуры</li>
29
<li>Иерархические структуры</li>
30
<li>Последовательности как стандартные интерфейсы</li>
30
<li>Последовательности как стандартные интерфейсы</li>
31
</ul></li>
31
</ul></li>
32
<li>Символьные данные<ul><li>Цитирование</li>
32
<li>Символьные данные<ul><li>Цитирование</li>
33
</ul></li>
33
</ul></li>
34
<li>Множественные представления абстрактных данных<ul><li>Тегирование данных</li>
34
<li>Множественные представления абстрактных данных<ul><li>Тегирование данных</li>
35
<li>Программирование управляемое данными. Аддитивность.</li>
35
<li>Программирование управляемое данными. Аддитивность.</li>
36
</ul></li>
36
</ul></li>
37
</ol><h3>Модульность, Объекты и Состояние</h3>
37
</ol><h3>Модульность, Объекты и Состояние</h3>
38
<ol><li>Присваивание и локальное состояние<ul><li>Преимущества присваивания</li>
38
<ol><li>Присваивание и локальное состояние<ul><li>Преимущества присваивания</li>
39
<li>Недостатки присваивания</li>
39
<li>Недостатки присваивания</li>
40
</ul></li>
40
</ul></li>
41
<li>Модель с окружениями<ul><li>Правила вычисления</li>
41
<li>Модель с окружениями<ul><li>Правила вычисления</li>
42
<li>Применение</li>
42
<li>Применение</li>
43
<li>Фреймы как репозитории локального состояния</li>
43
<li>Фреймы как репозитории локального состояния</li>
44
</ul></li>
44
</ul></li>
45
<li>Моделирование с изменяемыми данными<ul><li>Изменяемый список</li>
45
<li>Моделирование с изменяемыми данными<ul><li>Изменяемый список</li>
46
<li>Представление очереди</li>
46
<li>Представление очереди</li>
47
<li>Представление таблиц</li>
47
<li>Представление таблиц</li>
48
</ul></li>
48
</ul></li>
49
<li>Многозадачность</li>
49
<li>Многозадачность</li>
50
<li>Потоки</li>
50
<li>Потоки</li>
51
</ol><h3>Метаязыковые абстракции</h3>
51
</ol><h3>Метаязыковые абстракции</h3>
52
<p>...</p>
52
<p>...</p>
53
<h3>Вычисление с помощью регистровых машин</h3>
53
<h3>Вычисление с помощью регистровых машин</h3>
54
<p>...</p>
54
<p>...</p>
55
<h2>Рекомендации</h2>
55
<h2>Рекомендации</h2>
56
<p>Первое, что нужно понимать: СИКП - не просто книга. Это университетский курс, записанный в виде книги. Он сложный и объёмный, его бесполезно проходить без практики. Практику придумывать не придётся. После каждой главы есть блок задач, которые авторы просят выполнить. Некоторые из них сугубо математические (просят что-то доказать), либо подразумевают хорошую математическую базу. Их можно и даже нужно пропускать, иначе вы можете очень быстро потерять мотивацию.</p>
56
<p>Первое, что нужно понимать: СИКП - не просто книга. Это университетский курс, записанный в виде книги. Он сложный и объёмный, его бесполезно проходить без практики. Практику придумывать не придётся. После каждой главы есть блок задач, которые авторы просят выполнить. Некоторые из них сугубо математические (просят что-то доказать), либо подразумевают хорошую математическую базу. Их можно и даже нужно пропускать, иначе вы можете очень быстро потерять мотивацию.</p>
57
<h3>Сколько читать</h3>
57
<h3>Сколько читать</h3>
58
<p>СИКП условно можно разделить на две части. В первую часть входят главы 1, 2 и 3. Во вторую - 4 и 5. Разница в том, что во вторую часть входят главы, копающие очень глубоко, и пройти сквозь них может только по-настоящему увлеченный человек. По этой причине Хекслет рекомендует поставить себе планкой прохождение первых трех глав. Остальное можно с легкостью отложить на потом.</p>
58
<p>СИКП условно можно разделить на две части. В первую часть входят главы 1, 2 и 3. Во вторую - 4 и 5. Разница в том, что во вторую часть входят главы, копающие очень глубоко, и пройти сквозь них может только по-настоящему увлеченный человек. По этой причине Хекслет рекомендует поставить себе планкой прохождение первых трех глав. Остальное можно с легкостью отложить на потом.</p>
59
<h3>Язык</h3>
59
<h3>Язык</h3>
60
<p>Для примеров и практики в книге используется язык Scheme (Ским), созданный авторами курса. Это один из диалектов семейства Lisp. Как и полагается любому Lisp-языку, Scheme имеет примитивный синтаксис, который можно изучить буквально за несколько часов. Он очень необычен для тех, кто имел дело только с широко распространенными языками, но обладает рядом серьезных достоинств, о которых говорится в книге.</p>
60
<p>Для примеров и практики в книге используется язык Scheme (Ским), созданный авторами курса. Это один из диалектов семейства Lisp. Как и полагается любому Lisp-языку, Scheme имеет примитивный синтаксис, который можно изучить буквально за несколько часов. Он очень необычен для тех, кто имел дело только с широко распространенными языками, но обладает рядом серьезных достоинств, о которых говорится в книге.</p>
61
<p>Его выбор, в качестве основного языка для курса обоснован тем, что Scheme позволяет сосредоточиться на сути вещей вместо синтаксиса, увидеть чистые концепции в первозданном виде. Scheme как и любой Лисп, обладает невероятно высокой выразительностью благодаря тому, что в языке всё есть выражение, а инструкции отсутствуют вообще.</p>
61
<p>Его выбор, в качестве основного языка для курса обоснован тем, что Scheme позволяет сосредоточиться на сути вещей вместо синтаксиса, увидеть чистые концепции в первозданном виде. Scheme как и любой Лисп, обладает невероятно высокой выразительностью благодаря тому, что в языке всё есть выражение, а инструкции отсутствуют вообще.</p>
62
<p>Вторая причина - гомоиконность. Свойство языков, в которых данные и код - одно и тоже. Этот тезис сложно понять на словах, его нужно прочувствовать на практике. Есть еще и третья причина - макросы, но они в книге не используются.</p>
62
<p>Вторая причина - гомоиконность. Свойство языков, в которых данные и код - одно и тоже. Этот тезис сложно понять на словах, его нужно прочувствовать на практике. Есть еще и третья причина - макросы, но они в книге не используются.</p>
63
<p>Сам язык Scheme, это в первую очередь стандарт языка плюс разные реализации этого стандарта. На данный момент один из самых развитых -- и продолжающих развиваться -- потомков Scheme, это язык<a>Racket</a>. Хекслет рекомендует проходить СИКП именно на Racket. Специально для этого гайда мы подготовили<a>репозиторий</a>, который можно использовать как основу для кода. В репозиторий стоит заглянуть хотя бы для того, чтобы узнать, как настроить Racket на совместимость именно с тем стандартом Scheme, который используется для примеров кода в книге: немногие существующие реализации Scheme позволяют воссоздать "то самое" окружение, к счастью, Racket может! Не забудьте правильно настроить редактор: Lisp языки относятся к тем языкам, для которых нужна поддержка со стороны редактора для комфортной работы.</p>
63
<p>Сам язык Scheme, это в первую очередь стандарт языка плюс разные реализации этого стандарта. На данный момент один из самых развитых -- и продолжающих развиваться -- потомков Scheme, это язык<a>Racket</a>. Хекслет рекомендует проходить СИКП именно на Racket. Специально для этого гайда мы подготовили<a>репозиторий</a>, который можно использовать как основу для кода. В репозиторий стоит заглянуть хотя бы для того, чтобы узнать, как настроить Racket на совместимость именно с тем стандартом Scheme, который используется для примеров кода в книге: немногие существующие реализации Scheme позволяют воссоздать "то самое" окружение, к счастью, Racket может! Не забудьте правильно настроить редактор: Lisp языки относятся к тем языкам, для которых нужна поддержка со стороны редактора для комфортной работы.</p>
64
<h2>Оформление</h2>
64
<h2>Оформление</h2>
65
<p>На Гитхабе<a>можно найти</a>множество репозиториев, в которых лежат решения задач из СИКП на всех возможных языках программирования. Мы настоятельно рекомендуем поступать так же: создать репозиторий в своем аккаунте и выкладывать в него все свои решения. Идеально, если каждое решение будет сопровождаться<a>тестами</a>. Такой подход хорош не только тем, что вы дополнительно прокачиваетесь в git и получаете дополнительную мотивацию, но и тем, что у вас появляется код, который можно показать при поиске работы. Более того, велика вероятность, что собеседовать вас будет человек, знающий про СИКП. Это добавит очков в карму и даст возможность продуктивно пообщаться.</p>
65
<p>На Гитхабе<a>можно найти</a>множество репозиториев, в которых лежат решения задач из СИКП на всех возможных языках программирования. Мы настоятельно рекомендуем поступать так же: создать репозиторий в своем аккаунте и выкладывать в него все свои решения. Идеально, если каждое решение будет сопровождаться<a>тестами</a>. Такой подход хорош не только тем, что вы дополнительно прокачиваетесь в git и получаете дополнительную мотивацию, но и тем, что у вас появляется код, который можно показать при поиске работы. Более того, велика вероятность, что собеседовать вас будет человек, знающий про СИКП. Это добавит очков в карму и даст возможность продуктивно пообщаться.</p>
66
<h2>Дополнительные ссылки</h2>
66
<h2>Дополнительные ссылки</h2>
67
<ul><li><p><a>Курс: Структура и интерпретация компьютерных программ (SICP по-русски)</a></p>
67
<ul><li><p><a>Курс: Структура и интерпретация компьютерных программ (SICP по-русски)</a></p>
68
</li>
68
</li>
69
<li><p><a>Сервис для отслеживания прогресса изучения книги</a></p>
69
<li><p><a>Сервис для отслеживания прогресса изучения книги</a></p>
70
</li>
70
</li>
71
<li><p><a>Лекции от авторов курса переведенные на русский язык</a></p>
71
<li><p><a>Лекции от авторов курса переведенные на русский язык</a></p>
72
</li>
72
</li>
73
<li><p><a>СИКП в Озон</a></p>
73
<li><p><a>СИКП в Озон</a></p>
74
</li>
74
</li>
75
</ul>
75
</ul>