Главная страница проекта ИНФОРМАТИКА-21

Наука Школе

Главная страничка занятий с 5-классниками   Предыдущее занятие   Следующее занятие

11 февраля 2008. Шестое занятие

До занятия

Сначала спасибо белорусским коллегам (Браславская гимназия) за оперативное указание на важную опечатку.

Оказывается, ни у кого -- ни в Белоруссии, ни в Томске, ни в Орле -- черепашка пока не падала кроме, значит, Московского региона. Ну, не знаю.
Во всяком случае автор черепашки засуетился, даже вроде что-то уже поправил. Но невозможно же каждый день новую версию ставить -- поэтому пусть еще поикает, чтобы Принцип Калашникова прочнее усваивался.

Тем временем можно констатировать, что началась чаемая конкуренция методик на общей технической платформе: один из старейших участников проекта И.А.Дехтяренко (Trurl), который притом вдумчивый родитель-экспериментатор, выложил свой вариант робота на форуме.
Со своей стороны,
info21 начал решительно рубить орловско-томскую конфигурацию (уже выкинул тулбар и переименовал Трэп в Трап :-), перебирая все собственными руками (никому, выясняется, нельзя вполне доверять насчет выполнения Принципа Калашникова) ...... Посмотрим.


Идея занятия 

На форуме возникла краткая схватка мнений: наш многоопытный сибирский координатор Анатолий Иванович Попков считает, что процедуры нужно давать после циклов. В свою очередь, info21 сообщил, что народ уже и так стал как лаокооны в своих программах -- не могут сказать, где кончается крыша и начинается забор. Значит, пора учиться сложностью управлять.

Одна сторона программирования — натыркать команд.

Другая сторона — организация.

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

Кстати, Оберон/Компонентный Паскаль дает больше орг. средств, чем старый Паскаль, притом мощных и не сложных. Научиться ими пользоваться важно, начиная с простых процедур: опыт показывает, что от правильного использования орг. средств польза начинается раньше, чем принято думать.

Первый и главный принцип управления сложностью придумали еще древние римляне:

Римский принцип управления сложностью:

DIVIDE ET IMPERA = РАЗДЕЛЯЙ И УПРАВЛЯЙ

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

Пока наш лицейский народ программирует в стиле "атака варваров" (кадр из фильма Гладиатор):

А надо в стиле "марш римских когорт":

Пририсованные красные стрелки указывают на сигнумы, которые есть у каждой когорты. Signum -- это по-латински знак, вроде знамени, там может быть название (в Гладиаторе одно имя легиона читается: Felix -- Счастливый).

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

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


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

Сначала программа тщательно обследуется и делится пустыми строками на куски (Крыша, Окно, Дверь...). Будут и отдельные куски, которые соответствуют переходам от крыши к окну и т.п.
Перед каждым куском вставляется соответствующий комментарий. Комментарий -- это замечание для себя или другого программиста. Оно узнается по (* и *), а черепашка его игнорирует -- поэтому там внутри можно написать любые слова (между звездочками и скобками никаких пробелов быть не должно; здесь отличие от старрого Паскаля, где комментарии оформлялись фигурными скобками):

	(* любые слова *)

Затем выделенные таким образом блоки команд выносятся в отдельные небольшие процедуры -- им даются соответствующие имена, например, Окно, а на месте вынесенных блоков в основной процедуре вставляется просто имя с точкой запятой -- в данном случае Окно;

Вот как это выглядит. Кусок первоначального непрерывного текста, в котором рисуется окно:

	...
	ОпуститьПеро;
	Идти(20);
	Повернуть(90);
	Идти(25);
	Повернуть(90);
	Идти(20);
	Повернуть(90);
	Идти(25);
	Повернуть(90);
	ПоднятьПеро;
	...

Сначала выделяем пустыми строками (тут есть момент условности: включать в блок последнее Повернуть или нет; если включать, то нужно народу растолковывать, почему; пока нужды нет -- не включаем) и комментарием:

	...
	ОпуститьПеро;

	(* Окно *)
	Идти(20);
	Повернуть(90);
	Идти(20);
	Повернуть(90);
	Идти(20);
	Повернуть(90);
	Идти(20);

	(* переход *)
	Повернуть(90);
	ПоднятьПеро;
	...

Потом перед основной процедурой делаем сколько-то пустых строчек, в одной из пустых строк печатаем p (маленькая латинская, на клаве справа вверху), нажимаем F5, должно получиться так:

	PROCEDURE *;
	   VAR
	BEGIN
	   
	END ;

Отучать непрерывно дергать мышку! Зато нужно внимательно следить, где курсор, и точными движениями его переставлять.

Нужно еще дважды напечатать имя (звездочку лучше стереть):

	PROCEDURE Окно;
	   VAR
	BEGIN
	   
	END Окно;

Наконец, вырезать из текста программы блок команд и вставить его сюда:

   PROCEDURE Окно;
      VAR
   BEGIN
      Идти(20);
      Повернуть(90);
      Идти(20);
      Повернуть(90);
      Идти(20);
      Повернуть(90);
      Идти(20);
   END Окно;

А на месте блока в основной программе поставить вызов этой процедуры:

	...
	ОпуститьПеро;

	(* Окно *)
	Окно;

	(* переход *)
	Повернуть(90);
	ПоднятьПеро;
	...

После чего строка с комментарием (* Окно *) уже не нужна -- ее можно просто стереть. (Пример, только с Доской вместо Окна, дан ниже.)

Занятие

К сожалению, занятие с такой важной идеей оказалось сильно подпорчено очередным мероприятием "цифровой революции": в компьютерном классе устанавливали интерактивную, блин, доску, сопровождая процесс чуть ли не пением караоке:

Взрослым мальчикам (включая Николая Петровича) всё это было очень увлекательно, а О.А. и info21 наблюдали процесс с досадой и скептицизмом: чего будет от этой доски больше: пользы или вреда? Вред ведь уже начался -- испорчено занятие, -- но его никто и не подумал учитывать; верь после этого циферкам и статистике.

Простой как репа проектор, подключенный к компу -- вещь, безусловно, полезная. А интерактивная доска? Че делать-то с ней на уроке? Показать все можно легко и с компа через проектор. Есть подозрение, что тут как раз тот самый избыток сложности, о котором говорится в Принципе Калашникова: польза маргинальная, а ломаться доска эта будет и будет требовать обслуживания компьютерными гениями.
(Про распил бюджетов понятно, но всё-таки: всем очевидные глупости как предлог для распила не используют...)


В общем, опытная Ольга Александровна, оценив ситуацию, порешила разобрать народ на маленькие группы и втолковать насчет процедур, несмотря на весь шум-гам (тем более, что народ собирался медленно, и казалось, больше четырех не будет, но в итоге пришли-таки семеро). info21 взял пацанов, чтобы на них внимательно посмотреть (и оказалось, что не все еще дозрели до процедур в домостроительстве), а О.А. -- девочек (которые дозрели все):

Вася оказался особенно невезучим насчет Трэпов: что-то у него в моторике рук такое, что черепашка нервничает (отучаем все время дергать мышку).

А у Жени при запуске Блэкбокса опять выскочили трапы целым косяком (батарея Трэп-окошек видна на фотке справа):

   

Их надо просто все позакрывать и спокойно работать.
Женя на левом снимке выражает своё фи авторам черепашки, которые продолжают икать.


Работа без мышки. Народу были розданы странички с распечатанными комбинациями клавиш, чтобы постепенно учиться работать без мышки. Народ предупрежден, что в какой-то момент будет команда "мышку не трожь!" -- и нужно будет работать только с клавиатуры. Тима (который приходит первым, схватывает и строит гаражи; он тут на переднем плане) сразу стал вникать, и уже ясно, что парень далеко пойдет:

На дальнем плане Тимур, изгнанный за вулканическую энергию с Байтика. Посмотрим, что он тут сумеет натворить под тяжелой рукой info21.
А в камеру смотрит предновогодний герой Леха. Ему дано задание догонять за четыре пропущенных занятия -- строить домик. Но по его взгляду можно догадаться, что скучать он не даст.

И вот что он нагромоздил вместо домика:

 

Если плод, развиваясь во чреве, повторяет стадии эволюции организмов, то пацан, произрастая, повторяет, надо думать, стадии развития человеческой цивилизации. Леха, очевидно, еще на стадии классического варварства.


Успехи

Тима насчет процедур всё, как обычно, схватил. Но выяснилось, что шесть окон он умудрился сделать тремя разными способами -- Окно, Окно1 и Окно2. Отличаются они начальной точкой и направлением обхода. Но уже хорошо, что процедур три, а не шесть. Следующим шагом нужно будет всё упростить -- свести всё к одному Окну. Кстати, классное ему тут вышло упражнение:
примерно так серьезные программеры утюжат свои программы
.
Впрочем, классные программеры хорошенько планируют, прежде чем спешить клепать окна как попало. Тут надо у Лизаветы поучиться.

Тима сегодня скопировал Блэкбокс себе домой (антивирус у него дома есть), так что, надо думать, продвигаться он будет мощно.

Марина, Женя и Лиза оформляли заборные доски и боролись со следующей четко для них обозначенной проблемой: в какой позиции черепашка начинает рисовать доску (предусловие), и в какой заканчивает (постусловие). Наглядно посмотрели, что получается, когда предусловие не выполнено: у Лизаветы был отличный пример с доской, воткнувшейся в землю -- эх, в шуме-гаме не сфотал.

Зато когда на сей счет было, наконец, понято, и были найдены правильные переходные последовательности от постусловия одной процедуры к предусловию следующей, забор вдруг стал строиться со страшной, вызывающей восторг и чувство глубокого удовлетворения силой:

 

У Марины процедура ласково названа Дощечка, а на двери, кстати, видна махонькая дверная ручка -- а info21 решил в прошлый раз, что это соринка на экране. Хорошо, что Ольга Александровна объяснила.

Забор быстро разросся, так что даже Тима прибежал подивиться на мощь процедур:

Вот как выглядит у Жени процедура рисования доски, стоящая перед основной процедурой Jenny (фото слева). Справа -- кусок, рисующий забор внутри основной процедуры:

 

Тут, конечно, можно начинать думать о цикле -- но сначала пускай с процедурами разберутся как следует. Например, уберут забор в отдельную процедуру, которая будет вызывать процедуру Дощечка/Доска. Пусть прочувствуют, что так можно нагромоздить процедур из процедур до потери пульса -- границ творчеству в Компонентном Паскале нету (тут намек на легендарный сбор мусора).

Выводы

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

Ключевой пункт насчет процедур -- пред- и пост-условия: где и как черепаха стоит в начале и в конце.

С небольшими хорошо упакованными процедурками сам бог велел обратить внимание на оформление (отступы, пробелы...) -- чтоб были процедурки как конфетки.

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

Другое естественное направление -- циклы. И в главной процедуре, и во вспомогательных, и как в разных процедурах управляющие переменные независимые. Каких узоров тут можно набацать.... Правда, тут вклинивается целая тема -- переменные, зато можно будет сразу переходить к процедурам с параметрами. В общем, видимо, нужно подумать насчет переменных, как их ввести, чтобы визг стоял. А потом уже решать, что сначала: цикл или параметры. ...
Впрочем, параметры уже есть в черепашкиных командах: Идти(100), Повернуть(-90) и т.п.
А отсюда -- к переменным -- и дальше сразу к параметрам процедур будет как бы возвращение.
Куда-то циклы отодвигаются... ну и черт с ними. Пока.

А info21 будет продолжать рубить и тесать орловскую черепашку.

А Ольга Александровна решила исполнить бюрократический долг и заполнить очередную строку в журнале:

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

Главная страничка занятий с 5-классниками   Предыдущее занятие   Следующее занятие

Главная страница проекта ИНФОРМАТИКА-21

Наука Школе