Пользователь
0,0
рейтинг
15 января 2012 в 20:35

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

 
Какой язык программирования должен быть первым при изучении в школе?
3%
(288)
Лого
1%
(57)
Scratch
11%
(1082)
Basic
26%
(2698)
Pascal
4%
(432)
Delphi
33%
(3399)
С или C++
14%
(1454)
Python
8%
(822)
Java

Проголосовало 10232 человека. Воздержалось 2011 человек.

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

Максим Тепленёв @teplenew
карма
4,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разное

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

  • НЛО прилетело и опубликовало эту надпись здесь
    • +4
      А ты, видимо, очень любишь трупы, раз до сих пор тут.
      • +1
        Почитайте, там интересные сипмптомы: habrahabr.ru/blogs/sandbox/123638/#comment_4060802
        • +3
          Ву-ху, максика кокнули.
          • 0
            Даже как-то жалко, что это произошло. Час читал «беседу» по поводу его «ОС» на ЛОРе — впечатлился.
            • +1
              Дабы не гуглить: www.linux.org.ru/forum/talks/6461926 ^^
              • 0
                Еще одна «принципиально новая»?
                • 0
                  В ней наверняка будут принципиально новые IceDove, Iceweasel…
              • +1
                Блин, только вчера перечитывал Денискин тред, думал что уж кого-кого, а его никто не переплюнет!
              • +1
                задумайтесь только, кого мы потеряли!..
    • +9
      Да когда уже тебя выпилят…
      • 0
        Уже. Даже не ясно, что произошло.
    • +4
      Ох и настырное школоло пошло!
      • +28
        Блин, тут столько внимания к комментарию выше, который удалили и я теперь понятия не имею, о чем идет речь… жуть как узнать хочется! :)
        • +3
          Школьник писал во всех топиках, которые ему попались под руку — «Хабр уже не торт», «Хабр умер» и тому подобный бред.
        • 0
          Может он написал где Asm
  • +132
    C или C++? Да вы шутите! В стандарте Си более 190 различных undefined behavior, и я более чем уверен что даже среди разработчиков компиляторов не все их могут на глаз распознать в коде (когда это возможно статически).
    • –10
      Си или C++ так как этот язык должен приучить к аккуратности. Слезить за памятью, работа с указателями — это очень сильно закаляет. Да и потом, школьная программа подразумевает лишь основы алгоритмизации, так что дальше работы с указателями врят-ли стоит идти. В школах дают задания максимум на сортировку матриц и т.д. Язык программирования как таковой тут особо роли не играет.
      • +34
        Даже указатели излишни. Язык должен быть динамически типизированным, как минимум.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

                              В школах лучше бы набирать на клавиатуре вслепую десятью пальцами учили, чтоб потом не тыкались двумя-тремя бухгалтера/секретари/юристы/программисты всякие.
                          • 0
                            Программирующего на С нельзя научить ассемблеру?
                            • 0
                              Сложнее, чем наоборот.
                              • 0
                                Если программирующему на ассемблере объяснить C, но запретить пользоваться goto, ему долгое время будет очень неуютно. Почти как с машины Тьюринга переучиваться на brainfuck.
            • –5
              0^-1 = 1/0 = Infinity
              • +2
                Нету такого числа среди вещественных. Да и вообще ни в каком поле (кроме тривиального, состоящего из одного только нуля) у нуля нет обратного.
                X*0 = X*(0+0) = X*0 + X*0
                X*0 — X*0 = X*0 + X*0 — X*0
                0 = X*0
                Для любого X. Таким образом, нельзя умножить ноль на что-то и получить не ноль.
                • –1
                  Среди вещественных — нет, но в спецразделах вычислительной математики специально вводят и активно используют такое понятие как бесконечность (например, оно необходимо для операций на эллиптических кривых и других). Как правильно было замечено выше:
                  всех нас в школе на математике честно обманывают — сначала, что нету отрицательных числе, потом что на ноль никогда делить нельзя, потом что корень из отрицательных чисел корень извлечь нельзя и т.п.

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

                    Есть понятие инфинитов (бесконечно больших) в нестандартном анализе, на расширенной вещественной оси R* — однако, так же как инфинитезималы не вляются нулём, бесконечностью в привычном смысле они не являются.
                    • 0
                      Но в преобразованиях Мебиуса дополнительная точка ведет себя точно как 1/0. А сами эти преобразования записываются через арифметические операции…
                      • 0
                        Простите, что это значит? Запись «1/0» не имеет смысла если использовать обычное деление.
                        • 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. А дальше по непрерывности.
                • 0
                  Тривиальном кольце. Поле из одного элемента (поле характеристики один) F-un — крайне спорная и, вообще гоовря, несуществующая алгебраическая структура.
                  • 0
                    Зависит от определения.
                    Есть определение «существует единица», есть — «существует единица, не равная нулю».
                    В частности, на мехмате кафедра алгебры пользуется вторым, а кафедра теории чисел — первым)
                    • 0
                      Первое определение порождает слишком много противоречий. Конечные поля — достаточно хорошо изученные объекты:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                  Ну или LINQ. Или Rx Framework. Хотя для меня куда более важным аргументом является, например, то, что понятие локализации кольца на языке категорий записывается раз в пять короче теоретико-множественного варианта.
              • +3
                Ни в коем случае! А рассматривать в качестве первого учебного языка язык, в котором зигохистоморфмные препроморфизмы не являются first-class value, вообще моветон.
            • +2
              Вы, наверное, путаете разработчика, не понимающего указатели и не способного понять.
        • +2
          хорошо «ставит руку»?
          кому? — будущим программистам?

          А зачем «ставить руку» например тем, кто после школы больше ни одной программы не напишет?
          • 0
            То есть не надо изучать программирование вообще?
            • +7
              Вполне возможно, что не надо. Основы комп. грамотноти, основы сетей, логика и — главное — безопасность личной информации
            • +2
              изучать нужно, но в умеренном объёме: условные переходы, цикл, процедуры — не ИТ-ученики могут на этом прокачать навык «разделить слона на кусочки».
              Кошмарить школьников указателями, статической типизацией и ручным выделением памяти незачем.
    • +19
      Школьникам с 1го до 8-9го класса не надо учиться программировать. Большая часть людей из моей бывшей параллели не не могли сами изменить размер шрифта в ворде. Гуманитарный и медицинские классы искренне не понимали, зачем их заставляют делать то, что «им не нужно» (даже банальный ворд, не говоря уже об ужасном Паскале). В моём математическом классе дела были немного лучше, но не на много :)
      Если учиться по вашей системе, тогда всё время уйдет только на изучение синтаксиса (синтаксис паскаля проходили примерно 3 четверти).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                  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 в подобном выражении как раз был самостоятельной сущностью).
                  • 0
                    Нет, в паскале
                    for? :=? to? do
                    и
                    for? :=? downto? do
                    это языковые конструкции, и отдельно стоящий? to? смысла не имеет.

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

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

                      Какой компьютер? Вроде в 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 лишь «обёртка» для аналогичного микрокода. Начинаем учить детей именно так как работает компьютер, оставляем из конструкций управления только условные и безусловные переходы?
                      • 0
                        Все эти DJNZ, SOB и т.п. — обычно обертка для

                        DEC BX
                        JNZ _1

                        или

                        SUB B0,1,B0
                        [B0] JMP _1

                        и тому подобного. Циклы с проверкой условия в начале почти всегда приходится реализовывать через безусловный и условный переходы (а экономнее — через два условных). Возможно, есть компьютеры с «родным» циклом for, но я про такие не слышал.
                        • 0
                          А через два условных это как? Не могу представить, чтоб и память экономило, и циклы, либо одно, либо другое. Очень давно на столь низком уровне ни то что не писал/оптимизировал, а даже не думал :(
                          • 0
                            Нет, память оно экономить не будет, в начале пойдет лишняя проверка:
                            i=0; if(s=n) do{ ....; i++; }while(--s); Но по циклам выигрыш даст.
                    • +3
                      и отдельно стоящий? 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»?
              • +2
                Паскаль или Бэйсик в качестве первого языка лучше, чем Си, по крайне мере для тех, кто жизнь с ИТ связывать не собирается. Но есть языки, имхо, лучшие в этом качестве, чем Паскаль или Бэйсик. В опросе упомянут Питон — он один из них.
        • +2
          С точки зрения си-подобных — да, концепции нелепы. С точки зрения функциональных и объектных (не объектно-ориентированных, не «Си с классами») — естественны.

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

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

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

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

                Вот, к примеру, разные функции сравнения целых разной размерности — вот это уже проблема.
  • 0
    Кумир для старта для изучения алгоритмизации неплох ( www.niisi.ru/kumir/ )
    • +3
      Было бы интересно узнать, в чем он выигрывает у Лого, Паскаля или Скретча.
    • 0
      Он еще жив??? Уже лет 20 про него не слышал. Хотя у меня он был 3-м языком (после машины Тьюринга и языка калькулятора БЗ-34).
  • +4
    C/C++ среди языков — это как гоночные болиды среди автомобилей. Нельзя с них обучение начинать.
  • +37
    А где ассемблер?
    • НЛО прилетело и опубликовало эту надпись здесь
    • +4
      причем не просто ассемблер, а DEC'овский! :)
    • +1
      В ассемблерных вставках.
  • +3
    Pascal — пережиток прошлого, в современных реалиях никому не нужный. Уверен, что большинство проголосовавших отдали свой голос по одной причине — на этом языке их самих учили в школе, как и меня.

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

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

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

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

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

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

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

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

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