На прошлой неделе у меня была возможность посетить курс Дэвида Бизли по SICP (Структура и интерпретация компьютерных программ). SICP — это книга, которая была впервые опубликована в 1985 году и заработала определенную репутацию в различных кругах разработчиков программного обеспечения. Сама книга исследует многие области компьютерных наук с помощью языка под названием Scheme (шепелявый). В ходе курса мы использовали Racket и Python для изучения тех же концепций, проработанных в книге, с учетом их влияния на современный язык и дизайн.

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

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

Одной из выделяющихся частей книги SICP было использование «принятия желаемого за действительное» в качестве нашей модели программирования. Мы рассматривали проблему (например, проблему ограничений для распределения жильцов по этажам) и спрашивали себя, как будет выглядеть процедура или функция для приема данных и решения указанной проблемы. Затем мы реализовали эту процедуру и даже имитировали вызов других процедур, которых еще не существовало, чтобы смоделировать то, как, по нашему мнению, мог бы выглядеть оптимальный интерфейс. Оттуда мы будем строить реализацию каждого нового слоя с принятием желаемого за действительное. Это контрастировало с большим количеством моего повседневного опыта решения проблем снизу вверх, реализации низкоуровневых деталей и логики обработки данных на нашем пути к изолированному решению. В некотором смысле это было похоже на TDD, если вы издеваетесь над всеми функциями, которых у вас еще нет, но опять же с мышлением сверху вниз: я хочу, чтобы язык делал X для меня.

Многие другие темы рассматриваются в SICP. Сама книга написана сверху вниз, начиная с языка и заканчивая реализацией машины VM/регистрации к концу книги. Со временем, возможно, я напишу еще что-нибудь на эти темы. В целом курс был невероятно интересным. Разговоры во время обеда о природе и философии вычислительной техники были очень забавными и были вызваны рассматриваемым материалом, а также различным опытом, который у всех нас был в нашей повседневной работе. Вы не покидаете курс с новым пакетом или фреймворком в своем наборе инструментов. Вместо этого вы изучили основные принципы языков, вычислений и программного обеспечения. Это вооружает вас новыми моделями мышления, которые, как мы надеемся, повлияют на любые будущие вычисления, в которых вы будете участвовать. Хотя материал плотный, я думаю, что любой, кто действительно любит заниматься нашим ремеслом, получит пользу от изучения материала SICP в этой обстановке.

Если у кого-то есть вопросы по курсу, буду рад обсудить материал. Тем из вас, кто не знает Дэвида Бизли, я бы посоветовал посетить его сайт или поискать его имя на YouTube, так как у него много интересного материала, который побуждает учащегося к изучению материала.

Первоначально опубликовано на https://burningdaylight.io 2 февраля 2020 г.