?

Log in

No account? Create an account
 

Почему Python должен быть первым языком программирования в школе? - Почему Python должен быть первым языком программирования в школе? - Денис Кириенко Page 2 — ЖЖ

About Почему Python должен быть первым языком программирования в школе?

Previous Entry Почему Python должен быть первым языком программирования в школе? 23 ноя, 2014 @ 13:41
Сегодня писал ответ Нине Шумилиной из Твери, на вопрос о Python, как первом языке программирования в школе.

Она цитировала Константина Полякова, заключение его статьи в сентябрьском номере "Информатики":
По этим причинам автор склонен поддержать мнение И.А. Сукина: Python хорош для профессиональных программистов, но его использование в качестве первого языка программирования может быть неудачным решением. Как признаются учителя, преподающие на Python, те, кто учился программировать на Python, не хотят переходить на другие (более низкоуровневые) языки. Научив школьников сортировать массивы вызовом метода sort, сложно потом объяснить, зачем написаны целые тома об алгоритмах сортировки. А это может привести к появлению плеяды “программистов-только-на-Python”, не готовых к преодолению дополнительных ограничений ради повышения эффективности программы. Фактически учитель попадает в ситуацию, которая хорошо описывается фразой “В Python такие возможности есть, но учить так нельзя!” (Е.В. Андреева). В то же время, было бы полезным изучение Python в качестве второго языка программирования в классах с углубленным уровнем изучения информатики (например, после Паскаля или C).

Мой ответ явно перерос за формат  письма, поэтому пока опубликую его здесь, а потом, возможно, доработаю до статьи.

Читать дальше...Свернуть )
(Оставить комментарий) Страница 2 из 3 - [1] [2] [3]
[User Picture Icon]
From:justy_tylor
Date:Ноябрь, 24, 2014 03:29 (UTC)
(Link)
Да, Python намного лучше подходит для школьного обучения. Можно взять интерактивную среду IPython и начать с решения практических вычислительных задач из курсов физики/математики или реального мира. "Вот такая простая строчка на входе и вот такой красивый график на выходе". Продемонстрировать пользу. И далее переходить к автоматизации этих вычислений, также с демонстрацией пользы. Причём, на пиктомирах, скрэтчах или устаревшем Pascal этой пользы не показать, их применение ограничено "абстрактно-обучающим" контекстом.

Ещё один момент - "знание алгоритмов сортировки" бесполезно для любого непрограммиста. Как, впрочем, низкоуровневое программирование и многие другие вопросы. Эти знания некуда девать. Обычного среднего школьника полезно научить навыкам автоматизации предметной области. Применять алгоритмы. Чтобы мог написать скрипт "обработать много фоточек вот так". А уж как там ресэмплирование работает - будет разбираться, если захочет стать программистом. Сам, с помощью кружков или в вузе - по ситуации.
[User Picture Icon]
From:cross_join
Date:Ноябрь, 24, 2014 08:52 (UTC)
(Link)
Для непрограммистов существует офисный пакет, построить график или произвести расчеты в Excel/OO Calc - дело секунд. Скриптовый язык там тоже имеется.
Любой выход за пределы этой песочницы требует минимума профессиональных знаний.
[User Picture Icon]
From:denspb
Date:Ноябрь, 24, 2014 08:33 (UTC)
(Link)
В (Borland) Pascal QuckSort'а не было в стандартных библиотеках, но он был приведён в справке.
s/Python, то же Поляков/Python, тот же Поляков/
From:(Anonymous)
Date:Ноябрь, 24, 2014 13:07 (UTC)
(Link)
питон, наверное, хорош для изучения, и очень лаконичный язык, и довольно быстро можно начать какие-то практичные вещи делать, удобный инструментарий есть... Но, как минимум пример с инициализацией массива крайне неудачен: ========================= int m[10]; // <- вот это на порядок нагляднее, чем m = [0]*10 // если 'm[10]' очевидно, то и тут очевидно int m[20][10]; # а вот тут уже грабли, очевидные, но до осознания которых надо дорости m = [[0]*20]*10 ========================== есть очень некрасивые моменты, связанные с переходом v2 --> v3. например, чему будет равно c: a = 3 b = 2 c = a / b Ответ -- в зависимости от версии, в 2.x будет 1, в 3.x будет 1.5. Не знаю, что там духовный лидер принимал, когда v3 проектировал, но авторитет языка очень сильно все эти фокусы подорвали. Но, в целом, согласен, выбор хороший, и наверное лучше учить высокоуровневым вещам. В Питоне, например, совершенно шикарно списки сделаны, чего том же C и близко нет (а в C++/STL какой-то треш).
[User Picture Icon]
From:dkirienko
Date:Ноябрь, 25, 2014 14:03 (UTC)
(Link)
Самый лучший способ избежать некрасивых моментов, связанных с переходом от второй версии к третей - никогда не использовать вторую версию. Собственно говоря, мы так и делаем в своей популяризации Питона - ориентируемся только на третью версию.
From:(Anonymous)
Date:Ноябрь, 24, 2014 16:01 (UTC)
(Link)
А можно тут отпишется ученик?
Ученик знал C++. До этой школы. И знает до сих пор.
Смотря на Python, ученик не понимал как это работает. А ученик привык понимать. И ученик полез в документацию и исходный код. Нарыл, к сожалению, немного.
У человека который знает что-нибудь низкоуровневое возникают вопросы:
1) А что хранится в памяти, по адресу списка? Объект? Или C-style массив, просто проблемы с памятью разруливаются на уровне языка? Иначе говоря, сколько памяти жрёт []? А [0]?
2) Строки во многом ведут себя как списки, только совершенно непонятно списки чего. Потому что типа char в Python нет. Кстати, сколько места занимает пустая строка?
3) Динамическая типизация, да? Интересно, код
for i in range(1000):
a = 0
a = '-'
выполнится медленнее чем код
for i in range(1000):
a += 1
a -= 2
Как работает смена типа?
4) Что такое на уровне памяти range- и xrange-объекты? Как реализован for i in range(), если после in должен стоять list, а попадается {x,}range object? Можно ли создать кастомный range object, например (1, 2, 3, 5, 7, 11, 13, 17...}?
И очень много вопросов, на которых ответа нет даже после гуглинга. Как можно рассчитывать насколько программа будет быстрой или сколько она будет отнимать памяти, если я не знаю что происходит? Как вообще можно пользоваться технологией, о которой неясно как она работает?
[User Picture Icon]
From:dkirienko
Date:Ноябрь, 24, 2014 20:30 (UTC)
(Link)
А ученик может подойти ко мне и задать мне вопросы.

И да, я вижу слово "xrange". Python версии 2 я не обсуждаю. В Python версии 3 слова xrange нет.
[User Picture Icon]
From:piont
Date:Ноябрь, 24, 2014 16:35 (UTC)
(Link)
Наверное, это правильно написано, но есть маленькая поправка: на факультете компьютерных наук ВШЭ на первом курсе два языка -- и C++, и Python.
[User Picture Icon]
From:dkirienko
Date:Ноябрь, 24, 2014 20:27 (UTC)
(Link)
Ну мне выпускники сказали, что их сначала учили на Python, а потом - на C++. Поэтому верными могут быть оба утверждения - и что сначала Python, потом - C++, и что на первом курсе два языка - Python и C++.
[User Picture Icon]
From:2bytes
Date:Ноябрь, 24, 2014 23:53 (UTC)
(Link)
Спор про язык превращается в священную войну в вакууме, если не договорились, для чего, собственно, применяется обсуждаемое средство (а язык, это средство, да?). Примеры по арифметике решаются гораздо быстрее при помощи калькулятора, на алгебраических преобразованиях можно сэкономить при помощи какой-нибудь программы "математика" итп. Но цель-то, вроде, не в этом. Что, на наш взгляд, должно остаться в мозгах школьника N-го класса, прослушавшего курс программирования на языке X?

Совсем упрощая, возможны минимум две установки: "это навык, который пригодится в жизни" и "это упражнение, которое научит думать определенным образом" (что, тоже, hopefully, пригодится). Типичные "чистые" примеры это печатание 10-ю пальцами (которому учат в любой американской младшей школе) и, наоборот, геометрия (кто потом в жизни будет применять теорему косинусов? тем не менее...) Где на этой шкале обучение "программированию готовыми кусками"?

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

То, что это подготовка "массового программиста" - возможно, а точно их надо готовить? Я вот не готов обменять ни одного квалифицированного программиста своей команды на 10 "массовых", потому что после этого проект остановится.

Естественно, и на богатых языках можно давать (и выполнять) профессиональные задания (или близкие к таким), но тогда (1) сложность заданий получается примерно та же и (2) может остаться вопрос "где же тут внутри лошадь?". Конечно, бессмысленно программировать в машкодах, но показать какие-то вехи, как сложное иерархически строится из простого все же стоило б (электрон-атом-молекула-вещество-химическое свойство, булева схема-сумматор-процессор-код-компилятор-программа на языке высокого уровня). Им после школы еще про 100 языков расскажут (кому понадобится), а про это уже не расскажут никогда.


Edited at 2014-11-24 23:56 (UTC)
[User Picture Icon]
From:iscremas
Date:Ноябрь, 25, 2014 11:50 (UTC)
(Link)
Я бы согласился с Вашими доводами, но в в них есть вещи, которые я не разделяю:
Сейчас мы живем в такое время, что у каждого есть множество компьютерной техники в пользовании. И очень часто требуется выполнять какие-то рутинные и массовые вещи на этом железе. Например, копирование с переименованием по шаблону файлов, различная автоматизация процессов, для которой еще не сделали API и т.д. И для человека просто нужно уметь это писать быстро, чтобы не заниматься этим вручную по несколько часов в запущенных случаях. На мой взгляд - это минимальная задача курса программирования: научить излагать свои мысли и потребности на языке, понятном машине, и делать это по возможности с минимальными усилиями.

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

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

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

P.S. Периодически пользуюсь теоремой косинусов в своей жизни, это не шутка )
[User Picture Icon]
From:ignik
Date:Ноябрь, 25, 2014 01:40 (UTC)
(Link)
imho язык для школы дб живой, компактный, несложный.

Мой выбор - http://www.lua.ru/doc/

Особый бонус в поддержке в играх и gimp.
[User Picture Icon]
From:goldvitaly
Date:Ноябрь, 25, 2014 07:44 (UTC)
(Link)
Никогда не пробовал учить первому языку, но мне кажется очень хорошо использовать интерактивную среду. Мы на работе активно используем inotebook для экспериментов и демонстрации кода. Использование может помочь разделять код на логические куски.
[User Picture Icon]
From:sasha_tryu
Date:Декабрь, 11, 2014 08:09 (UTC)
(Link)
Я не согласен с автором - есть ещё более лёгкий в освоении язык программирования - Joy.

Прокомментирую несколько тезисов:

"легко начать программировать, ничего проще явно не существует"
Существует язык программирования Joy, в нём отсутствуют такие устаревшие понятия как оператор и разделение на строки. Программа пишется в виде текста, компилятор языка анализирует семантику текста, выделяет логические и циклические фрагменты и преобразует их в оптимизированный код.

"гораздо лаконичней Pascal и программирование на нём лишено необходимости возни с большим количеством технических вещей, что трудно для совсем начинающих".
В языке Joy даже системный программист абстрагирован от уровня железа. Компилятор, оптимизатор и абстрактор создают универсальный код, выполняющийся на любой современной платформе, совершенно независимо от любых технических характеристик. Есть сведения, что данный язык успешно внедряется в старые модели калькуляторов, такие как Электроника МК-56 (http://cdn.blindage.org/2013/05/2013-05-14-00.20_3.jpg) Пока ещё не решены все сложности адаптации библиотек трёхмерной графики, но специалисты обещают выход новой версии в ближайшее время.

"Гораздо проще писать программы начинающим, если они состоят из пяти строчек, а не из пятнадцати, алгоритмы они реализуют те же, а вот времени на написание и отладку кода уходит меньше, а, значит, и больше задач можно решить, и дальше продвинуться."
Как я уже писал, в языке программирования Joy отсутствуют строки, они просто не нужны. Программа пишется свободным текстовым стилем. По непроверенным данным в одной из школ пишут программы в стихах! Но и это не главное. Главное - в нём нет необходимости составлять какие бы то ни было алгоритмы! Уровень алгоритмизации полностью реализован специалистами в компиляторе и алгоритмизаторе. Разработчики вплотную приблизились к вариативному выполнению самой короткой программы на языке Joy - "Хочу!". В 11,5% случаев при запуске программа выполняет именно то, что хотел пользователь!

Упрощение-упрощение-упрощение... Если уж в 179 школе упрощают для "среднего ученика", что делать остальным школам? Что делать не московским школам? "Программировать" Word?
Извините за излишний сарказм, наболело...
[User Picture Icon]
From:sasha_tryu
Date:Декабрь, 11, 2014 08:10 (UTC)
(Link)
Мне видится, что дискутирующие на тему Питона не могут договориться потому, что у них разная база для аргументов - расхождение в стартовом посыле, "идеологии". Чему мы хотим научить ребят на уроках? Какие знания базовому уровню мы хотим дать?

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

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

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

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

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

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

Отдельно хотелось упомянуть тезис "это ваши методические сложности". Считаю данный тезис формально правильным, но очень близоруким. Думая не только о себе, а также о среднем уровне педагогов в школах (немосковских!), можно вспомнить банальную заповедь программистов: если ваша программа может быть использована неправильно - она будет использована неправильно. Результат вряд ли обрадует. "Программист 1С" - широко известное имя нарицательное.

ПС
Дополнительно пара слов о высокоуровневых технологиях, которые стремительно расцвели к данному моменту и двигаются дальше. Считаю необходимым для развития кругозора давать и теоретически (на своём уровне) и практически (использовать и решать задачи!) : БД (SQL), OLE, HTML-Х, JavaSript, PHP, DirectX OpenGL. НО... при этом чётко проговаривая какая пропасть лежит между выделением байтиков и "функцией рендеринга вращения трёхмерного объекта в тумане" чтобы не нарушать структуру знаний.

Edited at 2014-12-11 08:12 (UTC)
[User Picture Icon]
From:wbgates
Date:Декабрь, 11, 2014 20:58 (UTC)
(Link)
Именно из-за таких людей, как вы, в России не развита система образования вообще. В РФ **еновое и школьное, и высшее образование. И всё из-за таких тупых людей, как вы. Консерватизм - ваше кредо по жизни. Так консервируйтесь и дальше. И не мешайте другим идти путём прогресса. По-моему, Pascal'ю уже давно пора идти на пенсию вместе с вами и Бейсиком-256. Вы тормоз российского образования.

Edited at 2014-12-11 20:59 (UTC)
From:(Anonymous)
Date:Декабрь, 18, 2014 15:06 (UTC)

Igor

(Link)
Есть еще одна фишка Питона, о которой почему-то никто не говорит. Это мультипарадигменность. Т.е. можно использовать методы линейного программирования (как в бейсиках), либо структурного (как в паскале), либо функционального (как в С) или объектно-ориентированного (как в С++ и др.). И процесс обучения можно (и, наверно, нужно) построить так, чтобы поставленные задачи становились невозможными без использования соответствующей парадигмы. Таким образом в пределах одного языка можно обучить всем имеющимся методам программирования. А дальше будет в разы легче переходить с Python'a на любой другой ЯП, в котором будет "как в Питоне, только чуть заумнее". При этом сам учебный процесс можно разделить таким образом, что в школе (общее образование) можно давать первые две парадигмы, в специализированных учебных заведениях оставшиеся две, и на основе полученных знаний, добавлять следующие ЯП и их привязки (считаю это не менее важным) к Python'у.
[User Picture Icon]
From:tkhirianov
Date:Февраль, 5, 2015 13:04 (UTC)

Исследование на английском

(Link)
From:011010011001011
Date:Октябрь, 16, 2015 01:36 (UTC)
(Link)
Я сейчас веду семинары по алгоритмам для второкурсников (где используется Python), пожалуй соглашусь, что Python хороший язык для начинающих (хотя я лично его сильно не люблю).

Кстати, а видели ли вы эту книжку? http://www.greenteapress.com/thinkpython2/index.html Как вы думаете, она хороша для начинающих?
[User Picture Icon]
From:viktor1970
Date:Май, 17, 2016 06:37 (UTC)
(Link)
А мне вот что непонятно: зачем в школе нужно изучение программирования? Большинство ведь всё равно не станут программистами и в жизни им это ну никак не пригодится.
Это так же бесполезно, как преподавание рисования, или пения.
From:Тимур Мишагин
Date:Май, 29, 2016 17:45 (UTC)
(Link)
Позволяет школьникам познакомится с этой сферой
(Оставить комментарий) Страница 2 из 3 - [1] [2] [3]
Top of Page Разработано LiveJournal.com