Проблема «учим одно, а на практике требуется другое» хорошо известна. Но не слишком ли большие ожидания связаны с уроками по информатике? Или есть ожидание того, что после уроков музыки дети будут музыкантами, труда — мастерами, а рисования — художниками?

Зачем вообще привязываться к школе? Если кто-то считает, что лучше изучить Питон, то дайте возможность ребенку изучить Питон, если C++, то С++ и т. д. Или "болит душа" за всех детей страны?

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

Учитель информатики и программист — это две разные профессии. А уроки информатики — это не занятия по программированию, как кто-то может считать, а такая же теоретическая дисциплина для общего развития, как в среднем 90% уроков в школе.

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

Программы и методики пишутся для отчетности, а реальность на пару порядков скромнее. Но что-то же из заявленного нужно воплотить в реальности чтобы соответствовать ФГОС?

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

Если на урок информатики выделен 1 час в неделю, то какой язык программирования можно изучить за это время? Никакой. Программа по информатике рассчитана на 36 часов. Да за это время даже играть на компьютере не научишься.

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

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

Представьте ситуацию, когда на уроке музыки в классе сидит 30 человек с гитарами. Можно ли сказать, в рамках данных уроков происходит обучение игре на гитаре? Конечно, нет. 2-3 заинтересовавшихся школьника что-то освоят, занимаясь дома. Несколько отличников будут прилежно приносить гитары на урок и перебирать струны (надо — значит надо). А остальным это вообще не интересно и не надо. Зачем что-то делать, если можно не делать?

Кататься на велосипеде — это интересно? Да! Но представим ситуацию, когда на уроке физкультуры всем раздали велосипеды и сказали — 50 кругов вокруг школы. Все радостно поедут? Как бы не так. Все поедут, если вместо велосипеда дать электросамокат, потому что на нём ничего не надо делать. Стой ровно и жми кнопку.

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

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

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

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

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

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

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

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

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

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

Представим ситуацию, что на уроках информатике действительно изучают программирование. Подойдёт ли для этого Pascal?

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

Если следовать данной логике, то, например, можно сказать так: неважно на каком музыкальном инструменте изучать основы музыки, потому что они везде одинаковые. Хорошо, возьмите поперечную флейту и покажите на её примере основы - гармонические интервалы, аккорды и основные гармонические обороты. Не получается?

Но программирование - это же совсем другое. Алгоритмы, переменная, массив, цикл, условные операторы, математические операции и др. - везде одно и тоже.

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

«На Pascal уже давно ничего не пишут» - сильный аргумент, но в ответ сразу услышим россыпь «преимуществ»:

  • Pascal — предельно простой и понятный язык, который специально разрабатывался как учебный и по нему много метод материалов

  • Pascal — компилируемый язык. Компилятор сам проверяет наличие ошибок

  • Pascal — строго типизированный язык с чёткой логической структурой

  • Да, в Pascal нет ООП, но оно есть в Delphi

Pascal — предельно простой и понятный язык, который специально разрабатывался как учебный

Если говорить о простоте Pascal, то вопрос спорный.

Когда-то давно я сам начинал с Pascal, затем перешел на Delphi и был почитателем данного языка программирования. В те далёкие годы двумя руками голосовал за изучения Pascal, а не Basic и тем более Си. Но развитие web-технологий, мобильных устройств, робототехники и искусственного интеллекта привело к тому что гораздо удобнее, быстрее, гибче и эффективнее многие задачи на практике решаются при помощи скриптовых языков.

Сейчас по работе требуется знание web-технологий и в те редкие моменты, когда открывается Delphi, каждый раз ловлю себя на мысли, что тону в коде и пытаюсь бежать под водой, испытывая сопротивления толщи воды. Это касается не только синтаксиса в виде бесконечных begin и end, операции присваивания и прочего. Это касается, прежде всего, эффективности решения практического круга задач, когда на JavaScript штатными средствами задачи решаются просто без необходимости вспоминать то, какие компоненты могут предоставить базовую функциональность.

Так Pascal предназначен для решения других задач! Да, у каждого языка своя область применения. Разработчики Delphi предлагаю инструменты и для web-разработки, и для мобильной. Но скажите, при необходимости разработать web-сайт, приложение или сервис вы выберите Delphi для серверной части и базы данных или что-то более практичное? А при разработке мобильных приложений FireMonkey или другое?

Pascal сейчас - это не тот Pascal из 80-х годов. Но дело в том, что с появлением оконных операционных систем изменилась вся концепция разработки. Это в операционной системе DOS структурное программирование было эффективным (и единственно доступным до появления ООП). А в оконных ОС вся работа строится вокруг объектов. А мы всё изучаем транзисторы чтобы потом перейти к микроконтроллерам когда нужны уже процессоры.

Pascal — компилируемый язык

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

Pascal — строго типизированный язык с чёткой логической структурой

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

Может ли Паскаль выполнить код, заданный строкой, на лету создавать динамические объекты без необходимости перезапуска проекта? Так для другого он был создан. Да, но сейчас-то, в основном, требуется это, а не то другое.

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

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

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

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

Возможно, это будет сказано громко, но изучение Pascal в настоящее время похоже на то, как в кружке робототехники предложить начать занятия с изучения основ электричества. Представьте, перед учащимися лежат робототехнические наборы Лего, а им раздают наборы по электричеству, чтобы сначала они изучили закон Ома как основа основ для всего работающего от электричества. А нельзя сразу приступить к робототехнике? Обязательно нужно сначала учить месяц ноты, чтобы потом показать на гитаре 3 «дворовых» аккорда.

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

Скратч, App Invertor, Roblox и десятки других обучающих систем — это объектные среды. Нас окружают объекты, в браузере объекты, на экране смартфонов - объекты. Без всякого погружения в инкапсуляцию, наследование и полиморфизм можно осмысленно работать с существующими объектами и понимать, вот для чего это нужно и как может пригодиться дальше. А нужно ли это понимать? Мне кажется, что нужно. Иначе получится как в фильме про восточные единоборства: "Учитель, я уже неделю стою на одной ноге. Для чего это? Я хочу пальцем доски ломать, а занимаюсь непонятно чем."

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

Так для чего изучать Паскаль в школе? Для соответствия ФГОС. Но никто не запрещает за рамками данного стандарта параллельно изучать любой другой язык программирования.

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


  1. FDA847
    14.04.2024 14:32
    +9

    Pascal хороший и понятный язык. Для обучения прекрасно подходит! И если брать Turbo или Borland Pascal, то ООП всё таки в нём есть - зарезервированное слово object. Есть и наследование. Delphi, конечно, сильно от обычного Паскаля ушёл. Это сейчас вообще мощная среда кроссплатформенной разработки. На ней легко писать программы сразу под несколько ОС. Основной функционал приложения, например, легче отладить под Windows, а потом пересобрать под Android или iOS с учётом специфики разных платформ.


    1. actech Автор
      14.04.2024 14:32

      Delphi был прорывом в своё время и было бы вполне логично обучение переключить на его возможности. В начальной школе котики на Скратче, например, в средней и старшей - Delphi c визуальной разработкой интерфейсов.


      1. HemulGM
        14.04.2024 14:32

        К слову, компания, которая сейчас занимается разработкой и развитием Delphi присутствует в России, сотрудничает и позволяет получать специальные учебные версии среды учебным заведениям.


        1. miksmiks
          14.04.2024 14:32

          Там у них есть просто бесплатная Community версия на сайте - не для коммерческого использования.


          1. actech Автор
            14.04.2024 14:32

            Стоит такая. С появлением нормального компонента браузера (с доступом к коду загруженной страницы) в версии 10.4 или 11 аж всплакнул. А в 12 многострочные литералы появились + объявления переменных внутри блока и в заголовке цикла. Но, как говорится, любители скриптовых мотоциклов на Камазах не гоняют. )


            1. FDA847
              14.04.2024 14:32
              +1

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

              То есть можно спокойно писать:

              for var i := 1 to 10 do

              А многострочные литералы да, в 12 версии добавили.


        1. FDA847
          14.04.2024 14:32
          +1

          Да, они официально вернулись. Мы каждый год продлеваем лицензию, всё без проблем работает. На текущий момент только одно условие есть - оплатить счёт нужно с расчётного счёта банка, не находящегося под санкциями. До этого года мы держали счёт в Модульбанке для этой цели, но где-то инфа попадалась, что он тоже под санкции попал. Лицензии мы в январе продлеваем, придётся, видимо, выбирать новый банк :-)


      1. domix32
        14.04.2024 14:32
        +1

        Самой большой проблемой в том Delphi было, что сами преподаватели не в зуб ногой в код на нём. Особенно, когда надо было форму расширить чем-то не слишком стандартным или сделать больше одного окна. Ты ему вопросы про наследование от какого-нибудь TObject и вообще про классы, а он тебе даже про ООП рассказать не может в паскале.


      1. Yami-no-Ryuu
        14.04.2024 14:32
        +1

        Lazarus же!


    1. VanKrock
      14.04.2024 14:32

      Pascal отвратительный язык для обучения. По крайней мере был раньше. Что в школе был Pascal, что в университете на начальных курсах. Пока не начали преподавать C, вообще было не понятно, что делаем и зачем. По мне так лучше бы обучали на C# или Java. Если бы Pascal был простым и удобным, то на нём все и писали бы, но не пишут


      1. Ken-Sei
        14.04.2024 14:32

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


        1. Drucocu
          14.04.2024 14:32

          как и Python сейчас, был учебным языком

          Это очень громкое утверждение. Гвидо участвовал в разработке ABC, который задумывался как учебный, но Python сразу создавался как язык общего назначения.


      1. HemulGM
        14.04.2024 14:32
        +1

        Язык не популярен, не потому что "не удобный", а потому что когда-то давно, приемник Паскаля Делфи остановил развитие языка. Плюсом, людей останавливает то, что Делфи проприетарный и закрытый язык.


        1. qw1
          14.04.2024 14:32

          Плюсом, людей останавливает то, что Делфи проприетарный и закрытый язык.

          Бесплатные реализации Pascal есть, развивай - не хочу. Cи-компиляторы в 90-х тоже были закрытые (Watcom/Borland/IBM/Microsoft), с проприетарными расширениями языка. И это не помешало языку стать популярным. Так что, не в этом дело.


          1. HemulGM
            14.04.2024 14:32

            Cи-компиляторы - особый случай, т.к. заложены в фундамент большинства систем. Покажите мне другие бывшие проприетарные языки, которые сейчас развивают. Все норовят создать новый язык (Rust, Zig, Go). А Delphi является прямым развитием языка Паскаль, только всё ещё проприетарный. И его до сих пор развивают.

            Проблем проприетарности здесь в том, что бесплатно компилятор Делфи не получить для коммерческого использования. А с развитием проблем нет.


      1. assad77
        14.04.2024 14:32

        Да хороший язык паскаль. Я не знаю развивался ли он все это время, но 30 лет назад он для задач обучения не уступал c++. Писать на нем достаточно просто. А Delphi был сильно быстрее c++ builder, например при компиляции.


        1. HemulGM
          14.04.2024 14:32

          Развивается до сих пор. Тут можно глянуть https://www.embarcadero.com/ru


  1. gmtd
    14.04.2024 14:32
    +44

    Какой-то лонгрид ни о чем...

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


    1. actech Автор
      14.04.2024 14:32
      +1

      Какие аргументы можете привести по данному высказыванию?


      1. Rsa97
        14.04.2024 14:32
        +55

        1 + 1 === 2
        1 + "1" === "11"
        1 - "1" === 0
        "11" - 1 === 10
        


        1. actech Автор
          14.04.2024 14:32

          Вас смущает то, что в программном коде не знаешь, где и какой тип данных вылезет?


          1. Rsa97
            14.04.2024 14:32
            +21

            Меня - нет. Но для обучения, IMHO, лучше использовать языки без автоматического преобразования типов.


          1. Dmitri-D
            14.04.2024 14:32
            +3

            Если бы все задачи были такими простыми как в этимх выражениях. Представьте, что одна из функций прочитала базу и вернула "1" вместо 1, а другая взяла 1 из другого места и сложила с результатом первой функции. Вы в коде нигде 1 + "1" не увидите и за руку не поймате. А действие выполняется и на выходе "11".
            Это всё можно объяснить студенту, но это займет время, а значит снизит эффективность. Я бы, была б моя воля, запретил к прямому использованию js (сарказм). Вот есть ts - кстати, того же автора, что и Delphi, вот им и пользуйтесь и студентов можно обучать вполне.


            1. Seeroygaming
              14.04.2024 14:32

              Typescript: any :)))


              1. Yami-no-Ryuu
                14.04.2024 14:32

                Таки да! Но кто в школе будет преподавать typescript?

                Б-ть, даже MIT отказался от Scheme в пользу Python :(

                Я бы вообще начинал с Haskell для веб. Как введение в то, что такое программирование вообще, но с возможностью ваять всё что хочешь, вплоть до полноценных приложений.


        1. Ark_V
          14.04.2024 14:32

          Если в выражении заявлено символьное значение, считаем математическую операцию за конкатенацию и все обрабатываем как символьную строку. Операция вычитания символьного значения и числа не валидна т.к. не имеет смысла, поэтому операция обрабатывается как числовая, в чем проблемы, вроде ж все логично?


          1. actech Автор
            14.04.2024 14:32
            +1

            >Если в выражении заявлено символьное значение, считаем

            Логика понятие субъективное. Такие задачки - любимое развлечение на собеседованиях. Пыхтишь, стараешься, а потом выясняется - так по работе требуется совсем другое. Помнится, в вакансии было указано требование Си и Access. Пришел со знанием Delphi. А программировать нужно было на 1С.


            1. Drucocu
              14.04.2024 14:32

              Логика понятие субъективное.

              Логика, вроде как, должна быть объективной по определению.


              1. actech Автор
                14.04.2024 14:32

                Должна. А на практике двое стоят на перекрестке и говорят, мы оба по правилам ехали.

                Мыслить логически - хороший навык, но по себе знаю, что часто проще по собственному разумению.


                1. Drucocu
                  14.04.2024 14:32
                  +2

                  Не сочтите за грубость, но вы напрашиваетесь на ответ: "Вот потому ваш язык и JavaScript" :D

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

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


                  1. kuzzdra
                    14.04.2024 14:32

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

                    Гаусс с его сумой арифметической прогрессии получает заслуженную двойку - его решение максимально не похоже на решение преподавателя.


                    1. Drucocu
                      14.04.2024 14:32

                      Мы тут немножечко о разных стадиях обучения говорим. Вундеркинды найдут свой способ стать вундеркиндами - не переживайте за них.


                      1. Ken-Sei
                        14.04.2024 14:32

                        С вашим @Drucocu "решение максимально не похоже на решение преподавателя" - не найдут, потому что получат двойки в школе, и не получат проходной бал в ВУЗ.

                        Для программирования ваш подход @Drucocu означает:

                        • карать за умение программировать,

                        • поощрять за тупую бездумную зубрёжку,

                        • поощрять за умение скрытно списывать.


                      1. Drucocu
                        14.04.2024 14:32
                        +2

                        Вы спорите ради спора? С какой стати преподавателю информатики ставить ученику плохую оценку за оригинальное решение? В отличие от гуманитарных наук (о которых и пели Pink Floyd) тут всё объективно: код либо работает, либо нет.

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

                        поощрять за тупую бездумную зубрёжку

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

                        поощрять за умение скрытно списывать

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


                      1. Ken-Sei
                        14.04.2024 14:32

                        не отходя от оригинала, иначе решение не будет работать

                        Оригинал - вообще не код, а написанный код - может отличаться от написанного учителем, продолжая соответствовать оригиналу. Вы же @Drucocu требуете "решение максимально не похоже на решение преподавателя".

                        если у каждого ученика в классе задача решена своим способом

                        Это обучение тому чтобы думать самостоятельно. На работе никто программисту не даст готовое решение, которое должно быть "решение максимально не похоже на решение преподавателя".

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

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

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

                        Я в школе на экзамене доказал теорему совсем не так как как показывал учитель, и получил за это пять. Вы же требуете "решение максимально не похоже на решение преподавателя". Вы бы с вашим подходом влепили бы двойку Нильсу Бору сказав "иначе решение не будет работать" Решение задач от Нильса Бора

                        Сэр Эрнест Рутерфорд, президент Королевской Академии и лауреат Нобелевской премии по физике, рассказывал следующую историю, служащую великолепным примером того, что не всегда просто дать единственно правильный ответ на вопрос. Некоторое время назад коллега обратился ко мне за помощью. Он собирался поставить самую низкую оценку по физике одному из своих студентов, в то время как этот студент утверждал, что заслуживает высшего балла. Оба, преподаватель и студент, согласились положиться на суждение третьего лица, незаинтересованного арбитра; выбор пал на меня.

                        Экзаменационный вопрос гласил: «Объясните, каким образом можно измерить высоту здания с помощью барометра».

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

                        Случай был и впрямь сложный, так как ответ был абсолютно полным и верным!

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

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

                        Новый ответ на вопрос гласил: «Поднимитесь с барометром на крышу и бросьте его вниз, замеряя время падения. Затем, используя формулу L = (a*t^2)/2, вычислите высоту здания». Тут я спросил моего коллегу, преподавателя, доволен ли он этим ответом. Тот, наконец, сдался, признав ответ удовлетворительным.

                        Однако студент упоминал, что знает несколько ответов, и я попросил его открыть их нам. «Есть несколько способов измерить высоту здания с помощью барометра», начал студент.

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

                        «Да. Есть очень простой способ, который, уверен, вам понравится. Вы берете барометр в руки и поднимаетесь по лестнице, прикладывая барометр к стене и делая отметки. Сосчитав количество этих отметок и умножив его на размер барометра, вы получите высоту здания. Вполне очевидный метод.»

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

                        «Наконец», заключил он, «среди множества прочих способов решения данной проблемы лучшим, пожалуй, является такой: возьмите барометр с собой, найдите управляющего и скажите ему: „Господин управляющий, у меня есть замечательный барометр. Он ваш, если вы скажете мне высоту этого здания“.

                        Тут я спросил студента — неужели он действительно не знал общепринятого решения этой задачи. Он признался, что знал, но сказал при этом, что сыт по горло школой и колледжем, где учителя навязывают ученикам свой способ мышления. Студент этот был Нильс Бор (1885-1962), датский физик, лауреат Нобелевской премии 1922 г.


                      1. Drucocu
                        14.04.2024 14:32

                        Вы тролль и демагог.

                        Я в школе на экзамене доказал теорему совсем не так как как показывал учитель, и получил за это пять.

                        Либо это известное альтернативное решение, либо различия не так велики, как вы тут рассказываете. Это математика: из точки A в точку B можно прийти либо кратчайшим путём, либо неоптимально. Давайте конкретный пример или расписывайтесь в том, что троллите.

                        Это обучение тому чтобы думать самостоятельно.

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

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


                      1. Ken-Sei
                        14.04.2024 14:32

                        Давайте конкретный пример

                        Я вам привёл пример из физики с Нильсом Бором, а @kuzzdra привёл пример изс Гауссом, вы @Drucocu считаете себя умнее их обоих?

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

                        Не факт! У меня на собеседовании джуниор позабыл стандартную сортировку пузырьком, которой его обучали. Потому он придумал другой способ сортировки, который работает. Для вас это большой сюрприз и полная неожиданность?

                        Это математика: из точки A в точку B можно прийти либо кратчайшим путём, либо неоптимально

                        Для вас большой сюрприз, что уравнение квадратного корня имеет ДВА корня! Это - Математика!


                      1. Drucocu
                        14.04.2024 14:32

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

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

                        Кажется, вам самому не хватает базового образования, отсюда и ваши нелепые и абстрактные рассуждения о каких-то "нестандартных решениях".


                      1. Ken-Sei
                        14.04.2024 14:32

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

                        Если вам так любопытно, он САМ написал сортировку вставками, которой его не обучали.

                        Кажется, вам самому не хватает базового образования, отсюда и ваши нелепые и абстрактные рассуждения о каких-то "нестандартных решениях".

                        Вы всё таки считаете себя умнее Нильса Бора и Гаусса?

                        Судя по вашей крайней упёртости и абсолютному неумению признавать свою неправоту - у вас профдеформация школьного учителя, которому ЛОМЫ проверять выполненные задания, потому он за всё что решено "не так", он не проверяя ничего ставит двояк, а признать свою ошибку для него = уронить свой "авторитет перед детьми".


                      1. Drucocu
                        14.04.2024 14:32

                        Если вам так любопытно, он САМ написал сортировку вставками, которой его не обучали.

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

                        Вы всё таки считаете себя умнее Нильса Бора и Гаусса?

                        Вы, очевидно, считаете себя одного с ними ума, раз ваша басня про то, что вы в школе что-то там нарешали нестандартным способом резко превратилась в басню про Нильса Бора. Экий вы самодовольный врунишка.


                      1. Ken-Sei
                        14.04.2024 14:32

                        Продолжаете настаивать, что школьную задачу невозможно решить иначе, чем показал учитель?


                      1. Drucocu
                        14.04.2024 14:32

                        del


                      1. Zenitchik
                        14.04.2024 14:32

                        Для вас большой сюрприз, что уравнение квадратного корня имеет ДВА корня! Это - Математика!


                        Верно. А для вас будет сюрпризом, что найти надо ОБА, а не любой из?


                      1. Ken-Sei
                        14.04.2024 14:32

                        для вас будет сюрпризом, что найти надо ОБА, а не любой из?

                        Для меня - нет, а вот @Drucocu утверждает, что всегда есть только одно единственно верное решение.

                        Это математика: из точки A в точку B можно прийти либо кратчайшим путём, либо неоптимально

                        Он, даже, в принципе, не понимает, что в Задаче Коммивояжёра вполне может не один кратчайший путь, а несколько! И это - Математика!

                        PS а вы бы сами @Zenitchik поставили Гауссу двойку, за то, что он решил задачу иначе, чем предлагал учитель?

                        Или согласились бы с @kuzzdra, что подход "Для обучения важнее, чтобы ученик мог самостоятельно прийти к верному решению, которое будет максимально похоже на решение преподавателя" - принципиально неправильный и вредный?


                      1. Zenitchik
                        14.04.2024 14:32
                        +1

                        У вас логика сдохла в корчах.

                        Знаете разницу между "мог" и "должен"?@kyzzdraнигде не утверждал, что ученик ДОЛЖЕН придти к тому же решению, что и преподаватель.


                      1. Ken-Sei
                        14.04.2024 14:32

                        У вас логика сдохла в корчах.

                        Не у нас, а у вас.

                        @kyzzdraнигде не утверждал, что ученик ДОЛЖЕН придти к тому же решению, что и преподаватель.

                        Это утверждает не @kuzzdra, а @Drucocu, который прямым прямым текстом пишет:

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

                        и настаивает именно на этом. А @kuzzdra с таким подходом не согласен.


                      1. Drucocu
                        14.04.2024 14:32
                        +2

                        Этот бесполезный тролль так и будет выносить нам мозг, пока кто-то не придёт и не сольёт ему остатки кармы. Не ведитесь, не повторяйте моих ошибок.


                      1. Ken-Sei
                        14.04.2024 14:32

                        По вашему и Нильс Бор и Гаусс - тролли которым нужно, даже не двойку, а кол поставить?


                      1. Drucocu
                        14.04.2024 14:32

                        Ну ещё статьи целиком копировать не хватало. Вы мыслите слишком нестандартно, чтобы приложить ссылку?


                      1. Ken-Sei
                        14.04.2024 14:32

                        Учитывая, что вы поленились гуглить Гаусса, отказавшись признать вашу ошибку, то единственный подходящий для вас вариант - это привести полную цитату:

                        Согласно легенде, школьный учитель математики, чтобы занять детей на долгое время, предложил им сосчитать сумму чисел от 1 до 100. Юный Гаусс заметил, что попарные суммы с противоположных концов одинаковы: 1+100=101, 2+99=101 и т. д., и мгновенно получил результат: 50×101=5050.


          1. Drucocu
            14.04.2024 14:32
            +3

            в чем проблемы

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


      1. gmtd
        14.04.2024 14:32

        Можно ознакомиться здесь
        https://habr.com/ru/articles/803137/


        1. actech Автор
          14.04.2024 14:32

          Ознакомился.

          Вот пара выдержек из неё:

          JavaScript — ужасный язык программирования.

          Когда обучаю детей программированию, то предпочитаю начинать с простой веб‑разработки — сделать HTML страничку, скриптом добавить небольшую анимацию, потом загрузить через fetch прогноз погоды с открытого API и красиво отрисовать его. Это их заинтересовывает, знакомит с различными веб технологиями в понятной форме и даёт энергию для дальнейшего изучения программирования. Так получилось, что этот язык вкупе с веб разработкой удобен для знакомства с IT.

          Вывод? JavaScript - ужасный язык, но он удобен для знакомства с IT.


          1. alexandrustinov
            14.04.2024 14:32

            +потом загрузить через fetch прогноз погоды с открытого API

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

            Тут другой вопрос. Для детей, которые будут потом программировать в IT - им так или иначе обязательно потребуется bash, Linux, SQL, чем бы потом ни занимались (рассматривать Windows как основу даже в G7 странах уже как минимум странно), и вот Javascript тоже в любом случае нужно будет всем уметь как минимум читать.
            И Python тоже будет обязателен, но это если пойдут в науку или околонауку, инженерию, или в девопсы-тестеры.

            При этом современный Javascript, в который добавили classes, modules, properties - он не так и безнадежен. По сути уже мало чем от Delphi отличается по базовым для Computer Science возможностям. Нестрогие типы и неочевидное поведение при складывании чисел и строк - это не так и фатально, а вот строить сейчас UI на чем-то, что не HTML/CSS - это как минимум очень смело, учитывая кроссплатформенные моменты и прочие FullHD/4k/8k/16k перспективы.

            Говоря проще - Delphi/FreePascal, равно как и любые C производные: C++/С#/Java - это уже давно довольно бесперспективные в части начальных школьных языков нудятины (нужно сильно много как для школьника выучить/освоить на старте). А указатели из C++ и вовсе даже профессиональные программисты понимают и умеют в лучшем случае один из 10.

            Но вот для детей, которые никогда ни в каком виде потом не будут программировать (коих более 95% в классе) - им вообще программирование ни в каком виде не нужно, скорее всего даже вредно. Хотя возможно будет полезно уметь читать 1C или Visual Basic, но и тут уже прям сильно сомнительно. Хотя как понять, будет он айтишником или нет? Скретчем это не замерить.

            P.S. К слову - в школе можно и WebGL попробовать поизучать, там вполне наглядные на Javascript примеры в интернетах разбросаны. Я бы в свое время уписался от таких возможностей - на паре листочков кода запилить полноценные 3D космические полеты (на уровне DOS/Windows 3.11/Windows 95 это было для школьника чуть менее, чем недостижимо в 90-х, да и на С++ прям с разбегу войти в OpenGL и сейчас задача явно не для студента первого курса).


          1. gmtd
            14.04.2024 14:32

            Во-первых, IT != программирование. Программирование далее пригодится долям процентов учеников, IT - в сотни раз больше.

            Во-вторых, посмотрите на количество согласных с моим утверждением.

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


            1. actech Автор
              14.04.2024 14:32

              > Когда обучаю детей программированию, то предпочитаю начинать с простой веб‑разработки.

              Согласен. А после этого продолжение знакомства с программированием на чём основывается?

              > Это их заинтересовывает, знакомит с различными веб технологиями в понятной форме и даёт энергию для дальнейшего изучения программирования

              Согласен

              > IT != программирование

              Так кто с эти спорит?

              Когда высказывается несогласие с чем-то, то для конструктивного диалога приводятся факты. Возможно, в чем-то я не прав и диалог поможет это выявить. В комментариях меня поправляют и мне интересно узнать мнение других людей. Но что конкретно подразумевается под фразой "поток малосвязных предложений"? Догадайся сам.


      1. randomsimplenumber
        14.04.2024 14:32
        +4

        девочка-и-javascript.жпг


      1. talkingpipe
        14.04.2024 14:32

        Лучше даже так:

        console.log(018 - 017); // 3


        1. Rsa97
          14.04.2024 14:32
          +2

          Да много там приколов.

          parseFloat('Infinity'); // Infinity
          Number('Infinity'); // Infinity
          parseInt('Infinity'); // NaN
          
          true === 1; // false
          true + true === 2; // true
          
          '5' + true - 1 === NaN
          '5' - 1 + true === 5
          true - 1 + '5' === '05'
          true + '5' - 1 === NaN
          -1 + '5' + true === '-15true'
          -1 + true + '5' === '05'
          


  1. GennPen
    14.04.2024 14:32
    +12

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


    1. YMA
      14.04.2024 14:32
      +2

      Да, у нас Forth в школе давали. Логику выворачивает изрядно. ;)


      1. crawlingroof
        14.04.2024 14:32
        +1

        любой basic и ассемблер z80 самое то для начала, сугубо imho


        1. GennPen
          14.04.2024 14:32
          +1

          Мы в школе на УК НЦ в бейсике различные игры писали, без этих всяких ООП. =)


          1. sci_nov
            14.04.2024 14:32

            Да, а мы эллипсы рисовали, кажется, двигающиеся)


    1. crawlingroof
      14.04.2024 14:32
      +1

      все верно, можно показывать решение матрицы методом Крамера не объяснив на кой это вообще нужно, язык программирования рояля не играет


    1. actech Автор
      14.04.2024 14:32

      В существующих условиях основы программирования и логики практичнее изучать на базе консоли или оконной среды? Более наглядным является графическое или текстовое отображение объектов и результатов вычислений? Если мы голосуем за окна и графику, то уже не любой язык для обучения в рамках оконной работы с ними подойдёт. Я так думаю, что Pascal <> Delphi, Qt <> C++, а Android Studio <> Java.


  1. Tyusha
    14.04.2024 14:32
    +2

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

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

    Скретч у них даже в начальной школе. И это я приветствую.


    1. actech Автор
      14.04.2024 14:32
      +1

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


      1. miksmiks
        14.04.2024 14:32

        Дети у нас в парке катаются на самокатах, а по тротуарам - на электросамокатах. Реже и постарше - всё же это травмоопаснее.

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

        И еще в Скретче важнейшее понятие - координаты на плоскости, а в пятом классе скажем этого еще не проходят. Хотя для пятиклассников Скретч - самое то.


        1. actech Автор
          14.04.2024 14:32

          У Скретча с использованием кода проблема, но в том же App Inventor, Thunkable (про Snap! и прочее не говорю) есть блоки для обмена данными с браузером. И в этом плане переход от визуально блочного программирования к текстовому в рамках одной платформы видится достаточно интересным. А есть платформы, где блоки интерпретируются в код.


          1. miksmiks
            14.04.2024 14:32

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

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

            Нужен следующий шаг.


          1. Tyusha
            14.04.2024 14:32
            +1

            У Скретча много проблем. Постоянно ограничения (возможно это и плюс). Даже думала написать серию статей обзора Скретча с точки зрения "взрослого" программиста, т.к.там есть свои специфические трудности (из-за ограничений языка). Ниже я называю вещи "своими именами" на "программистском", но в Скретче таких терминов нет.

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

            2. Экземпляры объектов вообще не имеют public свойств. Совсем. У объекта вообще ничего нельзя запросить о его состоянии. Приходится заботиться, чтобы объект сам говорил о своём состоянии — выставлял какую-нибудь глобальную переменную и эмитил событие, чтобы другие прочитали эту переменную. Такие вот костыли.

            3. Массивы только одномерные.


            1. HemulGM
              14.04.2024 14:32

              Массивы из массивов могут быть? Если да, то только одномерные массивы - не проблема


            1. actech Автор
              14.04.2024 14:32

              Это интересно. Что-то похожее делал для Thunkable, App Inventor и Sketchware (пока он не закрылся). Несколько небольших курсов с точки зрения программиста и текстового программирования.

              В визуально блочных средах, если они поддерживают это, как раз интересна их связка с web при помощи JavaScript. Это позволяет не только захватить две области - мобильные приложения и web, но ещё и постепенно показать детям преимущество текстового программирования. Даже просил разработчиков сделать текстовые блоки многострочными или дать возможность текст из комментария использовать в блоках чтобы можно были в них писать код. Но, поскольку все они на Blockly движке, это затруднительно реализовать.

              Согласен с тем, что блокам не хватает гибкости. Для Thunkable даже делал инспектор объектов (там есть кое-что в плане динамического создания объектов и т.п.), но очень грустно создавать тысячу блоков только потому, что свойство в блоках невозможно задать в виде текста.


            1. Ken-Sei
              14.04.2024 14:32

              Даже думала написать серию статей обзора Скретча с точки зрения "взрослого" программиста

              С удовольствием почитал бы!


              1. actech Автор
                14.04.2024 14:32

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

                https://www.instructables.com/Making-Scratch-30-Extensions/

                В Хроме неплохо работает.


            1. actech Автор
              14.04.2024 14:32

              Если вам интересна возможность использования кода в Скретче, то в моде это можно реализовать http://droidscript.ru/main/statyi/st_jstoskratch.php

              Достучаться до объектов не получилось.


    1. tuxi
      14.04.2024 14:32
      +3

      Моя самая любимая задачка при обучении основам ООП - создать игровое поле, на котором шарики разного цвета и размера, будут двигаться и отталкиваться от его стен. Сразу становится логичным и понятным создание обьекта родоначальника "шар" и последующее наследование от него с целью менять визуальные характеристики и тп.

      P.S. Заодно можно показать, как важно иметь правильный рандомайзер, чтобы шарики равновероятно выбирали стартовый вектор движения.


      1. IvanPetrof
        14.04.2024 14:32
        +4

        Простите, немного не понял, зачем наследование для шариков разного размера или цвета?


        1. miksmiks
          14.04.2024 14:32

          Шарики можно сделать квадратными и взрывающимися - тогда как раз нужно :)


        1. tuxi
          14.04.2024 14:32

          Лучше мелкими шагами идти. После этого рассмотреть вариант с изменениями свойств.


          1. IvanPetrof
            14.04.2024 14:32

            Главное, не научить неправильному. А то у меня был как-то студент на практике, который в БД вместо создания строк, создавал новые экземпляры таблицы..


            1. tuxi
              14.04.2024 14:32

              Главное подвести обучаемого к вопросу: "а почему бы нам не научить обьект менять свои свойства в рамках того что нам надо". А шарики потом делать полыми, заполненными водой или полностью из металла. Тут бы физики как раз порезвились бы)))


      1. miksmiks
        14.04.2024 14:32
        +4

        Будете смеяться - ровно сегодня со школьниками я такую же программу писал :)

        uses WPFObjects;
        
        const n = 100;
        
        begin
          var cc := new CircleWPF[n];
          for var i:=0 to n-1 do
          begin
            cc[i] := new CircleWPF(Window.RandomPoint(35),30,RandomColor);
            cc[i].Direction := Random2(-1.0,1.0);
            cc[i].Velocity := Random(20,300);
          end;
          OnDrawFrame := dt ->
            foreach var c in cc do
            begin
              if (c.Right > Window.Width) or (c.Left < 0) then
                c.Dx := -c.Dx;
              if (c.Bottom > Window.Height) or (c.Top < 0) then
                c.Dy := -c.Dy;
              c.MoveTime(dt)
            end;
        end.

        Это конечно не объектно-ориентированное программирование, а объектное - тут нет полиморфизма и наследования, и объекты заранее заготовлены. Но для обучения самое то, тем более что это первое занятие по изучению графических объектов, их методов и свойств.

        Язык менее важен чем методика. Конечно, важны средства, предоставляемые языком и библиотеками.

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


        1. HemulGM
          14.04.2024 14:32
          +1

          Я, кстати, был удивлен, насколько Pascal.ABC Net расширился в последнее время.


        1. Jeshua
          14.04.2024 14:32

          Когда я был маленький, в Паскале не было foreach


          1. HemulGM
            14.04.2024 14:32
            +1

            Сейчас его тоже нет, это только в ABC, а в наследнике Паскаля - Делфи есть for var Item in List (но тоже появился лет 6-7 назад).


          1. qw1
            14.04.2024 14:32

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


            1. miksmiks
              14.04.2024 14:32

              foreach хорош в обучении по двум причинам.

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

              Во-вторых, foreach var x in a do читается как "для каждого элемента x в массиве a" - и эта фраза понятна любому начинающему.

              Жаль, что не подсвечивается на Хабре :)


              1. HemulGM
                14.04.2024 14:32

                for var Item in [1, 2, 3, 4] do
                  write(Item);


                1. miksmiks
                  14.04.2024 14:32

                  А давно в Delphi запись [1, 2, 3, 4] считается не множеством, а массивом?


                  1. HemulGM
                    14.04.2024 14:32

                    type
                      TSetInt = set of Byte;
                    
                    begin
                      var VArr: TArray<Integer> := [1, 2, 3, 4]; //TArray<Integer>
                    
                      var VSet: TSetInt := [1, 2, 3, 4];         //set of Byte
                    
                      var VArr2 := [1, 2, 3, 4];                 //array of integer
                    
                      var VArr3 := VArr + [5, 6, 7, 8];          //TArray<integer>
                    
                      var VArr4 := VArr + (.1, 2, 3, 4.) + [1];  //TArray<integer>
                    
                      var VArr5: TArray<Variant> := [1, 2, 3, 4, 'asd', 's', 2.32];
                    
                      var VArr6: TArray<TValue> := [1, 2, 3, 4, 'asd', 's', 2.32];

                    Как-то так =)

                    В Delphi последнее время много чего нового появилось, в том числе связанное с выводом типов.

                    Забавно (на самом деле не очень), что тип array of integer НЕ РАВЕН типу TArray<integer>, который в свою очередь является дженериком array of T


                    1. miksmiks
                      14.04.2024 14:32

                      Ну то что array of integer не равен TArray<integer> - понятно: первый тип существовал давно и не обобщенный. Совместить новое (обобщения) и старое - невозможно.

                      Про литералы (.1, 2, 3, 4.) я вообще не знал - это наверное первая версия литеральных массивов.

                      А вот запись [1..2,5] по прежнему означает множество в отличие от [1,2,5], которая означает массив. А запись [1..2,1000] понятно не компилируется в отличие от [1,2,1000]. Но это в любом случае очень сильный шаг - старые литеральные множества занимали квадратные скобки - их давно пора было оттуда теснить.


                      1. HemulGM
                        14.04.2024 14:32
                        +1

                        Я бы давно, на месте разработчиков Делфи передал (.1, 2, 3.) под множества, а квадратные скобки только под массивы. Так удобно и понятно почти на любом языке.

                        По поводу TArray<T> и array of, явное приведение типов прекрасно работает с этими типами.

                        var DynArr := [1, 2, 3, 4];
                        var VArr: TArray<integer> := [5, 6, 7, 8];
                        var VarSum := VArr + TArray<integer>(DynArr);


        1. tuxi
          14.04.2024 14:32

          Ну вот первые шарики на турбо паскале и делались )))


    1. Zhuikoff
      14.04.2024 14:32

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


      1. Zenitchik
        14.04.2024 14:32
        +1

        Скретч - не страшен. Детям, которые ещё плохо печатают, нужно показать программирование.


  1. Kahelman
    14.04.2024 14:32
    +4

    Как уже отметили у автора поток сознания без темы и цели.

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

    И писать не надо, системы голосового ввода все лучше и лучше. …


  1. panzerfaust
    14.04.2024 14:32
    +1

    Зачем в школах изучать Pascal, если

    Корень противоречия в том, что в школе должны изучать CS, а не паскаль. Далее только вопросы удобства. Изучать CS на компе удобнее, чем на бумажке. На модном макбуке удобнее, чем на засаленном десктопе. На JS удобнее (наверное), чем на паскале. В IDE удобнее, чем в блокноте. Донесите главную мысль: вы тут CS учите, а не язык. Кто пойдет прогать в промышленность через 10 лет - один хрен с нуля придется всему учиться. А CS (скорее всего) не поменяется.


    1. GennPen
      14.04.2024 14:32
      +2

      На JS удобнее (наверное), чем на паскале.

      Это по началу кажется что удобней с динамической типизацией. На самом деле в нем легко можно запутаться (комментарии выше) на этапе обучения. Именно на этапе обучения нужно использовать язык со статической типизацией. Да, можно использовать надстройки, например TypeScript для JS, но это костыли.


      1. MaNaXname
        14.04.2024 14:32
        +1

        А поделитесь информацией сколько человек Вы обучили и какого уровня(лет)?


    1. sets
      14.04.2024 14:32

      Только со второго прочтения понял, что речь о computer science


    1. Dolios
      14.04.2024 14:32

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

      С этим согласен, а дальше пошла субъективщина. На нормальном десктопе с нормальной полноразмерной кравиатурой и монитором удобнее, чем на ноутбуке с мелкодисплеем и позорной клавиатурой, прикрученной, к этому мелколисплею, так, что не расположишь нормально ни одно, ни другое. Особенно важно, что мы говорим о детях, которые не должны сидеть сгорбившись над ноутом, травмируя шею, а должны смотреть прямо перед собой (никто не должен, на самом деле, страдать за ноутбуком, но дети особенно, у них скелет формируется только). Ноутбук - это компромисс для временной замены нормального компьютера. Зачем школьнику нужна IDE тоже решительно не понятно. Зачем ему куча лишнего функционала, который отвлекает от обучения? Ну и, самое главное, не понятно чем для обучения CS неудобен язык, созданный для обучения CS.


  1. HemulGM
    14.04.2024 14:32
    +1

    При обучении программированию посредством Паскаля, ООП рассматривается в полной мере, сразу после понятий переменных и функций/процедур


  1. vesowoma
    14.04.2024 14:32

    25 лет назад тоже раздавались голоса "зачем учить программировать на Паскале". Но есть нюанс - задавалось толпой выпущенных педвузом любителей Бейсика )


    1. actech Автор
      14.04.2024 14:32
      +3

      Времена меняются, а Паскаль вечен!


  1. zubrbonasus
    14.04.2024 14:32
    +1

    Турбо Паскаль 7.0 имеет встроенные возможности ООП включая виртуальные функции которых нет во многих яп.

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


  1. Vindicar
    14.04.2024 14:32
    +3

    Я бы поспорил, что для обучения программированию обязательно нужен язык со статической типизацией, и по возможности строгой. Если сразу не приучиться держать в уме "с каким типом данных я сейчас работаю? что он умеет?", то потом научиться этому сложнее. В таких языках на это есть обычно исчерпывающий ответ - объявление переменной.
    В сравнении с этим питон и js нередко оказываются в ситуации "ну тут из функции какая-то фигня приехала, у неё вроде есть вот такой метод, а вообще я фз что это". Собственно, type hints в питоне и typescript на это и нацелены.


    1. Zenitchik
      14.04.2024 14:32
      +1

      ИМХО, отсутствие автоматического приведения целых к вещественным - это перебор. По остальному - согласен.


    1. Revertis
      14.04.2024 14:32
      +1

      Да, обязательно нужна строгая типизация. И понимание размерности, типы u8, u16, u32 и т.п.


  1. Brobokozluhromotabr-2
    14.04.2024 14:32
    +7

    >строго типизированный язык ... это было преимуществом

    Это до сих пор преимущество.


    1. actech Автор
      14.04.2024 14:32

      Смотря где. Знакомый на Delphi делает приложения под Android. С выходом новой версии Delphi или Android от него слышу, что приложение упало. Как решает проблему? Плотно сидит на форумах или просто откатывает Delphi. Строгая типизация, а проблем столько, что в самый раз переходить на web, чтобы хотя бы что-то работало, а не тихий краш с полным непониманием того, а что случилось-то.


      1. FDA847
        14.04.2024 14:32
        +6

        Что-то Ваш знакомый не так делает. Мы пишем приложения на Delphi сразу под две платформы - Android и iOS. Основной функционал отлаживаем под Windows. Никаких фатальных отличий от десктопа при разработке для Android нет. Навскидку помню только одно - символы в строке string начинаются под Android с нуля, а не с 1. Поэтому для совместимости с виндой лучше использовать функции Low, High. Всё остальное работает так же.

        Сделать HTTP-запрос на Delphi эт о1-2 строчки, разобрать JSON то же самое.

        Реальные отличия начинаются когда нужно управлять вибрацией на реальном устройстве, узнать версию собственного файла и т.п. Тут нужно реализовывать платформозависимые вещи, но это опять же 2-3 строчки.


      1. HemulGM
        14.04.2024 14:32
        +1

        Проблема эта никак не связана с языком, а связана с фреймворком. В основном из-за того, что фреймворк из коробки основан на JNI, а не нативной работе с ОС. Есть и другие фреймворки.

        У меня с приложением на Делфи под все ОС сразу нет никаких проблем


  1. NickDoom
    14.04.2024 14:32
    +2

    Учить надо основам. Идеал — это процессор с мигающими битами-лампочками, где можно отследить весь путь от машкодов до (врубив тумблером нормальное быстродействие) рисования окошка на экране.

    Школа — это не место, где надо изучать покупку бургеров. Это место, где надо изучать корову.


    1. YMA
      14.04.2024 14:32
      +1

      Одно другому не мешает. Опять же про свое школьное обучение - у нас было 2 предмета, информатика и автоматизация.

      На первом мы тот самый паскаль и остальные языки мучали. Решали теоретические задачки, с олимпиад по информатике (а после уроков иногда и играли, Goblins, Netwars и прочее).

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



  1. JoshMil
    14.04.2024 14:32

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

    Не будь его - курс был бы идеален как вводный.

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


    1. actech Автор
      14.04.2024 14:32
      +1

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


  1. gochaorg
    14.04.2024 14:32

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

    1. Синтаксис... это вот прям проблема на равном месте, например Delphi его формальный синтаксис не описан производителем (Embercadero), да существует стороннее описание, но они толком не особо работают, вот... попытался описать https://github.com/gochaorg/delphi-parser/blob/main/src/main/resources/Delphi.g4, я этот парсер, чтоб он взлетел и на Delphi 7 и на Delphi 2010 больше месяца убил, отлавливая глюки у себя

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

    На счет строгой типизации... ну да... там вообще есть variant такой тип, он же any в других, аргумент за типизацию (применительно к Delphi) не работает.

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

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

    1. заинтересованный ученик

    2. заинтересованный преподаватель (который сам в состоянии написать свой язык)

    3. интересная обучающая задача

    4. линтер, который не пропустит код с ошибками

    А что касается типизации и прочего... это уже отдельная история про Haskell / Rust / Agda / etc .... молодому человеку (со сколки лет там обучают) по мимо нашего программирования нужно еще кучу чего учить, а еще отдыхать и с друзьями общаться, и более сложные темы будет время в институте изучать


    1. HemulGM
      14.04.2024 14:32
      +1

       Delphi его формальный синтаксис не описан производителем (Embercadero

      1. DelphiLearn, ObjectPascal Handbook (на русском в том числе), И нажми F1 в любой версии среды разработки и зайди в раздел Programming Languages, где есть Delphi и C++ с описанием самых базовых вещей.

      Hidden text

      я этот парсер, чтоб он взлетел и на Delphi 7 и на Delphi 2010 больше месяца убил, отлавливая глюки у себя

      Ты бы ещё взял турбо Паскаль и пытался без изменения кода запустить его в Delphi 12 (2024 года)

      На счет строгой типизации... ну да... там вообще есть variant такой тип, он же any в других, аргумент за типизацию (применительно к Delphi) не работает.

      Аргумент работает и никто в здравом уме не будет использовать повсеместно этот тип и тем более при обучении его использовать. И да, этот тип не единственный и под Any больше подходит TValue.

      ... то языку программирования должно прилагаться

      1. Инструмент позволяет графически строить интерфейс

      2. Решать интересные для ученика задачи и создавать полезный для него инструмент или игру (создавать приложения на телефон сразу и использовать 3D инструментарий).

      3. Компилятор не пропустит синтаксические ошибки

      Как только нам начали преподавать Delphi 7 с его возможностями, я начал создавать приложения для себя и увлекся настолько, что ближе к концу курса уже я помогал преподавателю с Delphi.


      1. gochaorg
        14.04.2024 14:32

        Можешь кинуть ссылку на формальное описание языка ? вот тут https://docwiki.embarcadero.com/RADStudio/Athens/en/Delphi_Language_Reference
        его нет

        Вот где почитать официальную спецификацию языка ? по аналогии https://docs.oracle.com/javase/specs/
        такой официальной документации не нашел


        1. HemulGM
          14.04.2024 14:32

          Это претензия, что документация не такая как на Java? Или что? По этой документации не понять как работает if? Или как именовать переменные? Или как работают другие структуры?


          1. gochaorg
            14.04.2024 14:32

            Нет, не стеб

            вот грамматика if в delhi вообще не очевидна

            элементарно спроси других программистов (не себя), на других языках, которые не знают delphi, какой из следующих примеров кода на delphi является валидным

            1. if expr then succ() else fail();

            2. if expr then succ();

            3. if expr then succ() else;

            4. if expr then else fail();

            5. if expr then ;

            а вот все эти примеры являются валидными (Delphi 7), то что ты это знаешь, не вопрос, где о этом написано официально ?


            1. gochaorg
              14.04.2024 14:32

              Так, что наличие спеки для языка это нормально, отсутствие - встречается, только вот отсутствие спеки - это ни разу не достоинство языка


            1. HemulGM
              14.04.2024 14:32


              1. gochaorg
                14.04.2024 14:32

                Вот нету у меня этой chm файла, в этом chm файле описываются все 6 случаев ? в нем все грамматические правила описаны ? они описаны строго, однозначно и непротиворечиво ? так что по ним можно построить парсер и компилятор ?


                1. HemulGM
                  14.04.2024 14:32

                  Это документ для обучения и описания функционала. При чем тут твой парсер? И да, chm файл - это галочка Helps при установке среды разработки.

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


                  1. Zenitchik
                    14.04.2024 14:32

                    Язык Делфи и его компилятор закрыты

                    А это вообще законно? Спека языка, насколько я помню, не может быть предметом авторского права. Реализация компилятора - да, может.


                    1. HemulGM
                      14.04.2024 14:32

                      Вся документация имеется. Все конструкции описаны. Нет лишь технического описания


            1. qw1
              14.04.2024 14:32
              +1

              В списке не хватает примера
              6. if expr then succ(); else fail();
              Который для пришельцев из си-подобных языков кажется валидным.


              1. gochaorg
                14.04.2024 14:32

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


                1. HemulGM
                  14.04.2024 14:32

                  Я тебе скинул выше как работает If. Тебе этого мало или что?


      1. gochaorg
        14.04.2024 14:32

        Ты бы ещё взял турбо Паскаль и пытался без изменения кода запустить его в Delphi 12 (2024 года)

        В моем случае, реального проекта с 500 000+ строк delphi 7 и delphi 2010 оно совместимо и используется, без переписывания, есть части на delphi 7 и delphi 2010

        те Delphi 2010 в рамках своего языка понимает Delphi 7

        Была бы возможность не брать delphi, вообще бы не подходил бы к нему


        1. HemulGM
          14.04.2024 14:32

          То, что проект написанный на языке N и среде разработки M не работает корректно через почти 10 лет в новых версиях языка N и среды разработки M - это вполне нормально и даже говорит о том, что язык и среда развиваются.


          1. gochaorg
            14.04.2024 14:32

            Я с этим не спорю, обрати внимание


      1. gochaorg
        14.04.2024 14:32

        Аргумент работает и никто в здравом уме не будет использовать повсеместно этот тип

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


        1. HemulGM
          14.04.2024 14:32
          +2

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


          1. gochaorg
            14.04.2024 14:32

            кажется посыл не понял,
            а он был именно в томчто в нем есть и Статическая типизация (в Compile time) И Динамическая типизация (Run time - Variant и позднее связывание)

            И вот определить, что тот или иной код является только со статической типизацией, без чтения исходников - я не знаю

            не делает язык "не строгим".

            спорное утверждение - о понятиях, и они разные у нас

            Ты будешь удивлен, но ты можешь сам сделать такой тип на основе record

            Меня вообще это не интересует, меня интересует, как убрать из сторонних исходников Variant и/или убедиться что подобной динамики по типам в run time в коде нет, при том что бы мне это компилятор сказал или linter, а не читать исходники самому


            1. HemulGM
              14.04.2024 14:32

              Т.е., если в коде программы на каком-то языка нет ООП, то язык не ООП?

              Variant в Delphi - не является простым типом, это структура, которая позволяет хранить значения только определенных типов (определенных простых типов)

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


              1. gochaorg
                14.04.2024 14:32

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


                1. HemulGM
                  14.04.2024 14:32

                  Это дополнительный функционал, в ногу он выстрелить не дает. Проверка типов в нём тоже есть


          1. gochaorg
            14.04.2024 14:32

            то, что не давали про Variant, тут еще вопрос, на сколько это здраво - аналогия: как дать электроинструмент и не объяснить технику безопасности


            1. HemulGM
              14.04.2024 14:32
              +1

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


              1. gochaorg
                14.04.2024 14:32

                т.е. хочешь сказать, что школьников учат писать код без RTL ?


                1. HemulGM
                  14.04.2024 14:32

                  Без углубленного RTL. Если что, то RTL в Delphi масштабнее сишного std


                  1. qw1
                    14.04.2024 14:32

                    Сишный std никто особо и не развивает.
                    А вот что в плюсах понаворотили за 15 лет... Дельфи такой масштаб в кошмарном сне не приснится.


      1. gochaorg
        14.04.2024 14:32

        Компилятор пропускает много ошибок

        https://docwiki.embarcadero.com/RADStudio/Alexandria/en/List_of_publicly_reported_bugs_fixed_in_11.2

        https://docwiki.embarcadero.com/RADStudio/Sydney/en/List_of_publicly_reported_bugs_fixed_in_10.4.1

        А что бы сказать какого рода эта ошибка, синтаксическая или runtime или программиста или еще что... необходима спецификация языка, которой нет

        PS Язык программирования - тот же софт, те ми же глюками, а ТехЗадания нет на него, спецификации нет


        1. HemulGM
          14.04.2024 14:32

          "Компилятор пропускает много ошибок" - это стёб какой-то или что? Есть баги и это нормально для любого софта. Претензии просто умилительны


          1. gochaorg
            14.04.2024 14:32

            Компилятор не пропустит синтаксические ошибки

            вот с чего в друг?

            что в твоем понимании синтаксические ошибки ? а что другого не синтаксические ошибки компилятора ?


            1. HemulGM
              14.04.2024 14:32

              что в твоем понимании синтаксические ошибки

              Почитай вики что ли

              Синтакси́ческая оши́бка — неверное отображение совокупности установленных для данной языковой группы правил языка, относящихся к построению лексических единиц — словосочетаний и предложений.


              1. gochaorg
                14.04.2024 14:32

                Ага, и где эти официальные правила ?


                1. HemulGM
                  14.04.2024 14:32

                  Ты так и не нажал F1 в среде разработки или не читал docwiki?


                1. Zenitchik
                  14.04.2024 14:32

                  В BNF языка, например. Вы же сами выше требовали спеку Дельфи. Вот упомянутая спека - и есть те самые правила, отступление от которых называется "синтаксической ошибкой".


  1. Revertis
    14.04.2024 14:32
    +2

    Добавлю ещё одну важную вещь: НЕЛЬЗЯ детям давать математические задачи на уроках информатики. Надо программировать что-то наглядное вместо этих тупых матриц. Обработку графики, например. Работу с текстом. Создание игрового движка. И так далее.

    Кроме того, для итерации по двумерным массивам не надо использовать i и j, используйте x и y - так многим намного понятнее, и они не путаются.


    1. alexandrustinov
      14.04.2024 14:32

       Создание игрового движка. 

      А к следующему уроку, дети, домашнее задание, каждому сделать аналог unreal engine, но только на воксельных шейдерах и с SIMD оптимизациями.


      1. Revertis
        14.04.2024 14:32

        Нет, конечно. Что-то простенькое, с 2D-спрайтами в отдельных картинках. Делать что-то вроде игры "танчики", как на Денди была. Это разбудит интерес, дети сами будут спрашивать "как сделать это" и "как сделать так, чтобы".


        1. tuxi
          14.04.2024 14:32
          +1

          Это да, разбуженное детское любопытство - это сильная штукенция.


    1. Robastik
      14.04.2024 14:32

      Вообще, главнейшая задача образования - мотивация.
      Но наша школа принципиально не для образования.


      1. UstasAlex
        14.04.2024 14:32
        +3

        Нет, это не главнейшая задача, и даже не главная. Мотивировать учиться должно общество, вся система ценностей.

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


        1. Robastik
          14.04.2024 14:32

          учителя - не заинтересовал

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


          1. Zenitchik
            14.04.2024 14:32
            +2

            Вы забыли важную фишку: этот лицей работает с УЖЕ МОТИВИРОВАННЫМИ детьми, которых в него ОТОБРАЛИ.


            1. Robastik
              14.04.2024 14:32

              Вы это придумали. В заметке прямо сказано обратное.

              Для таких придумщиков директор школы специально взяла восьмиклассника - конченого дебила (с). Этот парень много лет был признан всеми безнадежным, сидел на последней парте и ничего не делал. Общепризнано было, что его жизнь после школы - алкоголь и тюрьма.
              Паренек поступил в ВУЗ по результатам олимпиады.
              Заранее объясняю: не было никаких сверхусилий школы, дополнительных занятий, особого отношения педагогов, школьных психологов и т.п. Был только один короткий разговор с директором и только один вопрос. Вообще, как правило, директор никогда не общается с учениками после их приема. К человеку отнеслись как к человеку и предложили шанс быть человеком.


              Есть и много похожих примеров, но не настолько нарочитых.


              1. kuzzdra
                14.04.2024 14:32
                +1

                директор школы специально взяла восьмиклассника - конченого дебила (с)

                Я что-то подобное читал про задохлика, который стал олимпийским чемпионом. И еще читал про ошибку выжившего. И про Хогвартс ;)

                Невозможно найти миллион талантливых учителей. Но можно сделать одну систему.

                Без талантливых учителей никакая система не будет работать. Ну тоесть работать то будет, но с нюансами.


                1. Ken-Sei
                  14.04.2024 14:32

                  Чтобы привлекать талантливых должна быть привлекательная зарплата.


                  1. kuzzdra
                    14.04.2024 14:32

                    гриффин плачет.жпг


          1. UstasAlex
            14.04.2024 14:32

            А что такое образование, без учителя?

            И ваш пример подтверждает мою мысль, что главная мотивация вне школы. Здесь правильно сказали, что туда пришли ученики, которые САМИ хотят учиться. Их не надо специально мотивировать. Примите в эту школу 5-10 разгильдяев, не желающих учиться - и через пару месяцев, при том полном потакании ученикам, учиться не сможет никто. Да это можно посмотреть в роликах из американских школ.

            А логическое завершение такого подхода к не элитному, а массовому обучению можно увидеть в рассказе Ллойд Биггл-мл. "Какая прелестная школа". Написано еще в середине прошлого века.


            1. Robastik
              14.04.2024 14:32

              Нет там отбора детей и даже в заметке это подчеркнуто. Там отбор родителей - чтобы не мешали школе мотивировать.


              1. UstasAlex
                14.04.2024 14:32
                +1

                В заметке ничего из того, что вы описали я не увидел. Ни про "дебила", ни про гуляния по классу, ни про запрет требовать учить уроки и т.п. Откуда вы все это взяли?

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


                1. Robastik
                  14.04.2024 14:32

                  ничего из того, что вы описали я не увидел

                  Нет там отбора детей

                  Откуда вы все это взяли?

                  Из личных наблюдений.


                  1. UstasAlex
                    14.04.2024 14:32
                    +1

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


                    1. qw1
                      14.04.2024 14:32

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


      1. UstasAlex
        14.04.2024 14:32
        +1

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

        И в подтверждение снова пример из жизни. Когда ребенку понадобились баллы по химии, выяснилось, что он ее и не знает. А после пары-тройки занятий с репетитором, заявил: так там же оказывается все ЛОГИЧНО и понятно. То есть в подаче материала на уроках просто отсутствовала система.


    1. kuzzdra
      14.04.2024 14:32

      Обработку графики, например

      Создание игрового движка

      Без математики?

      Кроме того, для итерации по двумерным массивам не надо использовать i и j, используйте x и y - так многим намного понятнее, и они не путаются.

      Нейминг, конечно, важная часть этих ваших CS, но не настолько же.


    1. Batalmv
      14.04.2024 14:32

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

      Плюс позволяют наработать базовые практики работы з различными структурами


  1. KEugene
    14.04.2024 14:32

    И вот опять вопрос: зачем информатика в школе? Если обучить основам программирования будущих программистов, то ладно. Тут куча аргументов за Паскаль. Но очень часто забывают, что программирование - удел не только программистов. Этим занимаются все, кто использует VBA, Python и R для решения каких-то своих, утилитарных вопросов. Бухгалтера, инженеры, медики, ученые... И число таких людей на много больше тех, у кого программирование является основным видом деятельности. Какой из трех озвученных языков не может сделать что то такое, что может Паскаль? И какой из них сложнее? Но в школе будет Паскаль. Не потому что он "хороший" , а потому, что министерство образования не намерено тратить ресурсы на создание актуальной учебной программы и перевыпуск материалов. Ему, банально, все равно.


    1. Robastik
      14.04.2024 14:32

      И вот опять вопрос: зачем информатика в школе?

      Неправильный вопрос.
      Правильный → зачем нашему государству школа? Кого она должна готовить? Чтобы образованные граждане просекли про свои права и жизненные ценности? Или чтобы умели по свистку выполнять бессмысленные задания и на коленях получать за их выполнение награду?


      1. MAXH0
        14.04.2024 14:32

        Правильный → зачем нашему государству школа

        ИМХО слово "нашему" можно зачеркнуть. Любому государству со времен Пруссии школа нужна для унификации граждан. Именно поэтому всякие Пиаже с Макаренко в массы не идут и большинство государств обучает по старой прусской модели. С различными национальными вариациями.


        1. UstasAlex
          14.04.2024 14:32

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


    1. UstasAlex
      14.04.2024 14:32

      Зачем информатика - это главный вопрос. За 36 часов (или сколько там) научить программировать НЕЛЬЗЯ. Ни на каком языке. А вот если давать общие представление о программировании, то Паскаль как раз для этого и создавался. Хотя как и в этом случае уложиться в такое время, я не знаю.

      Понятно, что в 5 - 6 классе детям гораздо интереснее интерактивные картинки, чем нудные описания перпменных. И вот здесь и надо определиться, что и кого мы хотим получить в итоге.


  1. Dolios
    14.04.2024 14:32
    +3

    Странный вопрос. Зачем учиться ездить на трехколёсном велосипеде, если, в итоге, все будут ездить на двухколесных, а всякие циркачи, так и вообще, на одноколесных?


    1. actech Автор
      14.04.2024 14:32

      Чем же он странный? Какое ваше мнение? Зачем изучать Pascal?

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

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


      1. HemulGM
        14.04.2024 14:32

        Затем, что он предоставляет нужную базу для изучения программирования в целом, а не только какого-то синтаксиса.

        Переменные и их типы никуда не делись и не денутся. Процедуры и функции - тоже. ООП - тоже. Четкое понимание что и как работает внутри - тоже всегда нужно.


        1. Drucocu
          14.04.2024 14:32

          Это не отвечает на вопрос "почему именно Pascal". Полно языков, которые предоставляют нужную базу.
          Но я тоже против JavaScript - он только запутает неокрепшие умы.


      1. Dolios
        14.04.2024 14:32
        +3

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

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

        Что мешает задающего его предложить детям тот язык, который он считает более практичным?

        Ещё раз, что мешает детям давать для обучения сразу более практичный двухколёсный велосипед, зачем они на трёх- и четырехколёсных ездят?


        1. Zenitchik
          14.04.2024 14:32

          Ещё раз, что мешает детям давать для обучения сразу более практичный двухколёсный велосипед, зачем они на трёх- и четырехколёсных ездят?

          Это два отдельных вопроса.

          что мешает детям давать для обучения сразу более практичный двухколёсный велосипед

          То, что они в силу возраста не способны его освоить.

          зачем они на трёх- и четырехколёсных ездят?

          Просто так. Хочется им на чём-то кататься, пока пресловутый возраст не достигнут.


          1. Dolios
            14.04.2024 14:32
            +1

            Это один вопрос и ответ на него тоже один. Детям дают инструмент, с которым они смогут управляться в силу наличия у них определеннных навыков (возраст тут постольку поскольку). Сначала стоит цель научить крутить педали, и рулить, не отвлекаясь на необходимость держать равновесие. Когда эти навыки освоены и доведены до автоматизма, можно двигаться дальше. Причем, можно пойти другим путём и сначала научиться держать равновесие на самокате и беговеле, а потом уже учиться крутить педали. Важно не вываливать на обучаемого всё и сразу. Так можно сделать и учиться сразу ездить на двухколёсном велосипеде, но шишек набьёшь больше.

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


        1. Ken-Sei
          14.04.2024 14:32

          Что мешает задающего его предложить детям тот язык, который он считает более практичным?

          Ещё раз, что мешает детям давать для обучения сразу более практичный двухколёсный велосипед, зачем они на трёх- и четырехколёсных ездят?

          Я бы сравнил профессиональное программирование с одноколёсным велосипедом. ;-)


          1. Zenitchik
            14.04.2024 14:32

            Очень зря.


            1. Ken-Sei
              14.04.2024 14:32

              А с чем бы вы сравнили?


        1. Robastik
          14.04.2024 14:32

          ему самому ещё учиться и учиться

          Дурака учить - только портить.


    1. Batalmv
      14.04.2024 14:32
      +2

      Зачем учиться ездить на трехколёсном велосипеде, если, в итоге, все будут ездить на двухколесных, а всякие циркачи, так и вообще, на одноколесных?

      Потому что пока дети маленькие, они не готовы сесть сразу на двухколесный. Поэтому трехколесные и беговелы, а уже потом двух-колесные


      1. Dolios
        14.04.2024 14:32

        Т.е. детям дают более подходящее для обучения средство. Ровно это же является ответом на вопрос: зачем детям для изучения основ алгоритмизации дают Паскаль?


        1. Batalmv
          14.04.2024 14:32
          +1

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

          Для алгоритмов Паскаль вообще подходит, а дальше выучить Х языков не составляет проблемы тем, кто пойдет в программирование


          1. Dolios
            14.04.2024 14:32

            Зачем вы мне это пишите, повторяя другими словами то, что я уже написал выше?


        1. HemulGM
          14.04.2024 14:32

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


          1. Dolios
            14.04.2024 14:32

            Какой аргумент?

            Если ты напишешь, каким базовым (и не только) вещам не сможет научить Паскаль

            Зачем бы мне это писать, где я утверждал что инструмент, созданный для обучения не может чему-то научить? Вы точно внимательно прочитали мои сообщения, прежде чем писать своё?


  1. GBR-613
    14.04.2024 14:32

    Учить в школе надо GWBASIC: все просто и понятно, список команд можно выучить за один урок, и при этом на нем делали что-то реально полезное. И этого достаточно, чтобы ребёнку понять - интересно ему это или нет.

    Кому интересно - для них пусть будет кружок, на котором учат Pascal.

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


    1. randomsimplenumber
      14.04.2024 14:32

      совершенно превратное представление о том, что такое компьютер и как с ним работать.

      gwbasic ? ;) Не нужно откапывать стюардессу, даже если она мумифицировалась, не пахнет, и почти не требует ухаживаний изучения. basic и так прячет под капот все что можно и нельзя, а 40-летний даже про наличие сетей не знает.

      Надо смотреть на вопрос ширше. Зачем воще в школе программирование? Работа с компьютером, как правило, с программированием никак не связана. Люди запускают готовые программы и пользуются их результатами. Это востребовано - умение обрабатывать информацию. А умение нарисовать кружок оператором CIRCLE (или таже отсортировать массив пузырьком) оно не востребовано совсем нигде, и никуда и никак не масштабируется.


      1. GBR-613
        14.04.2024 14:32
        +1


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


        1. kuzzdra
          14.04.2024 14:32

          Ну, если других возможностей нет то и стюардесса сгодится, конечно. Но мы же не на необитаемом острове? Можно и чего посвежее выбрать ;)


    1. Zenitchik
      14.04.2024 14:32

      QBASIC


    1. LuchS-lynx
      14.04.2024 14:32

      Учить в школе надо GWBASIC: все просто и понятно, список команд можно выучить за один урок, и при этом на нем делали что-то реально полезное.

      Вы бы еще вспомнили ZX Spectrum Basic, тоже вполне себе простой язык программирования, я бы сказал.

      На мой взгляд из DOS Ветки самый самый это Quick Basic 4.5, а из более-менее современных - VBA/VB/VB.NET/кроссплатформенный GamBAS


      1. Zenitchik
        14.04.2024 14:32

        На VBA и иже с ним нужно переходить после QBASIC. Когда уже освоены процедуры и структуры, и уже морально готов сам выдумать объекты.


  1. economist75
    14.04.2024 14:32

    Если не в теории, а на практике работать с детьми - быстро осознаешь насколько важно удержать их внимание, а это значит нужен минимум сущностей, строк кода, вводных слов и противоречий нестрогой типизации. В этом смысле Python, VBA/StarBasic, Pascal хороши - они это дают. Кстати, увлечется программированием в школе каждый 20-й ученик, и я не могу определить что важнее: дать ему знаний, или остальным 19-ти дать общее понимание алгоритмов.

    У VBA есть два огромных плюса - трансляция действий пользователя в код при записи макроса и 50% вероятность "второго пришествия" (а не 0,5%) того что это будет частью офисной работы или учебы, и здорово сэкономит время и нервы. VBA применим не только в Microsoft Office, но и во втором по популярности, но свободном офисном пакете OpenOffice|LibreOffice (но там еще есть и вездесущий Python, причем из коробки).

    Python в качестве учебного языка логичен из-за поддержки всех парадигм кода, нахождения в статусе Top-1(3) и применения в качестве языка мета-конфигурирования во всех современных технологиях. То есть он не имеет специфики. Код для изучения простых алгоритмов на Python будет самым компактным, хорошо укладывающимся в юные головы с шилом в ж. А именно из таких получаются программисты.


  1. nirom
    14.04.2024 14:32
    +1

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


    1. MAXH0
      14.04.2024 14:32
      +1

      Для базовой информатики 1 час в неделю есть "Кумир". Для углубленного курса уже 2 часа в неделю + 2 часа можно занять из урока технологии. Это дает за 8-9 класс полторы сотни часов. За это время можно чему-то научить. Потом можно добавить дополнительные кружковые занятия и все будет хорошо. Тех кто хочет учиться можно научить.

      Теперь к вопросу - Pascal или нет. Pascal замечательный язык, НО инфраструктура современного образования постепенно переводится на Python. У этого есть плюсы и минусы, но это так. Количество конкурсов и олимпиад для Python много больше чем для Pascal... ЕГЭ - преимущество Python . Поэтому все достаточно очевидно. Хотя массовые бумажные учебники по прежнему приводят код на Паскале, но Python побеждает. Опять же, есть аргументы за и против любого языка.


  1. nickerlan
    14.04.2024 14:32

    Мне кажется прекрасным языком для входа в программирование для школьников был бы Go. Строгая типизация, полезные архитектурные conventions, низкий порог входа. Плюс отдельно Jupyter Notebook (даже не питон в чистом виде). Чтобы тренировать последовательность выкладок и возможность анализа данных. В сильных универах к этому списку добавил бы Rust + Haskell (не уверен что это сложнее было бы тех же урматов, зато концепции начали бы прорастать в голове и через годы дошли бы).


  1. chnav
    14.04.2024 14:32
    +2

    У меня сын 5й класс. В школе и кружке робототехники какая-то шляпа со скетчами на русском языке, хотя были и положительные моменты с PowerPoint и созданием анимированных слайдов.

    Как-то захожу к нему в комнату, на экране среда разработки Roblox и он там пятиэтажные программы шпарит: нажимаешь кнопку - какие-то кубы разлетаются, таймеры и пр. Спросил какой язык - Lua... У меня глаза на лоб, "где, как? сам ?" Говорит искал подсказки в гугле. Начал изучать сам, потому-что захотел узнать как устроено и научиться делать так же. Вот и весь ответ. К слову с самого начала (около 2-3 лет назад) установил ему на комп английский Windows, интерфейс у большинства его игр и программ тоже английский. Сейчас проблем с терминологией нет т.к. комп с детства на этом языке.

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


    1. economist75
      14.04.2024 14:32

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


    1. actech Автор
      14.04.2024 14:32

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


  1. Batalmv
    14.04.2024 14:32
    +1

    По опыту ВУЗа (где был как раз паскаль на первом курсе) и финальная задача - написание синтаксического калькулятора по результатм первого семестра. Часто писали на доске :)

    Итак, сейчас, когда мне уже 40+, могу сказать следующее:

    • программирование на доске учит читать и интерпретировать код в голове, что крайне полезно. Иногда по должности надо читать "чужой" код, очень помогает,

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

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

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


  1. LuchS-lynx
    14.04.2024 14:32
    +1

    Странное утверждение что сегодня никто на Паскале не разрабатывает, разрабатывают, в Lazarus например: Double Commander, Гранд-Смета. В школе учил QBasic 4.5, работаю с VBA постоянно. Да, Паскаль не является супер популярным языком разработки, но свою нишу имеет. Кроме того он достаточно прост и структурирован, как писали выше давать ребенку ту же Java/JS в школе неразумно из-за все той же типизации, за что, в свое время, критиковали Бейсик


  1. vvp57
    14.04.2024 14:32

    Школьный курс информатики давно устарел. Этот предмет или убирать надо из программы или делать совсем другой предмет, который бы отвечал современным условиям. А то что изучают сейчас - давно неактуально. И спорить о том какой язык программирования изучать - бесполезно. Пустая трата времени. Может лучше в курс математики включить основы алгоритмизации и логики, вместо бесполезного предмета информатики. В школьной программе 90% бесполезного материала.


    1. invasy
      14.04.2024 14:32

      А что конкретно устарело?


  1. larasage
    14.04.2024 14:32

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

    А мне нравились те уроки, на которых надо было решать задачи - была ли это контрольная по алгебре/геометрии (но в этом случае только первая половина урока) или подготовка к олимпиаде по математике (на которую отпускали с части и других уроков). Или в старших классах - ещё и по физике, когда учитель давал задания и уходил из класса и я решал варианты для всего класса (2/3 из которого были противоположного пола, да). А программировать в 11 классе нас учили на Фокале и Бейсике (БуКашки - наше всё!). С Паскалем я познакомился уже в ВУЗе, где он был основным языком на нашей кафедре.


  1. seventhevil
    14.04.2024 14:32

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


    1. HemulGM
      14.04.2024 14:32

      Решения на Паскале тоже могут быть короткими, только за такое преподаватели по рукам бьют (за использование расширенной StdLib).

      Решил ученик задачу на Питоне, а препод подходит и спрашивает "а что вот эта функция внутри у тебя делает?" и ученик "ни бе ни ме".


      1. seventhevil
        14.04.2024 14:32

        На егэ его не спросят об этом, остальное средний учечик по больнице слушать не хочет — это реалии.


        1. HemulGM
          14.04.2024 14:32

          И кому человек со знаниями "ничего" нужен?


          1. seventhevil
            14.04.2024 14:32

            Этот урок преподаст уже жизнь.


    1. miksmiks
      14.04.2024 14:32
      +1

      Как говорил Линус Торвальдс: "Болтовня ничего не стоит, покажите мне код!"

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


      1. kuzzdra
        14.04.2024 14:32
        +2

        Если надо еще короче и непонятнее - несите perl ;)
        Оба примера ужасны. Или это была специальная олимпиада, где нужно экономить строки?


        1. miksmiks
          14.04.2024 14:32

          Пример не мой - я бы так не писал и не учил. Но так реально пишут на ЕГЭ, некоторые профессиональные преподаватели так учат писать школьников и авторы учебников так учат учителей. Так что это - данность - как бы она нам ни не нравилась.

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


      1. seventhevil
        14.04.2024 14:32

        Простите, но это паскаль abc, а не обычный паскаль, речь в комментарии шла об обычном.


        1. HemulGM
          14.04.2024 14:32
          +1

          "Обычного" паскаля не существует. Есть Object Pascal (Delphi), есть FPC, есть Pascal.ABC (который и преподают, потому что он разработан именно для обучения)


          1. randomsimplenumber
            14.04.2024 14:32
            +1

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

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

            (0..1000).Cartesian(2) - это хорошо и красиво.

            C - простой язык. По сравнениию современным паскалем.


            1. miksmiks
              14.04.2024 14:32

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

              Что касается сравнения с приведением типов в JS или с использованием указателей в C, то в какой-то степени этот код менее сложный. Всё же приведение типов - это низкоуровневые вещи, а здесь - сверхвысокоуровневые.

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

              Научить такому коду школьника - не такая уж сложная задача. Важен регулярный подход. Вы сами сказали, что Cartesian(2) - это красиво. Так и есть - он заменяет 2 вложенных цикла, превращая последовательность чисел 0..1000 (кстати, это просто последовательность если речь о терминах) в последовательность пар. После чего в этой последовательности пар All ищет все валидные, удовлетворяющие функции F. Тот же код можно написать вложенными циклами с логической переменной и break из двух циклов сразу :) Но сложнее. При правильном подходе современный школьник конечно напишет соответствующий код с циклами, но на ЕГЭ времени особо нет.

              Строка же (0..1000).Where(valid).First.Print - это баловство, которое на Питоне понятнее написано циклом. Но и читается она неплохо: в последовательности от 0 до 1000 взять валидные, среди них - первый и - напечатать.

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


              1. kuzzdra
                14.04.2024 14:32

                Что может быть проще указателей в С? Учителя, неспособного обьяснить это с помощью спичечных коробок с бумажками, нужно гнать из профессии ;)

                А в python можно было бы задействовать магию List Comprehension - 2 цикла свернулись бы в одну строчку - и золотая медаль за непонятность переходит к Python :)


                1. miksmiks
                  14.04.2024 14:32

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

                  Учителя не надо гнать из профессии - им и так несладко. Недавно был потрясен зарплатами - наши пошли помочь новой школе. Итог - 14200 на ставку, 3200 - доплата за степень, 3400 - доплата за 20 летний стаж. Без комментариев.

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

                  Более всего и в Питоне и где бы то ни было меня раздражает, когда учитель использует конструкцию и не объясняет, что она значит. Объяснение примерно такое - пиши так и будет такой результат.

                  Например, в учебнике Босовой 2022 года для 7 класса на втором (!) занятии в теме Программирование используется код

                  a,b = map(int, input.split())

                  Сразу после переменных и присваивания.


      1. Rsa97
        14.04.2024 14:32

        (0..100).Cartesian(2)
        

        Вот так вот, на ровном месте взяли и отъели 80 килобайт памяти.

        (0..1000).Where(valid).First.Print
        

        И проделали кучу лишней работы, поскольку не остановились на первом подходящем числе, а перебрали всю тысячу.
        Причём циклами можно не только сэкономить память, но ещё и, посмотрев на условие, сократить объём перебора (x от 0 до 60, y от 0 до x). И это не говоря уже о том, что задачу вообще можно решить аналитически в уме, ответ 181.


        1. HemulGM
          14.04.2024 14:32

          Добро пожаловать в мир Питона, там такое всегда, повсеместно и постоянно.


          1. kuzzdra
            14.04.2024 14:32

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

            ЗЫ

            Не любят тут паскаль ;)

            ЗЫЫ похоже авторов ABC что-то покусало, то ли С, то ли brainfuck. После тупых, многобуквенных но понятных BEGIN END придумать конструкцию

            (0..1000).

            которая чудовищно похожа на

            (0.1000)

            но означает совершенно другое. Как раз что нужно в языке для обучения - нюансы, которые даже загуглить невозможно (google://круглые скобки в abc pascal?). То ли из символов остались только круглые скобки, то ли новых ключевых слов запрещено вводить.


            1. HemulGM
              14.04.2024 14:32

              Тут есть язык Delphi - это и есть "Паскаль", а точнее его развитие "Object Pascal". Название языка было изменено.


            1. HemulGM
              14.04.2024 14:32

              Синтаксис Pascal.ABC своеобразный, потому что это смесь Паскаля с C#. Среда и компилятор написаны на C#, там даже LINQ есть и прочая херня из C#. Синтаксический сахар весь тянут оттуда же.


              1. Ken-Sei
                14.04.2024 14:32

                Так Delphi - тоже своеобразный, и существенно отличается своей объектной моделью от Borland Pascal смахивая на Borland C++. :-)


                1. HemulGM
                  14.04.2024 14:32

                  Это чем он смахивает на Borland C++ ?


                  1. Ken-Sei
                    14.04.2024 14:32

                    Помните как объекты и классы описывались в Borland Pascal?


                    1. HemulGM
                      14.04.2024 14:32

                      Они так же описываются и сейчас


                      1. Ken-Sei
                        14.04.2024 14:32

                        Нет, абсолютно иначе:

                                     type
                                       TEmployee = object
                                          Name, Title: string[25];
                                          Rate: Real;
                                          procedure Init (AName, ATitle: string; ARate: Real);
                                          function GetName : String;
                                          function GetTitle : String;
                                          function GetRate : Real;
                                          function GetPayAmount : Real;
                                     end;


                      1. qw1
                        14.04.2024 14:32

                        А в чём "абсолютная инаковость"? Слово object может быть заменено на class, но и такое объявление допускается в delphi ради совместимости.


                      1. HemulGM
                        14.04.2024 14:32

                        object - deprecated


            1. miksmiks
              14.04.2024 14:32
              +1

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

              Диапазоны - они настолько повсюду, что я задумался - как можно спутать a..b и a.b и утверждать, что первое плохо, а второе - самое оно. И в Pascal собственно оно встречается с 1970 года например в статических массивах: array [1..10] of real или литеральных множествах [1..5, 10].

              Но на вкус и цвет как говорится ..

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

              Тут раз пять встречаются диапазоны в виде горизонтального двоеточия. Горизонтальное двоеточие не гуглится - даже пытаться не стоит.


              1. kuzzdra
                14.04.2024 14:32

                Синтаксис оператора for с конструкцией (диапазон).метод слабо связан.

                как можно спутать a..b и a.b

                Опичятки случаются, особенно у начинающих. В этом отношении С еще хуже - с помощью лишнего или пропущенного символа легко получить валидную, но неправильно работающую программу ( == vs =, && vs & etc). := ни с чем не спутаешь ;) Но раз в язык для обучения притащили все что есть в других языках:

                (0..1000).Where(Valid).First.Print

                и неявно созданные классы, и что-то выглядящее как функциональщина - чем он отличается от другого языка? В чем сермяжный смысл позже переучиваться с begin-end на {} ? ;)


        1. miksmiks
          14.04.2024 14:32

          Ну это мир LINQ, а не мир Питона всё-таки.

          Нет, память не отъедается - вот реализация:

          function Cartesian<T>(Self: sequence of T; n: integer)
            : sequence of (T, T); extensionmethod;
          begin
            foreach var x in Self do
              foreach var y in Self do
                yield (x, y)
          end;

          В каждый момент времени в памяти - один кортеж. Сокращение перебора y от 0 до x - это всего лишь в 2 раза. И можно ошибиться с этим условием и получить неправильный ответ - на ЕГЭ бы я не рисковал. Там будут похожие задачи, но другие.

          Здесь тоже

          (0..1000).Where(valid).First.Print

          мы не перебираем до конца, а останавливаемся на первом найденном элементе - последовательности ленивы. И память расходуется только на один элемент при переборе.

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

          И да - я бы писал и учил немного не так нежели в приведенных выше кодах.


          1. HemulGM
            14.04.2024 14:32

            По реализации метода, это вам выше нужно было отвечать)


  1. Vitaly83vvp
    14.04.2024 14:32
    +1

    В школе у нас преподавали Basic (не тот, что Visual, а который под DOS), а в универе продолжили на С. Pascal/Delphin как-то обошёл меня, но разобраться в них самостоятельно проблем не вызывает - синтаксис простой.

    Мир меняется и языки тоже должны соответствовать реалиям. Однако, преподавание в школах JavaScript считаю лишним. Нужно понимание того, как всё работает. Да, на этом языке наклепать программу ничего не стоит, но будет ли она работать оптимально? Главное, на мой взгляд, научить думать, составлять правильные алгоритмы. А на каком языке - уже не имеет значения.

    Типы данных нужны, чтобы нагляднее показать работу программы. Assembler, конечно, будет слишком для школьников, да и C тоже. Для школы нужен язык, который обеспечивает и простоту (нет лишних элементов в коде), и одновременно, актуален.


    1. Ken-Sei
      14.04.2024 14:32

      Актуальность языка и фреймворка - может легко устареть ко времени окончания школы.


  1. sci_nov
    14.04.2024 14:32

    Какой там Паскаль, даже Python трудно даётся в школе. Там атмосфера очень нехорошая, и дети тут не причем...


  1. Sweeney5TODD
    14.04.2024 14:32
    +1

    Почему автор задаётся вопросом о нужности/ненужности Паскаля, если для большинства школ актуален вопрос: а нужно ли программирование? И ещё, не во всех общеобразовательных школах знакомят с Паскалем, изучают другие типа того же JavaScript. То есть даже не была изучена статистика обучения ЯП в школах, чтобы хотя бы узнать как часто вообще изучают Паскаль, чтобы приводит ему "более лучшие" аналоги.

    Далее идут откровенно глупые (даже не наивные) вопросы, типа: «Зачем на уроках труда шкурить древко лопаты, если на практике с большей вероятностью придётся что-то паять? Зачем на физкультуре ходить на лыжах, если в жизни чаще придётся бегать?»
    Отвечаю (хотя не стоило бы, наверно): Затем, что необходимость в пайке (в быту) сейчас в принципе встречается реже, чем даже 40-50 лет назад, а умение работать с деревом пригождается довольно часто, и не только в быту. Ходить (и бегать) на лыжах зимой несколько проще, чем бегать без лыж по снегу. Зал отпадает, потому что занятия нередко пересекаются между классами, а составить расписание, чтобы они НЕ пересекались почти нереально для 1000+ учеников. Это я ещё не начал про разницу физ.нагрузки между простым бегом и бегом на лыжах.

    «Выходит, нужно либо записываться в кружки программирования, либо заниматься самообразованием»- да, внезапно, именно этим родители и занимают своих детей (кружки и секции). Почему? Потому что перед школой не стоит задача дать глубокие (для среднего образования) знания, чтобы условный Петька, окончив оную, мог работать программистом на Delphi или C++ или <вставьте язык, который нравится>. Школа даёт общие, поверхностные знания и базовые навыки для существования в современном мире. Да, автор. Оказывается, чтобы жить, вовсе не обязательно быть программистом или ещё кем-то. Достаточно писать, читать, считать, работать руками и обладать социальной практикой (школа этому не учит, как дисциплине, но сами условия школьной среды дают эти навыки детям), чтобы взаимодействовать с людьми - всё на этом.

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

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

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

    Накипело, но было бы лучше оставить вторую часть текста, где речь непосредственно о Paskal.


    1. Ken-Sei
      14.04.2024 14:32
      +1

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