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

Nov 23, 2014 13:41

Сегодня писал ответ Нине Шумилиной из Твери, на вопрос о Python, как первом языке программирования в школе.

Она цитировала Константина Полякова, заключение его статьи в сентябрьском номере "Информатики":
По этим причинам автор склонен поддержать мнение И.А. Сукина: Python хорош для профессиональных программистов, но его использование в качестве ( Read more... )

Leave a comment

Comments 88

dkirienko November 23 2014, 13:27:24 UTC
Еще был вопрос про "линейку языков программирования". По-видимому, "линейка" в моём представлении такая, с примерным обозначением классов учащихся, для средней школы ( ... )

Reply

haw_linux November 25 2014, 12:51:06 UTC
pyturtle
pygame

Reply


anonymous November 23 2014, 14:20:22 UTC
А можете ли хоть чего-нибудь посоветовать из более-менее внятных (пусть не утверждённых официально и может даже не совсем дописанных, но доступных) учебников, где программирование от самых-самых основ и на Питоне?

Роман Сузи -- само собой, но это всё же никак не единственный учебник для тех, кому надо от самых-самых основ.

Если и впрямь что-то есть -- думаю, указать и проанализировать было бы очень полезно и для статьи, и для обращения людей (учителей) в свою веру.

Reply

dkirienko November 23 2014, 14:32:29 UTC
Да, мой курс: http://informatics.mccme.ru/course/view.php?id=156

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

Reply


prijutme4ty November 23 2014, 14:44:30 UTC
В целом, пожалуй, согласен. Я сам правда учил детей на руби.
Мне, однако, кажется, что лучше учить после питона что-нибудь более близкое к железу, лучше - C. Так чтобы школьник и умел что-то делать, и понимал, как это работает. Чтобы ученик массивы повыделял на стеке, и поудалял двухмерные массивы из кучи, попередавал значения в swap, упоролся о сигнатуры, поучился передавать пары значений и error-коды как результат функции.
Без этого когда он встретит серьезные проблемы, он даже не поймет в чем дело. Хуже, никто не сможет ему объяснить, поскольку они говорить на одном языке не могут. Кучи какие-то, сборка мусора, error-коды, интерфейсы.

Reply

dkirienko November 23 2014, 15:28:05 UTC
В моём представлении, вот эти вещи - стек и куча, выделение памяти и т.д. - это уже тема для высшего профессионального образования. И в курсе высшего образования это должно быть, в моём списке языков для высшего образования есть C и Ассемблер, причем С именно как язык системного программирования. И даже не для среднего профессионального образования, где можно ограничиваться прикладными вещами, типа web-программирования, баз данных или 1С.

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

Reply


iscremas November 23 2014, 16:00:12 UTC
Я тут недавно где-то на просторах встретил замечание, которое поддерживаю чуть более чем полностью: "Всё чему учат на курсах программирования - это в лучшем случае алгоритмы. Про то, как писать программы, никто не учит."
Не уверен, имеет ли смысл учить этому именно школьников, но я абсолютно уверен, что сейчас по факту этому не учат нигде, даже в лучших ВУЗах, а тема более чем актуальна для людей, стремящихся стать профессионалами, или же просто программировать реальные приложения.
Постоянно сталкиваюсь с тем, что приходят на работу даже "опытные программисты" и не знают ни шаблонов проектирования, ни принципов дизайна классов, наступают вновь из раза в раз на одни и те же грабли. И от языка это знание не зависит вообще почти никак...

Reply

dkirienko November 23 2014, 16:16:27 UTC
Это верное замечание, и про вузы тоже верное замечание. Хотя где-то в вузах есть курсы, посвященные проектированию и дизайну классов.

Что до того, как учить "писать программы". Мне кажется, что я умею учить писать программы - на простом, школьном уровне. Сейчас я зачастую стараюсь добиваться от школьников, чтобы к их коду нельзя было придраться - то есть я сам придираюсь к коду до тех пор, пока не получится хороший код. Конечно, это не проектирование классов, это маленькие учебные программы, но я слышал отзывы от преподавателей летней компьютерной школы, что школьники 179 школы отличаются тем, что они умеют писать ХОРОШО.

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

Эх, планы, планы...

Reply

iscremas November 23 2014, 17:04:38 UTC
Я не знаю, как это сформулировать, но с высоты прожитых 10 лет в качестве профессионального программиста - я до сих пор познаю дзен, и конца этому явно пока не видится. Постоянно натыкаюсь на очередной "сгусток сакральных знаний" и периодически прихожу к пониманию, что до этого всё писал плохо и имел неверные установки и убеждения. А всё из-за того, что не было тогда человека, который бы мне показал эти вещи, и, самое главное, объяснил бы как этим пользоваться реально. Из начальной базы были только алгоритмы (хотя и на этом спасибо). А всё из-за того, что у преподавателей свои задачи и свои навыки, и обучают они на каких-то абстрактных задачах, пусть даже сложных и олимпиадных, но в вакууме ( ... )

Reply

gbnjy iscremas June 28 2015, 14:37:34 UTC
На сайте фоксфорд есть курс для школьников - программирование на языке Python для 6,7,8 классов. Там я впервые узнал, что есть такой язык. Ну и Вас почитал, убедительно. Мне кажется, такой язык интереснее для школьников, так как позволяет делать интересные вещи, практически полезные. Пусть этот язык "перескакивает" через какие-то важные этапы в обучении программированию, он, с другой стороны, может дать важную вещь, которая недооценивается - что такое писание программ или программирование в целом. Все-таки синтез важнее, чем анализ, о чем в наш век очень часто забывают.

Reply


anonymous November 23 2014, 17:32:36 UTC
Пример, на мой взгляд, не очень удачный, ибо [0] * 1000 это не шибко наглядный синтакс задания массива. Наверняка можно подобрать куда более красивые примеры для иллюстрации, в целом, той же мысли. Хотя бы что-нибудь в духе max(a) или a[x:y], а то и dict.

Reply

dkirienko November 23 2014, 17:50:23 UTC
У меня нет цели продемонстрировать всю мощь языка и как легко и просто на нём можно писать. А есть цель показать различия в подходах - кому нравится объявлять массив вот так по-паскалевски, а кому нравится, как в Python. По-Паскалевские (или в стиле Си) - это предварительное объявление, статическая типизация, потом - заполнение циклом. Ну а в Python я написал как. И критика в адрес Python как раз в том, что используя вот такие высокоуровневые списки школьник не будет понимать, что такое массив, что это - непрерывная область памяти, которую нужно выделить, которую нужно заполнить нулями и т.д. А я показываю, что мне это не нужно.

Остальные ваши примеры неудачны.

Если написать max(a) - то это как раз предмет критики, будут говорить "так нельзя учить". Поэтому этот момент мы обсудим дальше.

Срезы - непонятное понятие, нужно объяснять, что это такое.

Словари - это, конечно, круто, но это бой совсем в разных весовых категориях. То, что в Python есть словари, а в Pascal - нет, это и так понятно, но это совсем о другом.

Reply

anonymous November 25 2014, 00:32:39 UTC
Ну, вам виднее, я просто замечу что после a = [0] * 100 логично написать b = [[0] * 100] * 100 и долго удивляться :)

Reply

dkirienko November 25 2014, 13:57:53 UTC
Да, соглашусь, что вложенные списки - это наименее очевидное место для начинающих. На самом деле там как раз всё логично, но эту логику нужно понять.

Reply


Leave a comment

Up