Классика Computer Science: Структура и интерпретация компьютерных программ

Structure and Interpretation of Computer Programs (SICP) - Структура и интерпретация компьютерных программ - замечательная книга Харольда Абельсона и Джеральда Сассмана о программировании. Книга действительно является настоящей классикой Computer Science(первое издание датируется 1985 г). Фактически это учебник к вводному курсу по программированию в Массачусетском технологическом институте (MIT).

Мой обзор книги не претендует на полноту описания и, в общем, не является рецензией. Скорее это попытка обратить внимание на такую классику, как SICP, тех, кто ещё не знаком с ней. Тем биоинформатикам, которые начинают вникать в вопросы программирования эта книга задаст правильное направление развития.

 

SICP

Я прочитал SICP уже после окончания института, когда у меня уже был некоторый опыт программирования. Среди многих книг по языкам программирования, различным фреймворкам и т.п. эта книга стала для меня настоящей жемчужиной. Она действительно была о программировании, а не о языках и платформах, - о том, как надо писать программы. Достаточно простым языком объяснялись такие вещи, как рекурсия, аппликативный и нормальный порядок вычислений, функции высших порядков. После этого все знания, добытые раньше из других источников, сложились в единую картину. Поэтому эта книга будет полезна и начинающим, и уже опытным программистам. Начинающие получат достаточно информации, которая будет очень полезна при изучении различных языков и платформ, а программисты с опытом упорядочат свои знания и получат представление о различных парадигмах программирования.

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

Кратко опишу содержание глав SICP, чтобы дать общее представление об объёме информации, который уместился в 576 страниц.

Первые три главы точно будут полезны для тех, кто собирается работать в области биоинформатики, т. к. в них рассмотрен базис программирования как процесса формирования абстракций.

В первой главе планомерно вводятся понятия переменной, выражения, процедуры, разъясняются различия в порядке вычислений, условные конструкции.

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

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

Во второй главе рассматривается построение абстракций данных. Сначала вводятся понятия конструктора и селектора для работы с составными типами данных и рассматривается пример их использования для построения процедур, работающих с рациональными числами. Далее рассматривается понятие барьера абстракций: расслоение системы на уровни, которые работают друг с другом через интерфейсы. За которым следует замечательный раздел, в котором показано, как можно данные представить в виде процедур! Ну и, конечно же, обсуждаются такие структуры данных, как пары и списки, которые являются основой для конструирования более сложных типов данных(в Lisp, диалектом которого является Scheme - пары и списки - это вообще основа основ. Не даром Lisp это акроним от List processing)

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

В главе 3 вводится изменяемое состояние и, фактически, строится объектно-ориентированная модель на классическом примере банковского счета. Далее обсуждаются методы моделирования на основе изменяемых данных, проблемы параллелизма с изменяемыми данными.

В заключение главы вводится понятие потока (Stream), который фактически является «ленивым» списком, в котором значения вычисляются не сразу, что представляет возможности для улучшения модульности программы.

Глав 4 и 5 я подробно касаться не буду, хотя там и рассмотрены интересные проблемы, но они более специфичны для Computer Science.

Глава 4 описывает построение метациклического интерпретатора языка Scheme (интерпретатор Scheme, написанный на Scheme), в том числе расширения, необходимые для реализации ленивой модели вычислений, недетерминистской модели вычислений и логического программирования. Глава 5 — вычисления на регистровых машинах и компиляцию.

PS: Второе издание книги распространяется по лицензии Creative Commons, поэтому с текстом книги можно свободно ознакомиться на официальной странице MIT Press. Русский перевод книги можно скачать здесь.

PPS: если вы все-таки решили порешать задачки из книги на Scheme, рекомендую воспользоваться Racket. Это современный диалект Scheme имеющий довольно неплохую базу библиотек, а также IDE DrRacket.

Комментарии

 
0 #15 Karma 12.02.2023 19:44
You really make it seem really easy together with your presentation however I to find this topic to be really something which I believe I'd never understand.
It kind of feels too complicated and very large for me.

I am taking a look forward for your subsequent submit, I'll try
to get the hold of it!

Feel free to surf to my homepage увеличение губ: https://uvelichenie-gub-minsk-pr1.ru/
 
 
0 #14 Angelina 12.02.2023 16:01
Thank you for the auspicious writeup. It in fact was a amusement account it.
Look advanced to more added agreeable from you! However, how could we communicate?


my web page увеличение губ гиалуроновой кислотой: https://uvelichenie-gub-minsk-pr1.online/
 
 
0 #13 Earnest 12.02.2023 15:54
Keep on writing, great job!

Also visit my site :: удаление пигментации: https://lazernoe-udalenie-pigmentnyh-pyaten.ru/
 
 
0 #12 Roma 12.02.2023 15:54
Hello there, I found your website by way of Google while searching for a comparable subject, your site got here up, it seems to be great.

I've bookmarked it in my google bookmarks.


Hi there, just turned into alert to your blog via Google, and found that it is really informative.
I'm gonna be careful for brussels. I will appreciate should you continue this in future.
Lots of people might be benefited from your writing.
Cheers!

Here is my blog; удаление пигментных пятен лазером
в Минске: https://lazernoe-udalenie-pigmentnyh-pyaten.online/
 
 
0 #11 Vaughn 08.02.2023 18:55
You really make it appear really easy along with
your presentation however I in finding this
matter to be really one thing which I feel I'd never understand.
It kind of feels too complicated and extremely broad for me.
I'm taking a look ahead for your next put up, I will attempt to get the grasp of it!


Also visit my page: накрутка подписчиков в yappy: https://nakrutka-podpischikov-yappy-pr1.ru/
 
 
0 #10 Phyllis 08.02.2023 17:44
Greetings! I know this is kinda off topic however I'd figured I'd ask.
Would you be interested in trading links or maybe guest writing a blog post
or vice-versa? My website discusses a lot of the same subjects
as yours and I feel we could greatly benefit from each other.
If you might be interested feel free to shoot me an email.
I look forward to hearing from you! Superb blog by the way!



my web page; накрутка
подписчиков в yappy: https://nakrutka-podpischikov-yappy-pr1.online/
 
 
0 #9 Elvera 07.02.2023 17:28
Have you ever thought about writing an e-book or guest authoring on other websites?
I have a blog based on the same topics you discuss and would love to have you share some stories/informa tion. I know my subscribers would value your work.
If you are even remotely interested, feel
free to shoot me an e mail.

my site: Гостиничные чеки
Екатеринбург: https://gostinichnye-cheki-v-ekaterinburge.online/
 
 
0 #8 Franchesca 07.02.2023 06:32
It's amazing to pay a quick visit this web page and reading the views of all mates about
this paragraph, while I am also keen of getting know-how.


My web blog; накрутка посещений комнаты YAPPY: https://nakrutka-komnat-yappy.online/
 
 
0 #7 Emily 06.02.2023 11:03
I read this article completely on the topic of
the difference of latest and previous technologies, it's remarkable
article.

Also visit my webpage ... накрутка посещений комнат
яппи: https://nakrutka-komnat-yappy.ru/
 
 
0 #6 Fredric 04.02.2023 14:09
It's remarkable to visit this web site and reading the views of all friends regarding this article,
while I am also eager of getting know-how.

Also visit my web site - увеличить губы гиалуроновой кислотой: https://uvelichenie-gub-minsk.online/
 

Comments are now closed for this entry