Pull to refresh

Comments 1046

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

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

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

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

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

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

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

Хотя да, я такой наивный…
А лучше статически типизированным, чтобы не было ошибок времени выполнения.
Благодаря отсутствию ошибок времени выполнения в статически типизированном С на первом курсе у нас даже был «клуб любителей сегфолта».
Пардон. Должен был сказать, что подразумеваю Haskell и ему подобные языки с выведением типов (type inference).
Да чтоб ваши дети в школе учили яву и Си в качестве первого языка, блин.
кстати про яву — представил себе урок:
Учитель: «А сегодня, дети, мы будем учиться настраивать маппинги через xml для hibernate» :-)
Видимо добряки не нашли в списке бреинфак, поэтому и выбрали С\С++.
Ну вот у меня была Java в школе. И это было очень кстати.
Что это за школа такая, что Java преподают?
У меня тоже была. Не первым языком, правда.
У меня первым языком в школе был Си. По книжке Кернигана и Ричи.
Те кто отвечают «С\ С++» либо психи, либо вундеркинды.
И я так говорю не потому что я ненавижу С\С++(я их люблю ;)), а потому что он слишком сложен для старта.
Паскаль можно, но лучше Лого… Хотя все же нужно уточнять, «в школе» это с какого класса?
Если с 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"

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

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

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

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

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

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

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

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

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

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

В школах лучше бы набирать на клавиатуре вслепую десятью пальцами учили, чтоб потом не тыкались двумя-тремя бухгалтера/секретари/юристы/программисты всякие.
Программирующего на С нельзя научить ассемблеру?
Сложнее, чем наоборот.
Если программирующему на ассемблере объяснить C, но запретить пользоваться goto, ему долгое время будет очень неуютно. Почти как с машины Тьюринга переучиваться на brainfuck.
UFO just landed and posted this here
Нету такого числа среди вещественных. Да и вообще ни в каком поле (кроме тривиального, состоящего из одного только нуля) у нуля нет обратного.
X*0 = X*(0+0) = X*0 + X*0
X*0 — X*0 = X*0 + X*0 — X*0
0 = X*0
Для любого X. Таким образом, нельзя умножить ноль на что-то и получить не ноль.
UFO just landed and posted this here
Да, например, в комплане бесконечность можно ввести очень гармонично, и она хорошо смотрится на сфере Римана.
Тем не менее «деление» по умолчанию предполагает поле. А в полях делить на ноль нельзя (см. выше доказательство).
Я не совсем в тему, но не подскажите ли какой-нибудь литературы по математике чтобы можно было популярно изучить и понять её суть во всех подробностях для нематематика. Заранее спасибо.
Николя Бурбаки, «Элементы математики». Однако имейте в виду, что к окончанию чтения нематематиком вы уже не будете. 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 — крайне спорная и, вообще гоовря, несуществующая алгебраическая структура.
Зависит от определения.
Есть определение «существует единица», есть — «существует единица, не равная нулю».
В частности, на мехмате кафедра алгебры пользуется вторым, а кафедра теории чисел — первым)
Да, одноэлементное кольцо многими из стандартных свойств поля не обладает. Тем не менее оно удовлетворяет всем аксиомам поля, кроме 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, вообще моветон.
Вы, наверное, путаете разработчика, не понимающего указатели и не способного понять.
UFO just landed and posted this here
То есть не надо изучать программирование вообще?
Вполне возможно, что не надо. Основы комп. грамотноти, основы сетей, логика и — главное — безопасность личной информации
UFO just landed and posted this here
Школьникам с 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, когда я перешел на С.
Мешает писать код.
Я не хочу осуществлять декомпозицию до уровня отдельных переменных на этапе написания кода. У меня есть примерное представление, что должно быть написано — и я это пишу. Если по ходу написания вижу, что что-то сделал не так — не отходя от кассы переделываю.
При проектировании заранее будет всё то же самое, только не с кодом, а со схемами (или что использовать при проектировании).

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

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

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

Теперб берем школьника, у которого есть, блин, математика уже в достаточно большом объеме. Который уже знает, что такое функция, и что она делает. Нахрена его обучать не имеющим отношения к этому знанию сущностям?
Ох, зря Вы с этой стороны подошли ;) Потому что если школьник уже знает, что такое функция в математике, то нахрена ему питон? Логичнее начать со Scheme или Haskell.
Именно :)

Помнится, меня, как школьника сильно ломал этот переход н совершенно нематематическое представление о функции в Паскале
А я, кстати, никогда эти понятия не отождествлял почему-то.
У меня математиа хорошо была, а программирование не очень. Потом все поменялось :)

(извините за мат и кривой код на сях)
Begin/end, if...then, := — это избыточный код, который не дисциплинирует, а только загрязняет код.

Сколько еще будем под ДОСом сидеть?
Под борьбой с языком имел ввиду как раз использование убогих IDE. Не знаю, что такое TPX, может там и попроще.

Концепции:
1) Присваивание возвращаемого значения «имени» функции
2) Арифметика аж в трех видах — операции, операции в виде слов (DIV) и процедуры(!) — inc()
3) Объявление массивов

Питон — сборник самых разных концепций, многие из которых совершенно не обязательно использовать.

Если нужна адресная арифметика — ANSI С, пожалуйста. Зачем тогда паскаль? Вот что кстати действительно дисциплинирует.
Begin/end, if...then, := — это избыточный код, который не дисциплинирует, а только загрязняет код.

Плохому программисту клавиатура мешает? Языки нельзя сравнивать тем что в одном одна идиома записывается короче чем в другом. Опять таки — словесная запись ближе к концепции literate programming, а её знаете ли не случайно придумали.

Сколько под ДОСом — да собственно сколько угодно, ДОС гораздо ближе к железу нежели популярные ОС, а значит и для обучения программированию подойдёт лучше.
TPX это штатная IDE Turbo pascal 7.0 для расширенного режима DOS.

1) Присваивание возвращаемого значения «имени» функции

собственно какая проблема, отсутствие return? Вы в этом видите какой то дурной стиль? Да это не похоже на Си, но это не делает такой вариант чем то хуже чем Си
2) Арифметика аж в трех видах — операции, операции в виде слов (DIV) и процедуры(!) — inc()

и что здесь такого? инкремент не обязан быть частью языка (его вообще может не быть), а его оформление в виде функции снимает вопросы с последовательностью исполнения ( a+++b помним же? )
о наличии в функции fmod видимо просто не знаем?
3) Объявление массивов

это вообще как понимать? в Си точно так же с массивами, один в один

Адресная арифметика в Си сплошь и рядом, из за этого получаются всякие баги при работе с строками и динамическими массивами, которые бывает тяжело ловить и тяжело объяснить. Работать со всем этим приходится сразу (какая же консоль без строк?), а изучать — уже после освоения основ языка, что негоже.
И да, просто дисциплинированный программист это выдрессированный code monkey, не более. Настоящий программист знает почему хорошие практики хороши, и какие им есть альтернативы, а этому без шишек не научиться.

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

Если вы учите (простым) алгоритмам с понятием Абстрактной Вычислительной Машины и т. д. это 100% роль Питона. Не случайно псевдокод из книги Кормена «Алгоритмы» устойчиво питонизируется от издания к изданию.

как работает компьютер

Паскаль существенно дальше от работы компьютера, чем ANSI C. Вот именно так он и работает, хотите работу компьютера объяснять с «шишками» — берите его.

По поводу пресловутой сложности объяснения инклюдов, \n и т. д. — уже уши вянут, честное слово. Ниже в тредах подробно обсуждается.

Я не утверждаю, что C должен быть первым. Просто я не вижу места паскалю среди различных направлений обучения, тем более, как язык «для всего».
Ваша аргументация по поводу синтаксиса не лучше моей. Однако я ставлю вопрос — почему это синтаксис вдруг стал значимым критерием языка.

С концепциями — вы придираетесь к мелочам и находите проблемы там где их нет.
В питоне нет нормальных циклов, их заменяет анонимный итератор, который получается как результат функции, вы это школьникам объяснить сможете? а это одна из основ языка, у вас не будет фундамента знаний на котором вы построите своё объяснение. Вот это я называю проблемой, а наличие procedure и function не есть проблема, практика показывает что так оно даже понятнее чем void foo()

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

Паскаль существенно дальше от работы компьютера, чем ANSI C. Вот именно так он и работает, хотите работу компьютера объяснять с «шишками» — берите его.

Чушь несусветная, компьютер не работает ни как ANSI C ни как паскаль, оба языка дают одинаковый уровень абстракции, я гарантирую это. Это означает что допустим написать многопоточную программу под ДОС на С и на Паскале — это одинаковые по сложности и исполнению задачи.

Про сложности инклюдов и \n я не писал, это глупость, в паскале всё точно так же.

Паскалю место в направлении обучения именно как языку пригодному чтобы на нём обучали. Он проще Си при этом ни в чём ему не уступает (кроме производительности, но это уже другой вопрос). Школа не должна готовить программистов, она должна давать фундаментальные знания, и на паскале их дать проще чем на Си или питоне.
Вы не будете спорить, что программы на питоне, в конце концов, просто приятнее читать и писать? Вы считаете это незначительным параметром, я — наоборот, ОК, на вкус и цвет, как говорится.

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

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

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

ни в чём ему не уступает

на паскале их дать проще

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

А что вы имеете в виду под «нормальными циклами»? То, что «нормально» для вас, совершенно инопланетно для других.
Поэтому посмотрим на языки «со стороны», как будто мы их не знаем.

Pascal:
for i := 0 to 9 do 

Читаем и переводим: «для i присваиваем от 0 до 9 сделать...»
Python:
for i in range(0, 10):

Читаем: «для i в диапазоне от 0 до 10...»

Минус Питона: надо как-то запомнить, что диапазон включает нижнюю границу, и не включает верхнюю, «верхняя точка выколотая». Ну да ладно, и не такое бывает, выучим. В каком уж классе, кстати, используют понятие «выколотой точки»? В 8-ом, кажется…

Плюс Питона: его код переводится на человеческий язык понятнее, литературнее.
Дополнительный плюс Питона: сначала можно начать с зазубривания «запомните синтаксис простейшего цикла: for имя переменной in range(начало, конец невключительно)», а потом внезапно осознать, что range — это самостоятельная сущность.

А что с Паскалем? В нём «0 to 9» — это самостоятельная сущность? (кстати, вопрос не риторический, на самом деле интересно — просто я в своё время писал на шикарном паскалеподобном языке, в котором 0 to 9 в подобном выражении как раз был самостоятельной сущностью).
Нет, в паскале
for? :=? to? do
и
for? :=? downto? do
это языковые конструкции, и отдельно стоящий? to? смысла не имеет.

Под «нормальными циклами» я имел именно их, и именно потому что так работает компьютер.
Про красоту кода на питоне — давайте оставим в стороне, лично мене питон очень не нравится внешним видом

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

Какой компьютер? Вроде в asm-x86 есть команды для циклов типа LOOP, но вот в других (например RISC) они вряд ли встречаются и цикл развернется во что-то вроде (псевдокод):
    LD R0, 0
    LD R1, 9
    LD R2, 1
L1: CMP R0, R1
    JN L2
    ...
    ADD R0, R2
    JMP L1
L2: ... 

да и в x86 наверняка LOOP лишь «обёртка» для аналогичного микрокода. Начинаем учить детей именно так как работает компьютер, оставляем из конструкций управления только условные и безусловные переходы?
Все эти DJNZ, SOB и т.п. — обычно обертка для

DEC BX
JNZ _1

или

SUB B0,1,B0
[B0] JMP _1

и тому подобного. Циклы с проверкой условия в начале почти всегда приходится реализовывать через безусловный и условный переходы (а экономнее — через два условных). Возможно, есть компьютеры с «родным» циклом for, но я про такие не слышал.
А через два условных это как? Не могу представить, чтоб и память экономило, и циклы, либо одно, либо другое. Очень давно на столь низком уровне ни то что не писал/оптимизировал, а даже не думал :(
Нет, память оно экономить не будет, в начале пойдет лишняя проверка:
i=0; if(s=n) do{ ....; i++; }while(--s); Но по циклам выигрыш даст.
и отдельно стоящий? to? смысла не имеет.

Вполне имеет, кстати. Точно так же, как и range() в питоне, «x to y» мог бы обозначать допустимый диапазон значений числа. И использоваться как в циклах, так и в определениях типов, и т.п.

Впрочем, быстро проглядев доку на FreePascal, я вижу там т.н. «subrange types», что-то в духе «0… 9». Внимание — это разве не то же самое по смыслу? Как в «том самом языке», разве в Паскале нельзя написать Type A = Array[0..9]? И, соответственно, задать цикл как «for i in 0..9 do»?

И если нельзя, то… почему, было бы же логично?.. А если можно, то… зачем нужна форма «for i? to? do», если она даже менее читабельна, чем «for i in ?..? do»?
Паскаль или Бэйсик в качестве первого языка лучше, чем Си, по крайне мере для тех, кто жизнь с ИТ связывать не собирается. Но есть языки, имхо, лучшие в этом качестве, чем Паскаль или Бэйсик. В опросе упомянут Питон — он один из них.
С точки зрения си-подобных — да, концепции нелепы. С точки зрения функциональных и объектных (не объектно-ориентированных, не «Си с классами») — естественны.

А для Си нету кучи графических библиотек, а те, что есть все кроссплатформенные? :) Зачем для обучения давать несколько «аналогичных» библиотек, достаточно дать одну под конкретную платформу на компах в классе. А вот помню когда начинал работать собственно с растром, то изучал кучу ненужных абстракций типа «видеопамять и работа с ней», «графические режимы», «глубина цвета» и т. п.

Как это не выйдет связанные списки объяснять? В python любая переменная это ссылка или, если угодно, указатель.

Pascal конечно — он и задумывался как язык для обучения…

… 40 лет назад. А 20 лет назад для этого задумали другой язык — Python. И в нём есть плюшечки вроде массивов, размер которых можно задать за пределами compile time, алгоритмов (скажем, сортировки), которые не надо реализовывать для каждого типа данных (шаблоны в C++ и generics в Java для деток неподъёмны) и т.п.
… и это, конечно же, всенепременно нужно изучить с самого начала, да?
Нет, нужно объяснять детям, что если они хотят написать сортировку 10 целых значений, то это одна программа, а если 20 строк, то это совершенно другая. Или предлагаете сразу давать enum и malloc?
Никто не умрёт, если дети напишут две отдельные функции для сортировки чисел и строк. Повторенье — мать ученья. А если копипастом будут это делать, то с большой вероятностью ещё и выгребут ошибки, возникшие в результате, «набьют шишку на лбу» и запомнят этот урок надолго.
И дети запомнят, что программирование это тупое занятие, при котором на каждый чих нужно заново писать новую программу, так?
Учить сортировать строки чем-то вида a<b в общем случае плохо. Нужно понимать, что сревнение числе и строк выполняется по разному.

Вот, к примеру, разные функции сравнения целых разной размерности — вот это уже проблема.
Было бы интересно узнать, в чем он выигрывает у Лого, Паскаля или Скретча.
Он еще жив??? Уже лет 20 про него не слышал. Хотя у меня он был 3-м языком (после машины Тьюринга и языка калькулятора БЗ-34).
C/C++ среди языков — это как гоночные болиды среди автомобилей. Нельзя с них обучение начинать.
UFO just landed and posted this here
причем не просто ассемблер, а DEC'овский! :)
В ассемблерных вставках.
Pascal — пережиток прошлого, в современных реалиях никому не нужный. Уверен, что большинство проголосовавших отдали свой голос по одной причине — на этом языке их самих учили в школе, как и меня.

Java, C/C++ — хорошие языки, полезны в профессиональном будущем; но достаточно сложны и имеют слишком много нюансов, чтобы использовать их в качестве «введения в программирование». Разве что в классах/школах с уклоном в IT.

Python — прост в освоении, часто используется как язык прототипирования, и imho позволяет преподать основы программирования, концентрируясь на собственно алгоритмах и работе с данными, минуя многие детали имплементации — то есть как раз то, что в школе и нужно.

Еще один вариант, которого в опросe нет: в моем универе на первом курсе информатики преподают программирование, начиная с диалекта Lisp (Schemе, он же Racket). Плюс — уравниваются знания почти всех начинающих студентов, так как даже если у кого-то ужe есть опыт программирования, с Lisp'ом все равно сталкивались единицы, и к тому же начало с функционального программирования отлично готовит к более сложным алгоритмам и другим языковым парадигмам.
Трудное детство — это не аргумент при выборе языка. Здесь никто не говорит про язык, который жизненно будет необходим школьнику в дальнейшем. Больше половины все равно больше никогда на компьютере ничего кроме браузера, пасьянса и ворда не откроют.
Меня в детстве учили на бейсике. В первом ВУЗе учили на паскале. Учили плохо. Я не понимал для чего эта ерунда, добросовестно писал примитивные программки, считавшие частичную сумму ряда, рисовавшую что-то на экране. В другом универе мы на паскале реализовывали алгоритмы из соответствующего курса, а еще через пару лет стало ясно, что это самый подходящий язык для начального обучения людей, которые ничего раньше не имели общего с программированием. Достаточно строгая типизация, жесткая структура программы не заставляют изучающих думать о том, о чем им думать пока не нужно.
Попытайтесь объяснить школьнику или новообразовавшемуся студенту работу программы, которая на сишнике считывает два числа и выводит сумму. И при этом избежать шаблонных отмазок «это вы потом пройдете, это вам пока не нужно знать» и т.д. И посмотрите насколько он понял все это. А то что можно char целочисленной переменной присвоить, что в си bool вообще нет, а в с++ любое ненулевое число означает true, многим сразу не понятно и вызывает кучу ошибок на первых этапах. Я уж молчу про хакерские приемы вроде копирования строк с помощью одного while.

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

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

А вот C/C++ и Java вообще не понятно как попали в языки для обучения.
Эээ, вероятно нужно было уточнить в какой школе — начальной, средней или старшей.
Я за Logo например — причем в классе так 5-том уже начиная или что-то аналогичное визуально.

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

А потом уже любой язык, который является мейнстримом на текущий момент — и то по хорошему с возможностью выбирать.
Pascal, тут и говорить нечего.
Нет косяков, которые ВНЕЗАПНО всплывают в C++, при этом язык простой и таки строгий.
Python — я бы все таки начинал со статической типизации, к тому же есть проблемы, связанные именно с динамической типизацией (Многие ошибки появляются уже во время выполнения).

Basic — тут вообще аллес. Лого — для познания азов алгоритмов подойдет.
Многое зависит от преподавателя — если преподавать C++, сразу начиная с STL и многих вещей (Привет, Эккель), то можно начинать и с него, но порог входа все равно солидно выше Pascal.
Pascal — нет косяков? По-моему, вы шутите… Их конечно меньше, чем у языков, которые позволяет делать намного больше, но они есть.
Не помню ни одного глупого бага, из-за которой компилятор падал с непонятными ошибками.

В C++:
std::ostream operator<<(std::ostream& os, something a);
компилятор выдает ошибку с совершенно левыми причинами, если нет гугла под рукой, можно сесть на пару часов.
Сразу таких серьезных косяков в компиляторе Паскаля не вспомню, но в средах разработке в «отладчике» часто показываются не правильные данные (причем, после перезапуска среды, все работает нормально).
Да, такое бывает, но достаточно редко, в Turbo Pascal такого не видел, хотя и работал мало.
Free Pascal же грешит этим, но развивается.
Хорошие, понятные, сообщения:
$ cat a.cpp
#include <iostream>

struct A { };

std::ostream operator<<(std::ostream& os, A a)
{
  return os;
}
$ clang++ -c a.cpp
In file included from a.cpp:1:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/iostream:39:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/ostream:39:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/ios:44:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/basic_ios.h:472:
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/basic_ios.tcc:178:25: error: base class 'std::ios_base' has private copy constructor
  extern template class basic_ios<char>;
                        ^
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/ios_base.h:787:5: note: declared private here
    ios_base(const ios_base&);
    ^
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/ostream.tcc:360:25: note: implicit default copy constructor for 'std::basic_ios<char>' first required here
  extern template class basic_ostream<char>;
                        ^
a.cpp:7:10: note: implicit default copy constructor for 'std::basic_ostream<char>' first required here
  return os;
         ^
1 error generated.


Причём «base class 'std::ios_base' has private copy constructor» подсвечено ярким. Покажите ужасное сообщение вашего компилятора.
в принципе, сейчас я прекрасно понимаю, в чем проблема.
С другой стороны, может ли школьник разобраться в этой ошибке?
> в принципе, сейчас я прекрасно понимаю, в чем проблема.
Но вопрос был в том, насколько ужасны диагностики в компиляторах. Насколько хуже в вашем?

> С другой стороны, может ли школьник разобраться в этой ошибке?
А зачем школьнику перегружать операторы?
>А зачем школьнику перегружать операторы?
Считаю, что за три-четыре года вполне можно дойти и до перегрузки операторов.

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

Или вот:
struct mas
{
float x;
};

// ...
mas *points;
Ну, если уж в ВУЗе многие не понимают, то в школе дети, 99% из которых не будут в будущем программированием заниматься, вообще «положат болт».
Вы — студент и изучаете C++. Вам нужны все тёмные уголки C++. Школьники изучают «программирование», это как курс алгоритмов, но приходится ещё в нагрузку давать какой-то язык чтобы можно было на ЭВМ работать.
Здесь соглашусь.

С другой стороны, работа с массивами в C++ гораздо менее приятна, чем в Pascal (Если уйти от std::vector, я пока никого из школ (не специализированных программистских) со знаниями о STL не видел, всем говорили — «пишите свой»).

Во free pascal — все массивы — динамические. Я легко могу менять длину массива при помощи setlength, что явный плюс. В c++ — либо выделить памяти столько, сколько нужно, при переполнении — перевыделять, то есть всегда нужно за этим следить).
Выход за пределы массива тоже не контролируется никак в C++, а это одна из самых часто распространенных ошибок новичков.

Строки мне больше нравятся в C++, хотя в Pascal реализация довольно таки приятная.

Собственно, в Pascal, мое сугубо ИМХО, количество возможных ошибок на строку кода раза в полтора-два меньше, чем в C++. В 80% случаев, если я что-то делаю не так, Pascal просто не компилирует программу, C++ запускается, рушит кучу или пытается обратиться к nullptr.
Я, конечно, программист тот еще, но абсолютному новичку бы не стал советовать C++.
И что школьник должен подумать, увидев такое сообщение?
Если школьник перегружает операторы, то тут почти всё понятно.
Утверждаете, что это одно и то же?
[sarcasm]Ну да, ведь и там, и там — виртуальная машина.[/sarcasm]
А-а, ну тогда и actionscript туда же.
UFO just landed and posted this here
Абсолютно все равно какой язык учить, если есть понимание, что язык — есть средство реализации тех или иных алгоритмов. На мой взгляд, чем меньше первый язык будет отвлекать внимание ученика от реализации алгоритма переключая его на синтаксис, тем проще будет ученику понять основу. Первый язык должен помочь справится созданием программной абстракции.

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

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

П.С. Первым у меня был Бейсик, вторым Паскаль. Ну а про лого узнал где-то к концу восьмого класса. Мне кажется что логичным был бы несколько иной порядок:

1. Какой нибудь простейший автомат типа муравья на клетчатой бумаге (вперед, повернуть направо/лево)
2. Лого как продолжение автомата
— — К этому моменту есть понимание основ составления и использования алгоритмов.
3. Паскаль/Си/Джава/Шарп (на приемлемой и понятной объектной модели)
— — Наверное к этому моменту школа кончится и начнется ВУЗ
4. Паскаль/Си/Джава/Шарп составление своей и/или изменение существующей модели
— Или здесь начнется ВУЗ, что будет явно лучше, так как у абитуриента будет общее представление об объектной модели
5. Асм вставки (для понимания во что преобразуется код)
6. Асм (для понимания как работает компьютер и программное окружение ОС)
7. Выбор первого ОСНОВНОГО языка и его углубленное освоение
— — а здесь вуз закончится
8… и пошире крутить головой вправо влево, проявляя детское любопытство даже в старости

А вообще информатике сначала нужно учить детей. На книжках типа Бауэра и Гооза.

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

П.С. Мне кажется что на выходе из школы ребенок не должен уметь программировать на каком то языке.
Он должен уметь строить модели, алгоритмы и иметь представление о действиях по их реализации при помощи инструментальных средств программирования.
UFO just landed and posted this here
Да, с Вашим аватаром как раз надо JS рекламировать:-D
Кстати да, а почему нет Javascript. Ну очень простой и проги можно хоть в браузере запускать.
Простота — это хорошо. Как бы потом горе-программисты не стали думать, что все программы в браузере запускаются. Кроме того, если я верно себе представляю, с помощью исключительно JS не используюя хтмл тяжело организовать ввод-вывод данных.
Мы про школу говорим, а не про горе-программистов :-\
Горе-программисты как раз и могут получиться из школьников, которых испортили неумелым преподаванием.
Ключевое слово — преподавание, а не язык, на котором преподают
Все верно. Я лишь отметил, что предложенный вариант языка (на мой не совсем опытный взгляд) в большей степени может привести к риску появления неверных представлений о программировании и информатике у школьников.
Все зависит от преподавания, а не от языка. От неумелого учитель, который не знает, что такое C/C++/Java/Python/etc. неверных представлений появится не меньше
О, кстати это важный момент, который упустили практически все холиварщики в треде. Вряд ли хороший специалист станет преподавать детям в школе программирование. Всем денег подавай и интересным проектов. Есть конечно всякие альтруисты, но вряд ли их на все школы хватит.
UFO just landed and posted this here
Не плодите сущностей без необходимости (с) Оккам
UFO just landed and posted this here
Нет, конечно. Я ведь изначально выразил мнение, что JS не очень удачный выбор.
Выше много говорили про потребность в том, чтобы с ранних лет прививать аккуратность. JS позволяет не задавать тип переменных. Если привыкнут, потом тяжело будет объяснять, что в с++ нельзя просто написать var x=2, да и вообще концепция типов многим возможно будет непонятна.
UFO just landed and posted this here
UFO just landed and posted this here
Эта цель универсальна для любого предмета — чтобы детям понравилось, захотелось еще и еще изучать. Если бы все педагоги старались ее придерживаться, страшно подумать насколько бы мы обошли по уровню образования всех. Однако преподавателям приходится балансировать на границе между «это скучно, но зато все верно» и «это весело, но слишком поверхностно и далеко от полного понимания».
Но чем в таком случае JS лучше псевдокода или паскаля или питона? Выходит, что если хороший учитель, то разницы на чем он будет учить детей программировать — нет. Если же он плохой, то никакой даже самый адаптированный для школьников язык не спасет ситуацию.

Мне вот сейчас стало интересно — а с какой целью автор поста устроил этот опрос?
UFO just landed and posted this here
В C++0x можно написать
auto x = 2;
:)
В любом почти языке можно много чего написать. Но не все же можно сразу школьникам показывать (да и студентам, если уж на то пошло). Надо начать с тычинок и пестиков.
:)
Ну да, auto легко использовать, но не слишком легко понять, что же он на самом деле делает. Просто утверждение «в с++ нельзя просто написать var x=2» неверно.
Не пользовался никогда auto. Не знаю на что еще он способен кроме вывода типа.
Имел ввиду я возможность в JS сделать что-то вроде такого:
var a = «3»;
var b = a * 5; // b == 15
var c = a + 5; // c == 55
Это ортогональная вещь, неявные преобразования типов (которые не мешают языку быть статически типизированным, правда обычно в статически типизированных языках таких свободных преобразований нет).
Да почему?
class CoolString {
public:
  CoolString(int);
  CoolString(char *);
  operator int();
  CoolString operator + (int);
}
CoolString a = "3";
auto b = a * 5;
auto c = a + 5;
Точку с запятой после объявления класса за Вас IDE ставит? :D

Да-да, я зануда.
Тут программист сам всё сказал. Я имел ввиду встроенные правила.
Обучать нужно не в браузере. Взять любую IDE с хорошей подсветкой синтаксиса и сделать плугин. Надо всего-то реализовать консоль, где будет работать принт и инпут. Проще всего подцепить бразер или запускать в V8 консоли. В случае браузера с синхронным инпутом будет сложность, что бы просто писать var a = input('Введите А'), там бесконечный цикл разве что ставить, но он всё убьёт, а в случае нод.жс с этим всё нормально.
Естественно нужно приложить небольшие усилия, но синтаксис языка простой, можно не ставить точки с запятой. Для обучения алгоритмам — почему бы и нет.
Вполне можно взять браузер и использовать prompt и alert.
prompt и alert(document.write) вообще то. ХТМЛ тут не нужен, разве для углубленного изучения факультативно.
Мы тут говорим как бы не про профильное преподавание программирования студентам, а про введение в курс дела, что это такое, как работает, базовые конструкции — циклы, условия.

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

А если серьёзнее — то школьникам программирование вообще не нужно. Очень тяжело оно (не) даётся гуманитариям, коих всегда 90%. Для каких то классов с мат. уклоном — нужно что то типо pascal — и дальше стандартный набор — школьные, городские олимпиады… Это все имхо очень хорошая система и ломать её java ми и python ами не нужно.

В школе изучали паскаль под дос, проблем его выучить не было никаких. Потом Delphi.
Но потом началось самое интересное — после школы самостоятельно изучить C было намного тяжелее чем если бы его сразу преподавали в школе. Из-за этого изучение C отодвинулось на три года.
Паскаль никому не нужен, он хоть и прост в освоении, но ценности не представляет.

Я за С или Python. С с девятого класса, а Python можно и раньше начинать.
В школе я пытался самостоятельно изучить C/C++, стоит ли говорить что ничего не вышло.
Я считаю, что в школе детям стоит привить компьютерную грамотность в первую очередь, Потом объяснить в общих чертах как работает компьютер, представление информации, построение алгоритмов, простейшие блок — схемки и пр.
А первым языком программирования дать Pascal.
а у меня отлично вышло. Страуструп, Майерс, пара собственных проектов в меру амбиций в 9 классе, и вот я знаю C++ на весьма неплохом уровне. Но это все частные случаи, как успешные, так и нет. Давать C++ в школе нельзя, ИМХО, лучше Python.
Следует полагать, что работает такая логика «если бы нам в школе стали сразу преподавать этот сложный сишник, я бы в вузе его сразу осилил»? А вариант «если бы в школе стали преподавать этот сложный сишник, я бы возненавидел информатику и пошел на хирурга» почему-то незаслуженно исключается.
Если бы в вузе преподавали, то проблем бы не было. Самостоятельно изучил.
Сужу по своему опыту, тем, кому информатика и программирование никуда не уперлись в школе совершенно все равно С там или Паскаль, но тем, кто реально захочет стать программистом, я считаю С или Python больше помогут.
А как усваивается материал тоже сильно от преподавателя зависит.
И снова — раз уж речь зашла о преподавателях. Почему исключается вариант, что вполне адекватный преподаватель научит нормально алгоритмически мыслить на паскале, придумывать алгоритмические решения для задач, при этом постоянно напоминая, что язык — не более чем инструмент. А затем, ближе к концу школы покажет как перейти с одного языка на другой. С этой позиции как раз таки было бы разумно не останавливаться на каком-то одном языке (для тех, кому хочется стать программистом). Но начинать азы с сишника — жестоко.
Ни одного функционального языка. Плохо.
Чистые функциональные языки представляют лишь академический интерес (чит.: интересны сферическим скучающим нердам в вакууме).
Те или иные реализации функционального подхода можно встретить во многих популярных языках.
Ну… Я не уверен, что haskell — это «чисто академический интерес». Я видел как работают программы на нём, и для языка с GC — это какая-то нереальная фантастика.
для школьного уровня — нормально.
Функциональные языки ближе к математике, которую в школе и так изучают.

Другое дело, что я не смогу сходу назвать ФЯ, пригодный для преподавания в школе
уже после первого семестра матана, я понял, что математику в школе не изучают :))

Тут уже озвучили OCaml — вполне можно с него начинать.
Выше уже сетовали о том, что не включен Lisp & Ко.

Но все-же, это не школьный уровень. Функциональные языки — это для тех, кто выберет математику и/или компьютерные науки своим будущим.

В школе нужно базовые понятия, и как не крути, императивные языки проще для объяснения этой самой базы.
> Функциональные языки — это для тех, кто выберет математику и/или компьютерные науки своим будущим.

Показываю на пальцах:

| n, n < 2
f = <
| n + f(n-1)


против

f(N) when N < 2 ->
N;
f(N) ->
N + F(N-1)


и т.п.

Функциональное программирование уже ложится на представление о мире, созданном математикой. Ничего сложного или страшного в ФЯ нет. Они кажутся сложными тем, чьи мозги испорчены императивщиной ;)

Единственная проблема, что нет ФЯ, которые были бы дружелюбны к учебному процессы :) То есть они обычно накручивают сверху всякие веселости типа монад или легковесных процессов, да все еще в консоли и т.п. :)
я не понимаю, что именно вы мне этим хотите показать, простите.

Мир гораздо более многообразен, чем его срез представимый математикой.

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

Я в курсе, и я не спорю.

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

Если вам нужны алгоритмы для жизни, то надо преподавать не программирование, а логику ;)
в школе есть смысл давать базу максимально широко. Ребенку нужно за время обучения если не понять, то хотя-бы примерно определиться, чем дальше по жизни заниматься.

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

Да, из медицинского мы их специально набираем, у нас прикладная область медицина, и знания в ней гораздо важнее в нашем случае, чем знания и навыки в программировании :)

Логику, конечно нужно, но её же хочется как-то записать? Хочется, что бы этой записи бездушная железяка выполнила действия, и доставила радость. Не?
> Логику, конечно нужно, но её же хочется как-то записать? Хочется, что бы этой записи бездушная железяка выполнила действия, и доставила радость. Не?

Хочется. Я что-то имею против этого? :) Я говорю, что ФП может подойди обучению программирования лучше, чем другие языки. Другое дело, что нет ФЯ, пригодных для этой задачи в отличие от Питонов и прочих.
Python разве не реализует и функциональную парадигму без излишних сложностей?
В принципе, да. Поэтому из всего многообразия, если уж и изучать программирование, то на Питоне.

Если бы в Питоне функция возвращала значение выражения в последней строчке, было бы вообще классно :)
Ну так Ruby есть. Тоже достаточно красивый.
Мой брат изучает Ruby, дома и в школе, на перемнах, очень помогает. Остальное слишком переполняет сознание, вкупе с текущей мозгоразрывающей учебной программой.
Python.
Лого, Scratch и Basic — это даже не смешно.
Pascal и Delphi — на мой взгляд, довольно странные языки. Они не проще С и С++, но гораздо более запутанные.
С — красивый язык, но требует довольно хорошего понимания принципов работы памяти и т.д. — по опыту, даже на 1м курсе мехмата люди испытывают сложности с осознованием того, что такое указатель.
С++, конечно, прекрасен (да простит меня Торвальдс), но чтобы писать на нем код, от которого не хочется плеваться надо знать довольно много.
А Java — ОООП (Очень Объектно Ориентированное Программирование). ИМХО, слишком специфичная вещь для того, чтобы начинать с неё.
>>Они не проще С и С++, но гораздо более запутанные.

Спорный вопрос, что легче понять обычному школьнику, который не мечтает стать программистом:
#include <stdio.h>
int main() {
    int i;
    for (i = 0; i < 10; i++) 
        printf("Hello!\n");
    return 0;
}

или
program HelloWorld;
var i :integer;
begin
    for i := 1 to 10 do
        writeln('Hello, World!');
end.
Одно и тоже но только разный синтаксис… Что значит «обычный школьник»? Он знает синтаксис языка? Да, то это одно и тоже… Ежели нет, то ему непонятны оба примера.
Представим, что мы преподаем информатку в школе. Нам дали детей, которые вообще не знают программирования, на прошлом уроке они рисовали солнышко в пеинте.
Какой из этих двух примеров нам будет легче объяснить ученикам? Не просто «оно напечатает 10 раз фразу», а так объяснить, чтобы они потом смогли сами написать что-то аналогичное.
Без сомнения, паскалевский. Попробуйте вменяемо объяснить детям суть #include, \n, return 0. Рассказывать сказки? Говорить, что это магия? Вдаваться в подробности? Нет уж, увольте. Паскалевский синтаксис гораздо гораздее в этом случае.
include. Подключает файл, благодаря которому становится возможным использовать printf. Это такая функция; что такое функция — можно (и нужно) объяснить, но чуть позднее.

\n. Строка состоит из символов. Символы бывают разные: буквы и цифры, спецсимволы. А еще бывает символ конца строки. Если его напечатать, то то, что будет печататься дальше, будет печататься с новой строки.

return 0. Есть такая вещь, как код возврата — он должен быть нулевым, если программа отработала успешно, и ненулевым иначе. При выполнении return X в main'е программа завершается с кодом возврата X.

Вроде бы более-менее нормальные объяснения. Да, не слишком подробные, но дающие базовое представление об этих сущностях.
Это плохие объяснения. Что такое функция? Что такое файл? Что такое printf? Спецсимволы? Успешно? Это как?
Заметьте, я не шучу и не троллю. Это не так легко, как может показаться на первый взгляд. Именно поэтому Си является более плохим выбором, чем Паскаль.
Объяснения для 9+ класса.

writeln — от английского write line — написать строку. var — от английского varible — переменная. Почему writeln со скобками? Очень просто. Это функция, так же как и в алгебре. В качестве параметра — у вас строка, взятая в кавычки. Зачем нужен var? var говорит компилятору что это переменные. Это как «Дано» в физике или химии
А что такое переменная?
«Молодой человек, спросите об этом Марию Ивановну, она ведь вам математику в 5 классе преподавала?»
А вообще тема «переменная» проходится чуть ли не в начальной школе.
Разве? Переменная именно как некий объект, который может менять значение.
У «переменных» в 5м классе (да и вообще в большей части математики) есть некоторое фиксированное значение. Для более строго определения нужны кванторы:)
Переменные же в программировании с формальной точки зрения — это функции, которые дают значение переменной в каждый момент времени.
Серьезно? Функция f(x) это и графики функций (из них наглядно видно как изменяя х изменяется значение f) до 9 класса должны быть известны. А переменные с фиксированным значением в 6 классе объясняют — константами зовут.

Пойдем вашим путем, будем задавать глупые вопросы. Я даже забуду про то что # есть начало директивы (именно на этом слове на школьник уставит на вас непонимающий взор) и перейду к функции.
Что такое int? Что такое main? Что такое {?
И да. Пока я вспомнил. Одним из методов решение системы уравнений есть присваивание одной переменной значения, выраженного через другую.
Простите, не понимаю.
Возможно, Вы имели в виду «подстановка выражения одной переменной через другую»?
Переменная — это просто символ (элемент множества, называемого алфавитом переменных). И что значит «менять своё значение» с этой точки зрения — совершенно непонятно.
«f(x) равно F(x), где x изменяет свое значение от 0 до 1» — означает «для всех x из отрезка выполнено f(x) = F(x)». Где f(x) — сокращенная запись, обозначающая значение функции (как известно, функция — это множество пар).

Что такое integer? Что такое begin? Что такое do?

PS. Что такое «что»?
Ви таки отвечаете вопросом на вопрос? В любом случае толсто.
А как же иначе?
В любом случае Вы первый начали:)
Хорошо, integer допустим целое. А begin и do вполне очевидно из английского. А если вы в школе не знали что такое переменная, то я хотел бы узнать сколько сейчас стоит обучение в МГУ?
Когда я поступал, мехмат стоил что-то около 200к в год плюс-минус 20.
А почему Вы спрашиваете?
А почему бы и не спросить? Считаю ВМК МГУ примерно таким же источником знаний как и МГТУ ГА. Просто хочу знать сколько распиливают. Но давайте хоть на эту тему мы не будем холиварить, хотя бы здесь.
Абсолютно не дает никакого представления, ИМХО конечно же.
Со школы не любил, когда говорили, что объяснят позже,, создается ощущение, что творишь какую — то странную магию и только один вопрос, зачем я это делаю? А если попробовать не делать, то ничего не работает.
До реального программирования стоит рассказать, как представляется информация в компьютере, то тогда детям будет понятно, что такое \n.
Так же детям стоит рассказать в общих чертах как работает ОС, тогда с кодом возврата будет много понятнее.
И про функции стоит рассказывать до их использования.
Просто ваш подход очень похож на зубрежку без понимания, «делайте так как говорят и все будет работать», а потом уже поймете почему стоит делать именно так.
Есть два варианта обучения.
1. Вот, смотрите, это работает! А давайте разбираться, как оно работает.
2. Рассказать, что есть что, а потом уже как это использовать.
Преимущество первого — он позволяет сразу заинтересовать, и при необходимости спускаться до любого уровня. С какого этапа Вы начнете рассказывать про представление информации? Общая устройство памяти? Про страницы рассказывать будете? А про схемы, на которых реализуются запоминающие устройства?
В любом случае, что-то останется черным ящиком.
Впрочем, я соглашусь с Вами — лучше до показа кода объяснить основные принципы. Меня попросили объяснить код там и там, и я повелся)
Если бы в школе мне начили парить, как работает ОС и как представляется информация в компьютере, я бы начал забивать на уроки, потому что бы не понимал, где и как я смогу это применить.

Сначала нужно заинтересовать, а потом уже вдаваться в подробности.
Сказать про #include что он «подключает файл» — это как-то напоминает магические действия «просто скажи сим-салабим и программируй». Так ли это хорошо в преподавании?
Сама концепция программ, которые внезапно даже что-то делают — это сим салабим, пока досконально не изучены парсер, транслятор, линкер и т. д.

Пожалуйста, хватит цепляться к несчастному #include. Сколько копий уже сточено по той случайности, что writeln в паскале не надо импортировать и «привет, мир» выглядит покороче.
Чем меньше магии ребенку надо зубрить, тем лучше. А то, что программа внезапно сама что-то делает — блин, так делает любая программа на компьютере, и любые шаги compile-link-run являются, с точки зрения школьника, точно такой же никому не нужной магией, которую надо зубрить
#include — это магия
compile-link-run — это магия
cout << «text» — это магия
указатели и ссылки — это магия
void main(argv**) и т.п. — это магия

и так далее и тому подобное
Сказать, что это магия. Когда дойдут до математики, объяснить про math.h, и заодно рассказать про stdio.h. Когда дойдут до функций — сказать, что main это тоже функция, и объяснить, почему. А \n рассказать сразу и честно. И тут же показать пример, печатающий полстроки, а потом две строки с двумя числами за один printf. И не меньше десяти раз объяснить, что при печати нескольких чисел в строке их надо разделять пробелами. Потому что отсутствия пробелов школьники не видят — строка 1.0000003.0000007.000000-3.500000 им кажется нормальной.
Дай бог память, в Паскале (ну или в бейсике) есть use — тоже подключение дополнительных библиотек, например графики. Принципиальной разницы между use и include не вижу.

"\n" — ну вот уж про таблицу ASCII, про перевод/возврат коретки в школе дают. Ну нам точно рассказывали. Так что не вижу проблем сказать, что это управляющий символ.

По поводу «return 0» — вот тут скорее всего что-то вроде «так надо», «обязывает синтаксис/стандарт». Но не думаю, что это очень страшно. Вся геометрия тоже на аксиомах строится. В которые просто верят (хотя геометрия проверятся «на пальцах», она менее абстрактная вещь).

И не смотря на это я тоже скорее за изучение в школе чего-то вроде Pascal и Basic, но скорее потому, что для меня эти языки четко ассоциируются с одной средой разработки, где я просто жал «run». А вот когда я слышу про C/C++ я вспоминаю такую вещь как Makefile и кучу компиляторы, в массе своей не дружественные к детям.
>Принципиальной разницы между use и include не вижу.

>вспоминаю такую вещь как Makefile

Может не разобрались просто? :)
Для начало можно можно сказать что include — это«магическое выражение», и только потом когда перейдете к созданию своих хедеров, пояснить этот момент… int main() return 0; также «магические выражение». И только когда перейдете к своим функциям возвращающим результат пояснить. А "\n" можно и вовсе пока убрать) Главное не нагружать сразу всей информацией)
Вот так и живем магией, если все состоит из магии, то это как минимум неинтересно и непонятно, каков стимул учиться дальше, если с самого начала непонятно ровным счетом ничего?
Я не знаю, меня такой подход не остановил.
если все состоит из магии, то это как минимум неинтересно и непонятно

«Гарри Поттер» в свое время был довольно популярной книжкой. Почему бы часть волшебства не добавить в реальный мир, раз уж компьютеры дают такую возможность? Их «заклинания» это тот же язык программирования.
Да Вы, я как посмотрю, знаток :) Naruto, пожалуй, не менее популярен, но там объяснили почти изначально, что для юзания скиллов есть «чакра», и что её можно особым образом перераспределять и управлять ею.
Не только синтаксис, в программе на C много больше концепций. По строчкам:
— подключаемые заголовки (и как следствие линковка)
— тип «главной» функции (плюс «магия» main)
— булевы выражения (вернее интерпретация целочисленных как булевых) и оператор сравнения (не говоря о том, что счёт от 0 до 9 мягко говоря не естественен для задачи «десять раз написать „Привет“)
— постинкремент (i = i +1 ввело бы другие концепции, не менее сложные)
— возвращение значения функцией вообще и „главной“ в частности (отчасти пересекается со вторым пунктом)

Всё это надо или объяснять зарываясь в дебри ОС, компилятора и языка, или заставить зазубрить „так надо, вы пока не доросли“.
Поздравляю, вы сдали бы контрольную по питону.
mihaild говорил именно про Си и Паскаль.
Окей, в питоне научились. Пришли в ВУЗ, а тут С++. Чё дальше?
В языке X научились. Пришли в ВУЗ, а тут Y. Чё дальше?

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

Оба поступали в технические, я уж не помню деталей.
Одни сказал, что у них сразу С++, потом Java, и это круто. Другой сказал, что да, наверное у первого круче, потому как у них сразу Smalltalk, который вообще непонятно что.

Была у меня мысль, сказать второму, чтобы он молился на Smalltalk, а точнее, на грамотного преподавателя и интересные лекции, но забил.
Жизнь все расставит правильно :)
Есть качественная разница между
for i in range(10):
print 'Hello World'

и
print 'Hello, world!\n'*10
Её детям тоже придется объяснить.
Да, в случае с С нужно ещё объяснить, что такое \n и код возврата программы. Но и всё.
Зато после этого объяснения школьник, скорее всего, сообразит, как вывести 'Hello\nworld\n'.
PS. Используйте преинкремент вместо постинкремента...)
Не сообразит. Он увидит, что программа, печатающая одну строчку, работает правильно, даже если забыть поставить \n, после чего вообще перестанет его использовать. И будет счастлив. Главное, что все нужные символы выводятся, а в каком порядке — для него неважно.
p «Hello» или 5.times { p «hello» } — пофиг, главное чтобы не gwbasic.

а на бейсике все равно короче!
Куда уж проще?
H в HQ9+ печатает «Hello, world».
А как напечатать «Hello, world!»?
Никак. А зачем это печатать?
Собственно, чтобы программа развивалась. А язык из одной команды можно изучить за 1 урок.
Уверены, что урока хватит? :)
Можно даже 2 команды за урок рискнуть :)
HQ9+ содержит целых 4 команды: H, Q, 9 и +. И на нём можно написать основные стандартные учебные программы.
Команда H выводит сообщение Hello, world!;
Команда Q выводит исходный код программы, которая выполняется (то есть, quine);
Команда 9 выводит слова стихотворения 99 Bottles of Beer on the Wall[1];
Команда + увеличивает на единицу (инкрементирует) счетчик, который не имеет никакой возможности дальнейшего применения.


Для изучения английского языка например :)
Точно урока не хватит ))
Поскольку могу писать лишь раз в 5 минут, оставлю свои мысли по этому поводу в одном комментарии.
Я начинал в школе с паскаля, это было не так давно, и после этого я пытался и до сих пор пытаюсь учить C\C++ и Python. Так что на своей шкуре могу судить как «хорошо» начинать изучение программирования с паскаля.
На самом деле, если предполагается что ученик не будет продолжать изучать программирование, и необходимо только познакомить его с общим принципом того, как это происходит, то подойдет любо язык из вышеперечисленных. Но если мы хотим чтобы потенциальные программисты быстрее и легче обучались, (а ведь это важнее, согласитесь!) лучше выбрать С\С++ или Python. В случае с С\С++ ученик сразу получает базовые знания С-подобных языков, и может легко продолжать писать дальше на любом из них, начиная с Java, и заканчивая PHP. Ну, к недостаткам такого выбора пожалуй можно отнести несколько усложненное понимание, но это ведь только на первых порах, и для потенциальных программистов не составит проблем. Нет, вспоминая то, на чем закончилось изучение паскаля в школе, я правда не понимаю возмущенных криков защитников детских мозгов. Намного ли сложнее написать программу которая переворачивает главную диагональ матрицы, или строит все возможные треугольники из заданных 4х отрезков на C, чем на паскале?
В случае с питоном ситуация тоже ничего, сложнее будет потом разобраться с типизированными языками, но в отличии от случая с паскалем, уходить с питона никто и не заставляет, и не нужно мне кричать про то, что на делфи до сих пор пишут, это вчерашний день, а для того чтоб знания полученные в школе были актуальными, они должны ориентироваться даже не на сегодняшний, а на завтрашний день. Кстати питон тут очень даже катит.
Кончил, закурил.
Для начала, вспомните, что в Паскале есть хотя бы нормальные массивы. Ну и строки — правда, это уже всё расширения Виртовского Паскаля, но тем не менее, во всех современных реализациях они есть. И таки да, не надо перекладывать свои проблемы (трудности с изучением языков программирования) на языки. Если Вам не даются C, C++ и Python — это только Ваши проблемы, Паскаль тут никак не причастен.
Ну-ну, чем массивы в паскале принципиально отличаются от каковых в С? И да, если хотите нормальной дискуссии, пожалуйста воздержитесь от голословных обвинений меня в неосиляторстве.
Видимо, под массивами в С подразумеваются указатели.
В C массивы и указатели, вообще-то, — разные вещи. И таки да, массивы с Си и Паскале таки отличаются, причём в Си — для начинающих-то программистов — не в лучшую сторону.
И чем они отличаются?
Да, разные вещи. Но очень многие почему-то называют массивами указатели:)
Неверно называют. Массив, как следует из его названия, — storage. Указатель им не является. Ну и так далее. Это фундаментально разные вещи.
Конечно разные. Массив — область памяти, выделяемая статически при компиляции, на которую указывает указатель. :)
Полагаю, имелись в виду скорее многомерные массивы.
Насчёт неосиляторства. Я Вас не обвинял. Повторюсь ещё раз: Паскаль не виноват в Ваших проблемах.
Если Вас так интересуют мои проблемы, и участие в них паскаля, так и быть, расскажу. Паскаль сам по себе нив чем как язык не виноват. Но тот факт, что на его изучение тратится время, и не малое — вот что мне не нравится. Так понятно?
На изучение всего тратится время и немалое.
Попытка сэкономить, изучая сразу промышленные языки приводит к небходимсти платить дважды — сначала компенсировать неудобство языка как учебного, потом убожество «одноязычника».
Зато если школьник осознает концепцию С-массивов (через указатели), то дальше многое станет гораздо понятнее.
Надеюсь, Вы поняли, что я хотел сказать, потому что я этого не понял.
Детям это не нужно. И понятнее от этого не станет, только наоборот. Им нужно алгоритмизацию изучать, а не низкоуровневое программирование.
Если учить алгоритмам — то нужен язык уровня как можно выше.
Код на python получается лаконичнее и понятнее, чем на Паскале. И меньше лишних сущностей вроде объявления переменных:)
И главное преимущество python'а — школьники научатся ставить отступы!
Вот отступы Питона далеко не являются преимуществом, кстати.
Ну и в чём же тогда отступы являются недостатком? Наоборот это явное преимущество: во-первых, изучающий с самого начала приучается к отступам, во-вторых отсутствие лишних «begin», «end»/фигурных скобок.
В случае начала изучения — являются.
Часто ли вы пишите код на языках, где отступы не обязательны, без них?
Отступы питона, хаскеля, окамля, F# всегда являются преимуществом — благодаря им человек и компилятор читают код с отступами одинаково
Питон был бы очень хорош, если бы не динамическая типизация
Динамическая типизация на начальном уровне позволяет практически не заморачиваться с понятием типа.
И перемножать строки, и мешать теплое с мягким, и лизать желтый снег как апельсиновое мороженое
> Зато если школьник осознает концепцию С-массивов (через указатели), то дальше многое станет гораздо понятнее.

Логичный и очевидный вопрос: нафига ему это понимать?
«Зачем — вопрос еретический» (А. Шень)
Ответьте на вопрос: нафига школьнику программирование?
Я таким вопросом где-то ниже тоже задался :)
>Зато если школьник осознает концепцию С-массивов (через указатели), то дальше многое станет гораздо понятнее.

Теоретически это правильно, но практически школьник будет тратить большую часть времени не на работу с алгоритмом, а на поиск ошибок работы с указателями.
В случае с ученик получит кучу мусора в свои девственные мозги.
Причем плюсы с (портабельность, крутой компилятор, куча кода для системного программирования) для обучения ничего не значат, а вот минусы (типизация, 15 приоритетов операций, многозначный синтаксис, включаемые файлы, ужасные функции вроде printf, нуль-терминированные строки, переполнение буфера, сегфолты) исключают использование си как первого языка при массовом обучении
Lua тоже хорош для начала. Отлично подходит для освоения простейших конструкций, да и просто интересно — через пару недель изучения можно смело писать простецкие игрушки.
Lua прост в освоении и достаточно интуитивен, да. Со строками немного подурацки работает (в паскале и питоне понятнее).
Только хотел возразить, что Lua тоже не шибко распространен как вспомнил про WoW. Я думаю детям будет интересно.
Динамическая типизация делает бОльшую часть скриптовых языков не самым лучшим инструментом
пхп. самый простой для понимания и который можно реально применить на практике (те же школьные сайты {из 90х :) }). с другими дети в школе заморачиваться не будут.
В отношении PHP, мне кажется, скоро будет верно утверждение Торвальдса о С++:
Quite frankly, even if the choice of C were to do *nothing* but keep the C++ programmers out, that in itself would be a huge reason to use C.

Ничего не имею против этого языка (точнее говоря, имею, но не слишком много), но как-то слишком уж много низкоквалифицированных программистов именно на нём (или у меня выборка нерепрезентативная?). А если его ещё и в школах ввести…
Спорный аргумент. Квалификация программистов зависит исключительно от этих программистов.
PHP может и простой. Но, увы без знания HTML он не очень хорошая идея для преподавания. Самое простое — ввод с клавиатуры как вы сделаете? Правильно, надо делать html-формы. Слишком сложно для школьника. Гораздо проще read(a); read(b); и т.д.
У PHP есть консольная версия, если кто не в курсе.
Проклинаю себя через 5 секунд после того как набираю php в консоли :) Начинаю набирать код скрипта и почти всегда забываю поставить <?php.
ПХП как первый язык надо приравнять к изнасилованию малолетних
UFO just landed and posted this here
В школе информатика в основном состоит из создания алгоритмов. Для таких целей лучше всего python подходит из вышеперечисленного.
Со всеми этими языками от людей не добьешься мотивации.
Надо такое чтобы все любили.

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

Вот над чем работать надо.
Lua + World of Warcraft?
В эту игру не играю, но слышал что там возможны ветеиватые скрипты.
Ну это правильный ход мыслей. А не «этот язык круче чем этот».
А о детях между прочим как то забыли.

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

Ничего плохого в назывании системника процессором не вижу. Микропроцессор+его специализированные расширения.
UFO just landed and posted this here
UFO just landed and posted this here
Я учился на MS QuickBasic, потом на QBasic брал первые места на олимпиадах, обгоняя гордых собой сишников. Никаких неудобств от использования данных продуктов MS не испытывал. В чём проблема?
UFO just landed and posted this here
Ну покажите мне адекватную опенсорсную реализацию бейсика, пригодную для обучения и столь же простую в освоении, как указанный SmallBasic.
UFO just landed and posted this here
Аааа, Вы очередной «религиозник»? Ну так бы сразу и сказали…
Кстати, тот же QBasic мне кажется гораздо лучше для изучения, чем Small Basic, хоть он и под DOS.
Хорошо разве что по меркам 70-80-х
Сейчас такой язык больше испортит своей рыхлостью чем поможет
+1 Pascal. Сам лично с него начал. Язык простой, и в то же время дает очень важные для начинающего программиста знания + в университете чаще всего изучают именно его, что подспорье для будущего студента в учебе. Начинать с языка легче Pascal смысла не вижу (например Логомиры) — если человек не может освоить такой язык, то вряд ли что-то из него получится, изучать более трудный (С++, Java) — у человека могут опуститься руки, в итоге мир потерял еще одного возможно талантливого кодера.
Хотя лучшим вариантом будет тот язык, который интересен человеку, и по силам ему.
по текущим меркам, паскаль слишком низкий уровень. Массивы и записи — это мало. Нужны списки, словари, кортежи, на уровне языка. Нужна поддержка всего этого счастья в языке, что бы алгоритмы, записывались более прямо, без излишнего шума.
мне казалось что стеки и очереди есть для этого…
стандарт языка www.moorecad.com/standardpascal/iso7185.pdf принят в 1983 г. Ни стеков ни очередей я там не вижу.

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

Проблема в том, что даже после этого, с точки зрения простоты обучения, он будет проигрывать питону.
Tinf=integer;
List=^TList; {Указатель}
TList=record
data:TInf;
next:List;
end;


Вот так мы работали со стеками в Turbo Pascal на 1 курсе универа. В простоте может конечно он и уступает, но факт, что он есть.
Паскаль выиграет у Питона за счет строго статической типизации… И проиграет за счет синтаксиса и страндартных библиотек.
А по мне так статическая типизация — это ещё один минус к Паскалю как к первому языку.
Преподавал информатику в лицейском классе (10-11). Могу сказать, что как раз в это время для всех в среднем можно преподавать Visua Basic. Мозг у детей забит кучей всего, и нужны только азы программирования, чтобы понимали что к чему, и не боялись в будущем. Важно показать и направить. Если кому-то в дальнейшем потребуется выучить язык — он сделает это. Даже девочка может быть вспомнит, как наваять макрос. Наваять калькулятор к примеру — и просто и понятно.

Про C/C++, простите, не умный снобизм. Школа не готовит программистов, школа готовит людей, готовых к дальнейшей жизни. Зачем при 2 часах в неделю пытаться взрывать мозг? Или «я выучил, все должны выучить» это верно?
Проголосовал за Java (ни как не могу понять, почему ее считают сложной...), но в принципе думаю все же думаю ошибся, и действительно Python, лучший из вариантов.
Ява с ее неявным боксингом, кучей излишеств в синтаксисе, требованиями к структуре папок, перепроектированными библиотеками — для первого языка сильно не то
GBASIC если такой кто то помнит :)

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

А вообще если говорить про современные тенденции, то своему ребенку буду предлагать начинать с чего то такого twolivesleft.com/Codea/ (Среда разработки игр для iPad)
Да-а-а-а… Помню, как программки переписывал в тетрадку.

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

Этот СЮБОР позволил мне развить скилл программирования достаточный, чтобы выигрывать городские олимпиады по информатике.
Голосующим за C/C++ рекомендуется прочесть вот это. Доступно объясняется, почему с C/C++ нельзя начинать обучение программированию.

Позволю себе процитировать кусочек.

По традиции, введённой авторами Си Брайаном Керниганом и Денисом Ритчи обучение этому языку начинают с программы Hello world. Вот её текст1 X
#include <stdio.h>
int main() {
printf(«Hello, world\n»);
return 0;
}
Написать этот текст на доске не сложно, сложности начинаются в тот момент, когда нарисована последняя фигурная скобка и необходимо переходить к пояснениям. Что это там в первой строке. Правильный ответ звучит примерно так: это директива макропроцессора, которая включает в нашу трансляцию специальный заголовочный, файл содержащий объявления библиотечных функций. А теперь давайте вспомним, что мы проводим первое занятие для абсолютно неподготовленной аудитории, смысл слова директива наши слушатели ещё могут догадаться из общих соображений и окажутся недалеки от истины но остаток фразы, макропроцессор функции, к тому же ещё библиотечные, объявления, все эти слова не оставляют слушателям ни единого шанса на понимание. Если в этот момент пуститься в пространные объяснения мы можем где-то через полчаса с удивлением обнаружить что увлечённо рассказываем, например, о конвенциях вызовов функций, в то время как наши слушатели читают книжки, играют в тетрис на мобильных телефонах, рисуют в тетрадках цветочки и занимаются другими делами, имеющими столь же прямое отношение к программированиюF Реальность такова, что объяснить неподготовленному слушателю смысл директивы include невозможно, нравится это нам или нет. Поэтому приходится произнести сакраментальное «так надо, а зачем мы узнаем позже». Заметим, мы ещё ничего не объяснили, а ссылка вперёд нам уже потребовалась
Этот аргумент работает против изучения С любым человеком, не знающим С. Вывод: чтобы начать учить С, надо знать С.
Может сначала прочитаете документ по ссылке полностью, а потом будете спорить, а?
Это всё от неумения объяснять. Я бы начал так: написал на доске printf(«Hello, world\n»); и объяснил бы, что эта команда выводит строку на экран. Рассказал бы, что такое \n (не влезая глубоко — просто «перевод строки») и тут же коротко объяснил, что такое функции (на данном этапе это просто что-то, умеющее выполнять для нас работу).
Дальше я перешел бы к тому, что сама по себе команда выполняться не может — компьютеру нужно объяснить, откуда начинать выполнение программы и чем заканчивать. А значит, наш код разрастается до
int main() {
printf(«Hello, world\n»);
return 0;
}


Не нужно объяснять детям, что такое int и почему возвращать нужно именно 0. Пусть это на данный момент будет неким «священным ритуалом». Дальше в этом месте я попросил бы детей взять и скомпилировать эту программу. Тут они бы словили ошибку компилятора о неизвестной функции printf и я объяснил бы, чем занимается компилятор и почему он написал такую ошибку. И как её исправить. А после этого дети получили бы работающий код, который они понимают и даже могут модифицировать в пределах «вывести другую надпись, сделать 3 разных надписи с новой строки».
Мне кажется такое объяснение было бы внятным для 4-5 класса. А все эти "… директива макропроцессора, которая включает в нашу трансляцию специальный заголовочный, файл..." оставьте фанатам Википедии, где всё должно быть идеально корректно и плевать, что оно в таком виде никому не понятно.
священным ритуалом
Вам в семинарию надо было идти учиться, а не на программиста. Как окончивший православную гимназию говорю. «Магия» и программирование не совместимы, человек должен чётко понимать, зачем нужен каждый символ в его коде.
>человек должен чётко понимать, зачем нужен каждый символ в его коде.
Должен, но не сразу. Первоклассников учат считать от 1 до 100 и оперировать сложением\вычитанием. Им же не читают теорию чисел, понятие счетных и несчетных множеств, границы, отрицательные, дробные и иррациональные числа и прочие очень важные вещи, без которых знания математики не полны.

Или вот второй пример — формулы площади\объёма круга\шара в школе дают на уровне «это будет 4/3 пи эр куб». И только пройдя в универе интегралы на достаточном уровне человек может эту формулу взять и вывести сам. Так что ж от этого — не учить детей в 6-ом классе площать круга и объем шара считать?
Не сравнивайте мокрое с мягким. Когда учат математике, начинают с простых абстракций, постепенно переходя к более сложным. Когда учат считать от 1 до 100 и сложению/вычитанию, всё понятно: было 5 яблок, положили 2, стало 7. Никаких «прочитали заклинание, яблок стало 30». Формуле площади шара у нас в учебнике, помнится, было дано какое-то объяснение, не затрагивающее эти ваши интегралы. Опять же, никакой магии. Подумайте всё же об обучении в семинарии, это ваше.
Интересно было бы увидеть объяснение, не затрагивающее интегралы. Но это так, оффтопик.

Я вёл к тому, что при программировании на любом языке нам всё-равно придётся решить для себя «вот это я хочу знать как работает, ну а тут, я так уж и быть, поверю, что оно просто есть как есть и глубже разбираться не буду». А иначе мы пройдём по цепочке от высокоуровневых языков до низкоуровневых, машинных кодов, устройства процессора, взаимодействии транзисторов и их принципам работы ну и т.д. аж до основ электрики и магнетизма — на что у нас уйдет во-первых миллион лет, а во-вторых, может быть Вы не в курсе, но наука до сих пор не знает полностью, почему наш мир работает так, а не иначе. И на каком-то уровне нам просто приходится верить утверждениям в духе «тело, приведённое в движение, сохраняет инерцию» без понимания, почему оно эту инерцию сохраняет (см. лекции Ричарда Фейнмана).

А значит на первом уроке по программированию вполне логично поставить барьер «понимание\вера» не очень далеко, так чтобы и его было видно, и то что находится за ним желающие могли рассмотреть. Я обязательно расскажу детям что такое директива препроцессора и как работает компилятор — но не сразу.
Я вёл к тому, что при программировании на любом языке нам всё-равно придётся решить для себя «вот это я хочу знать как работает, ну а тут, я так уж и быть, поверю, что оно просто есть как есть и глубже разбираться не буду».
Не нужно знать, как оно работает, нужно знать, что оно делает. Концепция чёрного ящика, когда известно что на входе и что на выходе. На ней строятся вычислительные системы уже много десятилетий.
Только вот к магии и волшебным ритуалам это всё не имеет никакого отношения. А то мы так до проведение контрольного уверования в значение проводить будем вместо лаболаторных. Всё-таки рекомендую подать документы в семинарию.
Вы повторяетесь на счет семинарии — это плохой литературный приём, окружающие видят Вас загнанным в угол и хватающимся за одну-единственную соломинку. Давайте, совершенствуйтесь.

Концепция чёрного ящика — прекрасно! Вы мне очень помогли — я и сам не смог бы найти лучшего контр-аргумента. Это и есть замена понимания верой — мы понятия не имеем как работает ящик — просто верим, что если подать на вход А — получим на выходе Б. Это именно то, с чего я и предложил начать. Не нужно со старта объяснять что такое директивы, типы данных, стек, макросы и еще все те 150 вещей, которые есть даже в этом маллюсеньком Hello World. Начать с printf, как с основы, объяснить main и return как черные ящики, обозначающие начало и конец программы, а stdio.h — как чёрный ящик, содержащий printf. И всё, для начала этого будет достаточно.

А дальше все дети поделятся на тех, кому интересно посмотреть что в этих ящичках внутри и какие они бывают еще (будущих программистов) и тех, кто научится строить пирамидку из четырёх показанных кубиков, что будет достаточно для получения своей тройки-четвёрки (ну не всем же быть программистами).
stdio.h — как чёрный ящик, содержащий printf
Перечитайте концепцию чёрного ящика. Нас совершенно не интересует, что там внутри. Совсем. Ваш подход плодит множество недомолвок. Сравните с хэлловордом на бейсике:

PRINT «Hello world!»

Всё, что надо объяснить — PRINT говорит компьютеру, что надо напечатать строку. Строка — это то, что в кавычках. Далее следует понятие переменной (это такой ящичек, в котором что-то лежит), цикла (команда компьютеру повторять другие команды, пока выполняется условие), функции (такой кусочек кода, который можно подставлять в другие места). Никакой магии, никаких ритуалов, предельно ясно и понятно назначение каждого символа.
А вам со своей верой надо было идти в семинарию, уверуйте уже в уже это. У меня остались кое-какие связи среди священнослужителей, могу помочь с поступлением.
Я, к стати, вовсе не за то, чтобы изучать С++ первым — я вообще проголосовал за паскаль, а внизу в комментариях отписался за С# — речь не о том. Вы просто привели пример того, как кто-то не умеет обучать людей программированию на С++. Ну, прекрасно. Из этого можно сделать вывод только о том, что вот этот человек не умеет учить С++. Вот и всё. Сама по себе идея выплёскивать на учеников всю подноготную языка и добиваться с самого начала понимания всех деталей — это зло. Это перечеркивает все основы педагогики, принцип обучения «от простого к сложному», в этом методе игнорируются интересы аудитории, возраст учеников (а это еще дети) ну и делается куча других глупостей.

Я хотел всего-лишь сказать, что учить С++ можно, нужно, делать это вполне реально понятно и интересно и от того, что где-то есть по С++ плохие книги или плохие учителя не следует рубить с плеча.

P.S. Опять про семинарию — ну Вы меня расстраиваете! Как Вы там в своей гимназии риторику сдали — 4-ех кратное повторение — это же двойка сразу, не?
как кто-то не умеет обучать людей программированию на С++
Этот «кто-то» (автор статьи по ссылке) уже 10 лет преподаёт на кафедре алгоритмических языков ф-та ВМиК МГУ им. М.В.Ломоносова. Хотя для компьютерных волшебников кандидаты наук, видимо, не авторитет.
Сама по себе идея выплёскивать на учеников всю подноготную языка и добиваться с самого начала понимания всех деталей — это зло.
А этого и не надо делать. Им не нужно понимать, как работает PRINT. Им нужно чётко понимать, зачем он нужен в программе и что конкретно он делает. Магические символы \n, подстановки в print всяких %s, ведущие к необходимости понятия указателей ведут к тому, что мы не можем объяснить их назначение человеку, никогда ранее не писавшему программ.
Опять про семинарию
Окей, откройте секту машинопоклонников, назначьте себя главным техножрецом. Я уверен, будет пользоваться популярностью.
Никогда не видел прямой зависимости между «кандидат наук — умеет хорошо учить». Это разные вещи.
На счет \n и %s — да, это по-началу сложно. Ну так и не надо их пихать в первую программу.
Указатели (или ссылки) рано или поздно понадобятся в любом языке.

А вообще, я же вроде бы согласился с основной мыслью о том, что С++ не нужно учить первым — Вы меня в чём пытаетесь дальше убедить? В том, что языку С++ принципиально нельзя учить?
>На счет \n и %s — да, это по-началу сложно. Ну так и не надо их пихать в первую программу

~$./hello
Hellо, world~$

Так что ли?
Именно так. И что в этом примере прекрасно — это то, что 95% людей после этого спросит — «а почему $ не на новой строке?» и тут уже можно будет объяснить про "\n". Т.е. мы не только запустили простую понятную программу, но и вызвали у обучаемого интерес, начали с ним диалог. Он смог сформулировать вопрос «почему не с новой строки?» и получить на него понятный ответ.
А если бы в начальном примере было "\n" — в голове бы крутилось только «Шо за @$йня?» и такой вопрос он бы не задал, оставшись в неведении.
95% относятся к этому совершенно спокойно. Они видет свой ответ, видят подсказку, а когда я говорю, что строку неплохо бы перевести, а то так неудобно читать, только хлопают глазами. Им всё удобно.
> Указатели (или ссылки) рано или поздно понадобятся в любом языке.

Не понадобятся. Особенно в школьной программе
А ну-ка, расскажите как без этого понятия объяснить передачу в функцию массива или написание функций swap и sort или создание функции, возвращающей несколько значений? Или это выходит за рамки школьной программы?
Посредством массивов и индексов в них, очевидно.
Зачем для всего этого нужны указатели, вы мне сможете объяснить? На примере Питона/Ruby/C#/Java/Erlang'а и т.п.

Без оного понятия эти вещи проблематично объяснить только в том случае, если вы используете язык уровня C и ниже. Посмотрите на Scheme, Haskell, Tcl или Prolog. Cons-ячейка — и то более естественный механизм работы со сложными структурами данных.

А функций, возвращающих несколько значений, вообще не бывает. Жаль, что вот этого в школе не объясняют — вместо указателей.
Вообще-то, бывают. В программировании. Но, опять же, рзыменование кортежей (Питон) или паттерн-матчинг (большинство ФЯ) все быстро ставит на свои места
Значение произведения типов — это не несколько значений. То, что для эмуляции придумано много различных техник, отлично говорит за (не)естественность обсуждаемой операции.
Ну мы же не будем грузить ребенка понятиями о типах :)
И декартово-замкнутых категориях :) договорились, не будем.
Почему? Вектор-функция — вещь вполне естественная.
И чем нам поможет её естественность? Вектор-функция — отображение на векторное пространство, элементом (точкой) которого является вектор. Как было одно значение, так и осталось одно значение. Какова структура этого значения — это уже совсем другой вопрос, к функции отношения не имеющий.

Функция всегда принимает одно значение и возвращает одно значение. Даже если мы говорим о замкнутой категории, в которой возвращаемым (или принимаемым) значенеим может быть другая функция.
>Функция всегда принимает одно значение

И чему меня учили в школе и двух вузах… Оказывается f(x, y) не функция…
Это функция двух аргументов, принимающее одно значение:)
Я бы понял, если бы вы это сказали про f([x,y])… Видать действительно не тому учили в «университете» (бывшем институте, внезапно ставшим университетом именно когда СССР распался).
Нас учили, что f(x, y) — это сокращенная запись для f(<x, y>) (так же как x+y — это более удобная запись для +(<x, y>)), а функция двух аргументов — это функция, определенная на декартовом произведении.
Не курите это больше, вам всякая гадость мерещится.

Хотя мало ли, что вы там под невинным символом f понимаете. Может, и правда не функция.
Я, видимо, неправильно понял Ваше предыдущее утверждение. «для эмуляции придумано много различных техник, отлично говорит за (не)естественность обсуждаемой операции» я воспринял как «поскольку для реализации вектор-функций придумано много различных техник, то вектор-функции неестественны».
А как его следовало воспринимать?
Да нет, вы как раз всё правильно поняли. Мой ответ был на этот комментарий.

Функция — это всегда тройка a, b, f — домен, кодомен, правило отображения; f: a -> b. Функция двух вещественных аргументов, например, имеет доменом RxR; а каррированная функция трёх аргументов имеет кодоменом, вообще говоря, функциональное пространство.
А функция таскает с собой область значений?
Иначе говоря, f: {0,1} -> {0} и g: {0, 1} -> {0, 1}, g(0) = g(1) = 0 — это разные функции?

N-мерная вектор-функция в этих терминах есть функция с кодоменом A1*A2*...*AN для некоторых A. Что тут неестественного?
Конечно. Иначе композиция создавала бы некоторые трудности.

В этом — ничего. В реализации этого достаточно — от возврата через аргументы-указатели до boost.tuple.
Почему? Можно рассматривать композицию двух произвольных двойных отношений R1 и R2, если множество левых частей R2 есть надмножество правых частей R2.
Кстати, таскать область определения точно не надо — она однозначно восстанавливается по отношению.
Для этого даже название есть:

en.wikipedia.org/wiki/Equaliser_(mathematics)#In_category_theory

только вот можно рассматривать не означает одно и то же. Более того, это далеко не всегда возможно — мир не ограничивается множествами, в которых любые пределы существуют.
Так. Мне явно надо перечитать что-нибудь по теории категорий. Но не сейчас:)
Поскольку у нас с Вами вроде бы никаких существенных несогласий не было, предлагаю на этой светлой ноте дискуссию завершить.
Поскольку я уже, в общем-то, заснул — с радостью!
Вообще я хотел бы несколько развернуть свою мысль, раз мы уж заговорили о пределах. Предел (в категориальном смысле) — это некоторая «наиболее хорошая» конструкция в даных условиях; пример — декартово произведение двух множеств A и B является наименьшим объектом AxB таким, что из него можно построить проекции на исходные множества AxB -> A и AxB -> B (а уравнитель в категории множеств — наименьший объект, уравнивающий домены двух функций). Подобных объектов множество, но «лучший» — один (с точностью до изоморфизма).

Проблема интуитивного подхода к пределам заключается в том, что далеко не все категории являются такими же хорошими, как категория множеств. Так, у физиков есть теорема Белла, доказывающая, что произведение физических систем (описываемых Гильбертовыми пространствами) не является декартовым — соответствующий предел не существует. В категории множеств не проблема построить морфизм вида f(x) = (x, x) — однако ни в химических уравнениях, ни в Фейнмановских диаграммах нельзя удвоить (или удалить) значение.

Где-то поэтому обобщение теоретико-множественного подхода на математику (и науку в целом) является очень вредной эвристикой. И именно поэтому с понятием функции (морфизма) следует обращаться по возможности формально и аккуратно.
>Указатели (или ссылки) рано или поздно понадобятся в любом языке.
Про указатели — смешно. В большинстве современных прикладных языков их или нет, или они нужны по очень большой нужде.
И очень плохо, когда указатели нужны уже во втором учебном примере.
Интересно было бы увидеть определение объема, не затрагивающее интегралы и меру:)
Через сумму. Кстати в пятом классе нас учили вычислять площади любых криволинейных фигур с помощью суммирования элементарных площадей.
Суммирование элементарных площадей и приводит к интегралу Римана, если его вводить строго.
А если нестрого — то полезут парадоксы.
А элементарную площадь как получить? :)
Как сумму площадей прямоугольников. Или по дефекту углов произвольного многоугольника.
А площадь прямоугольника как получить без интеграла или меры? Длину умножить на ширину — не ответ.
Почему же не ответ? Для евклидовой плоскости это может доказать даже школьник. И слова «мера» ему знать не надо, достаточно 4 основных свойств площади (неотрицательна, аддитивна, для конгруэнтных фигур равны, у квадрата со стороной 1 площадь равна 1). Ну, еще что площадь отрезка и точки равна нулю.
>у квадрата со стороной 1 площадь равна 1

Это не мера разве?
Мера. Но школьнику об этом знать не обязательно. Пусть думает, что это свойства площади (тем более, что это так и есть).
Может почуять подвох во вразе типа «единица измерения площади — гектар» :)
Хорошо, что слов, однокоренных с «тензором» мало :) (если они вообще есть).
А, нет. Мы докажем только, что если площадь существует, то она равна произведению длины на высоту. А как грамотно доказывать существование функции площади, удовлетворяющей указанным условиям, я уже не помню.
Да, если подумать еще глубже, то ничего этот школьник не докажет. Ему придется воспользоваться фактом, что если одну сторону прямоугольника разделить на k частей, а другую — на m, то количество частей, на которые будет разделен прямоугольник, равно k*m. И на вопрос «а почему?» ему останется один путь — в психушку :) До доказательства по индукции он, скорее всего, уже не додумается. Если не прочитал перед этим одну хорошую книжку :)
Ну зачем же так жестоко? )))
Прямоугольник задается своей границей. Для определения, что такое точка внутри прямоугольника (и соответственно для определения, что значит что прямоугольник распадается в объединение) нужна теорема Жордана (хотя, конечно, хватит её частного случая для выпуклых многоугольников, который доказывается довольно легко).
Действительно. То, что один отрезок разделяет прямоугольник именно на два, да еще и с правильными длинами сторон… Но у нас же есть аксиома «прямая делит плоскость на две части»! Хотя откуда следует, что эти прямоугольники (их мы выписываем явно — AXYB и CYXD) будут именно пересечениями исходного прямоугольника с полуплоскостями, все равно непонятно.
Теорема Жордана нужна еще раньше — для определения, что значит «разделить прямоугольник на два» (множество точек, принадлежащих исходному прямоугольнику есть дизъюнктное объединения множеств, принадлежащих новым, с точностью до границы).
Пусть теперь мы знаем, что множество точек прямоугольника со сторонами, параллельными осям координат и с координатами углов (a1, b1) и (a2, b2) есть {(x,y)| a1 <= x <= a2, b1 <= y <= b2} (несложно показать, что если из плоскости выкинуть границу прямоугольника, то это множество будет связным и дополнение к нему тоже будет связным).
Теперь наложим на наш прямоугольник сетку, тоже параллельную осям координат. Можно аналогично выделить именно нужное число ячеек. В объединении эти ячейки будут давать весь исходный прямоугольник. И если удалить сетку из плоскости — то ячейки будут в точности компонентами связности.

Для выпуклых многоугольников теорема Жордана доказывается, например, трассировкой.

PS. Во 2м семестре нам на матане рассказывали про меру Жордана. Во время подготовке к экзамену мы промучались часов 5, но так и не сумели доказать, что кривая без самопересечений делит плоскость на две части. Лектор сказал, что это очевидно.
В 5м семестре на комплане это назвали теоремой Жордана, сказали, что самое короткое из известных лектору доказательств занимает 60 страниц и ему будет выделена половина семестра на спецкурсе, а в основной курс оно не входит.
Можно и так. А можно определить выпуклый многоугольник как пересечение полуплоскостей (тогда то, что мы разделили прямоугольник на два, следует из свойств пересечения и объединения), но тогда придется доказывать эквивалентность определений (непонятно, зачем — для данной задачи этого не нужно).
Но придется еще доказывать, что число ячеек сетки равно произведению числа ячеек на ее сторонах :(
Ячейки же можно явно перечислить.
Левые нижние углы ячеек будут иметь координаты (x1, y1), (x1, y2), ..., (x1, yn), (x2, y1), ..., (xm, yn).
Мощность этого множества равна m*n — доказывается индукцией по m.
Для m = 1 — по определению.
Для m = k+1 это множество есть дизъюнктное объединение множества для m=k и множества (x_{k+1}, y_i). Мощность первого равна k*n, мощность второго — n, значит мощность нового есть k*n + n = (k+1)*n = m*n (по дистрибутивности).
Ну да, про это «доказательство по индукции» я и говорил выше. Но школьнику будет очень трудно понять, почему это надо доказывать.
Помню, мы с дочкой доказывали, что «множество A равно множеству всех элементов, принадлежащих A», гда равенство множеств A и B определялось, как «любой элемент из A принадлежит В и наоборот». Раз десять пришлось сказать «не пытайся осознать, смотри только на формулы» :)
Множество всех элементов, принадлежащих А — это такое множество В, что x принадлежит А тогда и только тогда когда он принадлежит B?
В этом случае вроде бы есть синтаксическое равенство формул для «множества всех элементов множества А» и «равенства множества множеству А».
Сначала надо выписать утверждение «x \in {y:p(y)} <=> p(x)» большими буквами и все время на него ссылаться. И только потом убедиться, что то, что доказываем, сведется к «x \in A <=> x \in A».
А для других теорем вообще потребовалось написать «x \in \emptyset <=> false», без этого они не хотели доказываться. Но объяснить это школьнику… сложно.
Площадь прямоугольника есть сумма «площадей» отрезков между двумя противоположными гранями. Число отрезков равно длине грани, «площадь» отрезка равна его длине. Почему? Площадь отрезка можно получить как сумму площадей составляющих отрезок точек, их число равно дине отрезка. Но тут мы предполагаем что точка имеет некую элементарную площадь равную выбранной единице измерения. :)
И сам хотел привести цитаты из Андрея Викторовича :)
Люто, бешено плюсую, хоть пока, увы, только словами
Паскаль либо другой высокоуровневый алгоритмический (решетки напр.)
К решётке намертво прикручено ООП. Вы уверены, что оно надо на старте? Те же паскаль и бейсик позволяют сделать «быстрый старт», шарп — нет.
по моему опыту, базовый уровень ооп принимается на ура… объекты — методы — свойства…
проще чем функциональный…
Что бейсик, что паскаль можно использовать вообще без написания функций. Например:
FOR i=0 TO 5
	PRINT i
NEXT i
Для сравнения:
using System;
namespace Program
{
	class MainClass
	{
		static void Main()
		{
			for (int i=0; i<=10; i++)
				Console.WriteLine(i.ToString());
		}
	}
}
Угу. if и goto уже дают Тьюринг-полноту. Но оно надо?)
Как показывает практика, для обучения по 45 минут раз в неделю в 5-8 классах этого вполне достаточно.
«Этого» — программирования на бейсике без функций?
По второму Вашему примеру — тогда уж лучше так: pastebin.com/h3PxmMbh
Вы не поверите, но функции дают аж в 6-ом классе. За весь год общее время всех уроков информатики — что-то около суток (45 минут раз в неделю, чуть больше 30 уроков за год). С 5 по 8 классы — четверо суток. Вы предлагаете школьникам выучить что-то сложнее бейсика за это время?
Нет. Я предлагаю выучить что-то не сложнее бейсика, но при этом мощнее и красивее чем он. А именно питон:)
Питон школьником в качестве своего первого ЯП за 24 часа? Вы оптимист.
Что на питоне сделать сложнее, чем на бейсике?
Забахайте мне на питоне «Собачий вальс» через спикер :D
Бейсик вообще не надо учить)
В Питоне слишком много возможностей, а уж библиотека модулей… Для обучения нужно что-то попроще.
Обилие возможностей не усложняет обучения. Не надо использовать их все)
Тут все сильно зависит от преподавания.
Так где там мой «Собачий вальс», м? Я ж не пошутил. Я в 14 лет писал на бейсике вот. Было интересно. А на питоне можно?
Посмотрите, как это делается в Qbasic, и согласитесь, что то, что Вы кинули, булщит.
Нет, не соглашусь. Да, в бейсике есть стандартная функция, умеющая проигрывать ноты. Это никоим образом не дает преимуществ ему как языку для обучения.
Нужно определить, чему надо учить. Либо чему-то полезному на практике (мимо), либо некоторым основным общим методам и приемам составления алгоритмов и написания кода (опять мимо).
Так, немного не то написал. В половине пятого мозг уже отключается.
Что плохого в приведенном мной коде?
Всё очень просто. Я помню, что мне было интересно в 14 лет, а Вы, похоже, нет. Если хотите заинтересовать школьника программированием, хотя бы время от времени у него должно возникать чувство «fuckyeah» от написанной им программы. Посмотрев на Ваш код, я могу с уверенностью заявить, что в те года я бы просто забил, проделав половину работы.
Питон позволяет рисовать кружочки в консоли чем-то столь же простым как
CLS 
SCREEN 12 
CIRCLE (200, 250), 100, 14
PAINT (200, 250), 14
?
Учитывайте жёсткие временные рамки.
fuckyeah! ностальгия )) Анимацию XOR-ом можно делать :)
Ну да, как это красиво сделать обычным python'ом — не знаю. Но если разрешено использовать sage — то элементарно)
show(circle((5,5), 3) + line([(5,2), (2,5)]))
А надо подключать внешние библиотеки? А зачем такое неимоверное количество скобок? А ещё я не понял, что делает этот код. Совсем не понял. Вышеприведённый рисует круг радиусом 100 пикселей по координатам 200:250 14-ым цветом. Потом область по этим координатам закрашивает тем же цветом. Примитивы рисования как в MS Paint.
sage — это надстройка над python'ом. Большая надстройка, библиотеками, думаю, не отделаешься. По крайней мере он вроде бы таскает с собой собственный интерпретатор.
Мой код рисует круг с центром (5,5) и радиусом 3, и линию от (5, 2) до (2, 5).
Да, я не помню, как рисовать красивые картинки ни в бейсике, ни в сейдже.
Если использовать веб-интерфейс, то можно так: sagenb.org/home/pub/4035/
Пример нагугленный, не столь элементарный, но представление даёт
from turtle import *

def yin(radius, color1, color2):
    width(3)
    color(color1)
    begin_fill()
    circle(radius/2., 180)
    circle(radius, 180)
    left(180)
    circle(-radius/2., 180)
    end_fill()
    color(color2)
    left(90)
    up()
    forward(radius*0.375)
    right(90)
    down()
    begin_fill()
    circle(radius*0.125)
    end_fill()
    left(90)
    up()
    backward(radius*0.375)
    down()
    left(90)

def main():
    reset()
    yin(200, "red", "green")
    yin(200, "green", "red")
    ht()
    return "Done!"

if __name__ == '__main__':
    main()
    mainloop()

поддерживается как рисование примитивов типа окружность/круг, прямоугольник, линни, точки, так и управление пером по типу графопостроителя (поднять, опустить, влево, вправо, веерх, вниз)
Только потому, что вы пришли к ФП после императивщины. ФП спокойно лодится на математику школьного объема.
К решетке вдобавок намертво прикручены перепроектированные библиотеки
UFO just landed and posted this here
У F# в этом плане только один недостаток — vendor lock
Но его можно обратить в достоинство, выбив из MS скидки на студию
UFO just landed and posted this here
UFO just landed and posted this here
Было бы клево учить Coffescript, он простой и человекоподобный. И сразу можно писать в браузере)
Давайте может уж сразу Roy? Он простой и хаскель-подобный :) И сразу можно писать в браузере )
Мой первый язык — OCaml. Я его начал изучать в восьмом классе и, на мой взгляд, он не сильно сложен для изучения. Кроме того, он мультипарадигменный, так что при должном построении процесса обучения на базовом уровне вполне можно вопринять ФП и ООП.

Также OCaml можно использовать в качестве второго языка. На него, как на язык более высокого уровня, можно переходить после того же Паскаля постепенно, писать сначала в паскалеподобном стиле(что синтаксис позволяет).
Ура, оказывается люди, изучавшие OCaml в качестве первого языка существуют! Полностью поддерживаю, только конечно вместо OCaml лучше либо F#, как было предложено выше (лучше инструменты разработки), либо Haskell (более мозголомателен) :)
Да, есть, надо лишь выбрать правильную школу :)

Насчет преимуществ F# перед OCaml ничего не могу сказать, ибо в тонкостях их различия не разбирался. Вам, как работнику Майкрософт, виднее. По поводу инструментов разработки — по-моему, в школе ничего кроме Far Manager'a и компилятора не нужно.

А Haskell, я думаю, слишком однобок. Серьезную математику, на которой он основан, изучать сложновато будет в школе, а то, что на поверхности, в основном умеет и OCaml. Haskell интересен с точки зрения ленивых вычислений(которые, кажется, в OCaml костылем делаются), все остальное либо сложно для обучения, либо есть и в более универсальных языках.
Scheme — тоже неплохой вариант.
В схеме типизация динамическая.
Для обучения лучше языки с компилятором-нянькой, распознающими максимальное количество ошибок до выполнения
Кажется, был диалект Scheme с типизацией, чуть ли ни inferred. Typed Scheme, по-моему.
Для обучения лучше интерпретаторы с развитой консолью, чтобы первые результаты можно было получить ещё до того как узнаешь, что такое файл.
Красота функционального программирования лучше проявляется на ленивых языках. Однако монады, конечно, смущают… Так и представляю себе очередную статью на хабре: «Монады. На этот раз для школьников».

Про инструменты разработки Вы зря, autocomplete и достойная интегрированная документация очень сильно упрощают изучение для начинающих.
Меня терзают смутные сомнения — а вдруг окажется, что монады для неиспорченного императивщиной мозга никакой повышенной сложности не представляют?
Есть способ в этом убедиться — найти родителей, которые не пожалеют своего ребенка, неотягощенного императивной парадигмой, для опытов. Тут уже выше Бурбаки предлагали для обучения математике, будет легко излагать, если ребеночек уже познакомится с теорией категорий…
Можно попробовать. Ребенок дальше программы на С на 50 строк не продвинулся, так что может быть еще не очень испорчен. Только надо сначала самому изучить. О каком языке тут идет речь?
Хаскель. Он очень вкусен, но его монадический ввод-вывод считается первым вертикальным участком кривой обучения. Причем вполне годные программы можно писать без хорошего понимания темы, но с высокой вероятностью крупно напороть в самых неожиданных местах
Расскажите, а как так получилось, что у вас OCaml первым языком оказался?
Да я просто до восьмого класса(пока не попал в одну хорошую математическую школу) не очень интересовался программированием, а потом мне достался хороший учитель, который, кстати, очень уважает ФП. В итоге курс получился примерно такой:
Марковский алгорифм, OCaml — 8 класс
Лямбда-исчисление(ох, ну и экзамен по нему был!), параллельно OCaml (+ в конце года с OpenGL повозились) — 9 класс
Haskell, алгоритмы сжатия информации на Haskell — 10 класс
Java — 11 класс
Ну и попутно были всякие спецкурсы по ассемблеру
Какая хорошая школа! Передавайте глубочайшее признание вашему преподавателю (преподавателям) и директору.
А поделитесь, кстати, что за школа, и что за учитель?
Школа находится в СПб и называется ЛНМО — Лаборатория Непрерывного Математического Образования(статья на хабре).
Если вкратце, отличается от большинства математических лицеев/гимназий тем, что упор делается на научную деятельность школьников, а не на олимпиады. Каждый более-менее разумный человек не уходит из школы без своего проекта — в основном, конечно, математического, но традиционно также большое число работ по программированию(пример). Некоторые (как Ваш покорный слуга) даже совмещают несколько проектов и в связи с этим испытывают острую нехватку часов в сутках за пару недель до конкурсов. Конкурсов, кстати, много(Питер, Москва — эти как раз будут через пару недель, Голландия, США — весной), и мы на них даже кое-что выигрываем.

Про учителя могу в личку написать, если хотите.
Спасибо! Немного похоже на ЦНМО в Москве и ЛИТ-1251 — там тоже проектная деятельность очень развита, в т.ч. участвуют в Юниоре и выигрывают. Здорово, что такие школы ещё есть; жаль, что на всю страну их единицы.
Щас в некоторых школах вообще Кумир изучают… Типа паскаля, только на русском языке
UFO just landed and posted this here
В школе было так:
8 класс — паскаль (под ДОСом) + спецкурс по графике С/ассемблер (под ДОСом)
9 класс — паскаль (под ДОСом) + спецкурс по графике С/С++/ассемблер (под ДОСом)
10 класс — С (под ДОСом) + спецкурс по C# (VisualStudio)
11 класс — C++ (ДОС и винда)

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

Вполне рабочая схема.
ога, я так и представил как 13-летняя девочка, у которой еще куклы не до конца заменились на парней, программирует сначала на ассемблере с паскалем, а потом на C/C++/C#. И вообще ей нравится география или история, к примеру. Имхо, это тоже самое, что в 11 классе давать теорию управления. Школа видимо имеется в виду все-таки общенаправленная без перекосов в программинг.
Спецкурсы не обязательные, но девушки там присутствовали.

Школа не обычная, а физико-математический лицей.

В обычной (читать «гуманитарной») нету такого предмета как программирование — максимум «информатика» (на которой сидят в соц.сетях или порносайтах).

И что плохого в том, что девочка в 13 лет интересуется программированием, а не парнями?
Плохого? Ничего. Но чтобы выучить противное им программирование (которое ну совсем им не понадобится), им вообще придется забыть про личную жизнь :) Вы учитывайте только то, что далеко не все могут просто воспринимать программирование. А Вы пытаетесь заставить их учить Ассемблер. Я до сих пор помню как у нас в 9-ом классе совершенно спонтанно разделение произошло на тех, кто мог и на тех, кто не мог. Причем во вторую половину очень часто попадали люди, у которых по многим другим предметам были заслуженные отлы.
1) Речь идёт о физмат лицее, куда идут не для изучения географии
2) Ассемблер был на спецкурсе, который добровольный

В обычной (гуманитарной) школе вообще не должно быть программирования как обязательного предмета.
>Но чтобы выучить противное им программирование (которое ну совсем им не понадобится), им вообще придется забыть про личную жизнь
«Все бабы дуры»?
неа, никакой критики, просто большинству девушек совсем не нравится программирование.
Оно и большинству юношей не нравится.
«Не хочу учиться, а хочу жениться»
Но такие про личную жизнь точно не забывают
Может очень странно прозвучит, но имхо было бы не плохо OCaml т.к. программа на нем более близка к математической модели. Тоесть для школьников в каком то смысле можно было бы обьеденить понятия функции в ЯП и в математике.
Мне конечно больше нравится изучать bash или TCL. Но я считаю что преподаватель должен отдельно подходить к каждому ученику, и давать именно тот ЯП который ему нужен. Если он растущий гик — brainfuck, если двоечник\лентяй — basic.
ЧИЁРД! А я начинал с basic — теперь, видимо, никогда не стану гиком :/ Ужасно.
Чем вам так бейсик не угодил, что вы считаете его уделом двоечников?
Извините ничем не хотел обидеть или задеть, сам с бейсика начинал. Я имел ввиду что он, как мне кажется, более прост чем некоторые другие языки.
Зачем же сразу brainfuck? Играть в машину Тьюринга веселее. Пусть привыкает к goto.
Вообще не учить программированию, а учить основам работы с компьютером, основам сетей, безопасности персональных данных и логике.

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

То есть Паскаль при всех его достоинствах — в печку из-за разделения одинакового понятия функция на две непонятные составляющие и некоторые другие мелкие заморочки
С/С++ — в печку хотя бы из-за того, что чуть ли не на первом уроке придется объяснять указатели/ссылки, которые школьнику не нужны дже даром
C#/Java — в печку из-за того, что все надо оборачивать в классы, которые надо вызубривать, не понимая, на первых уроках
Python — возможно. Особенно из-за REPL'а
Basic — возможно, зависит от того, какой именно Basic

Блин, надо на хабре добавить кнопочку ±, ибо согласен лишь частично.
UFO just landed and posted this here
трояны и письма счастья — это малая часть всех проблем. facebook/одноклссники/вконтакте и т.п. с возможностью узнать о человеке все — это таже надо рассказывать, показывать и предупреждать
Думаю, что в 3м нужно учить лого, дабы развивать последовательное мышление.
В пятом можно паскаль/бесик.
В восьмом-девятом Ява/Си (без плюсов)

Хотя это применимо далеко не для всех, у меня, например, пол потока бы не осилило и лого-миры
Странно что в списке нет Ruby — я бы проголосовал именно за него.
Эх, жалко _why не допилил свой shoes или что у него было для детей…
Уже на гитхабе -https://github.com/hacketyhack/hacketyhack

И, народ — где в списке Ruby?
Не понимаю ненависть комментаторов к Java в качестве первого ЯП
По-моему для начинающих Java сразу же является отличным пособием по ООП, во вторых у нее синтаксис, который в дальнейшем без проблем даст возможность учить C\C++ уже с хорошей базой и ООП и синтаксис будет знаком.

Паскаль надо учить тем, кто применяет много маталгоритмов по учебе — на нем удобнее реализовывать математику да и потом синтаксис паскаля очень пригодится в том же MATLAB

Так что я голосую за Java
Эм, тут вроде опрос про школу. Какое еще ООП блин?
Долой ООП в школах? Лучше науим чему проще, но как попало, чтобы потом в университете сказали «забудьте, чем вас учили в школе»?
Если бы большинство программистов не заморачивались на тему ООП мир был бы гораздо прекраснее)
Каждый по-своему прав
Типичных холивар :)
Как правило, в школах просто некому преподавать это самое ООП.
В 10м классе ФТЛа в качестве факультатива мы изучали c#.
Избыточный для простейших программ синтаксис. Слабая поддержка парадигм программирования отличных от императивного ООП. Компилируемость, вернее отсутствие интерактивной среды (та же Scala её имеет, хотя и компилируется в тот же байт-код). Статическая сильная (строгая?) типизация и (частая?) необходимость явного приведения типов.

Это навскидку. Большинство пунктов можно отнести к большинству «мейнстримовых» языков.

Первый язык да ещё в школе, имхо, должен быть мультипарадигменным со слабой динамической типизацией (или хотя бы неявным выводом типов), без излишнего синтаксиса для простейших программ («скриптовым»), с развитой интерактивной средой. Сейчас таких языков более чем достаточно на любой вкус (хотя постоянно придумывают новые).
У явы синтаксис, который только помешает учить Си, библиотеки, который мешают делать простейшие вещи, ритуалы на каждый чих. Идеал для обучения, ага.
Был удивлен, не найдя его в списке.
Нас учили TurboPascal. Меня так сильно увлекло программирование на нем, что я дни напролет писал и писал разные программы. Я тогда даже не догадывался, что можно делать оконные приложения также легко и просто. Внезапно обнаружил, что есть крутой прокачанный TurboPascal, только называется Delphi. Счастью не было предела, я мог создать свой калькулятор или блокнот! Затем мне стало интересно, что за зверь C++, и опять чудо — есть у Delphi брат-близнец C++Builder! Затем был Visual C++, потом резкое увлечение ASMом, потом уже всё остальное вплоть до Lua, haskell и т.д. Это я к тому, что неважно с чего начать. Все равно те, кто к этому тяготеют, притянутся, а другим, что C++, что Pascal одинаково фиолетово.
А TurboVision вы для себя не открыли, чтобы писать TUI калькуляторы и блокноты? :)
Первый язык у меня был — Лого, в первом классе. Я честно говоря, не могу понять людей, голосующих за С++ как за первый язык для изучения. Вы в своем уме?:) В таком случае, диффуры нужно давать во 2-ом классе, чтобы ленивые школьники не расслаблялись.
Причем решать эти дифуры непременно через задницу, дабы сходство с плюсами было еще более рельефным
Торвальдс, залогиньтесь!
C/C++, Java… давайте лучше Perl :)

проголосовал за python, считаю его сравнительно простым для понимания + легко можно использовать и не для информатики — посчитать что-нибудь, например.
UFO just landed and posted this here
Отличная идея :)
Тогда школьники еще и вешаться начнут
У моей старшей дочки в качестве первого языка был Перл (в 9 классе). Поняла ли она что-нибудь — не знаю.
Люди которые предлагают, C++ и Java, Delphy, C# и прочее — просто сумасшедшие маниаки, которые хотят детям покалечить мозг с самого раннего возраста. Смысл школьной информатики в том, чтобы дать общее представление о том, что такое программирование и зачем оно нужно. Для этих целей нужен крайне простой язык со стандартной библиотекой, позволяющей сделать элементарное GUI приложение, нарисовать какой-нибудь график, реализовать движущуюся фигуру, воспроизвести звук. Вконце концов обучение должно вызывать интерес. Все должно быть просто, понятно и наглядно, результат должен быть осязаем. Те ученики, которые заинтересуются смогут дальше развиваться, изучить новые языки, а у тех кто не заинтересуются должны хотя бы остаться приятные впечатления от учебного процесса. Хуже всего когда в голове не остается ничего кроме «это было самое бесполезно потраченное время в моей жизни». Если начинать с того, что предлагают большинство участников треда, будет именно так.
Даже GUI будет слишком круто. Консоль — наше все
Да дело не в том, круто, или нет. GUI это наглядно, консоль — нет. Что интереснее для ребенка смотреть на графическое приложение с разноцветными кнопками, или на непонятную черно-серую консоль?

Если про сложность работы с GUI — то тут вопрос в том, насколько адаптирован для детей будет прикладной API. Если для вывода кнопки надо будет написать страницу кода, то конечно слишком круто. Если всего лишь одну строку, то нет.
Безусловно, если бы существовала такая среда, где с GUI было бы работать проще некуда, что я только за. Но существующие среды слишком сложны, даже Visual Basic. А разноцветными можно и буквы делать в консоли, нас учили этому в 9 классе, помню я делал поток зеленых нулей и единиц — типа матрица.
Да я понимаю, о том и речь, что слишком сложны. В идеале стоило бы сделать среду для обучения программированию на базе какого-нибудь простого и формального языка.
Лого или Школьный алгоритмический язык. Правда я бы посмотрел, как будут под них писать библиотеки, реализующие GUI. Понимаете — это утопия. Надо ближе к реальным языкам быть и максимально простым. Все равно приходим к Pascal и Basic.
Да пусть будет паскаль, или адаптированный паскаль. По-большому счету это не так уж важно. Важна адаптация к специфике школьного обучения, учащиеся должны понимать что язык это инструмент, а не цель.
Полностью согласен. Именно поэтому надо убрать все рюшечки в виде кнопок, списков, полей ввода и оставить школьника наедине с кодом и максимально простым вводом/выводом. Надо дать понимание, что необязательно многие расчеты и построения графиков делать вручную — можно дать эту работу машине. В консоли есть все для этого, в том числе простой графический режим.
Go. Какой-то парень практикует его в ВУЗе вместо, кажется, С++. Ну типа студенты сами выбирают что им лучше учить. Большинство выбрало Go, и остались очень довольны.
Ну а что здесь плохого чтобы минусовать? Просто альтернативное мнение. Сам понимаю, практической ценности немного, зато в ветвлениях/циклах/массивах/строках/массивах детворе разобраться будет легче (лично я не любил строки в C когда начинал его учить, паскаль казался проще. Сейчас, конечно, очень привык и люблю). Синтаксис простой (сколько я шишек набил на точках-с-запятыми на паскале в школе). Простой ввод-вывод (опять же, трудно было понять printf вначале изучения С). Ну лично мне бы было удобно учить такой язык. А те кто захотят стать программистами — изучить С или Java или еще что там в жизни понадобится — дело наживное.
Как-то не очень мне нравится такая практика — спрашивать у студентов, что им учить. Он бы еще спросил «будем учиться или в сходим пивка попьём?». К тому же возникает вопрос: а сам-то он этот язык знал, или они вместе учили ;)
Ну нас python'у препод учил параллельно с тем, как изучал его сам — за неделю немного почитает, на паре расскажет:)
И вроде люди более-менее понимали, что происходит.
У нас почти аналогично с Haskell. Видимо, наш преподаватель — «педагог от Бога», ибо объяснял всегда очень просто и понятно.
А почему бы не давать изучение на примере Javascript? Он как базис годится, он не допускает ученика до близких «к телу-ядру-памяти» операций и в тоже время нагляден и визуально виден результат. Другое, что я бы сперва вообще объяснял с самых основ устройство компьютера: памяти, процессора, видео и т.д.

Но я всегда за свой вариант по которому учился: паскаль+ассемблер (сразу).
А объясниться тяжело за что минусуете, да?
Не минусовал, но могу сказать что JS плохо подходит по причине большого количества костылей в нем присутствующих:)
Нет там костылей особенно для школьного уровня. Друго дло, что его, по сути, н покажешь нигде, кроме браузера, а вот там начинается DOM, который даром никому не нужен в школе :)
Да ну, складывать крокодилов с ослами, сравнивать строго и не строго, null-ы и undefined-ы… это все будет вылезать в самых неожиданных местах и порождать вопросы, на которые не каждый участник треда сможет ответить:) JS слишком уж динамический на мой взгляд:)
Ну и области видимости конечно же не стоит забывать)
Чорт. Знакомство с языком заставило меня забыть про эти «мелочи». Согласен :)
Яваскрипт слишком отмороженный в плане типизации и хаков
UFO just landed and posted this here
UFO just landed and posted this here
си можно по разному преподавать. да и не надо думать что дети тупые, они очень шарят если заразить и хорошо объяснить.

я вот в школе бейсик и паскаль прошел. а надо было си и с++ в линуксе.

проблема преподавания в качестве препода а не в сложности языка
Это тебе надо, ты и изучил. А подавляющему большинству детей оно совершенно не надо. Так что под одну гребенку не стоит всех грести.
Это примерно как в анекдоте: «Опрос проведенный на нашем сайте показал, что у 100% опрошенных имеется доступ к интернету». Конечно, все программисты были бы рады вернуться в школьные годы и чтобы их сразу по хардкору начали учить C++
Я бы предпочёл что-то функциональное или мультипарадигменное, но с упором на «функциональщину». Может потому что начинал с «императивщины» и азы C/C++ освоил самостоятельно ещё до того, как в школе начали давать Pascal.
И они с грехом пополам натянули троечку и забыли программирование как страшный сон
Я бы не сказал, что радости возни с динамической памятью и такими же строками — это то, с чего нужно начинать программирование. Так можно и отпугнуть.
Насколько я помню, для меня как раз самым сложным в Паскале было понять динамическую память. Хорошо, что можно было до этого работать с простыми в обращении многомерными массивами и строками.
Думаю, вы просто меряете по себе теперешнему.
Потому что в Паскале, насколько я помню, не прослеживается четкой структуры в работе с динамической памятью. А в С прослеживается.
По крайней мере, люди, осознавшие, что такое адрес переменной, что делают &a и *a уже не испытывали сложностей с использованием malloc, realloc и free.
С точностью до наоборот — в Паскале с динамической память все очень строго. Сишная адресаная арифметика — штука мощная, но ее приходится вводить в курс слишком рано, что вредит учебе
UFO just landed and posted this here
Haskell нужно добавить к урокам математики, чтобы формулы писать не на бумаге, а сразу скармливать компьютеру.
От чего?
Хаскель для задачек, не требующих императивности — просто замечателен — REPL, лаконичный и прозрачный синтаксис, списки от забора и до заката, библиотечные функции с записью в одну строку — чистый рулез
Спасибо, что просветили. Правда я, кагбэ, в курсе. И считаю, что это ещё не повод приплетать его к математике в школе.
И всё же, почему? Можно какую-нибудь аргументацию?
Я бы не хотел программировать на Haskell в школе. Не уверен вообще, хотел бы ли я программировать там. А если даже я, уже программист, так считаю, то, вероятно, остальные и подавно.
Это не аргументация — это эмоциональное личное мнение. Чем конкретно Haskell плох в качестве учебного языка при изучении математики в школе?
Ох… Окей, а чем он лучше Wolfram Mathematica?
Тем, что язык общего назначения?

На сколько ещё наводящих вопросов мне надо будет ответить, чтобы добиться ответа от вас?
Да я Вам могу ответить без проблем: программирование в школе нах не упало. Учишь математику — учи математику, а не Haskell.
А что упало? Физкультура и богословие?
В том числе. Почему нет?
Паскаль, конечно — если имеется в виду именно обучение программированию. Достаточно простой и в то же время строгий язык.
Для тех, кто заинтересуется программированием, можно Си или что-нибудь специализированное.
С таким же успехом можно любой другой мертвый язык изучать, интересно конечно, только смысла нет, ведь есть же множество живых языков.
Приветствую тебя, житель параллельной вселенной, в которой паскаль — мёртвый язык. В нашем мире Object Pascal — где-то в первой тройке при написании бизнесовых приложений под винду — ОС, которая занимает 90% десктопов нашего мира.
Лучше напиши статью на Хабр о путешествии между мирами!
Да, уйдя с винды на линукс я живу как будто в другой вселенной :) Вот пусть он и остается в мейнстрим, нечего его тащить в учебные заведения. А то потом получаем 90% студенческих проектов на монстре Delphy.
А это скачивание тонн мегабайт дистрибутива, сложный процесс регистрации. Я кучу Delphy проектов нашего университета переписал на JavaScript (HTA), т.к. это оказалось быстрее, чем хотя бы просто установить Delphy.
Ну перепишите Skype и QIP под винду на JS. Может окажется быстрее.
Skype и QIP — примеры отличных десктопных приложений, по вашему?
Исходя из популярности, я вполне могу допустить, что да.
А чему учить в учебных заведениях, если не мейнстриму?
Яваскрипт — сложен для изучения, если учить его серьёзно (его даже в Гугле осилить не могут, хы-хы), и бесполезен — если на уровне onsibmit=«return validate_form()».

> Я кучу Delphy проектов нашего университета переписал на JavaScript (HTA), т.к. это оказалось быстрее, чем хотя бы просто установить Delphy.

Даже и не знаю, как прокомментировать…
В школе учить основным принципам. Желательно — тем, что гарантированно не устареют через 20 лет.
Как сейчас помню, 20 лет назад все поголовно программировали на ассемблерах, бейсиках, фортранах, алголах, коболах и лиспах. А через 20 лет на джаву, нет, пэхапэ, руби, хаскель и пр. будут смотреть как на счеты или арифмометр.
Си/++ с Паскалем 20 лет назад были себе вполне production языками для десктоп-приложений. Особенно запомнилось их сочетание с TurboVision — именно тогда я под сел на GUI, а винда была уже так, украшательством :)
Ну в 92м, по-моему, было по10 Орионов и 10 Агатов на 1 IBM. По крайней мере в нашем Замкадовске. В школе была целая кладовка ДВК, неработающих, а а 95м уже целый класс на макинтошах, но кто на них занимался — неизвестно.
В нашем очень далеком Замкадье (9000 км) были Yamaha MSX-2, и на них был TurboPascal и какой-то Си под MSX-DOS («форк» MS-DOS под Z-80). На Си я деньги зарабатывал бессовестно эксплуатируя школьное оборудование, бумагу и ленту.
А вот С всё еще весьма популярен (хотя и спустился с 1го места на 2е) несмотря на свою 30-летнюю историю.
И вполне возможно, что через 20 лет будут делать быдлосайты с голосовым управлением и запахами с использованием HTML27 и server-side на PHP119.
Но главное — это то, что по-прежнему будут использоваться quicksort и RB-деревья. И именно этому и надо учить.
Может быть, и не будут. Все зависит от соотношения быстродействия, размера памяти, выделенной на алгоритм (по отдельности — медленной памяти, быстрой, сверхбыстрой. регистровой и квантовой), числа ядер, которые будут выделены на сортировку и возможностей по их взаимодействию… Все-таки, нынешние алгоритмы в большинстве рассчитаны на ситуацию «одно ядро — не очень много памяти — вся память примерно одинакова по производительности». В других условиях и алгоритмы могут стать другими.
Чему учить — совершенно непонятно. Опять получается — бросить в омут информации и выплывайте, как хотите; кто выплывет, научится чему угодно, а при необходимости и изобретет что угодно.
Всё-таки в математике гораздо реже выкидывается старое и берется что-то на нем не основанное, чем в IT. Т.е. теория сложности вряд ли куда-то денется. И математическая теория параллельных вычислений обладает очень большой общностью. И квантовые алгоритмы основаны на классической тензорной алгебре.
Так что есть вещи, которые будут нужны в любом случае — и не только для использования, но и чтобы понимать новые, более мощные средства.
Вы относиты quicksort к математике? Тогда да, математике надо учить. Непонятно, только, кого и где. И как. Социальная сеть вполне может оказаться лучшим учителем, чем преподаватель университета: она знает гораздо больше.
Quicksort относится к теории алгоритмов, которая является разделом математики («информатика — раздел математики»). Анализ его средней сложности представляет несложную, но довольно интересную задачу.
Математическая теория сложности, афаик, основывается на том, что у одной операции сложность не меняется от значений аргументов. В современном мире это не так, от того попал очередной операнд в кэш или нет бсложность может изменяться на порядки.
Математическая теория сложности как правило игнорирует даже полиномиальные различия, тем более — константы.
Константы в одной задаче легко могут превратиться в показатели степени в другой (например, при перемножении многочленов или матриц).
Простите?
Если у нас есть алгоритм А, который является полиномиальным при возможности вызова алгоритма Б за O(1), и алгоритм Б тоже полиномиален, то и их композиция будет полиномиальной.
Если у нас есть алгоритм перемножения (ax+b)(cx+d) за 4 умножения, то два многочлена степени n мы перемножим за n^2 операций. Когда мы научимся перемножать 2-члены за 3 умножения, то сложность упадет до n^1.585 (при рекурсивном применении).
Да. Но это полиномиальная разница.

Неправильно прочитал Ваш предыдущий комментарий. Действительно, легко можно получить отличие в показателе на константу.
Но так как конкретный полином всё равно зависит от модели вычислимости, то, как правило, на константы в показателе (т.е. на умножение всей сложности на полином) забивают.
Имхо, тут разница экспоненциальная.
«ИМХО»? Это математика, тут всё строго. Разница либо полиномиальная, либо нет:)
Я затрудняюсь вывести общую формулу в виду неопределенности условий, но интуитивно подозреваю, что сортировка значений в кэше последнего уровня будет сложнее сортировки в ОЗУ не в N раз, а в N*log(N) раз минимум.
Может быть. Разные модели вычислимости могут давать полиномиальный разрыв (например, одноленточная МТ для сравнения строк требует O(N^2) операций, а не O(N), как двуленточная).
Разрыв между N и N*log(N) — полиномиальный. И между N и N^1000 — тоже.
Мы на разных языках разговариваем. Сдаюсь, нам настолько глубоко разницу между O(N) и O(N^M) не давали, чтобы её счесть полиноминальной. Логарифм так давали — тут вобще разница линейная.

Но всё равно интуиция мне говорит, что время выполнения программы пускай той же сортировки пузырьком зависит от того какая часть данных находится в кэше, а какая в обычной памяти не линейно, и даже не полиноминально. Иначе бы оно сводилось к нулю при полном помещении в кэш, что абсурдно. Может быть не экспонента, но по аналогии предполагаю, что всё к ней сводится… Натурально…
Пусть есть алгоритм А. Он работает полиномиальное время, если существует такой полином P, что для любого N для любого входа длины N время работы A не превосходит P(N).

Время работы оперативной памяти и кеша отличается вообще в константу. Так что любая сортировка со сложностью O(N*logN) даже не используя кеш обгонит пузырек, даже если он весь будет работать в кеше.

В большей части теории сложности за степенью полинома никто не следит (важно, чтобы она была константой). Потому что эта степень зависит от модели вычислений. Доступ к n-ой ячейки памяти может занимать, в зависимости от модели, O(log(n)) или O(n) операций. Сложение двух n-битных чисел может выполняться за O(1), а может за O(n).
Есть, конечно, разделы которые фиксируют некую модель и исследуют сложность в ней. Именно применительно к этим моделям можно сравнивать, например, скорость стандартных сортировок.

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

Основное отличие в том, что для полиномиального алгоритма взяв в 2 раза более быструю машину Вы за то же время что и раньше сможете решить задачу для в C раз большего входа (где C > 1 зависит от алгоритма). А для экспоненциального — на C.

См. также: P vs NP.
А как сложить два N-битных числа за O(1)? У меня лучше, чем за O(log(N)) никак не получается, даже, чтобы просто увеличить число на 1 — и то схемы получаются довольно ужасными (даже если строить их на самом удобном элементе — (a? b: c), с optional отрицаниями на входе).
Например, взять RAM (равнодоступную адресную машину) и сказать, что сложность сложения равна 1.
Естественно, что, например, на МТ этого сделать не получится (ибо понадобится хотя бы считать вход, а это уже O(N)). Даже за O(logN) нельзя.
> В нашем мире Object Pascal — где-то в первой тройке при написании бизнесовых приложений под винду

В общем рейтинге популярности его даже в первой десятке нет: www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Да-да, я знаю этот рейтинг — он первый в гугле, а Object Pascal там на одиннадцатом месте — поднялся даже по сравнению с прошлым годом.

А есть рейтинг языков программирования для разработки именно бизнес-приложений?

Ведь если вычесть из общего рейтинга серверные языки (Perl, Python, PHP), браузерный (и отчасти серверный) Javascript, поднявшийся на волне популярности iOS Obj-C, языки преимущественно системного программирования C/C++, то для разработки десктопных бизнес-приложений как раз и останутся Java (тут можно учесть андроидную часть, думаю, она примерно равна долe Obj-C), C#, Visual Basic (на той неделе ковырял баги одной ERP на вижуалвасике :) и Object Pascal.

Но вы в какой-то степени правы — Object Pascal, хотя и остаётся достаточно популярным, но всё же сдаёт свои позиции благодаря «просравшим все полимеры» Borland/Codegear/Abrakadabra Delphi. Знакомые мои Delphi-программисты переходят в стан C# — практически прямого наследника и правопреемника делфи.

А если вычесть из общего рейтинга все языки, кроме object pascal, то останется только object pascal.
Python считать серверным языком можно примерно на тех же основаниях, что и Java, да и C#. Да и реализация трансляторов у них, имхо, не сильно отличается в принципе (если не рассматривать JIT и psyco) — компиляция исходников в байт-код и последующая его интерпретация. Другое дело, что Python более гибок во время выполнения, а там ошибки ловить сложнее, чем во время компиляции и потому, наверное, именно для бизнес-приложений он не сильно популярен, проще надеяться на то, что компилятор отловит ошибки, связанные с, например, приведением типов, чем рассчитывать на программистов и тестировщиков.
Этот рейтинг составлен на основе частотности поисков по ключам, связанным с конкретными языками. Как думаете, там вычитается доля школьников, которые хотят написать домашку на дельфи, а не бизнес-приложение?
Во многом именно потому, что он продолжает форситься в 90% школ и вузов, в т. ч. на западе.
В школе не нужно изучать языки программирования.
Я вот не понимаю, почему минусуют: да, сайт IT'шный. Но не надо же считать, что хотя бы половине школьников языки программирования нужны.
Хорошо, если в среднем классе хотя бы 1-2 человека найдется, которым это будет интересно. 95% просто это не нужно же!
И еще, не забываем, что, во-первых, гуманитарии программирование не осилят; во-вторых, изучая тот или иной ЯП, нужно подкреплять свои знания написанием нужных программ. А что могут дети такого писать? Тем более, не имея ни знаний по матану, ни по физике…
Повседневные задачи можно решать на обычном баше — вот его бы школьникам стоило изучить. Но это не совсем ЯП.
Про любой практически предмет (кроме элементарной арифметики, умения читать и писать отдельные слова печатными буквами) можно сказать, что 95% он не нужен. Всё отменим?

Те же решения задач по математике, физике, химии и т. п. могут писать.
Не надо путать обязательные знания с необязательными.
Информатику в школе, в принципе, можно и преподавать. И основы алгоритмизации вести в старших классах. Но вот заставлять детей учить ЯП — излишне. Ни к чему хорошему это не приведет.
Те же, кому интересно, могут заниматься дополнительно: как факультатив, например.
Учим основам алгоритмизации. Как ребёнок может проверить правильно он алгоритм составил или нет? Заставлять его на бумажке проходить ту же сортировку, записывая шаги и значения переменных? Надолго ли хватит интереса даже у увлеченных?
> Как ребёнок может проверить правильно он алгоритм составил или нет?
Можно использовать какой-нибудь псевдоалгоритмический полу-ЯП. Есть такие. Хоть ту же «черепашку».
Но я все вспоминаю свою школьную информатику: у нас и компьютеров-то не было. Так — на доске рисовали.

И да, как я уже говорил, интерес к этому появится от силы у 5% учащихся. Остальным будет просто неинтересно и непонятно.
Вот зачем псевдо, когда есть нормальные ЯП с практически таким же синтаксисом, ну разве что на английском слова.
Проблема в том, что алгоритмический псевдоЯП будет сразу работать, а для использования того же С нужно сначала выучить уйму вспомогательного материала. Хотя бы системой man научиться пользоваться, чтобы вспомнить, какие параметры у той или иной функции, какую библиотеку надо линковать для ее работы и какие include'ы прописать.
Уж это точно большинству совершенно знать не нужно.

И еще: не забывайте про врагов народа: Фурсенко, Путина и Ко. Система школьного образования уже настолько уничтожена, что если дети не занимаются дома, помимо школьной «программы», знания у них — что у баранов после трех классов ЦПШ.
Я не говорю про C или Java. Python, Ruby и подобные «скриптовые» языки, где в начале обучения не нужно даже программы писать, да тот же классический BASIC в конце-концов. Например, дать понятия переменных, выражений, операторов, функций, ввода/вывода можно ещё до написания «hello world», не заморачивая голову детей «магией» инклудов и классов. Сначала познакомить с кирпичиками, а затем уже показывать как из кирпичиков домик построить. А «нескриптовые» языки подразумевают что-то вроде «Вот так строится дом, тут арматура, но это вам не надо, тут проводка, но это я позже объясню, тут канализация, это в учебнике прочитаете, а вот дверь и окно, можете попробовать заменить их на свои, только не трогайте арматуру, канализацию и проводку, а то дом упадёт»
Ну, если скриптовые, то баш был бы в самый раз. Тем более, что он используется повседневно.
Вот только, опять-таки, большинству это не нужно. А гуманитарии просто не поймут.
bash, на мой взгляд, не самый простой для изучения и вообще крайне специфический язык. И он не предназначен для реализации классических алгоритмов, он предназначен для связывания внешних программ.

Большинству не нужны география, биология, история, математика дальше десятичных дробей и т.д.
> Большинству не нужны география, биология, история, математика дальше десятичных дробей и т.д.

Поэтому было бы неплохо разделять классы на профильные уже где-то в районе 7 класса, когда начинают проясняться склонности детей: гуманитариев — в гуманитарный, технарей — в физмат, лингвистов — в лингвистический и т.п. Ну, а баранов — выпускать с аттестатом, что могут работать дворником.
Плюсы кончились уже :)

Конечно не так, что «технари» вообще не изучают ту же биологию и историю, а более поверхностно, грубо говоря «прослушал» или «зачёт» получают, а не оценки. То же гуманитарии по математике, физике, информатике, химии(?). Общее представление получили и ладно.
гуманитариев — в гуманитарный, технарей — в физмат, лингвистов — в лингвистический
Хватит плодить роботов-исполнителей. Для создания творческой личности нужно многогранное образование. Это хорошо понимали при создании системы образования в СССР, когда целью было воспитание человека-творца.
> Для создания творческой личности нужно многогранное образование.

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

А в СССР образование было вполне отличным. И ВУЗовские преподаватели старой закалки хорошо справлялись со своей работой. Но, увы, они уже либо повымирали, либо ушли на пенсию — в ВУЗах остались в основном непрофессионалы. В итоге из пединститута выходят бездари, которые потом идут работать в школу.
Да, С требует вагона дополнительных знаний. Но это аргументо против именно С, а не всех «стандартных» языков. Те же python или basic дополнительных знаний почти не требуют.
Ну, бейсик еще куда ни шло. Но все равно, как я уже говорил, его просто большинство вообще не осилит. Ну вызубрят девчонки-гуманитарщицы синтаксис языка, но ведь алгоритмический склад ума не вызубришь!

Да, а уж насчет питона я сильно сомневаюсь, что его детям можно давать: лично я вообще в нем не смог разобраться, плюнул, и использую себе bash + C (т.е. для простых медленных задач bash, для требующих скорости работы — C).
python, ИМХО, проще бейсика. Как минимум — не сложнее.
Использую связку python + C++ (основная часть — на скриптах, тормозные части — на плюсах).
BASIC imho проще питона. Как мерять будем?
Поймаем на улице 20 человек, 10 будем учить питону, 10 бейсику. И посмотрим, в какой группе раньше смогут решить какие-нибудь стандартные задачи:)

В связи с этой дискуссией немного освежил в памяти basic. Это же громкий ужас!
Спецсимволы в именах переменных, влияющие на тип (и да, динамическая типизация таки для первого понимания проще статической, ибо позволяет вообще не концентрироваться на понятии типа поначалу).
Пробельные символы оказывают влияние, но какое-то странное…
Обязательное предварительное объявление функций — зачем?
Разделение функций и процедур — две сущности вместо одной — зачем?

Прочитал www.jgsee.kmutt.ac.th/exell/PracMath/IntrodQB.htm. Всё, кроме графики, в питоне делается как минимум не сложнее, а, например, функции и условные конструкции — чуть проще и существенно красивее.
По факту из спецсимволов в именах переменных в QuickBasic юзается только $ для строк. То же самое для функций, работающих со строками.

Разделение функций и процедур? Функция — какая-никакая аналогия с функциями в математике: что-то считают и возвращают одно значение. Процедура — набор инструкций, которые в программе нужно выполнить несколько раз.

Обязательное предварительное объявление нах не нужно, согласен.

>> Пробельные символы оказывают влияние, но какое-то странное…
Чё?
Ну всё же не так категорично, есть ведь и факультативные занятия. Если не начинать учить в школе, то когда, в ВУЗе объяснять про циклы и переменные?
Подумав, кстати, думаю было бы неплохо преподавать пораньше, классе в 5-6, а там уже, кому нравится будет продолжать на факультативах или самостоятельно. Так можно было бы вырастить отличных программистов имхо.
Так так и делают (я в том числе).
А небезизвестный олимпиадник Гена Короткевич, выигравший все и вся на олимпиадах в 1 классе начал программировать (благодаря тренеру, разумеется).
Ну если уж въедаться, то Гена начал программировать во втором классе, и это был толчок его отца.
Гуманитариям можно преподавать основы работы с электронными таблицами.
А заинтересовать учеников можно чем угодно, был бы только хороший преподаватель.
Я за C#\VB.NET. Они позволяют быстро накидать визуальную програмку и сделать простые действия в духе «взять число из едитбокса, добавить другое, показать в месседжбоксе». Это там делается быстро, наглядно и, главное, сразу видим на выходе какой-то результат. Что приятно.
Пока студия будет запускаться урок закончится)
Ну, по-хорошему, учиться нужно на нормальном оборудовании. Я понимаю, что оно мало где у нас нормальное — но автор опроса ведь не уточнял ограничения и страну обучения.
Учить программиста с бейсика — это обрекать его на участь быдлокодера!
Вы только что уронили мою самооценку.
Согласен, причём, сразу же можно приучать к ООП.
Первый год изучается сам язык, без упора на объекты и т.д., а второй — ООП, как основная парадигма программирования.
Вы не ответили на мой вопрос
Ага-ага, пусть, когда вырастут, так же парятся со всякими дедлоками в мире многоядерных компьютеров! К чёрту функциональщину и Erlang! Это ведь сложно, да? )
UFO just landed and posted this here
К концу семестра какого курса?)
UFO just landed and posted this here
шутки-шутками, но не стоит забывать что без базовых 900 часов, ничего бы не вышло за выходные ;)
конечно, возможно, в индивидуальном порядке базовые 900 можно сократить до 100 или 50 или и того меньше, но это в индивидуальном, и не стоит забывать что у нас общеобразовательная школа, а значит индивидуальный подход тут крайне редко можно встретить…
Для тех, кто не планирует когда-либо заниматься программированием лучше всего в школе изучать Visual Basic. По крайней мере, после изучения кто-то из них хотя бы будет способен написать макросы в Excel и это единственное практично полезное что они смогут вынести из курса. Pascal, насколько он ни был бы хорош, практического применения в повседневной жизни не имеет. Да и Visual Basic по сути не особо сильно отличается от Pascal.

Для специализированных школ типа физ-мата (выпускники которых часто идут в ИТ), ИМХО стоит преподавать Ruby. Чистый, и хорошо читаемый синтаксис, не слишком сжатый как у Python, современное ООП с элементами функционального программирования. Отсутствие вещей типа статической типизации или memory allocation, позволяет лучше сконцентрироваться на решении задачи, сути алгоритмов и абстрагированное представлении реальности через объекты.
В Ruby есть TIMTOWTDI и всякие некрасивые вещи типа to_s, to_i и т.п. Но в целом почему бы и нет :)
Очень четко помню как в 9 классе открыл книгу по c++ и ничего не понял, сейчас смотрю в код — вроде очевидно всё, а тогда даже хелловорлда разобрать не смог. Первым языком должен быть очень простой язык, без лишних конструкций, бейсик подойдет, паскаль слегка сложнее для понимания.

Вот кстати идеальный вариант для школы — ru.wikipedia.org/wiki/Microsoft_Small_Basic
Очень много школьников испытывают проблемы с использованием Проводника и регистрацией электронной почты (во всяком случае, у нас так было). Поэтому начинать нужно с самого простого языка, имеющего минимальный API и синтаксис (что-то вроде NXT-G от LEGO и подобных). Мы программировали поведение таракана в лабиринте, что даже самым тугим давало понятие об алгоритмизации и процедурном программировании. ИМХО, нужен подход в зависимости от успехов, кому Basic, кому С++.
Боюсь оказаться опять маргиналом, но почему бы не ассемблер? У меня вот понимание устройства компьютера пришло после курса старого ассемблера для 8080. После этого осознал как работают многие вещи в С. Возможно, это лично моя ситуация, но мне чем ниже уровень тем проще понять.

Так вот, я не говорю давать детям так вот прям ассемблер с директивами, макросами и тысячами мнемоник. Существуют специальные учебные «ассемблеры», самый известный, пожалуй, LMC — en.wikipedia.org/wiki/Little_man_computer Боюсь только что детям без графики/GUI будет неинтересно.
Да, и софтайс не забыть сразу, полезный навык игрушки отламывать:)
Если уж на то пошло, для программиста английский не менее важен.
А вот для школьника — не знаю, не знаю…
Алгоритмы, блок-схемы (мелом на доске, да-да). Этого более чем достаточно, чтобы вложить в голову все самое необходимое.

В конце концов, пешеходам необязательно учиться на права, чтобы выучить правила ПДД.
В бытность мою учеником 11 класса школы, никогда не забуду уроки информатики, на которых в качестве интерпретатора бейсика выступал один из учащихся. Вызывался ученик, ему выдавался текст программы, а он мелом на доске, в специальной табличке, записывал стейт на каждом шаге выполнения программы:)
Мы так по блок-схемам гуляли )) Не хуже лабиринта
Угу, только где программирование — не понятно.
Дык о чем и речь — зачем программировать-то? Надо сперва научиться мыслить логически. А потом уже, если кому потребуется, — дополнительный факультатив по информатике.

Иначе такими темпами юристы потребуют изучение всей базы законов, кодексов и т.д., вслед за ними активизируются экономисты, строители и кадровики. Чуть позже заявят о себе военные, и мы будем отправлять детей на военные сборы в летние каникулы ;)
Ну это все слишком абстрактно.

Разговор шел, очевидно, про уроки информатики и языки программирования. Я совершенно уверен, что основы программирования должны быть, причем не абстрактно на доске, а на вполне живых компьютерах. Другой вопрос как это должно преподноситься.
Основы программирования — это как раз и есть алгоритмы. К сожалению, для применения их на живых компьютерах потребуется изучать собственно ЯП. ИМХО, в школе это лишнее. Максимум — использовать программы для рисования блок-схем или интерактивные обучающие игрушки.
Программирование это процесс создания программ для компьютера. С помощью блоксхем и алгоритмов можно познакомить ребенка только с блоксхемами и алгоритмами. Это будет мертвый груз знаний, которые непонятно куда применить на практике.
Этот «мертвый» груз знаний Вы (я на это надеюсь) применяете каждый раз, когда что-то программируете. Это необходимый базис, просто в дальнейшем Вы его оборачиваете в термины конкретного языка.

А вот у изученного (интересно, насколько он будет изучен?) ЯП есть очень высокие шансы стать тем самым мертвым грузом.
Не, я ничего не применяю, всего лишь пишу программы, которые стараются приносить пользователям радость:)

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

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

2. А я про всякие там паттерны что-то говорил? :)

3. Вот именно, что это школа, и тут надо базис преподать. Зная, как решить задачу абстрактно, на уровне алгоритмов, Вы ее решите на любом языке программирования. И не потребуется погружать школьников в глубины языкознания. Тут надо научить головой пользоваться, а не функции заучивать.
Боже мой, да не надо на Вы, что за снобизм.

Кодерство, программирование, мне по барабану как это называется. Главное чтобы задачи решались в срок, код был адекватным, багов было минимум, программисты не работали по ночам и клиенты были довольны. Я предпочитаю работать с теми людми у которых есть «жизнь» и которые не считаю богами тех у кого ее нет.

«Зная как решить задачу абстрактно» — какую задачу? Сортировка массива? Решение квадратного уравнения? Олимпиадные задачки по информатике? О каких реальных задачах идет речь в контексте школьного программирования? Это все ковыряние в песочнице. Нет тут никаких задач, которые нужно уметь решить на любом языке программирования. Ни о каких глубинах языкознания речи нет. Разговор идет о том, что надо пощупать руками, да так чтобы интересно было. Большинству школьников совершенно не нужны все эти джавы, с++ и питоны. Но им нужно показать что программы не на деревьях произрастают, нужно показать что их пишут люди и как они это делают, пусть даже в сильно упрощенной форме. Тогда те, кому будет вся эта кухня интересной, выучат и алгоритмы и с++ы и ООП при необходимости и еще миллион других вещей, которые появятся к тому времени как они закончат школу.
Ну не запомнятся знания без практики вообще. А как только решаем давать какую-то практику, то встаёт вопрос на каком языке её давать. На чём алгоритмы реализовывать.
«Дорогие пятиклассники, а теперь попробуем развернуть массив. Для начала заведем указатель и выделем кусок памяти при помощи написанной нами на прошлом занятии функции malloc(). Не забудьте привести результат функции к типы (int *)! А того, кто после этого забудет вызвать free(), я заставлю после уроков паять RAM-платы такого объема, сколько памяти утекло при выполнении его программ!»

Те, кто проголосовал за СИ/СИ++, видимо, будут бить своих детей за четверки в школе.

В школе информатики не было, но на курсах при университете учили ruby.
Преподаватели сказали, что выбирали между ruby и python, но когда вспомнили о роли отступов в последнем варианте и представили, как будут у школьников лишние табы и пробелы отлавливать, выбор стал очевидным.

Думаю, выбор был правильным. Фракталы, черепашья графика, основы алгоритмов. Если я на втором семестре смотрел на объявление функций в Java как на магию, то что говорить о школьниках.

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

И я думаю, что лучше именно в этой последовательности, т.к. C++ после Ruby будет казаться более гибким и мощным, а вот если переходить с C++ на Ruby, то будет казаться, что Ruby — это просто, а поэтому современно, а C++ устарел.
Не удалось, за ответ спасибо, все наверное, так и есть:) Правда С++ это все-таки не школьный уровень:)
Согласен, но если класс с уклоном в информатику, то пойдёт.
/me Поглядывая на результаты опроса… вы тут все совсем что-ли психи?
Какой C? Какой Pascal? Какая Java?

Это школа! Не университет. Школа призвана вызывать у ученика желание учиться дальше, а такие языки как C, Pascal и.т.д. и.т.п. вызовут как минимум ужас у незнакомого человека.

Другое дело Scratch, неплохо развивает детскую логику. Не строчки кода там конечно писать не нужно но думать логически очень даже нужно.

В классе так 10-11, можно давать самые, самые основы C. А кого заинтересует, тот уже сам будет дома заниматься.

Возможно у меня просто был тупой класс или плохие преподователи информатике, но обычных мальчиков и девушек вы ни за что не заинтересуете быть в будущем программистами если будете начинать с C подобных языков.
Проголосовал за Python, но с какого класса нынче в школах идёт именно программирование? У меня, например, до 8го класса оно было факультативным, а на уроках информатики рассказывали в-общем об алгоритмах, об устройстве компьютера и т. п. В 8-9 был Basic, c 10 по 11 — Pascal, но мне и ещё паре человек не запрещали писать аналоги на C. А вот мой нынешний непосредственный руководитель на работе 10 лет назад читал Python в институте на постоянной основе и ратовал за то, чтобы его преподавали и в школе. И по моему мнению в старшей школе его изучать гораздо лучше, его отступы на самом деле дисциплинируют гораздо больше, нежели рассказанные конвенции кода, принципы оформления и т. п. Хотя Basic в средней школе тоже cтоит изучать, для объяснение алгоритмов, например.
А ведь были же ещё старые досовские обучающие игры советской разработки типа крота с ящичками в подземелье, где надо было писать ему команду типа ВВЕРХ, ВЛЕВО; или паучок-машина Тьюринга, где были даже простенькие ветвления; или развести поезда по тупикам опять же набором команд для паровоза.
Игры — это круто, но от силы до 7-8 класса. И мне это представляется наиболее подходящим методом обучения в младших классах — планирование выполнения, аналогии с переменными (положить что-то в миску, добавить в эту миску еще что-то, перемешать, положить в тарелку) все в игровом формате. Затем прописывание явных наборов команд. Потом уже и к собственно современным программам переходить.
А стоит ли вообще изучать в школе программирование? Если это не специализированная школа, то для человека полезнее знать устройство компьютера + прикладное обращение (офисы, оси) и понимание оперируемых терминов, которые человеку в дальнейшем бы помогли углубиться в изучении ЯП. Преподать хотя бы эти азы года-двух может не хватить.
использовать Чертежник
алг
нач
опустить перо
установить цвет ("красный")
сместиться в точку (2,2)
поднять перо
сместиться на вектор (0,-2)
опустить перо
установить цвет ("синий")
сместиться в точку (4,2)
кон

Так всё и началось…
О да… было дело… вот только к сожалению я никак не ассоциировал это с программированием… Как собственно и Интал…
Учиться лучше на компилируемых ЯП, но максимально защищающих от самых распространенных ошибок (тех же опечаток).
Почему компилируемых? После транслирующих скриптовых тяжело «сползти» на более низкий уровень, а в нем столько всего интересного и полезного.

Выбрал вариант Паскаля (при этом крайне против Delphi в качестве первого ЯП. Еще больше против Oberon/BlackBox — там сама среда против разработчика :)
В обучение Паскалю, на мой взгляд, плохо только с нормальными IDE.
К слову, за период преподавания программирования студентам младших курсов (давали мы тогда Pascal) не припоминаю случаев, когда проблемой решения задачи становился язык. А народу было много.

«C» и все языки на его «основе» категорически не подходят ввиду сложности синтаксиса и неоднозначностей. А уж сколько проблем с теми же = и ==.
Впервые познакомился с C уже после использования Pascal и TASM/MASM32 на протяжении нескольких лет. Не жалею.
А интерпретируемый язык не может быть строго-типизированным?)
Я вроде ничего не говорил о типизации, но если вы про «После транслирующих скриптовых...», то я тут рассматриваю разницу в контексте понимания происходящего: разобравшись в языкы, можно изучать как реализованы отдельные конструкции и что происходит на более низком уровне, чем представлен кодом.
В интерпретируемых ЯП между кодом и железом гораздо больше слоев.
Я сам просто прошел подобный путь, скатываясь от чистого Паскаля с его TurboVision и Graphics (если не ошибаюсь), до прерываний, DMA, страничной адресации видеобуфера, защищенного режима и подобных прелестей :)

Сначала учим язык, алгоритмы и структуры, а потом можем в контексте этого же языка разобраться, как это все работает.
Ради понимания происходящего.
Мама, а зачем нам это все в заапаркешколе?)
Это уже не обязательная программа школы.
Тем, кому это интересно, удобней разбираться уже зная язык.
Тем, кому это интересно, разберутся сами, невзирая на интерпретируемость языка. В школе компиляция не нужна даже даром. Нужен REPL, который для компилируемых языков редко у кого есть.
> После транслирующих скриптовых тяжело «сползти» на более низкий уровень, а в нем столько всего интересного и полезного.

Ничем недоказуемое утверждение. Особенно для школьной программы.
Знаете, как говорят… «Выучил С++ — сможешь выучить что угодно. Выучил C# — не сможешь выучить больше ничего» :) Звучит холиварненько, конечно. Но исключительно по своему опыту (а как иначе?) могу сказать, что спускаться на уровни ниже зачастую гораздо сложнее. Возле меня вот сидит коллега, который программировал уже тогда, когда я ещё в школу не пошёл. Он всякие мудрёные баги с помощью дизассемблера ищет, а я сколько ни пытался себя на это сподвигнуть — не могу и всё тут. Без нормального дебаггера, порой, и не разберёшься.
При этом некий Линус Торвальдс ругается на С++, так как он слишком далек от железа:)
А искать баги в большом проекте на, например, плюсах с помощью дизассемблера — это жестоко:)
Ну, кагбэ, поэтому я на С++ и программирую, а не на С. На уровень ниже уже вряд ли спущусь. Выше — пожалуйста.

А искать баги в большом проекте на, например, плюсах с помощью дизассемблера — это жестоко:)

Работа такая, что поделать.
А можете рассказать? Интересно узнать примеры, когда нужно копаться в сгенерированном машинном коде.
Лучше не буду. В нескольких словах: программируем под девайсы, дебажный билд под которые не собирается (очень тяжёлые либы), а эмулятор — говно. Некоторые баги проявляются исключительно на девайсах.

Ну, это редко, Вы не думайте. Но я бы не стал касаться этого даже трёхметровой палкой.
> Знаете, как говорят…

Да и на забор емного чего написано :-\

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

Зачем нужны эти нижние уровни в школе?
Моим первым языком был Prolog, но ещё давеча я писал весьма низкоуровневый код под QNX. Какие далекоидущие выводы можно из этого сделать? Думаю, что никаких — не стоит обобщать не слишком умные фразы.
Я всё больше и больше начинаю склоняться к мнению, что в обычных школах программирование вообще давать не нужно.
Математику нужно давать в школах, потому что позже слишком сложно будет её усвоить. Возраст, память уже не так… А вот с программированием при желании можно разобраться и самому, особенно на математическом грунте.

P.S. Уж извините, по ссылке «многабукаф». Добавлю, пожалуй, в ReadItLater, почитаю в метро.
Это очень грустно. И поделать ничего нельзя — выбирать приходится между плохим и еще худшим :(
Детям очень нравится строить игры, просто нужно уроки преподавать в интересной форме, а не в той форме что существует сейчас (препод копирует с инета практические, печатает и раздает всем). Лично я вообще программировать начал с Warcraft III Maps Editor'a, респект его создателям — blizzard, игра на века)
Сюда можно добавить редактор скриптов в TES Morrowind. Мой друг учился в нем программировать.
А еще конфиги Дюка и конечно же build :)
C/C++ классно, но вы думаете школьный учитель информатики может его преподать?
Проблема не в учителе, проблема что с 5 по 11 классы при уроках раз в неделю на информатику выделяется 7*8*4*45/60 = 168 часов. За это время школьники должны выучить язык программирования, набор основных алгоритмов и структур данных. А теперь представьте, что перед вами пятиклассница. Ей очень нравится история и английский. Математику она списывает у соседа по парте. Скажите, как вы её будете обучать C++?
Эта пятикласница вообще никакой язык программирования не выучит, потому что для большинства школьников информатика это урок где можно «вконтакте посидеть».

Но всё же, в учителе еще какая проблемма, 95% учителей информатики сами этот C++ не потянут, не говоря уже о том чтобы объяснить.
Понимаете в чём дело, бейсик таким объяснить можно. И это в большинстве случаев делают. Там нет никаких сложных абстракций, простой набор команд. В случае с плюсами же это не реально.
Там выше говорили что Си это от вундеркиндов или психов, но мне кажется, что в школе любое программирование — лишь практика для тренировки мозга, чтобы научиться воспринимать компьютерную информацию в немного нестандартном виде. Да, задания несложные, но написать алгоритм для их решения — можно на любом языке, и если он будет всего лишь чуть сложнее паскаля — ничего страшного нет в этом. Все-таки будущее поколение сможет чуть быстрее все это схватывать.
Да скорее даже не практика тренировки мозга, а подача информации о том, что в программировании нет ничего сверхестественного, что компьютер лишь выполняет инструкции, написанные другими людьми и ничего сам «придумать» не может. И не нужно быть гением, чтобы эти инструкции писать. Что любая программа сводится к элементарным действиям. Если программа «умная» — значит кто-то все варианты этого «ума» предусмотрел и написал.
Если выбирать из предложенного, то python однозначно в средних и старших классах, когда дети уже серьезно задумываются о будущем вообще и выборе карьеры в частности. В младших классах хватит и Лого или чего-то вроде него (простое, интерактивное, без кучи как и абстракций типа класса или функции высшего порядка, так и деталей типа размера int на конкретной платформе, выделения памяти и работы с указателями). И да, на русском.

P.S. Опрос составлен некорректно, самое главное нет варианта «Другое (допишу в комментах)». И почему его нет по умолчанию.
Почему в списке нет ассемблера?:)
Есть, С это и есть почти ассемблер, но с человеческим лицом.
«Почти» — в данном случае означает разницу между человеческим лицом и картиной «Жопа. Вид спереди»:).

Если на то пошло, старина Delphi куда лучше компилил в машинный код и интегрировался с асмовыми вставками.
Какое это всё имеет отношение к обучению программированию?
Холивар о скорости и качестве компиляции — никакого:). Но вот приравнивать C к асму… Я бы очень хотел посмотреть на того, кто исследует написанный хз на чем софт, декомпилируя его в C:)
В начале 90-х это работало. Брался дисассемблерный листинг. В нем узнавались if-ы и циклы, обращения к массивам, арифметика — и писались в виде комментариев. Или наоборот, ими заменялись фрагменты asm. Иногда то, что получалось, было читать проще, чем исходный текст. Как сейчас — не знаю.
Си — это такой кроссплатформенный ассемблер, обросший за полвека кучей плюшек. От наличи этих люшек он кроссплатформенным ассемблером быть не перестал и активно в этом качестве используется.
Назвать C кроссплатформенным ассемблером — все равно что женщину, извините, кроссплатформенной девственницей:).
Именно в таком качестве он и создавался, читайте историю создания языка.
Delphi компилил в машинный код лучше, чем С? ORLY?
В этот раз, пожалуй, обойдемся без злостного оффтоп-холивара о философском значении слова «лучше»:). Но как минимум быстрее тогдашних визуальных средств разработки на C++ под Windows.
Ох, я прочитал название опроса «какой язык был у вас первым в школе».

А если вопрос в том, с чего начинать учить детей, то, конечно, с чего-то простого, выразительного, наглядного и графического.
Например упомянутый Scratch вполне себе. Сишечки, джавы и прочие C# в обычном классе не нужны.
Огромное число голосов за C++ ужасает!
Да в школе, если 1 человек из класса поймет, что проходят на уроке — это БПП (большая педагогическая победа).
Весь курс выродится в итоге в разговоры вокруг да около printf(«hello world!»); т.к. большинство не будет понимать, и учителю придется растолковывать все заново
:) Это просто в опросе нет пункта Haskell. Если бы был, то Вас бы ужасало число голосов за него. Ну любит народ меряться…

А вообще, Си не так уж и страшен. Нас на нём учили в 8 классе, и вроде, ничего так пошло. Даже поиск на графе писали и трансляторы в обратную польскую запись. Си — очень простой язык, если не залезать в 100500 случаев неопределённого поведения. Но, как бы, а зачем в них залезать? Ученикам же не рассказывают на уроке информатики про то, что если в нос засунуть длинный гвоздь, то наступит неопределённое поведение в голове, которое выразиться в неопределённом поведении написанной программы.

Всё в мире является открытыми системами… И, может быть, Си как раз оптимальный вариант для научению этой простой истине?
>А вообще, Си не так уж и страшен. Нас на нём учили в 8 классе, и вроде, ничего так пошло.

Вообще надо различать обучение программированию в школе и в вузе. Есть ведь ещё и вопрос квалификации преподавателей, где взять столько знатоков C, который требует большого опыта? Может быть даже Basic будет оптимальным.
> C++
> printf(«hello world!»);

как-то это взаимосиключает :)
В пункте голосования стоит С\С++.
В принципе обратная совместимость все-равно есть, так что норм
За printf в C++, ИМХО, надо бить по голове Страуструпом вплоть до достижения просветления.
Вы думаете, что в школе учителя смогут поддерживать стандарты языка?
У нас в школе в 1993 году поставили класс 286 IBM-ок по программе Pilot School. Там были два замечательных языка программирования: кенгуру и пылесос. Оба на русском языке. Программы представляли набор инструкций по управлению кенгуру, который мог поворачивать идти (оставляя след) и прыгать (не оставляя след), пылесос перемещался по ячейкам шкафа и мог засасывать вещи в карман и помещать из кармана в текущую ячейку. Ну и конструкции вида «пока впереди не край повторяй», «если ящик пуст» и т.д. Для знакомства школьников с основами алгоритмов было просто великолепно. Да потом у меня были Basic, Pascal, в институте Delphi, сам сейчас пишу на C#, но вот те языки — это супер.

P.s. О! Точно! У меня старший сын скоро уже сможет всем этим интересоваться, а не пора ли взяться за написание кенгуру и пылесоса для него…
UFO just landed and posted this here
Может, Pascal и хорош, но меня в своё время дико раздражала «так называемая IDE» с восьми цветами. Уж лучше C в Visual Studio Express. Хотя начинать надо с алгоритмов, конечно же.
UFO just landed and posted this here
В принципе и я склоняюсь к C#, но знакомых, кто бы с него начинал у меня нет, поэтому показать на примере(выявить по факту плюсы и минусы) не представляется возможным. А говорить голословно не хочу, так как не имею необходимой квалификации. Не педагог я.
Хоть я и противник Pascal/Delphi — Всё-же паскаль должен быть первым… Он научит в довольно простой форме написанию алгоритмов и объяснит логику программирования…
Хотя… конечно всё зависит от препода…
Я сильно удивлен, что большинство голосует за C/C++. В школе как бы основы программирования нужно преподавать. И язык этот должен иметь простой и ясный синтаксис.
Скорее всего, большинство голосующих просто забыли свои школьные годы. И то, что изучить ЯП без понимания основ алгоритмизации — все равно, что изучить ПДД (не практикуясь в вождении) и сесть за руль автомобиля.
А основы алгоритмизации и на псевдоязыке можно изучать. Плюс нужно читать уйму литературы по оптимизации, чтобы не писать слишком уж злостный «быдлокод».

А насчет школьников и ЯП — я вел когда-то (работал преподавателем 4.5 года) информатику в ПТУ («колледже»). Контингент там сами знаете какой, так что, все мои попытки добиться от них хотя бы поверхностного понимания алгоритмизации обернулись неудачей. Ну, оно и понятно: зачем сварщику/строителю/etc с этим заморачиваться?
Поэтому программа была переделана и студенты изучали то, с чем им придется столкнуться (начиная с железа и заканчивая тренировкой 10-пальцевой печати). По крайней мере, хотя бы системник «процессором» не называли, и знали, с какой стороны к компьютеру подойти. Да и про существование линукса узнали, и что он — не такой уж и страшный (все компьютерные классы, а их там было 3, были только под линуксом — что и удобно, и спокойно).
Вопросе нет ни одного функционального языка, а жаль :(
суть опроса в языке с которого стоит начать преподавание, а не вообще что стоит преподавать, или вы действительно считаете, что стоит начать с функциональных языков прямо классе так в первом???
А почему нет? Функциональный язык намного ближе к математике, которую начинают изучать в школе примерно в это же время.

Сложность в изучении функциональных языков сходит из нашей привычки к императивным языкам.
Соглашусь по поводу привычки к императивным языкам. но в таком случае нужно упрощение функционального языка до самых основ (как лого), а такого аналога я не знаю. Лисп все-таки сложен для школ… да и в университете у нас не все его сдали с первого раза ((
Схема как раз и есть тот самый упрощенный лисп.
Функциональный язык ближе к лямбда-исчислению, которое на 2м курсе взорвало мне мозг на «Теории доказательств».
Ну взорвать мозг можно кому угодно и чем угодно. Понятно, что программа должны быть адаптирована.
Я вот жалею, что нам не дали первым языком какой-нибудь Scheme. И даже просто не сказали, что «обычные» языки это императивные, но есть и другие.
По мне полноту осознание может дать только C++, только господа — не надо насиловать школьнков программированием )) Ну правда, обучение специальности — это институт, а у школы немного другие задачи. Так что история, русский язык, литература, математика, химия, физика на шольном уровне куда важнее программирования
1.Во-первых в общеобразовательной школе изучать глубоко программирование всё-таки не нужно, за исключением может быть специализированных школ.Большинство выпускников никогда не будут писать код, а поэтому учить всех программированию — занятие глупое, нужно учить скорее навыкам пользователей.
2. Если всё же преподавать программирование, то я бы выбрал python (или ruby ).
Почему?
1. Наглядность и читабельность кода. Первое чему нужно учить-это писать хорошо оформленный и ясный код
2. Язык позволяет демонстрировать разные парадигмы — OOP, функциональный и процедурный подход
3. Всё изученное не пропадёт при дальнейшей профессиональной работе.

Мне кажется что с/c++ и java в качестве первого языка программирования не годятся(слишком многословные ЯП).
Паскаль и Бейсик — это уже достаточно немодные языки и трата времени на их изучение -занятие пустое.

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

И сейчас я снова собираюсь вести спецкурс и глубоко задумался над темой, технологией, средой разработки, над тем как завлечь детей(дети старших классов). Может кто-нибудь подскажет, что-нибудь на эту тему? (Есть я знаю классная вещь processing, можно поучить чему-то высокоуровневому вроде python, игры на python, но у меня рука не поднимается, это как-то наверно слишком — начинать с питона, или какой-нибудь c# ) Может взять тот же си, но сразу какую-нибудь графическую либу, движок игровой, чтобы всё было наглядно и интересно? Есть мысли?
Выше я приводил пример простой графической программы на python. Это, по-моему, куда проще для детей будет, чем использовать аналогичную по функциональности либу на Си. Особенно если действительно что-то типа игры будете писать или просто движущиеся фигуры, где не числа будут, а переменные.
Я видел, как некоторые ученики входи в ступор при объяснении указателей. Си хорош, для того, чтобы объяснить всё на низком уровне. Но чрезмерная сложность отпугнёт и отобьёт желание учиться. Поэтому для начала надо что-то попроще.

Вообще, проблема обучить программированию связана не только с языком. Задачи — они не интересные для мальчишек и девчонок. Ну кому охота перебирать массивы пузырьком в свои 10-12 лет? Где-то на Ted.com видел отличное видео, где учитель рассказывал, что учил управлять роботом (такой, вроде пылесоса). Робот получал команды от компа по Buletooth. Там было 2 функции:
1. move(speed_left, speed_right) — скорость левого и правого моторов
2. stop() — остановка

И ученики сразу видели — они написали простую вещь — и она работает, и наглядно! А уж потом стали разбирать, как писать свои функции, для чего нужны переменные и пр. В итоге: многие ученики сказали, что хотели бы, чтобы и остальные уроки им преподавали так же. Жалко — видео не могу найти.
Ну не знаю, я когда написал свою первую прогу в которой ездил паровоз (из прямоугольников) с одного края экрана до другого был безмерно счастлив. Без всякого блютуса.
Да сам испытывал подобное. Но и Вы и я были изначально увлечены и заинтересованы. А вот как заинтересовать целый класс учеников — это проблема. Конечно, всегда будут те, кому лень и неинтересно. Однако, продуманная программа обучения и хороший учитель способны увлечь — это я точно знаю.

И если хороших учителей (как и любых других профессий) не хватает, то вот программу образования можно сделать интереснее. Я ровно про это.
Был раньше такой язык (а может и сейчас где-то есть), назывался он Фокал :)
Располагался он в блоке мониторинга и системной диагностики, а бэйсик, если не ошибаюсь, был встроен.
Каюсь не осилил все на данный момент 615 комментариев прочитать, но из того что я прочитал тема без этой картинки кажется не полной
UFO just landed and posted this here
И еще — ребенок (ученик) садясь за компьютер, уже знает о его возможностях. Минимально дети видели игрушки в телефоне, максимально — у них есть ПК с «контрой» или «симс», или приставка. Вы же со своими Питонами и Сями предлагаете наебать ребенка наблюдать вывод в консоли белыми буковками на черном. Он даже в кино уже такое не увидит, серьезно. Конечно, безусловно и ваще — потом, если ребенок захочет стать серьезным, он познает дзен шелла. Но в школе пускай он будет не в шелле. И ему будет рпоще похвастаться чем-то понятным на экране перед родителями.

Результат должен быть виден и похож на существующие аналоги. Пусть дети делают калькуляторы, а кто продвинут — пасьянс.
Не знаю как с сями сейчас, но на питоне оконные приложения пишутся без особых проблем. Уж точно проще, чем работа с GDI или MFC.
GDI или MFC
Не надо приводить римеры технологий 20-илетней давности. Есть такая штука как Qt и QML.
Я имел в виду в том числе и PyQt/PySide :)
Я в танке, или PyQT требует руками получать элементы для навешивания обработчиков, т.е. нельзя (по аналогии с delphi/c++ builder) щелкнуть по кнопке в каком-нибудь QT Designer и писать код непосредственно обработчика?
И все эти QApplication содержат довольно много магии.
Сигналы и слоты связывать можно графически. Насчёт их обработчиков не скажу, не люблю «рисовалки» со времён MS Access 97.
А вы на QML сами писали? Никак не скажешь что это проще и быстрее чем даже MFC. Там ведь даже нет стандартных компонентов.
Кагбэ есть. Qt Components for Desktop. Как у Вас язык повернулся сравнить это с MFC, я вообще не могу понять? Баттхерт какой-то…
Это сторонние компоненты. Я сравнил по времени затрачиваемому на разработку. Попробуйте на QML нарисовать интерфейс для работы с таблицами, например. Вспомните еще MFC добрым словом.

Qt Components for Desktop — это сторонние компоненты вообще-то.

PS: MFC конечно ужасен, я сам его ненавижу. QML нравится но пока годится только для мобильных приложений.
Qt Components не настолько сторонние, чтоб об этом аж два раза писать. Их разрабатывает та же Нокла.

Про MFC я добрым словом никогда не вспомню. В Qt есть отличные виджеты для таблиц. При желании можно и QML-обвязку написать.
А еще QML сильно тормозит под WinCE. Очень. MFC с точки зрения ресурсов принципиально экономичнее.
WinCE, MFC… У Вас в криоген что ли потёк в камере?

P.S. Не в обиду :)
Не обижаюсь :) Занимаюсь специфическими решениями, в т.ч. POS-терминалами на ARM+WinCE. Будете смеяться, но такие POSы только входят в моду благодаря своей дешевизне, так что работать с ними еще долго придется.
Ну я так сразу и подумал кстати. Это первое, что пришло в голову, ибо не знаю, где WinCE ещё можно юзать.

P.S. Я, к слову, и сам не так уж давно под эту ось писал.
Покажусь, вероятно, ретроградом, но я выступаю за старый добрый бейсик в качестве первого языка программирования в школе (ключевые слова: «первый» и «школа» :) Причем, упор первоначально делать на какие-то простые графические, радующие глаз, вещи (типа программы «разноцветные лучи» =), чтобы у детей просто проснулся интерес к компьютерному творчеству.
Согласен с тем, что лучше бэйсик, чем плюсы или джава. Но всё же, имхо, есть более современные языки подходящие на роль первого в школе не хуже. Упомянутый в опросе питон, например.
Есть специально созданный не так давно для обучения детей Small Basic
SmallBasic очень неплох, но с ходу придётся хотя бы в двух словах дать понятие объектам.
вот это как раз не сложно, мне кажется. Возможно проще, чем понятие «переменная», с которой я помню у кого-то возникали сложности, из тех детей кому я объяснял.
Да, в логику это укладывается хорошо. Но это обрекает на ООП головного мозга тех, кто станет программировать дальше.
Функциональщик детектед :)
Ох щщиии. Палево :) У меня ж на аватарке С++! :3
Потому что все языки, почему-то преподаются в отрыве от математики с извращениями типа «вот ячейка памяти, мы ее присваиваем этому значению с именем таким-то».

Нахуа? :)

Почму-то у детей не возникает никаких проблем с

f(x) = x + 1
y = 1
чему равно f(y)?
Наверное, потому что в связи с математикой сложно объяснить x = x + 1, не говоря про x++ :) И, кстати, это одна из основных причин почему я считаю, что первым языком в школе (если не брать начальную школу — там типа Лого без всяких переменных-переменных (максимум переменные-хначения): «иди вперёд на N клеток или пока не уткнёшься в стену») должен быть либо функциональный, либо мультипарадигменный с упором в начале на функциональную его часть, а лишь затем показывать структурную.
Бльоооо, что ж Вы со своим питоном-то носитесь?! Бейсик практически идеален в качестве первого языка. Не нужны мне отступы в 14 лет и даром, не нужны мне ваши библиотеки, не хочу я разбираться, как их устанавливать и куда. Я хочу написать десяток инструкций в ряд, которые дадут мне графическую анимацию на экране.
Потому что считаю его не хуже бэйсика для обучения, но в отличии от него питон годится не только для обучения. Не просто научить азам программирования можно, но и дать толчок к профессиональному росту при наличии рядом человека, который подскажет что-то непонятное и укажет на недостатки кода. Я когда в школе Си изучал мне никто кроме K&R помочь не мог, а они только в читальном зале, учительница знала только бэйсик и потом узнала паскаль на курсах повышения квалификации.

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

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

А дома среду аналогичным образом настроить нужно, не?

Я начинал с бейсика, и научился не только азам программирования, но и получил толчок к профессиональному росту. Через полгода перешёл на Pascal, ещё через год на С. Но того удовольствия, которое я получал, программируя на BASIC, я уже не получал никогда. Да, мне нравилось и нравится программировать на других языках, но уже исключительно потому, что мог сломался в эту сторону, а не потому, что это просто было интересно и занимательно.
А бэйсик как настроят дети аналогичным образом?

А я начинал с ассемблера. Иначе бы бэйсик портировать на свой комп не смог. Когда он заработал — вот это было удовольствие! А когда писал на бэйсике, то, грубо говоря, понимал какие функции «BIOS» вызываются в ответ на мои команды типа PRINT или INPUT и что по каким адресам в видеопамять пишут команды типа LINE — никакого удовольствия, только кода писать меньше.
А бейсик (внезапно) не нужно настраивать. Его можно скопировать и вуаля.
А питон нельзя? А лицензия на бэйсик свободная?
Какая нах лицензия? Сорцы доса давно открыты. Бери и юзай.

Питон можно, ага. Вы даёте гарантию, что не будет головняка с переменными окружения и подключением библиотек?
Пропустил как-то это событие. Неужели MS в public domain передала?

А вы даёте, что бэйсик под вайном заработает? :)
Под чем? ) Какой ещё вайн? Если у школьника стоит линукс, то с большой длоей вероятности он уже ходит с бородой и программирует на баше.
Вон у соседской дочки (14 лет) стоит Убунта (можете попробовать угадать, кто её поставил :) ). Ей что делать? Трясти родителей на винду вместо сапог?
Трясти родителей на предмет объяснить WTF.
Ассемблер это бейсик уровня железа.
Программирование должно быть интересным: mindstorms.lego.com/en-us/history/default.aspx

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

Втянутся — можно переходить на что-то другое.
У меня в 5 классе был какой-то лохматый бейсик на советских еще компьютерах. собссно мы там изучили только операторы LINE, CIRCLE, COLOR
Простите, продолжу. В следующей школе был ЛОГО, после бэйсика казался WTF'ом. Потмо был снова бэйсик, уже QuickBasic 4.5 Практически полноценный язык который я знал от корки до корки, включая работу с прерываниями. Вощем-то по простоте понимания и возможностям бэйсик наверное лучше всего. Но если хочется приввить ребенку не только интерес но и какие-то правильные вещи то наверное паскаль или C#
Удивлен, что всеми любимый PHP не втулили. Вообще я скретч в глаза не видел, по этому проголосовал за бейсик. А те, кто проголосовал за C/C++ либо слишком молоды и амбициозны, либо психи, либо в понедельник не проснувшись промахнулись пунктом.
Хотя сам люблю PHP, но проголосовал за Python. Опрос ведь не «любимый язык» :)
Да вот смотря на результаты такое впечатление, что в начале вопрос звучал как «Самый крутой ЯП», а потом поменяли на «Какой язык программирования должен быть первым при изучении в школе?».
И как вы себе представляете первый урок? Давайте дети поставим апач, прикрутим к нему PHP, MySQL, поставим notepad++ писать будем в блокноте а смотреть в браузере? Бред

Ребенку надо написать пару строк и нажать «PLAY» тогда первый барьер в виде инструментария разработки будет легко преодолим
я не предлагаю PHP. То был сарказм. Я вообще к PHP не отношусь серъезно, но то уже мои проблемы.
Поясняю для тех, кто не понял. Про пхп был сарказм.
Почему не упомянули C#? Язык не сложнее бэйсика, но полезнее намного
Комментов не читай @ Сразу отвечай
Ну, прочитать 700 комментов разом — это почти подвиг:)
Да, в таких случаях лучше всегда быть онлайн и отвечать друг другу в нескольких ветках сразу, как мы с Вами :)
я голосую за питон. Я считаю, что он лёгок, изящен, и позволяет делать что-то полезное с минимумом усилий. Вот только я бы в школе это на внеклассных занятиях давал.
Учебный алгоритмический язык, потом basic.
С или C++… Ну вы бы еще Ассемблер предложили в вариантах.
Я к C пришёл уже после изучения азов ассемблера, например.
Автор говорит об общеобразовательной программе, не всем детям нужны углубленные знания этого предмета.
Пока что на всероссийской олимпиаде разрешены только Pascal, Basic, C/C++.
Поэтому языкам, вроде Лого и Scratch, которые и в дальнейшем нигде не применяются, я считаю, что учить не нужно.

Паскаль — самый простой язык для понимания детям, далеким от «линейного мышления», т.е. умения быстро строить хорошие алгоритмы. Поэтому он должен быть первым языком. Многие дети и его понять не могут, а вы говорите о Java и C++. К тому же у нас еще нет столько молодых учителей, чтобы преподавать современные языки на должном уровне, а все учителя со стажем >20 лет (которых все еще очень много) либо вообще современные языки не знают, либо все их знания заканчиваются тем, что было актуально лет 20 назад.
Хорошо. замотивируйте мне группу детей возраста 1-3 класса на изучение Pascal/C ??? =) (на бейсик и то врят ли получиться)?
Отличный метод для детей младше 14 лет — написать простенькую игрушку, вроде арканоида. В процессе изучать язык, вроде паскаля.
Работает на ура.
Вы точно себе представляете 1-3 классы по возрасту? :)

И как вы будете мотивировать девочек отвлечься от кукол?

Написать игру задача. И я пока слабо представляю как ребенок до 14 лет (не увлеченный компами) садится и начинает учить паскаль чтобы написать игру которая ему не нужна.

Каков у вас опыт обучения групп детей младшего школьного возраста? ну или средне-школьного?
Паскаль — самый простой язык для понимания детям, далеким от «линейного мышления»
Да что ж такое… с чего вы взяли? Комментариев 200 выше посвящено опровержению этого мифа.
UFO just landed and posted this here
А мне как то подумалось, что надо убрать программирование в школах, введя факультативные занятия, и ввести дисциплины, которых, увы, пока нет, таких как «Правила работы с компьютером» и «Безопасность работы с компьютером», в которые бы включить описание сети web, серверов и компьютеров, не зацикливаясь на подробности, но обо всем. Чтобы они понимали, как используются ресурсы компьютера, как они работают с сетью, отправляют почту и т.п., объяснить логику запросов гуглу, использования хелпа, а так же какие угрозы могут быть при использовании вконтактика, как действуют вирусы, куда и почему не надо лазить, для чего нужен антивирус и когда он не помогает, как ломают программы и что такое фишинг. Я не знаю ни одного программиста, которого бы научили хорошо программировать именно на школьных занятиях, а вот программистов, я не говорю о менеджерах, которые не понимают как безопасно пользоваться компьютером, или как правильно писать программу, чтобы она оптимально использовала ресурсы компьютера и не текла(из за незнания неявных вещей о работе компьютера), таких очень много.
И как права, выдавать сертификат, и на работу, где компьютеры, не брать тех, кто не сдал.
Пусть бы стало меньше говнокодеров, зато в сети стало бы работать спокойнее.
p.s. Хотя я к концу 11 умел писать программки на pascal, c, tasm именно таких знаний мне на тот момент откровенно не хватало, и я не знал, что мне их не хватает.
Да что там Scheme и Haskell, даже ассемблера и brainfuck'а нету!
Многие, по всей видимости, выбрали в опросе тот вариант, который они знают.
С для школьников слишком сложный. Для школьников, в качестве ПЕРВОГО языка (я так понимаю, что сейчас это 3-5 класс) — самое то — BASIC. А потом уже, в ВУЗе или старших классах школы — С и Pascal.
7 класс в лучшем случае, если не брать спецшколы.
Неправда ваша или не совсем правда. Вот школа в которой в 3-м классе учится сын моего лучшего друга. Упоминаний, что это спецшкола не нашёл, вроде обычная, ни сын друга, ни соседская дочка (которая уже несколько месяцев «живёт» под Ubuntu) особыми успехами в учёбе не блещут. Информатику (не скажу, что программирование) сын друга уже проходит, причём по довольно неплохим учебникам (мне бы такой в 9-11-м классах, у нас их вообще не было, да даже в двух вузах, причем в одном по ИТ-специальности, ничего подобного не было, правда 20 лет назад). Сегодня позвоню другу и уточню, точно ли они сидят за компьютерами и что делают за ними, если сидят.
Ну в школе где я учился, тоже «информатика» с 3 класса, если не с 1-го. Только до первого языка тогда было еще далеко.
3-5 класс — Буквоед, Крот, Ханойская башня
5-6 — блок-схемы, псевдокод, исполнитель «Кукарача»
7 — QBasic
8 — Turbo Pascal, Delphi 7
9 — Delphi 7, HTML, PHP, JS
10 — PHP+MySQL, Corman Lisp, Java, ActionScript 2.0

Я бы сказал, что у вас продвинутая школа. Мне б такую, не по содержанию конкретному (Delphi, PHP MySQL и даже JavaScript тогда точно не было), а по сути.

Слова «Буквоед», «Крот» мне вообще ни о чем не говорят, но вот «исполнитель «Кукарача»» уже намекает на наличие языка программирования этого исполнителя.
Буквоед ест букву когда ее печатаешь, игра развивала скорость печати теоретически. Крот — логическая игра. Обе под DOS.

Язык исполнителя Кукарачи состоит ЕМНИП из 7 слов — шаг, повернуться, налево, направо, пока, если, свободно. На язык программирования это явно не тянет. Потому и говорю, что в обычных школах в 3-5 классе полноценного программирования не было.
HolyWar? :D

Для тех кто отвечает С или C++, Java…
Вы меня пардоньте, но Вы не совсем верны… сейчас Вам кажется что действительно лучше сразу с того что пригодится… что является актуальным…

Через 10 лет всё изменится. А основам учиться надо не на том что актуально, практично и\или модно, а на том что УЧИТ!

Вот поставьте себя на их место для примера в области которая вам воообще никаким боком не известна как для IT-специалиста.

К примеру, Задайте вопрос: С чего научится создавать успешные торговые системы\стратегии для валютных и фондовых рынков?

Те вундеркинды, которые давно в этом бизнесе и спокойно манипулируют узкой терминологией (медвежья дивергенция, маржинкол, бычье поглощение и т.д.) ответят сразу что надо изучать с более практичных вещей сейчас… Ну хорошо для программистов пусть это будет MQL 5.0. А по-правильному надо научиться понимать что такое рынок и как он работает.
Нельзя сразу преподавать основы ТА и ФА без определений и пониманий на основе чего они строятся…

Вот как-то так :)

А ещё не забудьте, в школе всё-таки ещё дети :) Для них надо немного по другому всё преподносить, нежеле бородатым дядькам… Отправте 3-ёх классника на лекцию в институт по тер.физике, где препод монотонно читает лекцию… да он уснёт через 10 минут, как физик-ядерщик над книжкой «Бухгалтерия — это просто» (страниц на 500).

Вообще-то, я за то, чтобы формировать программистское мышление не на императивных языках, а сразу приучить к декларативным абстракциям, так что начинать лучше бы с Лиспа и т. п. Но раз речь идет не о студентах, будущих программистах, а о школьниках — тогда или Паскаль, или Ruby (которого в списке нет). Всё равно к началу профессионального обучения они благополучно «забудут всё, чему учили в школе». Профессиональные языки давайте оставим студентам, а с детства уродовать душу Бэйсиком — это тоже неправильно.
Поэтому голосовал за Pascal. Для совсем уж младшего возраста пойдет и Лого.
Чем по-вашему Лого лучше Бэйсика? Я до сих пор не могу понять какому сумрачному гению взбрела в голову идея «черепашки».

PS: программировал в школе и на том и на другом.
Не в черепашке дело, а в стиле программирования, к которому приучает язык. Программирование в рекурсивном стиле более прогрессивно, чем бейсиковское спагетти из «GoTo». А вообще-то не надо забывать, для какой возрастной группы (а именно школьники младших классов) придуман Лого. Для этих деток даже Паскаль, наверно, будет излишне профессиональным с его системой строгой типизации.
Я не настолько хорошо знаю Лого, чтобы иметь твердое мнение по этому вопросу, но я доверяю мнению великого Дейкстры о неисправимом пагубном влиянии Бейсика на программистское мышление.
Дейкстра просто не видел Лого. К вашему сведению GOTO никто не отменял, он есть практически во всех языках и дело, возможно, в олдфаговости учителей, приучающих детей нумеровать строки «через 10» в программах на Бэйсике и писать GOTO. Поверьте мне, внезапно, на бэйсике можно писать без GOTO!

Далее, что значит программирование в рекусивном стиле на Лого? Господи, да в начальных классах даже не объясняют что такое процедура, программа начального школьника выглядит как пара десятков не очень аккуратных строчек, где он двигает черепашку на 10 шагов вперед, потом поворачивает на 90 градусов влево, двигает дальше, потом поднимает перо, чтобы продвинуться не рисуя линию, опять его опускает…

>> я доверяю мнению великого Дейкстры о неисправимом пагубном влиянии Бейсика на программистское мышление.
Не стоит так слепо верить в стереотипы, почему бы не попробовать сформировать свое собственное мнение хоть немного разобравшись в вопросе. Вы из всех детей программистов сделать хотите? Да дай бог 1 из класса действительно заинтересуется этой мутью, остальным это полезно в качестве развития мышления, не более. Поймите, программирование в школе не для того чтобы вырастить выводок новых фаулеров, а для развития алгоритмического мышления у детей. Чтобы был результат их нужно для начала заинтересовать.
Дейкстра говорил о Бэйсике, из которого явно торчали корни Фортрана (того Фортрана, пускай 77, но даже не 91, не говоря о 2008), о Бэйсике, в котором не было даже намёка на структуру (кроме разве что 10 FOR… 30 NEXT и 20 GOSUB 1000). Современные Бэйсики мало чем отличаются в принципе от других ООП-языков, я даже не уверен можно ли в них строки нумеровать, и вообще совместимы ли они обратно с «каноническим» Бэйсиком и есть ли в них классический интерпретатор, куда можно ввести «PRINT "Привет"», нажать Enter и увидеть «Привет» на экране.

В QuickBasic можно нумеровать строки. Но современным его назвать язык уже как-то не поворачивается.
Либо Лого, либо Scheme. Кстати, почему последнего нету?
Как раз хотел спросить о Scheme. ИМХО, это наиболее разумный выбор для школы.
Программирование вообще в общеобразовательной школе учить не надо. Это бесполезная трата времени учителей и учеников. Есть огромное количество компьютерных навыков, которые понадобятся среднестатическому человек в его жизни, вот им и надо учить.
А если школа специализированная, то начинать в 10м классе учить си с мозгом заточенным под матан, мне кажется не будет проблемой.
Не будет программирования в школах — не станет и олимпиад. Для десятков действительно талантливых ребят это хороший способ показать себя.
Я же не говорю, что его надо отменить совсем. Пусть в математических школах/классах его преподают, тут я только за. А в общеобразовательных не надо. Почему из-за «десятка действительно талантливых ребят» должны страдать остальные 99% учеников?
Если ты талантлив — иди туда где твой талант смогут правильно приложить.
Эти 99% остальных учеников с удовольствием будут лежать на диване перед телеком вместо любой учёбы. Собссно они и будт. когда закончат школу, отучаться на менеджера и придут с работы домой, зацепив по дороге пивка.
Давайте вы не будете судить людей по себе. Если человек гуманитарий — это еще не значит, что его будущая карьера включает только менеджера.
Стало быть вы — гуманитарий?
Сами того не желая вы сейчас написали что менеджер — это что-то плохое. Тем не менее лежать на диване (заметьте, не в подворотне, дома), с пивом (не с водкой и наркотиками) после работы (не вместо) выходит не худшее времяпрепровождение.

PS: кстати, 1% талантливых может оказаться вовсе не программистом.
Я не гуманитарий, просто я видел достаточное количество детей в общеобразовательных школах, которых мучали программированием, когда оно им нафиг не упало.
Многие из них в итоге сделали себе отличную карьеру, которая вообще никаким боком не касается компьютеров.
Знаете, а меня дико раздражало обществознание и литература в школе, а еще экономика и французский. Тем не менее ходил, учил как все и, думаю, какую-то пользу в дальнейшей жизни это таки принесло. Опосредовано, конечно.

Я к чему собственно, простите за неловкий троллинг, веду. Дети ведь не хотят учиться большей частью. Их надо азинтересовать, увлечь, заставить в конце-концов, с расчтетом на то что в будущем хотя бы 10% этих знаний принесут пользу.
А что делать талантливым детям, которые учатся в обычной школе? А «страдать», имхо, слишком громко сказано. В конце концов, учитель может подходить дифференцированно к обучению, талантливых учит тому, что им хотя бы в вузе пригодится, остальные осваивают «ексель» и слепую печать. В принципе у меня в школе так и было, причем «остальные» были рады тренажеру слепой аечати (полуигровому), хотя им и пришлось потом ввести с доски несколько программ на Бэйсике.
Мой класс стал математическим с пятого года обучения, и к моменту начала изучения программирования, мозги под точные науки уже как три года затачивались. Помню, как весь класс (в году этак в 97-м, когда был я в девятом классе) огорчился, когда мы узнали, что наш учитель алгебры не знает ни С, ни С++, но знает ЛИСП и Фортран (и немного BASIC :) ), и под влиянием выпендрёжничества «что, мол, только Си круто и рулит» в итоге отказались и от его уроков информатики и от возможности как можно раньше научиться грамотно составлять математические модели и вообще перенять огромный опыт алгоритмизации математических моделей от отличного математика Элькина Бориса Михайловича.
Как пример, что сейчас делают его ученики ( nit.redut.ru/data/sbornik_nit_2011.pdf — стр 106 ) — "… Целью является создание математической модели, описывающей годичные сезонные изменения температуры воздуха. Была поставлена задача создания эмпирической модели по принципу «чёрного ящика», результаты работы которой можно будет оценить сравнением с уже известными данными о температуре воздуха. ..." Для школы очень даже хорошо.

А язык? Все равно в институте такова программа, что на первых курсах все идут по линейке PASCAL -> ASM -> C -> C++ c добавлением PL/SQL, LabVIEW, HTML, VHDL и прочих, чуть ли не самодельных, ЯП.
А язык? Все равно в институте такова программа, что на первых курсах все идут по линейке PASCAL -> ASM -> C -> C++ c добавлением PL/SQL, LabVIEW, HTML, VHDL и прочих, чуть ли не самодельных, ЯП. Полученные в школе знания будут если не забыты, то сильно разбавлены и забиты языками из обязательной программы обучения в институте.
Такое ощущение, что за 20 лет ничего не изменилось. Единственное у нас шел сначала Фортран, потом Асм и параллельно Паскаль, а об HTML и речи не было.
Вы, верно, шутите? (я про топ опросника — на данный момент Си/Си++)
Я бы не хотел сыну рассказывать про Си/[++] с начала… Pascal и тот больше подходит. Пусть азы, логику, алгоритмы подтянет… потом Asm ручками потрогает для понятия внутреннего устройства компиляторов и архитектуры, и только потом Си или чего он еще захочет…
Кстати, Python и то лучше подходит для начала. весьма практичный язык, особенно в linux среде.
Нет, оно конечно здорово, если в школе оно будет хоть чуть-чуть, я то смогу ему дать вначале логики и прочего, но надо не забывать что:
1. в школе примерно 10% (около 2-3 человек из класса в 25 учеников) пойдут по ИТ, а остальным оно просто будет скучно/сложно. И даже сложно сказать, разовьет ли Си в остальных что-либо. Pascal, хоть и устарел морально, но до сих пор применяется в школах именно из-за простоты чтения кода. Логику выполнения программы прочитать можно всегда.
2. есть желающие кодить, с родителями без ИТ образования. Будет отток потенциально хороших программистов.
3. сколько преподавателей смогут грамотно (в школе! ) объяснить Си на должном уровне, а сколько школьников это усвоят? речь не о выполнении задачек 2+2, а о том что отложилось в голове.

Да, конечно же все это имхо)
Вот хабраобщественность за C или C++ больше всего голосует.
А так ли это хорошо?
Во-первых C и C++ нельзя на одной строчке писать, на этих языках совсем по-разному нужно программировать, несмотря на общие синтаксические конструкции.
Во-вторых, C располагает скорее не к изучению алгоритмов и концепций программирования, а к изучению адресной арифметики и других низкоуровневых деталей функционирования компьютера.
В-третьих, C++ — это очень сложный язык, не осилят его школьники. А изучать подмножество С++ — это подмена понятий. Да и все равно, чтобы грамотно научиться излагать мысли на C++ нужно работать на нем постоянно, а не 1 урок в неделю.

Сам проголосовал за Python.
UFO just landed and posted this here
Итак, какие критерии языка для школы?
1. Простые вещи должны быть очень простыми
2. Это сразу требует REPL — напечатать 2*2 должно дать 4 и немедленно
3. Это же требует максимально простой и прозрачный синтаксис
4. Сюда же желательно значащих отступов
5. Как можно больше ошибок должно выявляться при компиляции
6. Это сразу же вычеркивает «чистые» интерпретаторы
7. Это сразу же вычеркивает языки с динамической типизацией.
8. Сочетание пунктов 1 и 5 требует наличие автоматического вывода типов
9. Лок на производителя нежелателен
10. Платность исключена — ученик должен иметь возможность спокйно делать домашние задания.

Итог — пока в качестве хороших кандидатов вижу только хаскель (монадический ввод-вывод и ленивость), окамль (не развивается), F# (таки микрософт, которому сообщество кидать не впервой).
5. Как можно больше ошибок должно выявляться при компиляции
6. Это сразу же вычеркивает «чистые» интерпретаторы
7. Это сразу же вычеркивает языки с динамической типизацией.

Спорна сама необходимость компиляции, не говоря о необходимости диагностики ошибок на её этапе.

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

Articles