Skip to content

Latest commit

 

History

History
150 lines (132 loc) · 14.6 KB

Introduction.org

File metadata and controls

150 lines (132 loc) · 14.6 KB

Введение

flânerie — авторский термин, которым он называет свои учебные тексты (flâneries [прогулки]). Данный текст короче и неформальнее обычного учебника, но длиннее и отточеннее записи в блоге.

Эта flânerie — прогулка по наиболее доступным местам информатики, важную часть которой составляет программирование. Общепринятый подход заключается в том, чтобы начать с курса, состоящего в основном из программирования на популярном императивном языке (Python, C++, Java). Т. к. эти большие и сложные языки изначально проектировались для экспертов, а не для новичков, бОльшая часть усилий в начале обучения тратится на освоение синтаксиса и всяческих тонкостей данного конкретного языка, в ущерб удобным вычислительным моделям, более глубокому пониманию и действительно важным темам.

Я и сам начинал так же (с другими, теперь уже устаревшими, языками), и после окончания обучения преподавал в этой парадигме много лет. В середине моего карьерного пути я столкнулся с функциональным языком программирования, который теперь называется Racket, и сопутствующим учебником How to Design Programs (HtDP). Я обучил моих собственных детей, используя Racket и HtDP, и затем стал пытаться убедить свой университет использовать их. Мой аргумент состоял в том, что этот язык и этот учебник были разработаны специально для современного образования и способствуют обсуждению более широкого круга тем уже на раннем этапе обучения. Сейчас мы используем эти два прекрасных инструмента для преподавания вводного курса информатики (не только программирования), через который ежегодно проходят две тысячи студентов. Мы считатем такую подготовку важной для всех студентов нашего факультета, несмотря на то, что большинство из них не будут в дальнейшем специализироваться в информатике.

Существует три версии этого вводного курса. Одна версия (которую я сам изначально разработал и преподавал) использовала Racket, но не HtDP. Почему, если эта книга такая уж полезная? Авторы HtDP писали для максимально широкой аудитории, поэтому ничего сложнее математики средних классов школы для понимания текста не требуется. Существует также учебная программа Bootstrap для американских школ, там Racket используется для обучения школьников математике. Но в Университете Ватерлоо наша Школа Компьютерных Наук является частью Факультета Математики, крупнейшего в мире. Каждый студент, поступающий на этот факультет, вне зависимости от специализации, обязан взять два курса по информатике. Эти студенты, как правило, обладают очень хорошей математической подготовкой, а некоторые из них — просто превосходной. У меня была возможность разработать два курса информатики для такой аудитории, и то, что Вы сейчас читаете, — результат этих разработок.

Необходимый бекграунд

В силлабусе тех курсов было сказано, что студенту не нужно заранее уметь программировать (это верно и для данного текста), однако следует обладать склонностью к математике и быть крайне заинтересованным в предмете. Вероятно, если Вы продолжаете это читать, упоминание математики Вас не оттолкнуло. Но что значит “склонность к математике”?

Необязательно иметь хорошие оценки по математике в школе или даже любить математику. Зачастую математическое образование не даёт адекватного представления о том, что такое математика. Например, в начальной и средней школе акцент делается на механических вычислениях, запоминании формул и шаблонов. Такое обучение может демотивировать учащихся. Я и сам получал плохие оценки вплоть до старшей школы. Когда началась алгебра, у меня внезапно стало получаться. К тому же, получение хороших оценок не всегда связано с пониманием предмета, их можно заслужить и другими способами.

Я рассматриваю склонность к математике как готовность работать с абстракциями, желание строить умозаключения по чётко определённым правилам, и способность оценить по достоинству открытую или созданную абстрактную структуру. В дальнейшем я буду опираться лишь на небольшой набор фактов и тем из математики; максимум — немножко алгебры, и абсолютно точно никакого математического анализа. Однако у Вас не должно возникать трудностей с пониманием тех математических рассуждений, которые будут периодически встречаться в тексте.

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

Вам понадобится компьютер, на который Вы сможете установить Racket. Компьютер может работать под управлением Mac OS X, GNU/Linux или Windows. Установка Racket довольно проста, достаточно уметь скачивать файлы и ориентироваться в файловой системе Вашего компьютера. Вы не сможете программировать в браузере или на смартфоне. Также Вам понадобится программа DrRacket, которая должна установиться вместе с Racket. Это одна из лучших IDE (integrated development environment, интегрированная среда разработки) что я знаю; уверен, Вам она тоже понравится.

Философия этого курса

В наши дни компьютерные навыки крайне востребованы, и для того, чтобы получить работу, необязательно иметь профильное высшее образование. Многие люди занимаются самообучением; другие получают знания в “лагерях” (camps), которые длятся всего несколько недель или месяцев. Даже во время университетского четырёхлетнего обучения продавливаются те языки программирования, которые в данный момент популярны в индустрии. Начинать обучение с таких языков это всё равно что начинать лётную школу в кабине Airbus A320.

Образовательные языки программирования существовали всегда. Некоторые из них даже нашли применение в индустрии, когда студенты-выпускники убедили своих работодателей в их полезности. Racket начинался как язык для обучения, но с тех пор стал инструментом для исследований, публикуемых в самых уважаемых изданиях. Этот язык спроектирован таким образом, что позволяет точно определять, какая программа является корректной, и какой результат должен получиться, если эту программу запустить; в других языках этого достичь сложнее.

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

Многие студенты приходят к программированию через интерес к таким завлекающим программам как компьютерные игры. Многие вводные курсы мотивируют студентов подобным образом. Даже в HtDP довольно много времени посвящается работе с изображениями и созданию анимаций, хотя именно там этот подход оказывается гораздо более эффективным, нежели в других местах. Дело в том, что бОльшая часть учебной программы по информатике имеет мало общего с играми или другими популярными программами, из-за чего студенты иногда оказываются разочарованными после таких вводных курсов. Я же хотел показать более честный взгляд на то, что из себя представляет эта область в действительности. Что такое вычисление? Как мы определяем это понятие и как о нём рассуждаем? В чём заключаются главные задачи?

В этом тексте содержится множество упражнений, которые изначально были домашними заданиями или вопросами с экзамена. Решение упражнений — важная часть процесса обучения. Вы не сможете полностью изучить предмет одним лишь чтением.

Логистическое замечание: на данном сайте для отображения математических выражений используется MathJax, что требует соединения с их (MathJax) сервером. Если этот сервер окажется недоступен, то вместо самих выражений Вы увидите соответствующий код в LaTeX. Код должен выглядеть вполне читаемо, однако по мере усложнения выражений читаемость, разумеется, будет падать.