Есть мысль отодвинуть массивы (структуры данных с произвольным вычислимым доступом) дальше по курсу, насколько возможно. Посмотрим в апреле-мае, как это пойдёт в реальности.
Большущий класс интересных алгоритмов строится как WHILE-процессы, обрабатывающие последовательности. Совать массивы только для хранения этих последовательностей - недальновидно, если можно отработать важнейшие навыки алгоритмизации без них.
В ББ можно сделать элементарно: один этап алгоритма выводит последовательность в Log, следующий этап забирает через In. Типа, соединяем, как перенаправление ввода-вывода от одной программы в другой в Юниксовом конвейере. Далее можно и файлы показать, тексты - с ними поработать... Если RECORD-ы уже введены и объянено, что у RECORD-а может быть процедура (объясняем через аллегорию - "вот такой RECORD у нас как маленький модуль").
Потом массивы пойдут отдельно и довольно легко, надо ожидать, после сильной "накатки" на построение алгоритмов обработки данных без них. При этом можно акцентироваться будет не на том, как цикл над данными построить (что уже будет отлетать от зубов) а на том, что массив - структура с вычислимым доступом. Поработать с задачами на графы (т.е. ссылками по индексу массива). А затем легко выйти на указатели, объяснив, что это более высокоуровневый и глобальный способ "вычислимого обращения" (память, типа, большооой такой массив...)
Вообще, такое ощущение, что массивы плотно связаны с "призраком FOR". Застарелые отзвуки Фортрана тащатся из курса в курс, из книги в книгу (т.е. то древнее зацикливание на итерации по векторам-матрицам).
В итоге, у народа в голове при слове "алгоритм" сразу в голове "звенят контуры" на FOR-ы, которые перемалывают массивы. Хотя должны "звенеть" образы WHILE-процессов по строгим законам-инвариантам, работающие над последовательностями (чего угодно последовательностями - событий, величин, маршрутов обхода сложных структур данных). Тут же и "функциональность" как раз - и dataflow с распараллеливанием вполне естественно образуется. Мы тут недоумеваем, чего некоторые функциональщики всё шухер поднимают про "дикие циклы с побочными эффектами". Просто представления об алгоритмическом программировании у них всё на том же фортрановско-до-Дейкстровском уровне.
(Занятно смотреть, что возня с "автораспараллеливанием" для императива идёт всё исключительно на том же классе FOR-программ над произвольно адресуемыми данными)
И последнее замечание, более общего характера. Совершенно некорректен подход в обучении, при котором на учащегося сначала вываливается некая группа средств, а затем учат выбирать из этих "кубиков" нужные, чтобы строить конкретные "башенки". Нужно выстроить чёткие концентрические окружности - от простейшего ядра к постепенно расширяющемуся; каждый переход делать отдельно и длительно прорабатывая; и показывая на каждом шаге, что с помощью вот такого ядра средств можем решать вот такие вот классы задач.
|