Как стать автором
Обновить

Комментарии 1046

НЛО прилетело и опубликовало эту надпись здесь
А ты, видимо, очень любишь трупы, раз до сих пор тут.
Ву-ху, максика кокнули.
Даже как-то жалко, что это произошло. Час читал «беседу» по поводу его «ОС» на ЛОРе — впечатлился.
Еще одна «принципиально новая»?
В ней наверняка будут принципиально новые IceDove, Iceweasel…
Блин, только вчера перечитывал Денискин тред, думал что уж кого-кого, а его никто не переплюнет!
задумайтесь только, кого мы потеряли!..
Да когда уже тебя выпилят…
Уже. Даже не ясно, что произошло.
Ох и настырное школоло пошло!
Блин, тут столько внимания к комментарию выше, который удалили и я теперь понятия не имею, о чем идет речь… жуть как узнать хочется! :)
Школьник писал во всех топиках, которые ему попались под руку — «Хабр уже не торт», «Хабр умер» и тому подобный бред.
Может он написал где Asm
C или C++? Да вы шутите! В стандарте Си более 190 различных undefined behavior, и я более чем уверен что даже среди разработчиков компиляторов не все их могут на глаз распознать в коде (когда это возможно статически).
Си или C++ так как этот язык должен приучить к аккуратности. Слезить за памятью, работа с указателями — это очень сильно закаляет. Да и потом, школьная программа подразумевает лишь основы алгоритмизации, так что дальше работы с указателями врят-ли стоит идти. В школах дают задания максимум на сортировку матриц и т.д. Язык программирования как таковой тут особо роли не играет.
Даже указатели излишни. Язык должен быть динамически типизированным, как минимум.

Следует помнить, что речь идёт о школе вообще, а не о школе программистов. Зачем экономистам, юристам, литераторам, художникам, артистам, и прочим из этой серии нужно знать про какие-то там указатели?

В некотором роде, язык программирования в школе вообще лишний. Там должна идти речь о работе с техникой и информацией как таковой, а азы программирования лишь на уровне понимания насколько всё сложно и почему в этом мире всё поголовно кривое.
Я например за то, что бы классы разделяли по будущим специальностям. И те кто выбрал класс с технических уклоном должны ознакомится с программированием. На С и С++ азы можно дать и без указателей. Кому понравиться — будет копать дальше.
А кто не смог определится, пусть идет в общеобразовательный класс, и не учит никакое программирование.

Си без указателей? Нафига? Чему вы там будете детей учить? Чем, в таком случае, не угодил Паскаль?
Это лично мое субъективное мнение. В паскале тоже указатели есть, но не обязательно их использовать.
Чему учить? Переменные, условные операторы, циклы, массивы, парочку алгоритмов и хватит. Школа все таки.
Простите, какая будущая специальность в третьем классе? А если вы про 10-11, то существуют ПТУ/техникумы.
У нас информатики в школе до 9го класса не было. И программирование (на QBASIC) отдельным классом давалось, т.е. только для желающих.

А про компьютерный класс с третьего класса вобще никогда не слышал. У всех знакомых с 7-9 класса только.
У нас тоже не было. Но у друга сейчас сын в 3-м классе, полистал учебник по «информатике» (точное название не помню) — вполне годный для понимания что такое информация, компьютеры, сети и т. п. Кое-что для меня даже в новинку было, вернее было интуитивное понимание, а тут формулировка простая, а не «академическим» или ещё хуже «юридическим» языком, но тем не менее верная на мой взгляд.
у меня информатика была с 1 по 11 класс. в первом классе был пакет Роботландия. Простые алгоритмы типа Ханойских башен и около того. Во втором классе было Лого. Бейсик был в 5 и внезапно в 8.

годы обучения 93-2003.
То есть вы предлагаете человеку, с развитым логическим мышлением и т.п. идти в ПТУ/техникум для получения знаний по программированию?
Если хочет связать свою жизнь с программированием, то да. Когда его ровесники закончат школу, то у него будет и общее среднее, и начальное/среднее профессиональное, а в идеале и уже какой-то практический опыт. Диплом техника-программиста. Может идти работать кодером, может в вуз на инженера (к тому же, вроде, некоторые вузы практикуют приём из техникумов/колледжей на второй-третий курс).

Естественно я про нормальное образование, а не про «изучение екселя».
Почему нет, коль речь идёт о профориентации? Во всяком случае точно НЕ школа должна давать _профессиональные_ знания. Функции школы совсем другие.
Плюсану. Некоторые после школы имя-фамилию свои без ошибок написать не могут, так зачем им программирование?
Чтобы программа проверяла орфографию :)
Азы программирования — это алгоритмы. Их надо изучать на яызках максимально далеких от железа.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Когда они научатся писать свои программки и узрят насколько они получаются кривыми по сравнению с ожиданиями, они начнут подозревать что, в принципе, и всякие вконтакты-фейсбуки-ипр тоже кривые вот потому же (т.е. потому что всё шибко сложно даже для умов профессиональных программистов).

Хотя да, я такой наивный…
А лучше статически типизированным, чтобы не было ошибок времени выполнения.
Благодаря отсутствию ошибок времени выполнения в статически типизированном С на первом курсе у нас даже был «клуб любителей сегфолта».
Пардон. Должен был сказать, что подразумеваю Haskell и ему подобные языки с выведением типов (type inference).
Да чтоб ваши дети в школе учили яву и Си в качестве первого языка, блин.
кстати про яву — представил себе урок:
Учитель: «А сегодня, дети, мы будем учиться настраивать маппинги через xml для hibernate» :-)
Спасибо!
Видимо добряки не нашли в списке бреинфак, поэтому и выбрали С\С++.
Ну вот у меня была Java в школе. И это было очень кстати.
Что это за школа такая, что Java преподают?
У меня тоже была. Не первым языком, правда.
533 лицей в Питере
У меня первым языком в школе был Си. По книжке Кернигана и Ричи.
Те кто отвечают «С\ С++» либо психи, либо вундеркинды.
И я так говорю не потому что я ненавижу С\С++(я их люблю ;)), а потому что он слишком сложен для старта.
Паскаль можно, но лучше Лого… Хотя все же нужно уточнять, «в школе» это с какого класса?
Если с 1-ого то Лого однозначно.
Если с 5-ого можно начать с алгоритмического (часто именуемый «кумир»).
А ежели с 8-ого то можно Паскаль\Бэйсик и т.д…
Ну а потом в 10-11 можно и С\С++ дать )
никогда не понимал паскаль… помоему он выедает мозг!
А на мой взгляд, он хорошо «ставит руку».
Когда учился в универе на первых курсах от Паскаля плевался. А потом понял, что толковой альтернативы для нормального поэтапного («академического») изучения алгоритмов и структур это лучшее из зол. Это язык, который заставляет собрать мысли в кучу (например, когда нужно банально описать секцию var), даст по рукам средствами сильной типизации и т.п…

Как новичку в программировании объяснить, как работает «Hello world» в C/C++? Либо недоговаривать про классы с объектами, указатели, переопределение операторов, представление строк и т.п., либо сразу съесть мозг. А программированием тут еще и не пахнет. Про грядущие радости отладки с сишными строками на стеке и передачей в качестве результата из функций говорить, думаю, тоже не надо. А это тоже азы. Продолжать можно бесконечно.

Про Java в качестве первого языка и думать не хочется. Все-таки стоит пощупать управление памятью руками и понять, что такое указатели до того, как начать играться с Java (дабы не облениться раньше времени :))
C++ более чем, нормально пойдет в качестве первого языка.
Да можно не договаривать кучи вещей — всех нас в школе на математике честно обманывают — сначала, что нету отрицательных числе, потом что на ноль никогда делить нельзя, потом что корень из отрицательных чисел корень извлечь нельзя и т.п.
Кстати, детям ни кто не рассказывают в паскале что writeln() это функция, и вообще что такое функция. оО!

В общем я за то что бы с 8-го класса когда начинается информатика детей учили C++.
Python — им будет тяжело учить. А Java слишком изменена для начальных навыков. Против Basic'а я ни чего не имею, но в России им мало пользуются… Про Delphi ни чего сказать не могу, но имхо, это продвинутый Pascal.
Вы хотите сказать, что python'у учить тяжелее, чем Паскалю?

PS. На ноль таки делить нельзя. Деление — это умножение на обратный. У нуля нет обратного, значит и делить на него нельзя.
PPS. А отрицательных чисел действительно нет (в PA). А вещественных вообще нет (интуиционисты утверждают, что несчетных множеств не существует).
Да python учить тяжелее чем Pascal.
А ваши PS — просто смехотворны.
Предложите способ измерения сложности изучения, по которому паскаль окажется легче питона.
Банально тем что питон интерпретируемый и это дает пачку уникальных свойств, отличающих его от прочих языков. Если уж учить то чему-то более классическому. Питон очень крут, но это как выше говорилось про джаву — нельзя давать совсем уж новичкам, которые и блок-схему то нормально не составят.
Отличающие и усложняющие — это не одно и то же:)
«Не одно и то же» ещё не означает, что обязательно разное ;)
Если мы до сих пор рассматриваем обучение то как раз практически одно и то же.
Обучение должно быть ближе к классике. А потом уже когда постиг всего чего надо — иди хоть на перфокартах программируй.
Вообще я считаю что начинать учить программировать нужно блоксхемами и паттернами:)
Под паттернами, я надеюсь, Вы не GoF имели в виду? )
Имел в виду само понятие паттерна. И умение разобраться в степени уникальности проблемы. Если проблема требует оригинального решения — решать. Если же это частный случай некоего множества — посмотреть как решали другие.

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

Паттерны это как формулы, если знаешь основы и откуда вывели — то тебе они не нужны. Но когда ты уже сам их вывел — то будешь пользоваться формулой, а не выводить каждый раз. И вот до этого людей надо доводить, чтоб не было непреодолимого желания изобретать велосипеды.
C такой позиции я согласен, да.
И, надеюсь, не те паттерны которые в регулярках? И, надеюсь, не pattern matching в функциональных языках?
1. кому обучение должно?
2. что есть классика?
Так перфокарты и есть классика:)
Базовые принципы в любом случае одни и те же. Очень у многих просто проблема в том, чтобы строго представить последовательность действий. Элементарно на уровне «чтобы перемножить матрицы, пишем три цикла». И это на мехмате, а не в школе.
Так что, думаю, дополнительные сложности, вводимые языком, будут мешать, даже если есть веские причины для их существования, и в классических языках эти сложности есть. Выучить сначала python, потом С, ИМХО, не сложнее (а скорее проще), чем сначала С, потом python.
И на python'е писать простые и средние программы (опять же ИМХО) проще, чем на С. В том числе и за счет отклонений от классики.
> Элементарно на уровне «чтобы перемножить матрицы, пишем три цикла».

Это не элментарно. Элементарно — это то же самое, только с рекурсией. Если перподавать это в виде мат. функций, все прекрасно объясняется
судя по инфе у вас в профиле, вы не в Москве, жаль. А то бы я предложил простой эксперемент — становимся у какого-нибудь выхода из метро, и спрашиваем всех, кто согласится отвитить на несколько вопросов
— знают ли они, что такое рекурсия?
— знают ли они, что такое последовательность действий?
— сколько им лет
— чем по жизни занимаются

не думаю, что результаты вас удивят, думаю, что где-то там внутри, вы понимаете, что функциональщина — это для специалистов, а тут просто троллите :))

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

Если вы считаете, что в школе не знают, как вычисляется, например, что-то типа: f(x) = f(x-1) + 1 то вы давно не были в школе.

Рекурсия, последовательность действий и прочая и прочая успешно объясняются на математике. Потом приходят учителя, ломают детям мозг совершенно другими определениями с тем, чтобы потом говорить, что ФЯ, которые на эту матматику при правильном обучении хорошо ложатся, являются сложными языками для специалистов :)))
не важно, что знают в школе. Мы в школе знали, что акое «рекуррентное выражение». Хотя я не уверен, что еще много школ в миллионном городе выпускали учеников с такими знаниями.

Тогда, мы использовали фортран, и это никому не помешало сохранить знания и понимания.

Я не о том, что хорошо ложится на математику, я о том, что «ложится на простую жизнь» важнее.
Тогда в школе ничего не ложится на простую жизнь. И тогда вместо программированию лучше основам работы с компьютром, основы компьютерных сетей, безопасность личных данных (самое главное) и логике.

Программирование, по большому счету, в школе не нужно.
f(x) = f(x-1) + 1
Это такой дзенбуддийский коан? «Вещь в себе»?
Нет, больше похоже на задачку с олимпиады. «Для функции f(x) выполняется условие f(x)=f(x-1)+1=f(x/2)*2. Верно ли, что из x>=0 следует, что f(x)>=0»?
Не обязательно для олимпиады
Действительно, как дополнительная задача на экзамене тоже сойдет. Спасибо. Предложу кому-нибудь из матанщиков.
Так в школе и учат, в том числе что бы на такие вопросы легко отвечали.
Ну мне это сделать тяжело.
Конечно в чистую голову наверное все равно что забивать, но тем не менее, проблемы могут вызвать следующие факты: поддержка динамической типизации по умолчанию, изначальная работа с объектами, ну и границы на основе отступов (хотя это учит хорошим манерам, тем не менее это напряг для начинающего).
> поддержка динамической типизации по умолчанию

С чего это вдруг вызовет проблемы? ;)
А искать где забыл «end» или "}" — не напряг? Проще ведь сразу приучаться к отступам, не думая ни о чём лишнем, чем сразу следить за тем и другим.
В Haskell тоже отступы. Давайте с него начинать — уж он-то разложит всё по полочкам в голове.
Зачем же в крайности кидаться? Отступы — не единственное преимущество Питона.
как и хаскеля )
Я имел ввиду преимущества для изучающих программирование.
Блин, да ну я тоже ведь! Haskell рулит, поверьте. Не так он страшен, как его малюют.
«А вот здесь, дети, пишем стрелочки. Что это такое, мы изучать не будем, просто запомните» ;)

Это ничем не отличается от того же про include'ы и классы.
Ага, 4 строки на полный парсер обратной польской записи, и еще 20 строк на ввод-вывод результата из/в файл, да-да. Функциональное программирование оно такое.
Если вы не знаете, что такое ФЯ, не надо об этом всем рассказывать
Не мне? O'rly? Ну тогда расскажите вы, наиболее удобный способ читать/писать данные из/в файлы в Хаскелле? Можете дать дать куски кода.
Обязательно в Хаскелле? Других ФЯ вы не знаете?
import Data.Char(toUpper)

main = do
inpStr <- readFile "input.txt"
writeFile "output.txt" (map toUpper inpStr)


Сомниваюсь, что наивное чтение/запись во многих языках записываются лаконичней. И это пример из учебника, без всяких клёвых штук вроде iteratees.
bullshit.

readFile "in.txt" >>= return . parseLines . lines  >>= writeFile "out.txt"

У нас первым языком был OCaml, вторым — Haskell, третьим — Java.

Reductio ad absurdum? Я не впечатлён.
И да, обучать основам программирования в Питоне можно без всяких объектов.
А на Haskell без всяких монад.
Я теперь стал против того, чтобы использовать языки с динамической типизацией и смесью парадигм в качестве первого языка.
Почему?
ну а что, на ноль делить и правда нельзя, мы же не про пределы говорим, а про прямое деление.
Ну а что объектов не существует тоже правда, мы же в конце концов структурное программирование изучаем… Да и существуют только целые числа, мы же только integer пройти успели…
Да даже в пределах на ноль не делят. Просто отношение 1 к бесконечно малой является бесконечно большой (и стремится к бесконечности). Для удобства это записывают так, что потом до седых бород все думают, что вот де можно на 0 поделить, иногда.
Нет, с питона потом будет сложнее переучиться при переходе на «серьёзные» языки (тот же С++ к примеру).
очень правильно слово «серьезные» взято в кавычки, очень!
Это предохранение от троллей, которые считают иначе и хотят это доказать. Факт остаётся фактом — на питоне драйвера не пишут, да и 3d-движков для игр что-то не встречал.
Eve Online написана (была?) на python.
там только GUI на нем
Both the server and the client software for Eve Online are developed in Stackless Python,
Врут. Как они рендеринг делают на питоне? Внутри-то он реализован все равно на С, если там OpenGL или на C++ (если DirectX).
«Внутри» это библиотеки, python легко позволяет делать биндинги к библиотекам, в частности к DirectX. На каком языке написаны библиотеки python не волнует.
Пфффф… (facepalm)
Врёте. Как Вы рендеринг делаете на С/С++? Внутри-то всё равно электроны.
вопрос, вроде о школе, не?
какие, простите, драйвера и 3d-движки?
Простите такие, что я сказал не о школе, а о переучивании, которое, очевидно, будет после неё.
откуда взялось переучивание?

Чему нужно будет переучивать человека, который умеет записать алгоритм на языке питон, в институте, в контексте изучения 3d-движков, например?
Что вы прицепились к движкам? Не в контексте движков, а в контексте С++.

Учим питон => решаем написать движок => узнаём, что (внезапно) практически стандарт де факто для таких дел — С++ => начинаем писать на С++, в котором даже for сложнее (зацели вброс, да? :)) => куча траблов из-за того, что мозг привык думать более высокоуровнево.
*заценили
я выделил полужирным то, к чему «перицепился».

и в каком месте, погружение на более низкие уровни — переучивание?

Что, вместо того, что-бы циклом перебрать все значения списка, еще нужно понимать, что списки бывают разные, у некоторых есть индексы, которые нужно перебирать и так далее — это прям ужас-ужас и разрыв мозга?

Какие-то вы странные вещи рассказываете.

В противовес могу вбросить — что люди, которые думают в контексте индексов, регистров и тактов, далеко не всегда на высоком уровне могут адекватно алгоритм даже просто озвучить. Словами.

Опять-же, в контексте переучивания, ничего, что после школьной математики и алгебры, матан, вышка, дифуры и прочее в вузе читается? Может тоже, сразу школьникам будем критерий Коши объяснять?
Да, я сфейлился. Не пере-, а доучивание. Знатное такое, ага. Ну это не важно.

По сути, очень спорно вообще, что в школах нужно давать программирование прям-таки сильно углубляясь. Мне кажется, что 11-го класса (ну на крайняк 10-го ещё) должно быть достаточно для того, чтобы дать основы. И то, большой ещё вопрос, а не лучше ли изучать на примере какого-то лиспа к примеру?

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

В школах лучше бы набирать на клавиатуре вслепую десятью пальцами учили, чтоб потом не тыкались двумя-тремя бухгалтера/секретари/юристы/программисты всякие.
Программирующего на С нельзя научить ассемблеру?
Сложнее, чем наоборот.
Если программирующему на ассемблере объяснить C, но запретить пользоваться goto, ему долгое время будет очень неуютно. Почти как с машины Тьюринга переучиваться на brainfuck.
НЛО прилетело и опубликовало эту надпись здесь
Нету такого числа среди вещественных. Да и вообще ни в каком поле (кроме тривиального, состоящего из одного только нуля) у нуля нет обратного.
X*0 = X*(0+0) = X*0 + X*0
X*0 — X*0 = X*0 + X*0 — X*0
0 = X*0
Для любого X. Таким образом, нельзя умножить ноль на что-то и получить не ноль.
НЛО прилетело и опубликовало эту надпись здесь
Да, например, в комплане бесконечность можно ввести очень гармонично, и она хорошо смотрится на сфере Римана.
Тем не менее «деление» по умолчанию предполагает поле. А в полях делить на ноль нельзя (см. выше доказательство).
Я не совсем в тему, но не подскажите ли какой-нибудь литературы по математике чтобы можно было популярно изучить и понять её суть во всех подробностях для нематематика. Заранее спасибо.
Николя Бурбаки, «Элементы математики». Однако имейте в виду, что к окончанию чтения нематематиком вы уже не будете. Caution is adviced.
О да, Бурбаки — это как раз то, что нужно для знакомства с математикой.
Вы бы еще посоветовали… а не знаю, что более жестокое можно посоветовать)
Я старался!
Трилогия Гарднера («Математические новеллы», «Математические чудеса и тайны», «Математические головоломки и развлечения»). Возможно, Перельман «Живая математика». Для нематематиков — в самый раз.
Всякие понятия следует вводить аккуратно. Точка на бесконечности — это точка на бесконечности, возникающая при одноточечной компактификации, к вещественным числам (да и к любому полю в принципе) имеющая крайне отдалённое отношение.

Есть понятие инфинитов (бесконечно больших) в нестандартном анализе, на расширенной вещественной оси R* — однако, так же как инфинитезималы не вляются нулём, бесконечностью в привычном смысле они не являются.
Но в преобразованиях Мебиуса дополнительная точка ведет себя точно как 1/0. А сами эти преобразования записываются через арифметические операции…
Простите, что это значит? Запись «1/0» не имеет смысла если использовать обычное деление.
Рассматривайте ее как точку на проективной комплексной прямой, если угодно. Пара чисел с точностью до пропорциональности. Если f(z)=(p*z+q)/(r*z+s), то f((a,b))=(p*a+q*b,r*a+s*b). Если b!=0 и r*a+s*b!=0, то f((a,b))=(c,d)эквивалентно f(a/b)=c/d. А дальше по непрерывности.
Тривиальном кольце. Поле из одного элемента (поле характеристики один) F-un — крайне спорная и, вообще гоовря, несуществующая алгебраическая структура.
Зависит от определения.
Есть определение «существует единица», есть — «существует единица, не равная нулю».
В частности, на мехмате кафедра алгебры пользуется вторым, а кафедра теории чисел — первым)
Первое определение порождает слишком много противоречий. Конечные поля — достаточно хорошо изученные объекты:

en.wikipedia.org/wiki/Field_with_one_element
Да, одноэлементное кольцо многими из стандартных свойств поля не обладает. Тем не менее оно удовлетворяет всем аксиомам поля, кроме 0 != 1. И есть некоторые свойства, которые доказываются независимо от этого требования.
Нам на семинарах объясняли, зачем может понадобиться считать одноэлементное кольцо полем. Но я, к сожалению, этого объяснения уже не помню(
Есть много различных причин для того, чтобы считать F-un существущим объектом — однако же все они так или иначе сопряжены с большими сложностями. До сих пор не разрешёнными сложностями, хотя тема в последние годы весьма популярна.
Безусловно. Поэтому в некоторых разделах математики (наверное даже в большинстве) его не рассматривают.
Что, тем не менее, не запрещает убрать аксиому 0!=1 из определения и добавить во все теоремы, где она требуется.
Необходимость делить на ноль выглядит катастрофой в глазах математика и даже может вызвать лёгкое смущение у физика-теоретика. *joke*
«Делить на ноль» — это примерно то же самое, что «нарисовать красную линию зеленым цветом».
Тема в общем-то холиварная, поэтому спорить о языках не буду.
Но по поводу математики вы не совсем правы. Отрицательные числа есть, но не в тех множествах, с которыми работает школьник. Равно как и с делением на ноль — делить действительно нельзя, но в анализе есть предельный переход, который позволяет обойти эту проблему. Так что тут никакого обмана.

А по поводу языков мое мнение таково, что язык не должен отвлекать от изучения алгоритмов, структур и парадигм, а именно они являются целью обучения.
Предельный переход не позволяет делить на ноль, он всего лишь позволяет ввести в стандартный анализ бесконечно малые величины (не приндлежащие R вследствие полноты по Дедекинду).
По-вашему Python в изучении сложнее C++? Нонсенс.
>Все-таки стоит пощупать управление памятью руками и понять, что такое указатели до того, как начать играться с Java (дабы не облениться раньше времени :))

А где вы в паскале видели ручное управление памятью? Он вообще далек от этого.
Я вообще не понимаю что люди нашли в паскале. Для обучения есть вещи куда получше, чем язык 40-годичной давности с крутяшным иде от борланд.

Я бы давал учить сразу Си. Он безусловно сложнее паскаля, но и профит от его изучения есть. Плюс мне кажется многое зависит от преподнесения материала, и никто не заставляет преподносить сразу все. Можно дать для начала тоже самое что есть в паскале, потом углубляться в указатели, классы и т.д.
Вы хоть не будете забивать людям мозг тем, что им не нужно, заставляя в будущем переучиваться.
Ну а если некоторым людям после долгих стараний все равно будет непонятно, например как работает «Hello world» в Cи значит им с программированием и связываться не нужно.

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

«Он на вкус хотя и крут, и с него, бывает, мрут, но какие выживают — те до старости живут».
> Все-таки стоит пощупать управление памятью руками и понять, что такое указатели до того, как начать играться с Java (дабы не облениться раньше времени :))

Указатели не имеют никакого отношения к лени или умению программировать.
А вы считаете, разработчик, не понимающий указателей, может считаться программистом?
Да. Потому что знание/не знание указателей никак не влияет на способность программировать. Это вообще — знание, полностью ортогональное умению программировать.
Получил минус, без объяснений.

Хочется услышать внятное объяснение того, какой отношение указатели имеют к умению хорошо программировать.
Не минусовал, но попробую объяснить свою точку зрения.
Кто ясно мыслит, тот ясно излагает. Для хорошего программиста важно понимать, как работает вычислительный процесс «под капотом», чтобы писать эффективные приложения.
Я согласен со Спольски, который говорит, что понимание указателей — это не знание, а навык. И считаю, что этот навык необходим для того, чтобы понимать, как работают динамические структуры данных, как размещаются объекты в памяти, что такое стек и т.д. и т.п.
Я могу полжизни прожить на языках таких абстракций, где про указатели знать не обязательно, но в таком случае почти наверняка не смогу перейти на язык, где они есть.
> Для хорошего программиста важно понимать, как работает вычислительный процесс «под капотом», чтобы писать эффективные приложения.

Правильно, толкьо при чем тут указатели? Понимание работы какого—нибудь J или Erlang'а возможно без знания указателей. Потому что указатели _ это всего лишь одн из возможных реализаций работы с памятью, при чем далеко не самая удачная.

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

При чем тут указатели?

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

Это означает только одно — что вы плохой программист
Да.

Контрвопрос: а вы считаете, что разработчик, не понимающий теории категорий, может считаться программистом?

Контрвопрос 2: * логики высшего порядка *?
Приведите хоть один более-менее практический пример использования абстрактной чепухи)
Язык Caml подойдёт? Он как бы Categorical Abstract Machine Language.

Ну или LINQ. Или Rx Framework. Хотя для меня куда более важным аргументом является, например, то, что понятие локализации кольца на языке категорий записывается раз в пять короче теоретико-множественного варианта.
Ни в коем случае! А рассматривать в качестве первого учебного языка язык, в котором зигохистоморфмные препроморфизмы не являются first-class value, вообще моветон.
Вы, наверное, путаете разработчика, не понимающего указатели и не способного понять.
НЛО прилетело и опубликовало эту надпись здесь
То есть не надо изучать программирование вообще?
Вполне возможно, что не надо. Основы комп. грамотноти, основы сетей, логика и — главное — безопасность личной информации
НЛО прилетело и опубликовало эту надпись здесь
Школьникам с 1го до 8-9го класса не надо учиться программировать. Большая часть людей из моей бывшей параллели не не могли сами изменить размер шрифта в ворде. Гуманитарный и медицинские классы искренне не понимали, зачем их заставляют делать то, что «им не нужно» (даже банальный ворд, не говоря уже об ужасном Паскале). В моём математическом классе дела были немного лучше, но не на много :)
Если учиться по вашей системе, тогда всё время уйдет только на изучение синтаксиса (синтаксис паскаля проходили примерно 3 четверти).

ПС: обычная общеобразовательная школа, далеко не сунц.
А я вот по опыту вижу, что те люди которые сейчас хорошие программисты, начинали в 11-12 лет, в том числе и я. Конечно в школе этому тогда не учили, а наверное зря, тогда бы может быть гораздо больше было бы сейчас специалистов. Как говорит 1 знаменитая теория, для того что бы стать профи в любом деле нужно 10 000 часов работы, это как раз лет 10.
Так а никто не мешает 11-летнему школьнику, хорошо разбирающемуся в математике, начать самому читать книги по программированию, а при возникновении вопросов, подходить и спрашивать их у преподавателя, ходить в какие-нибудь кружки. Тем более, сейчас очень много возможностей обучатся чему-либо в интернете. Единственным недостатком «самостоятельного обучения» считалось не возможность получения ответов на вопросы, которые возникают при прочтении книг/статей. Но сейчас, по-моему, это уже не проблема.
Вопрос в том, зачем заставлять других учить то, что нужно одному человеку из класса?
Делом в том что если смотреть в будущее, то самой актуальной работой становится программист, это уже сейчас так. И если мы хотим что бы наши дети получали действительно важные для жизни знания, нужно менять подход. Это нужно все сейчас, и с каждым годом будет все нужнее.

А математику на том уровне который преподают я никогда не любил, и если честно в 95% повседневных задач программиста высшая математика не нужна совсем, да и не только у программиста. И это совсем не мешает мне быть хорошим программистом.
Вроде бы нужна. Мне регулярно нужна; доски в офисе у нас часто исписаны интегралами и суммами, а на полках стоят книги типа «общей топологии» (правда, зачем нужна именно она я не очень понимаю).
Конечно она нужна, но вот как раз тут возникает вопрос который был ранее задан в отношении программирования «Вопрос в том, зачем заставлять других учить то, что нужно одному человеку из класса?»
«Образование — это то, что остается, когда всё выученное уже забыто»
География, история, биология с огромной вероятностью не пригодятся ни одному человеку из класса. Не говоря уже о стихах Пушкина.
Есть некий «культурный минимум». Другой вопрос, входят ли туда основы CS.
Это в наше-то время география не пригодится? Когда весь мир открыт каждому? Снова принцип «извозчик (в смысле турфирма) и довезет, и покажет, и расскажет»?
Почему нет? Не, ну какой-то минимум нужен, типа того, что дают на природоведении в начальной школе, что 6 материков, где они примерно и т. п. Но как вспомню «особенности эконом-географического положения Буркина-Фасо» или знать наизусть все страны мира и уметь показать их на карте. причем на скорость.
Буркина-Фасо это которая Верхняя Вольта. только без ракет? Да, была такая. Кругленькая, к северу от БСК-Того-Бенин. Запоминать все страны мира (а также штаты США в алфавитном порядке) было интересно, наверное, потому, что в школе этого не заставляли. А потом — составить в уме список областей России, не уча их предварительно, а ориентируясь по автомобильным номерам. Весело же!
А без географии — приедешь а Анталию, а потом жалуешься, что тебе Колизея не показали…
Нас заставляли и было очень неинтересно.

Насчёт Колизея — это, скорее, к истории. А в наше время никакого труда не составит перед поездкой глянуть вики и погуглить насчёт исторических и природных достопримечательностей.

Толку мало от школьной географии даже в пределах России. Когда говорю, что я с Петропавловска-Камчатского, то коренные петербуржцы многозначительно отвечают: «ууу… с севера, холодно у вас?», даже не подозревая, что мой родной город расположен южнее даже Москвы, а не то что Питера и климат куда мягче обоих. А когда продолжают: «а греться куда ездите, в Сочи?» отвечаю «Во Владивосток», то говорят: «Ну для вас да, даже там тепло», не подозревая, что Владивосток южнее Сочи.
Интересно, многие ли из тех, кто говорит, что Владивосток южнее Сочи, знают, на сколько именно он южнее. На этот вопрос, не зная заранее ответа, ответить нельзя (только угадать — «раз спрашивают, значит, Владивосток»). А про то, где тепло — Сочи: Январь +6.0 июль +23.3
Владивосток: январь -12.3 июль +17.6

Ну да, для вас даже там тепло (особенно летом):
Петропавловск-Камчатский: январь: -7.7 июль: +11.4
для сравнения:
Санкт-Петербург: январь -5.5 июль: +18.8
Москва: январь: -6.5 июль: +19.2

Если под «мягкостью» понимать годовую вариацию температуры, то да, Петропавловск проигрывает только Сочи. Но если искать, где теплее, то Москва и Питер все-таки возьмут верх, хоть они и севернее.
Не слышал вообще, чтобы кто-то кроме меня (или тех, кто со мной общался) говорил, все уверены в обратном, если вопрос напрямую не задавать.

И да, я именно про годовой диапазон — зимой сильно не мёрзнуть, летом от жары не страдать.
И нормальный снег!!!
Мне некоторое время вообще казалось, что Находка — самая южная точка России. Но я быстро убедился, что половина Дагестана все-таки южнее.
Питерский манагер по персоналу уверял меня, что Иркутск где-то в Свердловской области :)
А Москва — в штате Пенсильвания :)
знать наизусть все страны мира и уметь показать их на карте. причем на скорость
Вы так говорите, как будто это плохо.
Если интересно кому-то, ради бога. Но зачем всем это знать? Причем именно в таком виде. Не по каждой стране провести экскурс минут на 10, а потом проверить кто как слушал-читал, а именно заставлять зубрить?
Понимаете, в чём дело, задача школы как таковой — не только дать набор базовых познаний о мире, но и научить учиться. А зубрёжка — один из важных методов обучения. Таким образом совмещают обучение двум вещам в одном занятии. Очень эффективное времяпровождение. Той же цели служат и изложения на русском. Я себе на подобных заданиях «быструю» память неплохо прокачал, поскольку карта очередной части света, например, мной училась непосредственно за 10-15 минут перед ответом. Потом способность быстро загружать в мозг большие объёмы информации, а потом так же забывать её очень пригодилась. А по поводу сложности… Запомнить, как называется то или иное место на карте — не так уж и сложно. Нас в православной гимназии заставляли молитвы на немецком зубрить. Вот где адЪ и Палестина.
200 стран*10 минут= 44.5 урока — как раз на учебный год (по 1-2 урока в неделю). А потом устроить экзамен с 200 билетами.
Минут по 10 не просто так написал. Но вот экзамен лишнее, имхо.
Без экзамена «проверить» будет проблематично. Каждый урок 15 минут самостоятельная по прошлому уроку+3 новых страны?
Да, именно так.
Школьная география по сути сводится к запоминанию некоторого количества совершенно бесполезной информации, которую при необходимости можно посмотреть в Вики (например, какая площадь пахотных земель в %COUNTRYNAME%), либо на карте.
При поездках в любом случае используются либо услуги тур. агента, либо путеводители.
Зачем нужна география?
Вообще, приведите обоснование нужности «для большинства» хоть одного школьного предмета 8го и позднейших классов.
Может быть, физкультура? Для школьников, особенно старших классов, она очень полезна. Если, конечно, они сами себе физической нагрузки не дают (а большинству это «некогда»).
А при поездках иногда используются услуги проката автомобилей, а после этого — карта острова, по которому предстоит ездить. Причем в навигаторе этой карты может и не оказаться. А без представлений о географии ориентироваться в карте не очень просто.
Безусловно, картой уметь пользоваться надо. Но это тема для одного урока, а не для 5 (или сколько сейчас?) лет.
Астрономию уже отменили, говорят, как необязательную. Но космические корабли все равно пополняют ряды подводного флота.
Это Вы про программирование, да?)
От силы один человек из класса станет химиком, но это не значит, что всем остальным, включая безнадежных ГСМ, не нужно отличать H2O от C2H5OH.
От силы один человек станет писателем, так что же — всех остальных оставлять безграмотными?
Как вообще могут быть кому-то не нужны основы алгоритмов, программирования и устройства ИКТ в мире, где ИТ становится в прямом смысле всем?
Очень просто. Из курса химии я узнал, как минимум, что есть на руки попала кислота, то её можно нейтрализовать щёлочью. Грамота нужна всем, потому что язык — это инструмент достижения понимания между людьми.

А вот как устроен компьютер мне пофигу, если он работает. Если я балуюсь эффектами в фотошопе, то мне абсолютно всё равно, процессор их просчитывает или видяха через CUDA. Если я ищу текст в документе Word, то мне пофигу на парсинг регулярных выражений и поиск подстроки в строке, благо в Word всё наглядно и удобно.
И часто Вам на руку кислота попадает (и при этом под рукой щелочь оказывается)? К тому же для того чтобы использовать этот эффект отнюдь не обязательно знать слово «орбитали».
Грамота — то же самое. Как минимум орфография точно не нужна — есть же спеллчекеры.
В бумажных документах или письмах тоже спеллчекеры используете?
Бумажные письма? Нет, не слышал.
В любом случае можно набрать в текстовом редакторе и распечатать.
И документы тоже вряд ли часто пишутся от руки, разве что подпись.

Сочувствую. У Вас питонизм головного мозга. Симптомы: утрачивается чувство романтики в окружающем мире, который теперь представляется как конечный автомат.
Только это скорее математика, чем питон:)
И да, с любой фиксированной точностью мир локально есть конечный автомат)
Ч.т.д.
Всякое, тем не менее, случается. Попасть в облако аммиака или хлора куда проще, чем может показаться — и понимание того, какие действия в такой ситуации являются правильными, может стоить жизни.
> А вот как устроен компьютер мне пофигу, если он работает.
А вот если работающий компьютер по совместительству «работает» еще и узлом ботнета, потому что пользователь-ламер понятия зеленого не имеет об устройстве компа, путях его заражения и мерах, позволяющих существенно снизить его риск, то это уже не только его личная проблема, как и проблема выезда на дорогу общего пользования водителя, не знающего ПДД, или наплевательства на пожарную, газовую и т. п. безопасность (опирающуюся на те же физику с химией) жителя многоквартирного дома.
А причём здесь программирование?
А причем химические эксперименты к эффективности изучения химии? Программирование — способ не просто изучить предмет обучения (железо и софт) как он есть, но и на собственном опыте испытать, как он ведет себя в тех или иных заданных условиях. Нет лучшего способа понять, что файл — это не магическая фигня, а набор определенным образом организованных байтов, чем поработать с файлами программно.
Если это не текстовый файл, то «организация определённым образом» будет той-же магией. Не забываем, что речь о школе.
Речь не о том, чтобы научить разбираться в структуре конкретных типов файлов, даже самых распространенных.
Речь о понимании самой идеи файла и его составляющих, различия между форматом, расширением и значком файла, наконец, отсутствие которого приводит к популярности заразы типа Readme.exe.
Ну так это всё отлично объясняется без программирования.
Увы, по закону (пока?) ему грозит максимум отключение провайдером и то, как правило, «до устранения».
Это если малварь проявляет себя в объемах трафика. А если тихо чинит западло в социальных сетях, неспешно рассылая говносообщения от имени пользователя всем его контактам, то провайдер такого даже не обнаружит. А это тоже в конечном итоге следствие массового ламерства.
«Хорошо разбирающемуся в математике» 11-летний школьник имеет гораздо больше шансов научится программировать чем среднестатистический. И тут дело даже не в том, что «высшая математика» не понадобиться большинству программистов в своей работе (с этим я с вами абсолютно согласен), а в том, что людей можно разделить на две большие группы. Назовем их «гуманитариями» и «логиками». Вторые лучше разбираются в «точных науках» (в том числе, и в программировании), но при этом их можно научить грамотно писать, общаться на 10 языках или сочинять стихи. Но им это никогда не будет приносить удовольствия. С другой же стороны, «гуманитариев» можно научить программировать или решать математические задачи (и я даже знаю много таких людей, которые прекрасно с этим справляются), но это никогда не будет приносить им удовольствия.
P. S. А работать нужно по тому направлению, которое приносит удовольствие.
Ну вообще не могу не согласится. Я в общем то сам учился в школе с уклоном в Математику, конечно это в подкорке наверное осело.
Я если мне приносит огромное удовольствие и сочинять стихи и программировать?
То вам повезло:)
Разделение людей на две подобные группы «ГСМ» и «матан» не менее условно, чем кодирование сами знаете чего числом 265.
Бывает еще так: я учился в математико-гуманитарном классе, и можно сказать, в добровольно-принудительном порядке посещал спецкурсы по математике, физике, русскому языку и литературе. Не могу сказать, что это плохо, т.к. алгоритмы присутствуют везде, вопрос логик вы или нет. С другой стороны, хороший писатель держит в голове тысячи строчек «кода», компилируя его в эмоции, ощущения, образы и т.п. Соответственно, если компилятор у человека другой — то, вряд ли книга ему понравится. Все, о чем идет речь — это применение сил и труда. Арзитектура одна и та же, инструменты разные. Поэтому я за Ruby. Имхо, он будет понятен всем среднестатистическим, а дальше можно углубляться и специализироваться.
хороший писатель держит в голове тысячи строчек «кода», компилируя его в эмоции, ощущения, образы и т.п.
Это хорошие писатели вам сами сообщили? :)
Самый главный недостаток «самостоятельного обучения» — невозможность получить фидбэк. В программировании это особенно важно. Программа может выдавать правильные результаты, но являться «быдлокодом». А отучаться писать «быдлокод» самостоятельно очень сложно, даже когда поймешь, что его пишешь. Уж поверьте.
Да, отучиться (как и отучить) писать «быдло код» сложно. Вообще-то повезло тем ученикам, чей учитель заставляет их писать нормальный код.
Да хотя бы показывает альтернативы и рассказывает, почему больше строк/символов для решения той же задачи может быть лучше, чем меньшее количество строк/символов.

P.S. Уточнение про символы — вспомнил о своей былой привычке писать несколько инструкций в одну строку, чтобы больше инфы помещалось на экране. В оправдание могу сказать только, что экран был 24х64 символа и не было даже аналога… | more, не говоря о… | less и, тем более, полноценном редакторе.
«Заводы стоят! Одни гитаристы в стране!»
Зачем всех повально делать хорошими программистами, если большая часть не понимает базовой компьютерной граммотности?
Представляете, если всех школьников сразу нагрузить Pascal, C, Java, и учить сортировать сразу Быстрой Сортировкой, а не пузырьком? Ну а что? Ведь в реальной жизни пузырьком тоже почти не пользуются, так зачем на него тратить время в школе?
Насчет быстрой не знаю, а пирамидальная сортировка выглядит почти как карточный фокус. Особенно если показывать его на колоде карт. Думаю, что треть класса хотя бы на пару дней заинтересуются и захотят освоить.
Ну в 6-ом классе изучая паскаль и бейсик я всё задавался вопросом: «А когда же начнётся реальное программирование?», так что да С и С++ лучше, они ближе к реальности. И предлагать начинать изучать программирование с искусственных языков, это как начать изучать историю с детских сказок, говоря что это история. В результате будет просто много заблуждений… как мне кажется…
Что именно «Вы» называете программированием? Клепать никому не нужные медиа-плееры? Или понимать как строить\использовать алгоритмы, понимать парадигмы, заниматься архитектурой программы и т.д? Если первое то не важно какой язык, но С++ лучше т.к. он более «модный». А ежели второе, то лучше тот, который меньше отвлекает на синтаксис(как уже многие тут упомянули)
Блин так и я про то.
Но чаще всего те кто преподают бэйсики и паскали мало чего скажут о парадигмах, а вот С и С++ без этого никак. Можно даже найти клёвые открытые программы и посмотреть как разрабатывают профи, а их больше на С и С++.

Да ладно, никак. Программа на «школьном» Паскале «компилируется» в программу на Си, чуть не в редакторе через «поиск и замену». Или при такой «компиляции» из програмы «без парадигм» вдруг получится программа с ними?
<ИМХО> Вот и я думаю… Больше 30% проголосовали за С/С+. Эти люди хотя бы представляют себе средний уровень нынешнего школьника? Да 95% школьниками это программирование, простите, нафиг не нужно. А остальные 5% и так сами все выучат. А если начнут преподавать С++, то тем 5% все-равно будет скучно на уроках, пока учитель будет работать с остальными. Поэтому, я думаю, что лучше учить Pascal, который хотя бы половина школьников поймет хотя бы на начальном уровне. </ИМХО>
По моему вы слишком недооцениваете детский мозг и его обучаемость. В школе, я мог за час впитать такой багаж знаний, который сейчас буду впитывать день. Я мог создать более широкое представление о предмете, запомнить все тонкости, запомнить механизмы, иметь более четкую картину у себя в голове, чем сейчас.
Я бы бы рад чтобы у меня в школе было программирование, а не рисование таблиц в экселе.
Более того, я был бы счастлив, если бы в школе учили программировать именно на C или C++.
Конечно, программированию нужно учиться не с 1-го класса, нужно сначала дать детям время вникнуть в устройство компьютеров, ОС, основной софт, алгоритмы и т.д. а уже потом творить.
Но, программирование я бы не стал давать всем детям. Я бы разбил детей на группы по их желанию, одной из которых было бы программирование. Зачем грузить детей тем, что им не дается и не интересно?

>Зачем грузить детей тем, что им не дается и не интересно?

Я бы так кроме математики и информатики вообще бы ничего в школе не изучал.
Психи, чистые психи.
Давать детям лютый свирепый системный язык из 70-х или спагетти по-страустаповски можно только из глупости или садизма.
Сложно выбрать худший вариант первого языка, чем си и тем более плюсы.
Я вот искренне считаю, что в школах стоит изучать Python. Потом, при написании всяких алгоритмических вещей на тех же C/C++, питон шикарно показывает себя как инструмент для прототипирования, что позволяет опираться на него, например, при тестировании правильности подхода.
Мне тоже кажется, что питон приучает к аккуратности кода и мысли, но не через ожоги о segmentation fault.
Думаю, это неплохой вариант. Но не раньше лет 15-ти.
Ну наконец-то, а почему нет lisp или scheme в списке? Я тоже считаю что начинать надо с одного из них. Компилируемый язык в школе ни к чему. И уж точно не С/С++.
Pascal конечно — он и задумывался как язык для обучения. Простой и в то же время строгий. Для основ алгоритмизации и процедурного программирования лучше не придумать. Странно наблюдать так много людей, голосующих за Си. Си — это не такой уж и простой язык для начинающих.
«Строгость» выливается в то, что школьники большую часть времени тратят на борьбу с ним, поиск ошибок (в «замечательных» IDE) и печать абсолютно избыточного кода. Параллельно усваивая нелепые с точки зрения современных си-подобных языков концепции.

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

Школьнику эта воможность не нужна даже даром

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

А какая школьнику разница?
Исполняемый файл действительно дает ощущение «самостоятельной» программы, которую создал лично ты, и можешь запустить где хочешь. Хотя, может быть, стоит приучать смотреть на вещи шире. Я начинал в школе с Дельфи, и потом долго не мог избавиться от пренебрежения к консольным программам. Они казались «неполноценными» в отличие от настоящих программ «с кнопочками»
> которую создал лично ты, и можешь запустить где хочешь.

разве что голую консольную. для остального библиотеки и т.п.

> Хотя, может быть, стоит приучать смотреть на вещи шире.

именно :) банальное «скачайте и установите питон дома» не сложно :)
Я начинал с QBasic (это урезанная версия MS QuickBasic, которая идёт в составе DOS), и он не позволял создавать исполняемый файл. Это меня жутко бесило, потому что я мог писать прикольные консольные программки (с графикой, анимацией и музыкой было жутко интересно писать и производило должный wow-эффект на одногруппников), мог запускать эти программки в интерпретаторе QBasic, но никак не мог понять, как из этого получить отдельную программу. Тогда это казалось какой-то магией.
А мы Турбобейсик гоняли. Он даже в exe умел компилировать.
Я глядел позже на него. Не впечатлил уже как-то :)
Ну для QB тоже был компилятор. Кажется, в версии 4.5. Помню, тоже нарадоваться на exe-шники не мог :)
Есть Qbasic в составе дос и есть QuickBasic (та самая версия 4.5) отдельно. Вот последний умеет создавать бинарники и т.п.
Нельзя ведь прийти к другу и сказать, мол, скачай и установи себе Питон, чтобы я показал тебе мегаигру, которую написал сам. Он скорее линейку себе скачает.
Можно вместе с игрой принести и питон, а то и вообще упаковать всё в один файл.
Это можно сделать одной кнопочкой так же, как это делалось в QuickBasic? Нет? Fail
питоновкую программу можно запаковать в исполняемый файл вместе с интерпретатором — например www.py2exe.org/
Одной кнопкой? Или школьники должны покурить маны, чтоб это сделать?
Как может быть статическая типизация проще динамической?!
Избыточный код это видимо begin и end вместо { и }?
для паскаля существует отличная IDE TPX, которая работает под ДОСом, имеет отличный отладчик и идеальную справку (по всему что есть в языке, написанную простым и понятным даже школьнику английским языком)
борьба с языком — вы о чём, можно совершенно свободно стрелять в ногу, писать в произвольное место памяти, но при этом это делается явно, а не случайно или по ошибке (как в СИ, который обязательно надо учить после паскаля)
нелепые концепции — приведите хоть одну

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

в питоне нет указателей и работы с памятью, адрессной арифметики, поэтому объяснять связанные списки итд на питоне вообще не выйдет
в питоне куча модулей и щепотка документации на них
Например, зачем отдельно procedure и function?
Почему я должен объявлять переменные до тела функции, а не внутри, и для ввода новых постоянно бегать туда-сюда?

Питон позволяет легко и красиво писать простые консольные программы. На нем очень хорошо можно учиться реализовывать те или иные алгоритмы.
Модулей там действительно куча. Но для общих целей нужны лишь немногие из них. А если понадобится что-то специфическое — то наличие модуля для этого скорее преимущество, чем недостаток.
Да, отсутствие С-подобного for и мне кажется неудобным. С другой стороны, концепция «цикл есть перебор всех значений» представляется мне довольно естественной.

И проблем с документацией к основным стандартным модулям питона я ни разу не испытывал.
Например, зачем отдельно procedure и function?

Очевидно же, чтобы чётко разделить и дать понять, что функции — это то, что производит какие-то вычисления, а потом их возвращает, а процедуры — это что-то вроде набора действий, которые требуется выполнять неоднократно.

Почему я должен объявлять переменные до тела функции, а не внутри, и для ввода новых постоянно бегать туда-сюда?

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

отсутствие С-подобного for и мне кажется неудобным

Да тут вообще без комментариев…
А если результат возвращается чере аргумент — это функция или процедура?

Естественно, переменные надо вводить не просто так, чтоб были)
Но если функция достаточно большая (а далеко не всегда стоит ограничиваться функциями на 10 строк), то пачка переменных, каждая из которых непонятно где и когда будет использована вызывает ужас.
И довольно часто по ходу написания оказывается, что нужна еще одна переменная. Или, наоборот, после написания конструкции становится видно, что от переменной можно избавиться.
Объявление переменных рядом с использованием помогает указать, как они используются.
По хорошему начинающему программисту надо прививать правильные методы разработки.
Т.е перед тем как сесть и написать код, надо составить блок-схему или хотя бы в текстовом виде описать алгоритм. Тогда все переменные будут известны заранее.
+Именование переменных. Сразу отбивается желание писать k1, k2, p1, p2 итд. переменные.
Да-да. В ШАДе запрещают однобуквенные переменные. Придумайте, пожалуйста, хорошее не-однобуквенное именование переменных для, например, алгоритма Евклида:)
Название переменной должно указывать на её назначение. Место объявления — на место использования.
И заранее расписывать алгоритм до уровня отдельных переменных нужно далеко не всегда. Более того, на практике при обучении (например, владимирский гос. университет) рисование блоксхемы на 1м курсе было для меня самой сложной частью задания, и выполнялось уже после написания программы:)
Вы хотите, чтобы дети а) научились правильно составлять алгоритмы, или чтобы б) на выходе у них получался «совершенный код», чтобы другим детям в детской команде было проще читать его, когда они следают клон своего детского репозитория детского проекта?
Не обязательно совершенный. Но если с самого начала учить писать более-менее аккуратно — от этого станет легче всем, в том числе и детям — в плохо написанном коде даже из 50 строк найти ошибку весьма нетривиально.
Ну так вот в паскале даже объявления переменных в одном месте. А попробуйте найти в питоне, что где объявлено.
А зачем в питоне искать, где что объявлено?
В плохо написанном на питоне коде чёрт ногу сломит.
В плохо написанно коде чёрт ногу сломит.
Просто на питоне новичку чуть сложнее написать плохой код. Ибо как минимум отступы придется ставить правильно.
Отступы — это не панацея :) Я своим утверждением про плохой код приравнял питон к паскалю (ибо до этого Вы точно то же сказали и про паскаль), сейчас же Вы снова начинаете говорить, что питон нереально круче из-за отступов. Отступы не помогут объявлять где попало переменные.
В паскале нужно сваливать все переменные в кучу, а не разносить по коду.
В паскале можно не ставить отступы, делая код еще менее читаемым.

Отступы не являются ни единственным, ни основным преимуществом. Просто одним из.
В паскале нужно сначала подумать, а потом написать. А в питоне какая-то мысль в голове родилась — можно начинать писать! В процессе какой-то косяк, ибо не учёл что-то? Ммм, ну ладно, вот тут добавлю-ка флажок, а тут сделаю хак. Ой, вот блин, какая-то ошибка… Ах да, язык-то динамический. Сча ещё вот тут добавим кое-что, а тут перепишем кусок. Ой, а для чего это переменная была нужна? Не помню уже… пусть повисит пока.
В паскале тоже можно сразу начинать писать, по ходу дела дописывая переменные.
Причем если по ходу дела какая-то переменная перестанет использоваться, то мы узнаем об этом в лучшем случае от компилятора — «unused variable».
Собственно, за счёт того, что для добавления переменной придётся вернуться к самому началу функции, ты ещё пять раз подумаешь, прежде чем это сделать. И если переменная всё-таки нужна, то в следующий раз попытаешься получше продумать то, что собрался написать.

Это как касты в С++. Не случайно ведь вместо (void*) нужно писать reinterpret_cast<void*>. Семь раз отмерь — один раз отрежь.
Ничего подобного, или ты думаешь вводить ли новую переменную, или не думаешь. Нажать пару раз PgUp это не препятствие к вводу, как и отсутствие необходимости объявлять их вообще не поощрение вводить их бездумно.
Ну Вам может и не препятствие. А меня напрягает.
А на C++ плохой код даже проще получить.
Ну да. И чё?
Как правильному составлению алгоритмов поможет объявление всех переменных в одном месте?
Это поможет порядку в голове, а не алгоритмам.
Порядок в голове поможет объявлению всех переменных в одном месте — так точнее.
Но при этом порядок в голове не является ни необходимым, ни достаточным условием для того, чтобы объявление переменных в одном месте не причиняло неудобств.
(facepalm)

Вы вот сейчас про школьников всё говорите, или просто «всяк кулик своё болото хвалит»?
Я считаю, что объявление всех переменных в одном месте сильно мешает.
Оно мешало мне, когда я в 5м классе начал учить Паскаль, и вплоть до 10-11, когда я перешел на С.
Мешает чему?
Мешает писать код.
Я не хочу осуществлять декомпозицию до уровня отдельных переменных на этапе написания кода. У меня есть примерное представление, что должно быть написано — и я это пишу. Если по ходу написания вижу, что что-то сделал не так — не отходя от кассы переделываю.
При проектировании заранее будет всё то же самое, только не с кодом, а со схемами (или что использовать при проектировании).

Кроме того, объявление переменных в одном месте мешает читать код. Если переменная используется в середине функции, то нам придется возвращаться к объявлению, чтобы узнать, что это за переменная.
Ну я вижу, что Вы приверженец парадигмы «пиши код блядь!». Но всё же считаю, что в школе дети должны развивать память, логическое мышление и т.д., а также систематизировать свои знания в голове.

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

Аналогично с программами. Требование объявлять переменные заранее никак не способствуют появлению порядка в голове
Ну, значит, я уникал! fuckyeah.jpg.to
Не понимаю, пример можете привести? Вот как он нарушает порядок в голове я могу представить. Читаю код функции на полсотни-сотню логических («значимых») строк, в начале объявление десятка-другого переменных (всего с сотню-другую «физических» строк). Иду глазами по коду, встречаю какую-то переменную, возвращаюсь сначала глазами наверх, а потом скролю, чтоб посмотреть какого типа переменная, не инициализируется ли она при объявлении и не изменилось ли её значение раньше (напомню, считается, что средний человек может оперировать «в уме» 6-7 объектами одновременно, не более). Неужели это способствует порядку больше, чем на одну строчку выше первого использования переменной (а то и в той же строке) увидеть и тип, и начальное значение?
Код функции на сотню(!) строк?! ЩИТО?! ))
> Очевидно же, чтобы чётко разделить и дать понять, что функции — это то, что производит какие-то вычисления, а потом их возвращает, а процедуры — это что-то вроде набора действий, которые требуется выполнять неоднократно.

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