vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner
Вчера одна 15-летняя девушка, дочь моих хороших знакомых, с гордостью опубликовала в своём ЖЖ описание своих первых заработавших программ со школьных уроков по программированию.

Среди них была программа для подсчета суммы всех четных чисел меньших заданного.

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

Соответственно, я запостил данной девушке коммент с подковыркой "Надеюсь эта программа не содержит циклов и скорость её не зависит от введенного числа?".

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

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

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

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

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

Date: 2006-11-10 01:45 pm (UTC)
From: [identity profile] ashalynd.livejournal.com
Я когда-то читала подобную байку в "Науке и жизни". Только там уже была реальная задача, на обсчет которой требовались сотни ЭВМ-часов. Потом пришел какой-то профессор математики и упростил расчетные формулы до одного-единственного интеграла, и, кажется, для его взятия то ли вообще не нужна была машина, то ли это делалось совершенно тривиально.

Не зря у наз на физфаке на лабораторках запрещали пользоваться калькуляторами, по крайней мере на младших курсах :)

Date: 2006-11-13 11:33 am (UTC)
From: [identity profile] yarikas.livejournal.com
Где-то в другом месте я читал, что чем выше уровень, на котором проводится оптимизация, тем больше её эффективность. Т.о. крупную оптимизацию всегда стоит начинать с пересмотра модели.

Date: 2006-11-10 01:47 pm (UTC)
From: [identity profile] orangerat.livejournal.com
Ничего удивительно. =) Всё в порядке вещей.

Date: 2006-11-10 01:49 pm (UTC)
From: [identity profile] illyn.livejournal.com
illyn: «Граниты» науки информатика (http://illyn.livejournal.com/3725.html) из старенького. Странно, но Гаусс тоже всплыл там в комментах…

(no subject)

From: [identity profile] http://users.livejournal.com/_slw/ - Date: 2006-11-10 02:37 pm (UTC) - Expand

(no subject)

From: [identity profile] grundik.livejournal.com - Date: 2006-11-10 02:52 pm (UTC) - Expand

(no subject)

From: [identity profile] fenikso.livejournal.com - Date: 2006-11-10 03:56 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_slw/ - Date: 2006-11-10 11:40 pm (UTC) - Expand

(no subject)

From: [identity profile] grundik.livejournal.com - Date: 2006-11-13 02:11 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_slw/ - Date: 2006-11-13 06:41 am (UTC) - Expand

(no subject)

From: [identity profile] jojoza.livejournal.com - Date: 2006-11-10 05:32 pm (UTC) - Expand

(no subject)

From: [identity profile] illyn.livejournal.com - Date: 2006-11-11 12:55 am (UTC) - Expand

(no subject)

From: [identity profile] dottedmag.livejournal.com - Date: 2006-11-12 05:25 pm (UTC) - Expand

(no subject)

From: [personal profile] ramendik - Date: 2006-11-16 02:41 pm (UTC) - Expand

Re: Reply to your comment...

From: [identity profile] dottedmag.livejournal.com - Date: 2006-11-16 03:07 pm (UTC) - Expand

Re: Reply to your comment...

From: [personal profile] ramendik - Date: 2006-11-16 03:56 pm (UTC) - Expand

Re: Reply to your comment...

From: [identity profile] dottedmag.livejournal.com - Date: 2006-11-16 04:02 pm (UTC) - Expand

Re: Reply to your comment...

From: [personal profile] ramendik - Date: 2006-11-16 04:15 pm (UTC) - Expand

Re: Reply to your comment...

From: [identity profile] dottedmag.livejournal.com - Date: 2006-11-16 04:16 pm (UTC) - Expand

чему учить

Date: 2006-11-10 02:06 pm (UTC)
From: [identity profile] blogrov.livejournal.com
удивительно - только что обьяснял сыну что такое циклы и вот читаю этот пост. Вы абсолютно правы. Надо в первую очередь учить думать. этот пример кстати очень удачный, когда можно показать решение в лоб и решение лучшее, показать чем оно лучше (я вот в шутку обьяснял что программистам лень набивать большие программы и поэтому они стараются писать программы проще).

Re: чему учить

From: [identity profile] blogrov.livejournal.com - Date: 2006-11-10 02:23 pm (UTC) - Expand

Re: чему учить

From: [identity profile] breqwas.livejournal.com - Date: 2006-11-10 07:01 pm (UTC) - Expand

Re: чему учить

From: [identity profile] taris_marh.livejournal.com - Date: 2006-11-11 07:08 am (UTC) - Expand

(no subject)

From: [identity profile] silly_sad.livejournal.com - Date: 2006-11-11 07:40 pm (UTC) - Expand

(no subject)

From: [identity profile] zhuk-s.livejournal.com - Date: 2006-11-14 03:16 pm (UTC) - Expand

Re: чему учить

From: [personal profile] ramendik - Date: 2006-11-16 02:43 pm (UTC) - Expand

Re: чему учить

From: [identity profile] levgem.livejournal.com - Date: 2006-12-07 09:21 am (UTC) - Expand

Re: чему учить

Date: 2006-11-13 06:10 am (UTC)
From: [identity profile] silly_sad.livejournal.com
однажды я присутсвовал на уроке где мой товарищ объяснял детям что такое циклы.
ну долго пытался рисовать класску жанра не доступную детям в простых ощущениях.
потом я вмешался и объяснил детям что цикл это когда варишь картошку - простейший циклический процесс.
Препод был в шоке некоторое время, детям тоже понравилось.

Re: чему учить

From: [identity profile] blogrov.livejournal.com - Date: 2006-11-13 06:16 am (UTC) - Expand

Date: 2006-11-10 02:17 pm (UTC)
lodin: A bearded hacker in a hat (Default)
From: [personal profile] lodin
Вот у меня обратная ситуация: я буду искать нерутинное решение, даже если это займет больше времени, чем решение рутинное.

В результате институт я так и не кончил...

"Нужно что-то среднее, да где ж его взять" (с)

Date: 2006-11-11 11:54 am (UTC)
From: [identity profile] tolkonevmoymozg.livejournal.com
Аналогичная проблема. :)

Date: 2006-11-10 04:20 pm (UTC)
From: [identity profile] os80.livejournal.com
По-моему, бывает, что проще тупо написать, чем вспоминать формулу. Вычисленное значение и понадобится то один раз. Что фундаментально - так умение разбивать программу на функции, которые можно потом независимо менять. Я год бился, пока стало более-менее получаться.
Зато читал "текст" по Ruby, где говорится о важности хороших названий для функций, а потом приводится такой код:

def simple?(number)
return false if number == 1
for i in (2..number/2)
return false if number % i == 0
end
return true
end

Простое число по английски prime number, а simple number это "однозначное число" (не знаю что такое, но думаю, что число из одной цифры).
А особенно меня умиляет вот это number/2. Сэкономил, называется...

Date: 2006-11-10 05:47 pm (UTC)
From: [identity profile] salas.livejournal.com
Проверка на простоту - вообще хорошая тема для интересных текстов:

К примеру, для проверки числа A на простоту можно просто поделить данное число на все числа до корня квадратного из A. Если оно не делится - значит, простое. И этот метод можно прекрасно распараллелить: один поток будет делить A на четные числа, другой - на нечетные.


Мультипроцессорность на десктопе (http://www.ferra.ru/online/processors/25556/), Лев Дымченко, ferra.ru.

(no subject)

From: [identity profile] quappa.livejournal.com - Date: 2006-11-10 06:52 pm (UTC) - Expand

(no subject)

From: [identity profile] breqwas.livejournal.com - Date: 2006-11-10 07:03 pm (UTC) - Expand

(no subject)

From: [identity profile] zhuk-s.livejournal.com - Date: 2006-11-10 08:09 pm (UTC) - Expand

(no subject)

From: [identity profile] zpt.livejournal.com - Date: 2006-11-12 08:36 pm (UTC) - Expand

(no subject)

From: [identity profile] zhuk-s.livejournal.com - Date: 2006-11-12 10:12 pm (UTC) - Expand

(no subject)

From: [identity profile] os80.livejournal.com - Date: 2006-11-11 06:52 am (UTC) - Expand

(no subject)

From: [identity profile] zpt.livejournal.com - Date: 2006-11-12 08:36 pm (UTC) - Expand

лучший коммент!

From: [identity profile] jerom.livejournal.com - Date: 2006-11-12 09:05 pm (UTC) - Expand

(no subject)

From: [identity profile] salas.livejournal.com - Date: 2006-11-12 10:30 pm (UTC) - Expand

(no subject)

From: [identity profile] lamed.livejournal.com - Date: 2006-11-13 04:13 pm (UTC) - Expand

(no subject)

From: [identity profile] silly_sad.livejournal.com - Date: 2006-11-13 06:05 am (UTC) - Expand

Date: 2006-11-10 08:13 pm (UTC)
From: [identity profile] jek-hor.livejournal.com
Нормальный пример названия функции. Ну не знает человек английский достаточно хорошо.

А код не оптимальный, так не об этом же речь в примере идёт.

(no subject)

From: [identity profile] os80.livejournal.com - Date: 2006-11-11 06:57 am (UTC) - Expand

(no subject)

From: [identity profile] alexander-mikh.livejournal.com - Date: 2006-11-11 03:40 pm (UTC) - Expand

Date: 2006-11-10 04:21 pm (UTC)
From: [identity profile] slava-askeri.livejournal.com
Похоже на любимый пример Арнольда
"Французского школьника спросили,сколько будет 3+2 ?
"2+3 тут же ответил школьник,ведь сложение коммутативно"
В сущности речь идет о склейке разных пластов знания.Пока это получается плохо или вообще не получается.Скажем пошло программирование,значит забываем о формулах и прочих вещах не относящихся к делу и линейно подходим к вопросу.Пошла к примеру аксиоматика,значит только о коммутативности и можно говорить.Нельзя просто сказать что 2+3=5.
Сейчас мне кажется эта проблема гораздо глубже чем лет пять назад.Мне кажется проблема в том что образование не может выходить на склейки в массовом масштабе.

Date: 2006-11-10 11:02 pm (UTC)
From: [identity profile] stefashka.livejournal.com
Раньше выходило, а теперь не может? Что-то не то.. Скорее, подход поменялся у людей - раньше они пытались решить задачи, а теперь они пытаются найти уже готовые решения...

Date: 2006-11-10 05:21 pm (UTC)
From: (Anonymous)
По моему, совершенно очевидно, что за "оптимальную" программу (т.е. вычисляющую ответ просто по формуле) девушка бы просто получила неуд за невыполненное задание.
Адекватный преподаватель, который принял бы такую программу, не стал бы давать такое задание.

(no subject)

From: [identity profile] silly_sad.livejournal.com - Date: 2006-11-13 06:04 am (UTC) - Expand

Об образовании

Date: 2006-11-10 07:47 pm (UTC)
From: [identity profile] mrdim.livejournal.com
С образованием в мире и России в частности уже давно не все впорядке...
Достаточно отойти от математической темы и взглянуть на все остальное.
К примеру, детей учат в школе складывать цифры на денежных банкнотах, но не учат использовать свою финансовую смекалку. Каждый 3 ребенок большого города имеет кредитную карту... В школе не говорят, что с ней делать... об этом дети узнают на практическом опыте. Мировое образование создает огромную пропасть между людьми... Порождает богатство и бедность и пропасть между этими классами просто ужасает.

Re: Об образовании

Date: 2006-11-10 08:14 pm (UTC)
From: [identity profile] zhuk-s.livejournal.com
А еще у нас в школе знаете чему никогда не учили (может уже учат ? хм..)...
Настолько не учили, что даже утверждалось, что в СССР этого нет. Все приходилось узнавать на практическом опыте :)

Re: Об образовании

From: [identity profile] mrdim.livejournal.com - Date: 2006-11-11 11:53 am (UTC) - Expand

Date: 2006-11-10 09:54 pm (UTC)
From: [identity profile] kdv2005.livejournal.com
Смешно, что я, будучи полностью согласным с Вами по существу (чему нужно учить в школе), все же не могу не возразить на Вашу критику именно этой задачи. Мне кажется, что в правильном контексте она полезна, и именно с таких задач и нужно начинать.

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

Однако грамотно составленное решение каждой из этих задач на компьютере требует модификации лишь одной строчки в цикле. Разве учить правильной структуризации не полезно?

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

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

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

Date: 2006-11-10 09:56 pm (UTC)
From: [identity profile] kdv2005.livejournal.com
PS А вообще, думать, конечно, тоже нужно учить.

(no subject)

From: [identity profile] http://users.livejournal.com/_glav_/ - Date: 2006-11-11 12:38 am (UTC) - Expand

(no subject)

From: [identity profile] kdv2005.livejournal.com - Date: 2006-11-12 08:14 am (UTC) - Expand

Date: 2006-11-10 10:27 pm (UTC)
From: [identity profile] asphyx-lj.livejournal.com
А как, в таком случае, должна решаться такая задача?

Date: 2006-11-11 12:50 am (UTC)
From: [identity profile] illyn.livejournal.com
Предполагается понять, что в ряду

a, b, c, … x, y, z

где abc это 2 4 6, а xyz — последние чётные числа нашего ряда перед заданым числом:

a+z = b+y = c+x
и так далее. Число подобных пар, каждая из которых одинакова по сумме, равна
«исходное число» — 1 делить на 4 (нацело, доли не потребуются)

и получается, что надо просто посчитать что либо причём мгновенно и от величины введённого числа скорость получения результата меняться не будет по формуле:

2+z * "исходное число"-1 / 4
и всё

(no subject)

From: [identity profile] asphyx-lj.livejournal.com - Date: 2006-11-11 01:37 am (UTC) - Expand

(no subject)

From: [identity profile] jerom.livejournal.com - Date: 2006-11-11 09:38 am (UTC) - Expand

(no subject)

From: [identity profile] zhuk-s.livejournal.com - Date: 2006-11-11 11:27 am (UTC) - Expand

(no subject)

From: [identity profile] slava-askeri.livejournal.com - Date: 2006-11-11 02:14 pm (UTC) - Expand

(no subject)

From: [identity profile] silly_sad.livejournal.com - Date: 2006-11-11 07:34 pm (UTC) - Expand

(no subject)

From: [identity profile] illyn.livejournal.com - Date: 2006-11-12 01:24 pm (UTC) - Expand

(no subject)

From: [identity profile] silly_sad.livejournal.com - Date: 2006-11-13 05:59 am (UTC) - Expand

(no subject)

From: [identity profile] zhuk-s.livejournal.com - Date: 2006-11-12 04:56 pm (UTC) - Expand

(no subject)

From: [identity profile] silly_sad.livejournal.com - Date: 2006-11-13 06:01 am (UTC) - Expand

(no subject)

From: [identity profile] zhuk-s.livejournal.com - Date: 2006-11-13 10:48 pm (UTC) - Expand

(no subject)

From: [identity profile] zhuk-s.livejournal.com - Date: 2006-11-13 10:51 pm (UTC) - Expand

(no subject)

From: (Anonymous) - Date: 2006-11-14 06:10 am (UTC) - Expand

(no subject)

From: [identity profile] zhuk-s.livejournal.com - Date: 2006-11-14 09:55 am (UTC) - Expand

(no subject)

From: [identity profile] zhuk-s.livejournal.com - Date: 2006-11-14 10:14 am (UTC) - Expand

(no subject)

From: [identity profile] zhuk-s.livejournal.com - Date: 2006-11-13 10:52 pm (UTC) - Expand

(no subject)

From: [personal profile] laruldan - Date: 2006-11-16 01:42 am (UTC) - Expand

(no subject)

From: [identity profile] zhuk-s.livejournal.com - Date: 2006-11-16 01:47 pm (UTC) - Expand

(no subject)

From: [identity profile] illyn.livejournal.com - Date: 2006-11-12 01:22 pm (UTC) - Expand

(no subject)

From: [identity profile] zhuk-s.livejournal.com - Date: 2006-11-11 11:43 am (UTC) - Expand

(no subject)

From: [identity profile] illyn.livejournal.com - Date: 2006-11-12 01:21 pm (UTC) - Expand

Date: 2006-11-11 07:26 pm (UTC)
From: [identity profile] silly_sad.livejournal.com
это огромный ППКС !

тока я думаю что родители не очень то сами понимают математику и честно лоханулись а потом пытались оправдаться.

(знаем мы этих типа крутых архитектов из очень крутых контор - пользовались мы программами очень крутых контор... было дело)

Date: 2006-11-13 09:58 am (UTC)
From: [identity profile] ex-dp-wiz635.livejournal.com
"Итерация свойственна человеку. Рекурсия - божественна."
А сворачивание в формулу это дзен и не-деяние (:

Date: 2006-11-13 04:18 pm (UTC)
From: [identity profile] lamed.livejournal.com
На самом деле ребенка просто хотели научить писать циклы. И, естественно, как и любой простой пример, на котором можно учиться, это пример глуп. Но умный пример будет настолько сложен, что большую часть времени займет растолковывание постановки задачи, а не само выполнение упражнения.

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

May 2025

S M T W T F S
    1 2 3
4 56 7 8 9 10
11 12 131415 1617
1819202122 2324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 25th, 2025 03:37 pm
Powered by Dreamwidth Studios