SICP: Введение

И если стало светлей, то, видимо, он уже здесь

Оглавление

В очередной раз взялся за эту книгу, признанную фундаментальной для изучения программирования, основу для многих курсов и по сей день актуальную. Итак, знаменитая СИКП или книга Структура и интерпретация компьютерных программ. Эта книга, написанная в MIT, является классическим учебником программирования, используемым во многих университетах по всему миру.

Эта книга проводит читателя от азов программирования до сложных конструкций, вплоть до построения собственного интерпретатора языка. В ней разбирается то, как работает с кодом программ компьютер, а также то, как удобнее работать с ним человеку. Это книга про взаимодействие компьютера и человека. Конечно, она достаточно высокоуровневая, не затрагивающая микрокод процессора или протоколы взаимодействия с памятью. Однако для обучения программированию эта та книга, которая открывает тот первый уровень магии, когда человек пишет какие-то команды, а компьютер их «понимает».

В качестве языка программирования в книге используется язык Lisp, точнее его диалект Scheme, также разработанный в MIT, в лаборатории искусственного интеллекта в 1975 году Гаем Льюисом Стилом мл. и Джеральдом Джеем Сассманом. Этот диалект является основой диалекта Common Lisp, ставшего промыщленным стандартом Лиспа (ANSI 1994). Реализация этого языка есть во многих интерпретаторах и компиляторах. Например, он доступен как диалект в пакете Racket, а также язык Clojure имеет очень близкий синтаксис к Scheme.

Подход к изучению программирования, предлагаемый СИКП, может быть применён и к другим языкам программирования. Так, например, сейчас многие курсы в университетах (в том же MIT) используют Python, оставляя структуру курса такой же как и раньше. А портал для обучения программированию https://hexlet.io использует СИКП как основу своим курсам по PHP, JS и Python. С другой стороны императивные и объектно ориентированные языки программирования и так достаточно широко представлены в обучающих материалах. А изучить хотя бы один функциональный язык, каким является Scheme, будет куда полезнее, чем ещё один C-подобный, если один вы уже знаете. Конечно, самым лучшим подходом будет решать упражнения данной книги и на Scheme, и на более привычном, уже известном языке (если он есть).

Лисп является одновременно очень простым и одновременно мощным языком. Лисп стал третьим языком высокого уровня, после Фортрана и Алгола. При этом именно Лисп ввёл в программирование такое понятие как список. Также Лисп разрабатывался для задач искусственного интеллекта, для написания сложных, комплексных программ, совместной разработки группой программистов. Переиспользование кода и структурирование исходного кода являются сильными сторонами этого языка. С другой стороны, Лисп является очень близким к модели вычисления, к самому компьютеру. Поэтому написать реализацию этого языка является достаточно простой задачей (в отличии от таких языков как C или более высокоуровневых Python, Java и так далее). Это также дало толчок в развитии Лиспа в качестве встраиваемого языка программирования, позволяющего описывать логику поверх «движка» программы, написанного на другом языке.

Я буду делать конспекты книги в виде отдельных заметок, а также поддерживать набор задач на https://repl.it. Для изучения этой книги желательно поставить на копьютер один из интерпретаторов языка Scheme, чтобы можно было проверять примеры и экспериментировать по ходу чтения. Я рекомендую использовать racket как совместимый, лёгкий и быстрый. После установки запустить REPL (Read-Evaluate-Print-Loop) можно командой racket -I scheme. Задачи данного курса представлены здесь: repl.it.