?

Log in

No account? Create an account
 

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

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

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

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

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

Несомнено, отношение к Python разное. Действительно, высказываются опасения, что динамическая типизация и слишком большая "высокоуровневость" языка вредна для обучения, что нельзя подменять понятие "массив" высокоуровневыми списками, так как "обманутые" легкостью операций со списками школьники не будут понимать принципов внутренней организации и т.д.

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

Например, якобы процитированная Поляковым Е.В.Андреева три года назад решила попробовать учить школьников 6-7 класса в "Интеллектуале" на Python. До этого относилась к этой затее довольно скептически, но решила попробовать. Через полгода она уже выступала на конференциях и говорила, что школьников в среднем звене лучше всего учить на Python, что она в это не очень верила, но вот попробовала и за несколько месяцев её взгляды переменились. Так что не знаю, что именно цитировал Поляков и сколько лет этой цитате, но вот вчера я специально показал эту переписку Андреевой и попросил ответить, на что она написала "Ответ Шумилиной - школьников среднего звена безусловно надо учить на Python".

В чем достоинства Python? Не только в простоте языка, но и в том, что это - огромный, многогранный, разносторонний мир программирования. В этом мире легко начать программировать, и достоинства Python, как первого языка программирования, кажется, обсуждать смысла нет - ничего проще явно не существует (из языков программирования общего назначения). Он гораздо лаконичней Pascal и программирование на нём лишено необходимости возни с большим количеством технических вещей, что трудно для совсем начинающих. Гораздо проще писать программы начинающим, если они состоят из пяти строчек, а не из пятнадцати, алгоритмы они реализуют те же, а вот времени на написание и отладку кода уходит меньше, а, значит, и больше задач можно решить, и дальше продвинуться, и для работы с массивом ну куда удобней написать:

a = [0] * 1000
чем
var a: array[1...1000] of integer;
...
for i := 1 to 1000 do
  a[i] := 0;

Результат для программиста - одинаковый, получается массив, заполненный нулями, но на Python - одна строка вместо трех, а смысл не меняется. И тут скептики, конечно, будут говорить, что вот нельзя так писать, как на Python, что школьник должен понимать, что массив - это непрерывный фрагмент памяти, что мы должны должны его объявить, то есть зарезервировать для него место, что мы должны его проинициализировать, заполнив его нулями... Ну а наш ответ скептикам - это то, смысл для начинающего программиста не меняется, наоборот, строка a = [0] * 1000 лучше отражает то, что школьник хочет получить и сразу же (хочу список из одного числа 0, повторенного 1000 раз), гораздо проще пишется и позволяет решить больше задач!

Просто посмотрите на два приведенных выше фрагмента, какой из них понятней? Какой из них Вам нравится больше?

Итак, для начинающих, несомненно, лучше Python. Причем слабые дети могут здесь и остановиться, получив общее представление о программировании. А вот сильные школьники могут двигаться дальше, и в их распоряжении будет современный универсальный язык программирования, реально используемый для разработки программного обеспечения в ведущих мировых компаниях. Вот, например, статистика - "На чем пишут в Яндекс": http://blog.yandex.ru/post/77617/. На Python можно писать веб-сайты, компьютерные игры, GUI, клиент-серверные приложения, ну то есть всё, что угодно.

Теперь относительно высказывания, что в языке много высокоуровневых вещей, и возникает соблазн их использовать, вместо того, чтобы изучать, как это устроено. Ну так это проблема - методическая, а не проблема языка программирования. Общий методический подход здесь такой - сначала мы понимаем, как это работает, потом разрешается использовать соответствующий элемент языка. Например, сначала написали обмен значений двух переменных через вспомогательную переменную, потом я показываю, как это делается при помощи кортежей (a, b) = (b, a). Сначала написали максимум из двух, трёх чисел, потом можно использовать функцию max. Потом написали программу поиска максимума в
последовательности (массиве), после этого можно использовать функцию max для списка. Сначала написали сортировки сами, потом можно пользоваться функцией sort, и я даже настаивают на том, чтобы школьники пользовались стандартной функцией sort - это быстрее и удобней, и позволяет решить больше задач, но только после того, как они научились сами писать sort.

На самом деле, встроенная сортировка есть в любом современном языке программирования (Java, C++, PHP), ибо сейчас так принято. Нет её только в классическом Pascal (а вот в современном Delphi - есть), нет в старых бейсиках (а в Visual Basic - есть), но это же не означает, что всеми этими языками нельзя пользоваться, ибо в них есть встроенная сортировка? И никому же в голову не придет запрещать изучение этих языков в школе только потому, что "а вдруг учитель научит детей пользоваться встроенной сортировкой, а потом этим детям не объяснишь, зачем нужно изучать сложности алгоритмов сортировки". Поэтому проблема не в том, если в языке программирования sort или нет, а проблема в том, КАК этим пользоваться. Каким-то школьникам достаточно объяснить, что такое "сортировка выбором" - она понятна и очень легко пишется на том же Python, а с кем-то можно обсуждать и эффективные алгоритмы сортировки, и наличие встроенной сортировки этому не мешает. Более того, если я детей учу программированию на том же C++, то я стараюсь научить детей и пользоваться сортировкой sort из STL, причем эффективно её использовать, и это не мешает изучению алгоритмов сортировки. В MIT (Massachusetts Institute of Technology) все начальные курсы программирования несколько лет назад перевели на Python. На новом факультете компьютерных наук ГУ ВШЭ, созданном в 2014 году при участии компании "Яндекс", именно Python является первым языком программирования, который изучают студенты. Здесь я привожу именно новый факультет как пример, т.к. в вузах с уже сложившимися программами труднее что-либо поменять, например, на факультете ВМК МГУ попытка заменить Pascal на C, как первый язык программирования, оказалась безуспешной ввиду нежелания изменять сложившиеся программы и контингент преподавателей.

Дальше посмотрим на высказывание "А это может привести к появлению плеяды “программистов-только-на-Python”, не готовых к преодолению дополнительных ограничений ради повышения эффективности программы.". В каком-то смысле, ничего плохого в этом нет. Программирование становится всё более и более массовой профессией, и многие навыки программиста не относятся к тому, что является высшим образованием, то есть большинству программистов и не нужно изучать тома, посвященные алгоритмам сортировки. Сложности алгоритмов сортировки - это уже, несомненно, сфера высшего профессионального образования, ну а программисты, умеющие написать сайт на PHP или программу для бухучета
в 1С тоже нужны, и их нужно очень много. Таким программистам в целом необязательно разбираться в алгоритмах сортировки, им как раз необходимо уметь пользоваться стандартной функцией sort для любых задачи и знать, что она умеет сортировать массивы лучше, чем если бы они это написали самостоятельно (и уж совсем странно требовать от web-программиста знания алгоритмов быстрой сортировки, конечно, ничего плохого не будет в этом знании, но для работы ему это совершенно ненужно). Так что система обучения программистов должна включать в себя и среднее профессиональное образование (на котором учат прикладным вещам и технологиями), и систему высшего образования (где как раз уместно обсуждать вопросы сложности алгоритмов сортировки), точно так же, как это есть во многих отраслях, например, в медицине (медик со средним специальным образованием выполняет стандартные медицинские процедуры, а медик с высшим образованием умеет назначать лечение, то есть анализировать причины и принимать решение). Да, специальности, связанные с программированием есть и в среднем специальном образовании, и в высшем образовании, но система здесь не так выстроена, как в той же системе медицинкого образования. И, если честно, я плохо представляю, что происходит в среднем профессиональном образовании с обучением программированию.

Одна из аналогий, которую я люблю здесь приводить - это прогресс в распространении автомобилей. В начале и середине XX века водитель автомобиля должен был знать устройство автомобиля и сам производить довольно сложный ремонт. Любой водитель должен быть в значительной степени механиком. Сейчас многие водители ну если и имеют общее
представление об устройстве автомобиля, то уж точно никогда не занимаются его ремонтом, предпочитая выполнять всё техническое обслуживание в автосервисе. Хорошо это или плохо? Это, на мой взгляд, неизбежно. Широта распространения автомобилей стала такой, что сложно требовать от всех автолюбителей навыков ремонта и глубокого познания устройства автомобиля. Широкое распространение автомобиля неизбежно приведет к тому, что у большинства водителей не будет глубоких познаний об устройстве автомобиля. А автомобили, в свою очередь, становятся удобней и надежней, поэтому использовать их можно и без специальных навыков.

Точно так же и с программированием - программирование становится все более распространенным, а сами языки программирования - все более удобными и простыми. Несомненно, количество программистов растёт и будет расти (хотя всё равно в отрасли огромная нехватка квалифицированных программистов), при этом уровень глубокого понимания вещей будет снижаться. Это неизбежно, но это не повод отказываться от современных высокоуровневых языков программирования, точно так же, как и не никому в голову не придет отказываться от современных автомобилей только потому, что они надежней и удобней, и не требуют специальных познаний для постоянного использования.
(Оставить комментарий) Страница 1 из 3 - [1] [2] [3]
[User Picture Icon]
From:dkirienko
Date:Ноябрь, 23, 2014 10:48 (UTC)
(Link)
От Андрея Станкевича (чтобы не забыть):

В целом же все так. и да, у сильных школьников, обученных на питоне, есть трудный период в несколько недель-месяцев, когда им приходится осознавать ограничения питона и осваивать новый язык, но потом, когда они владеют и тем и другим, у них преимущество и в простых задачах (быстро написать на питоне) и сложные они могут написать.
[User Picture Icon]
From:tigvarts
Date:Ноябрь, 23, 2014 12:04 (UTC)
(Link)
Небольшое уточнение про ВМК: у 1/3 курса первым языком всё-таки сделали С.
From:(Anonymous)
Date:Ноябрь, 23, 2014 12:21 (UTC)

Вл. Ильин

(Link)
Я думаю, вполне можно продолжить мысль автора так:
Технологии развиваются стремительно, и сейчас уже мы живем в мире, где не только не нужно изучать программирование серьезно, "на машинном уровне" его не надо изучать вообще. Это становится уделом профессионалов, а школа должна давать именно общее образование. Уже давно для того, чтобы решить задачи на компьютере можно решить без программирования. Для большинства задач сейчас необходимо владение разнообразными тонкостями уже написанных программ. Часто обработку данных гораздо удобнее сделать в электронных таблицах, например, чем писать даже очень простой скрипт. Так что программирование скоро просто должно покинуть школьную программу.
[User Picture Icon]
From:dkirienko
Date:Ноябрь, 23, 2014 12:30 (UTC)

Re: Вл. Ильин

(Link)
Ну если ты так думаешь, то и продолжай. А я так не думаю. И прочти в середине текста замечание про методические проблемы.
[User Picture Icon]
From:smenavech
Date:Ноябрь, 23, 2014 12:34 (UTC)
(Link)
мне кажется, сначала надо определить, что это значит - научить человека программировать. Если ставить задачу просто научить человека писать код, который был бы в состоянии вывести, скажем, круг на экран, то, возможно, язык программирования будет достаточно важен.

Язык был бы не столь важен, если на выходе хотеть получить человека, который бы в задаче выведения круга на экран видел бы , например, что эта задача мало отличается от выведения круга на принтер и надо разделить задачу собственно визуализации образа и составления этого образа (возможно, пример недостаточно удачен). По моему представнению хорошего программиста от плохого отличает наличие "архитектурного" мышления, а для обучения такому мышлению практически неважно, какой из обьектоориентированных языков использовать.
[User Picture Icon]
From:dkirienko
Date:Ноябрь, 23, 2014 12:59 (UTC)
(Link)
Ну я как бы веду речь о программировании в школе. Оно, конечно, тоже разное бывает - одним школьникам нужно показать, что есть такая сфера деятельности, как программирование, и что компьютер как раз управляется такими программами, ну и простые алгоритмы научиться писать. Это вот должно быть в базовом курсе.

А вот содержание профильного курса оно, действительно, непонятное даже на школьном уровне.
[User Picture Icon]
From:8kap8
Date:Ноябрь, 23, 2014 12:40 (UTC)
(Link)
Я еще добавлю вот какую мысль. Когда-то программированию учили на ассемблере (или даже в машинных кодах), и, когда появились языки высокого уровня, тоже наверняка были большие дебаты на тему того, можно ли начинать обучение программированию с языка высокого уровня, или надо обязательно учить ассемблер. Аналогичная проблема наверняка появлялась и во многих более мелких ситуациях (можно ли учить работе с файлами через стандартные функции, или надо досконально понимать, что происходит на низком уровне?) Поэтому вопрос с питоном — это, на мой взгляд, просто развитие этой же темы.
[User Picture Icon]
From:dkirienko
Date:Ноябрь, 23, 2014 13:06 (UTC)
(Link)
Петя, это у меня в планах, этот кусок я не дописал. По этому поводу у меня есть замечательные цитаты - предисловие Кнута к "Искусству программирования", где он 50 лет назад рассуждает, на каком языке ему приводить примеры - на машинном или на "алгебраическом", под "алгебраическими" он подразумевает Fortran или Cobol. И останавливается на машинном языке, который сам же и придумывает. Его аргументы:

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

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

И в результате через 50 лет примеры кода у Кнута читать невозможно. Это самый большой недостаток "Искусства программирования" - примеры на машинном коде. С другой стороны, если бы он писал примеры на Fortran или Cobol, то результат был бы не лучше.

Поэтому в томе 4A, например, он уже примеры программ пишет просто на "естественном" языке.

Я про это планирую написать, когда займусь доработкой статьи.

Edited at 2014-11-23 13:09 (UTC)
[User Picture Icon]
From:dkirienko
Date:Ноябрь, 23, 2014 13:27 (UTC)
(Link)
Еще был вопрос про "линейку языков программирования". По-видимому, "линейка" в моём представлении такая, с примерным обозначением классов учащихся, для средней школы.

1. 0-4 класс. Пиктомир (http://www.piktomir.ru/) - программирование простого исполнителя в форме программы, собираемой из визуальных образов.

2. 3-5 класс. Скретч. http://scratch.mit.edu/

3. 5-6 класс. Исполнитель "Черепашка" (например, в Кумире, Лого и т.д.)

4. 6-7 класс. Исполнитель "Робот" в Кумире.

5. 7-9 класс. Python.

6. 10-11 класс, профильный уровень. Python, C++, Java, C# - на выбор.

Линейка примерная, понятно, что какие-то этапы могут пропускаться (да и нет у нас в школе обязательной информатики до 8 класса), какие-то этапы можно двигать. В старшей школе может быть выбор - либо писать на Python дальше, как я сейчас делаю (сейчас я беру школьников в 9 классе и до 11 класса учу их только на Python, не считая олимпиадников), либо изучать какой-либо другой язык программирования, тот же C++ для "низкоуровневого понимания". Но я вот не очень понимаю, зачем в школе изучать что-либо после Python (если не касаться олимпиад, это отдельная тема), вот и не даю уже ничего, кроме Python старшеклассникам.
From:haw_linux
Date:Ноябрь, 25, 2014 12:51 (UTC)
(Link)
pyturtle
pygame
From:(Anonymous)
Date:Ноябрь, 23, 2014 14:20 (UTC)
(Link)
А можете ли хоть чего-нибудь посоветовать из более-менее внятных (пусть не утверждённых официально и может даже не совсем дописанных, но доступных) учебников, где программирование от самых-самых основ и на Питоне?

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

Если и впрямь что-то есть -- думаю, указать и проанализировать было бы очень полезно и для статьи, и для обращения людей (учителей) в свою веру.
[User Picture Icon]
From:dkirienko
Date:Ноябрь, 23, 2014 14:32 (UTC)
(Link)
Да, мой курс: http://informatics.mccme.ru/course/view.php?id=156

Правда, там тексты не годятся для учебника, то есть они не самодостаточны, а скорее являются конспектом к занятиям. Зато там есть мои видеолекции. И задачи для решения с тестирующей системой.
[User Picture Icon]
From:prijutme4ty
Date:Ноябрь, 23, 2014 14:44 (UTC)
(Link)
В целом, пожалуй, согласен. Я сам правда учил детей на руби.
Мне, однако, кажется, что лучше учить после питона что-нибудь более близкое к железу, лучше - C. Так чтобы школьник и умел что-то делать, и понимал, как это работает. Чтобы ученик массивы повыделял на стеке, и поудалял двухмерные массивы из кучи, попередавал значения в swap, упоролся о сигнатуры, поучился передавать пары значений и error-коды как результат функции.
Без этого когда он встретит серьезные проблемы, он даже не поймет в чем дело. Хуже, никто не сможет ему объяснить, поскольку они говорить на одном языке не могут. Кучи какие-то, сборка мусора, error-коды, интерфейсы.
[User Picture Icon]
From:dkirienko
Date:Ноябрь, 23, 2014 15:28 (UTC)
(Link)
В моём представлении, вот эти вещи - стек и куча, выделение памяти и т.д. - это уже тема для высшего профессионального образования. И в курсе высшего образования это должно быть, в моём списке языков для высшего образования есть C и Ассемблер, причем С именно как язык системного программирования. И даже не для среднего профессионального образования, где можно ограничиваться прикладными вещами, типа web-программирования, баз данных или 1С.

В школе это можно изучать, но только в профильной программе, и то если профиль соответствующий, а школа - сильная, или в виде спецкурса. Но, думаю, число школ, где можно такие курсы вести - единично.
[User Picture Icon]
From:iscremas
Date:Ноябрь, 23, 2014 16:00 (UTC)
(Link)
Я тут недавно где-то на просторах встретил замечание, которое поддерживаю чуть более чем полностью: "Всё чему учат на курсах программирования - это в лучшем случае алгоритмы. Про то, как писать программы, никто не учит."
Не уверен, имеет ли смысл учить этому именно школьников, но я абсолютно уверен, что сейчас по факту этому не учат нигде, даже в лучших ВУЗах, а тема более чем актуальна для людей, стремящихся стать профессионалами, или же просто программировать реальные приложения.
Постоянно сталкиваюсь с тем, что приходят на работу даже "опытные программисты" и не знают ни шаблонов проектирования, ни принципов дизайна классов, наступают вновь из раза в раз на одни и те же грабли. И от языка это знание не зависит вообще почти никак...
[User Picture Icon]
From:dkirienko
Date:Ноябрь, 23, 2014 16:16 (UTC)
(Link)
Это верное замечание, и про вузы тоже верное замечание. Хотя где-то в вузах есть курсы, посвященные проектированию и дизайну классов.

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

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

Эх, планы, планы...
gbnjy - (Анонимно) Развернуть
From:(Anonymous)
Date:Ноябрь, 23, 2014 17:32 (UTC)
(Link)
Пример, на мой взгляд, не очень удачный, ибо [0] * 1000 это не шибко наглядный синтакс задания массива. Наверняка можно подобрать куда более красивые примеры для иллюстрации, в целом, той же мысли. Хотя бы что-нибудь в духе max(a) или a[x:y], а то и dict.
[User Picture Icon]
From:dkirienko
Date:Ноябрь, 23, 2014 17:50 (UTC)
(Link)
У меня нет цели продемонстрировать всю мощь языка и как легко и просто на нём можно писать. А есть цель показать различия в подходах - кому нравится объявлять массив вот так по-паскалевски, а кому нравится, как в Python. По-Паскалевские (или в стиле Си) - это предварительное объявление, статическая типизация, потом - заполнение циклом. Ну а в Python я написал как. И критика в адрес Python как раз в том, что используя вот такие высокоуровневые списки школьник не будет понимать, что такое массив, что это - непрерывная область памяти, которую нужно выделить, которую нужно заполнить нулями и т.д. А я показываю, что мне это не нужно.

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

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

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

Словари - это, конечно, круто, но это бой совсем в разных весовых категориях. То, что в Python есть словари, а в Pascal - нет, это и так понятно, но это совсем о другом.
(Удалённый комментарий)
[User Picture Icon]
From:dkirienko
Date:Ноябрь, 23, 2014 18:54 (UTC)
(Link)
Я не хочу обсуждать другие языки программирования и сравнивать какие-то конкретные языки программирования, их логичности и нелогичности. Python мне кажется логичным языком и особых проблем с нелогичностью я в нем не вижу, по крайней мере на школьном уровне. И, разумеется, нужно использовать Python версии 3, по крайней мере не будет проблем с тем, что print - это не функция, и пишется без скобочек, ну и вообще многие другие нелогичности исправлены (как, например, огромная нелогичность языка C - смысл операции "/" зависит от типа операндов).

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

Я учил детей на C++ и учил детей на Python. Учил ну в общем одинаково - одинаковые задачи, одинаковые подходы. По моим ощущениям уровень вхождения в Python гораздо ниже, чем в C++, и подводных камней гораздо меньше. В C++ можно забыть проинциализировать переменную, выйти за границу списка, написать if (a = b), поставить точку с запятой после for (i = 0; i < N; ++i); и после этого часами искать ошибку. В Python подобных граблей гораздо меньше, ибо язык разрабатывался на 20 лет позднее, чем C.

И квалификация преподавателя в языке C/C++ на самом деле нужна гораздо выше - как объяснить, почему if (a = b) - работает, но не так, а почему if (0 <= x <= 10) тоже работает, но тоже совсем не так? Можно привести массу примеров. Вот последний пример, нашел две недели назад:

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    if (sqrt(2) == sqrt(2))
        cout << "Equal" << endl;
    else
        cout << "Unequal" << endl;
}


Почему этот код может выводить Unequal в некоторых случаях? (попробуйте скомпилировать при помощи gcc на 32-битной системе, может быть получится воспроизвести). Какое количество преподавателей да не то, чтобы школы, а даже вузов России сможет это объяснить? А что будет делать учитель в школе, если столкнется с такой проблемой? Я вот, например, на stackoverflow писал вопрос...

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



Edited at 2014-11-23 19:03 (UTC)
(Удалённый комментарий)
(Удалённый комментарий)
[User Picture Icon]
From:Daniil Ayzenshteyn
Date:Ноябрь, 23, 2014 18:31 (UTC)
(Link)
Честно скажу, не знаю питона, хотя руки давно чешутся уже, напишу по опыту других высокоуровневых языков.
Конечно, писать программы лучше с использованием наиболее высокоуровневых возможностей из предоставляемых языком и платформой. Но всегда важно знать их ограничения. Ибо рано или поздно придётся продукт масштабировать, и вот тут непонимание того, что стоит за тем или иным синтаксическим сахаром может выйти боком. Не стоит уповать на то, что большая часть этих школьников будут писать нечувствительные к производительности компоненты для бизнес-задач. Нет, они будут писать всю эту "бизнес-лапшу", но только не в первом, дак в пятом проекте придётся её оптимизировать. И оптимизировать в том числе выбрасыванием сахара.
В целом, это конечно, тоже методологическая проблема - как объяснить школьникам, что подход "понимаю то, что применяю" нужно применять не только к циклам и сортировке, но и к любой другой новой фиче языка. Думаю, что она решаема, но эта проблема новая - её не было при переходе к высокоуровневым языкам после низкоуровневых.
[User Picture Icon]
From:bljakhin_mukher
Date:Ноябрь, 23, 2014 22:04 (UTC)
(Link)
Думаю, что она решаема, но эта проблема новая - её не было при переходе к высокоуровневым языкам после низкоуровневых.

Именно! Меня наверное закидают тапками, но мне кажется для обучения профессиональному программированию хорошим вариантом было бы предварять работу на высокоуровневом языке работой на низкоуровневом. Если же речь идет только об ознакомлении, то в зависимости от самых разных факторов где-то паскаль предпочтительней где-то питон, где-то Си. Только не объектно ориентированные языки.
[User Picture Icon]
From:cema
Date:Ноябрь, 23, 2014 21:12 (UTC)
(Link)
на факультете ВМК МГУ попытка заменить Pascal на C, как первый язык программирования, оказалась безуспешной ввиду нежелания изменять сложившиеся программы и контингент преподавателей.

Боже мой, неужели это правда? Я давно слышал, что ВМК гадюшник тот еще, но всегда считал, что хотя бы специалисты там приличные.

Edited at 2014-11-23 21:12 (UTC)
[User Picture Icon]
From:cross_join
Date:Ноябрь, 23, 2014 21:58 (UTC)
(Link)
Если цель программирования "копай больше - кидай дальше", то можно делать упор на минимизации количества вбиваемых с клавиатуры символов.
Можно показать студентам, что на Паскале легко определить функцию заполнения любого массива. Следующий вопрос - заполнение любыми объектами, по идее должен вызвать дискуссию о строгой и нестрогой типизации.

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

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

Edited at 2014-11-24 08:44 (UTC)
From:saylars
Date:Ноябрь, 23, 2014 23:30 (UTC)
(Link)
А имеются уже школьники, которые начинали с Питона, а успешно изучали С+асм и вообще лезли в эту низкоуровневость дабы понять, как это все на самом деле работает. Просто вот за эту связку я очень благодарен ВМК, это было и интересно, и полезно.

И существует ли проблема с вопросом "А как вообще это работает?" Т.е. вы рассказываете про двоичный код и тут же Питон. Все же в С можно понимать, как это все работает (после ВМКшного курса вплоть до ассемблера). Да, не стоит мне приводить ужасные допустимые конструкции в С, а так же все знание о преобразовании в асм умирает с волшебством оптимизатора, но все же.
Просто программируя на Питоне, я забываю про такие слова как мантисса, выделение памяти да и вообще память, двоичное представление числа и так далее. А насколько я помню, это так же входит в школьную программу. И С и Паскаль были приземленнее что ли.
[User Picture Icon]
From:dkirienko
Date:Ноябрь, 24, 2014 03:16 (UTC)
(Link)
Не надо бросаться словами "это также входит в школьную программу". В школьную программу ничего не входит. Даже программирование особо и не входит. Если тебя этому учили в школе, то это не означает, что и всех должны учить этому в школе.

И когда я учу детей на Питоне, то почему-то могу говорить и про двоичное представление чисел, и про битовые операции, и про дополнительный код, и про мантиссы и IEEE-754 - это всё даже в Python никто не отменял... Ну да, выделения памяти как такового там нет, этого уж не отнимешь.
(Оставить комментарий) Страница 1 из 3 - [1] [2] [3]
Top of Page Разработано LiveJournal.com