?

Log in

No account? Create an account
О начальном обучении программированию - ФилимоненковДО [entries|archive|friends|userinfo]
ФилимоненковДО

[ website | My Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

О начальном обучении программированию [Jan. 27th, 2011|11:04 pm]
ФилимоненковДО
[Tags|, , ]

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

Начальное обучение непосредственно на промышленных языках программирования приводит к ряду трудностей. Изучение программирования "всухую" сродни плаванию на берегу, и мне кажется совершенно очевидным, что без практики обучение бессмысленно. Но обеспечение практики, во-первых, достаточно затратно (эти компьютерные классы дорого стоят и далеко не везде есть, что бы нам ни говорили с экранов). Это приводит к тому, что "информатика" есть только в старших классах, а не тогда, когда развитие мышления наиболее актуально, в 10-12 лет. Это еще можно было бы преодолеть, но есть проблема куда большая. Даже написание простейшей программы сопряжено для ученика с преодолением значительных технических трудностей. Для написания элементарной программки нужно нажать очень много клавиш на клавиатуре, и не перепутать... Это же вам не математика, когда за орфографические ошибки журят, но оценку не снижают, тут на одну букву ошибся - и все. А еще нужно уметь открывать и закрывать какие-то среды программирования, изучать какие-то правила работы со средой. Это же какую усидчивость нужно иметь... и где ее взять в 10 лет?

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

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

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

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

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

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

Самое время прерваться и сказать, что если у читателя возникло дежавю, то это очень хорошо! Я того и добиваюсь. И на самом деле пытаюсь формализовать то, что давно известно как "геометрическая задача на построение".

Зачем мне нужно было называть это "алгоритмическим языком"? Ну, просто потому, что нужно же хоть иногда называть вещи своими именами. Решить школьную задачу на построение - это как раз и означает предъявить программу с указанным синтаксисом. Школьникам, конечно, для наглядности предлагают еще и выполнить чертеж с использованием реальных инструментов. Дидактически это совершенно правильно (тут вам и наглядность, тут и повторяемость), но с принципиальной точки зрения мы с вами прекрасно понимаем, что чертеж-то и не нужен. Реальным описанием процесса построения мог бы стать слайд-фильм с последовательным показом промежуточных состояний чертежа, но это бессмысленно, описания последовательности действий вполне достаточно.

Конечно, описывать каждый раз полным текстом было бы слишком утомительно для детей. Поэтому в реальности детям ненавязчиво, не употребляя красивых, но непонятных слов, дают идею макроса. (Исторически, кстати, было наоборот, геометрии-то три тысячи лет, а понятию подпрограммы сколько? Но мы истории не пишем...) А именно, с детьми решают несколько типовых задач, а затем "разрешают использовать их в дальнейших построениях". Технически это выражается в том, что кроме трех основных типов предложений разрешают использовать еще и некоторый набор дополнительных. По моим наблюдениям, для решения школьных задач достаточно шести.
1. Построим срединный перпендикуляр к данному отрезку.
2. Построим прямую, проходящую через данную точку и перпендикулярную к данной примой
3. Построим прямую, проходящую через данную точку, и параллельную к данной прямой
4. Построим биссектрису данного угла
5. Построим прямую, образующую при пересечении с данной прямой угол, равный данному
6. Построим касательную к данной окружности, проходящей через данную точку.
Впрочем, каждый преподаватель волен расширить список. Сужать, видимо, не стоит... Но мы сейчас говорим о принципиальных моментах.

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

Так что возможности для начального развития навыков программирования в средней школе вполне есть. И всегда были!!! И именно поэтому у нас вполне неплохо с программистскими кадрами. Дело не в "особом таланте русского народа", просто школьные программы когда-то удачно составили. И если кому-то хочется, чтобы школа выпускала людей, больше приспособленных к нынешней компьютеризированной действительности (желание прекрасное, кто бы спорил), то худшее, что можно для этого сделать - это заменить геометрию на "информатику". Но ведь так и будет сделано, вот что печально...

Кстати, а вы не замечали того, что победители олимпиад по программированию всегда бывают из тех школ, в которых хорошо преподается математика?

Между прочим, одним из побудительных моментов для написания этого поста явились несколько разговоров в реале о моем предложении выкинуть информатику из средней школы как профанацию (см http://fdo-eq.livejournal.com/382540.html). Ну, и некоторая (не вся!) аргументация к моему давно продвигаемому тезису, что программирование должно быть в школе одной из составляющих математики, надеюсь, тоже видна. Что же касается моего предыдущего поста про почти школьную задачку, то я выражаю скромную надежду, что решатели будут хотя бы стараться описывать решения с помощью предложенного синтаксиса. А то фразы типа "проведем окружность из данной точки" не кажутся мне математически корректными... мягко говоря.
LinkReply

Comments:
[User Picture]From: sanitareugen
2011-01-27 06:19 pm (UTC)

Отчего-то вспоминается "Черепашка Лого".

А вообще - есть очень распространённый и очень полезный язык программирования. С циклами по счётчику и условию, с условными переходами, с подпрограммами.
И не требующий компьютера.
См. любое пособие по вязанию...
(Reply) (Thread)
From: fdo_eq
2011-01-27 06:24 pm (UTC)

Re: Отчего-то вспоминается "Черепашка Лого".

Яерепашка Лого мне тоже вспоминается. А абзаце про не прижившиеся искусственные языки она присутствовала среди прочих подобных.

А про вязание - наверное да! :-) Видимо, есть и еще естественные примеры (может, кто подскажет). Впрочем, насколько я понимаю, проблема усидчивости в вязании все-таки остается, там задачки за пятнадцать минут не решаются.
(Reply) (Parent) (Thread)
[User Picture]From: vitus_wagner
2011-01-27 08:12 pm (UTC)
Удивительно, но я никогда не любил в школе геометрию. При том что с пространственным воображением у меня вроде неплохо, а программированием - просто на жизнь зарабатываю.

Поэтому кажется мне что что-то в изложенном не так.
(Reply) (Thread)
From: edo_rus
2011-01-27 08:36 pm (UTC)
может быть просто с учителем не сложилось?
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: miserable_god
2011-01-27 08:47 pm (UTC)
а вы девелопер? вот вопрос. я тестировщик. а хотелось бы изучить шарп, скажем. вопрос: как? по книгам?
(Reply) (Thread)
From: fdo_eq
2011-01-28 03:39 am (UTC)
Да просто берите и начинайте что-то делать! См http://fdo-eq.livejournal.com/377840.html - тут про обучение школьников, но, думаю, суть примерно та же, Вы легко переложите советы на свой случай. В чем особенности именно Вашей ситуации, лучше Вас все равно никто не знает. Успехов!
(Reply) (Parent) (Thread)
[User Picture]From: rdia
2011-01-27 09:46 pm (UTC)
То, что вы пишете, оно везде есть: ребёнка учишь трусы надевать - это просунули ногу в одну дырку, нашли другую дырку, засунули туда вторую ногу и т.д.

А потом уже говоришь - надень трусы, надень штаны. То есть, манипулируя уже с "абстракциями".

И ведь все умеют одеваться. Более того, все могут научить одеваться. А вот программируют не все.

То есть, засада где-то в другом месте. Не в приказании-подчинении и вложенности приказов.
(Reply) (Thread)
From: fdo_eq
2011-01-28 03:47 am (UTC)
> Не в приказании-подчинении и вложенности приказов.

Конечно, не в этом. Если Вы ничего больше не увидели в моем посте, то Вы просто не поняли того, что я говорю. Соответственно, мне и ответить-то нечего, кроме как посоветовать еще раз перечитать пост. Ну, или не перечитывать, я на избыточное внимание не претендую.
(Reply) (Parent) (Thread)
[User Picture]From: aidarov
2011-01-28 02:57 am (UTC)
А что вы думаете по поводу этой среды? http://www.alice.org/
(Reply) (Thread)
From: fdo_eq
2011-01-28 03:45 am (UTC)
Нечего не думаю - впервые вижу :-) Надо бы поподробнее познакомиться, прежде чем говорить что-то определенное. Но на первый взгляд - еще одна игрушка, ничего особенного. Но, повторюсь, я взглянул пока очень поверхностно. Причем пока желания копаться она у меня не вызвала... А она чем-то важна?
(Reply) (Parent) (Thread) (Expand)
From: glukanat
2011-01-28 04:28 am (UTC)
Я не уверен, что это язык проходят в 10-12 лет, скорее 14-16.
(Reply) (Thread)
[User Picture]From: vitus_wagner
2011-01-28 07:47 am (UTC)
В 14-16 надо уже писать на нормальных "взрослых" языках. Причем некоторые мои знакомые в этом возрасте уже писали вещи, попадавшие в дистрибутивы операционных систем. То есть практически полезные.
(Reply) (Parent) (Thread)
[User Picture]From: fumiripits
2011-01-29 03:16 am (UTC)
Задачи на построение моя самая нелюбимая тема. Хотя с остальными разделами никаких трудностей не испытывал. Потом это ещё аукнулось в вузе, когда я просто сплавил проективную геометрию, всё остальное хорошо знал. С программированием это у меня никак не соотносится, почему-то.

А вообще есть более-менее серъёзный опыт обучения программированию в 10-12 лет? Должен ведь быть. У этой дисциплины колоссальное преимущество перед физикой и математикой - материальный результат немедленно. Ну, почти сразу. Например, на экране или в виде конкретного действия посложнее. Вообще, власть на устройством это большое дело, поражает воображение.

Насчёт правильности написания команд - есть же всплывающие подсказки, чтобы не набирать всё имя функции.
(Reply) (Thread)
From: fdo_eq
2011-01-29 02:19 pm (UTC)
Чувствуется, что Вы не преподаватель, во-всяком случае, с детьми 10-12 лет не работали. Вы когда0нибудь видели, как детишки в этом возрасте мучительно ищут английские буковки на клавиатуре? Какая уж там "власть над устройством"...
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: udod
2011-01-29 11:25 am (UTC)
Я знаю тучу народу от детей до бабушек с энтузиазмом выучивших LSL - скриптопвый язык виртуальной реальности, с иерархией событий, прерываниеями, реальным временем и всем таким. Хочешь волшебное платье делай, хочншь дерижабли с боевой системой.
(Reply) (Thread)
[User Picture]From: aamonster
2011-01-31 12:06 pm (UTC)
Непродуманная идея.

Проблемы:
1. У двух окружностей или окружности и прямой есть две точки пересечения. Выбор одной из точек - ветвление, и формулировка условия с ходу не очевидна (или вы предлагаете разбирать все возможные варианты? проще паскаль выучить).
2. Когда мы выбираем одну из точек произвольно - зачастую надо ставить условия на выбор этой точки. Это может оказаться нетривиальным.

Короче, ваш модельный "язык" слишком сложен и неоднозначен.
Плюс ещё есть не-визуалы - кому проще решить уравнение, чем разобраться с построением. Строим для них язык на основе алгебры? (хе-хе, вроде строить не надо, уже что-то есть)
(Reply) (Thread)
From: fdo_eq
2011-01-31 12:27 pm (UTC)
А это не "мой" язык. И никакой "идеи" тут нет. Это то, что преподается в школах уже много лет. Я только назвал вещи своими именами.
(Reply) (Parent) (Thread)
[User Picture]From: livejournal
2017-02-06 10:29 pm (UTC)
Здравствуйте! Ваша запись попала в топ-25 популярных записей LiveJournal уральского региона. Подробнее о рейтинге читайте в Справке.
(Reply) (Thread)
[User Picture]From: livejournal
2017-02-07 10:23 am (UTC)

Нужны ли обществу умные граждане?

Пользователь varana сослался на вашу запись в своей записи «Нужны ли обществу умные граждане?» в контексте: [...] как к малолетним бандитам, очень тесно связаны. Отсюда: http://fdo-eq.livejournal.com/384256.html [...]
(Reply) (Thread)
[User Picture]From: livejournal
2017-02-07 10:28 am (UTC)

Программирование и геометрия

Пользователь varana сослался на вашу запись в своей записи «Программирование и геометрия» в контексте: [...] Посто из 2011 года (с которого всё и пошло). О начальном обучении программированию [...]
(Reply) (Thread)