Pull to refresh

Comments 455

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

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

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

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

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

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

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

for var i := 1 to 10 do

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

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

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

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

Это сейчас их пруд пруди, а в то время когда я учился интернет был далеко не у каждого и Denver был богом из машины. А так помимо паскаля как раз с JS и возился. А потом дорвался до python, import gravity, а там и в геймдев дорвался с плюсами, указателями и утечками и луа.

Это у вас плохие преподаватели были

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

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

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

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

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

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

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

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

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

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

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

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

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

cpp (Builder, MSVC с MFC) вполне конкурировал с Delphi на ниве прикладных программ. "Системность" языка тут не важна.

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

C#, Kotlin, Swift

Что-то я не наблюдал сторонних для них компиляторов. Даже для C#.

Для C# есть Mono.

Ну сейчас, спустя много лет, я наблюдаю-таки развитие языка Delphi - и очень неплохое. Дженерики насколько я понимаю в стиле C++, вот внутриблочные или по-ихнему inline-описания завезли и даже описание переменной цикла for в заголовке.

А оконные приложения на нем по-прежнему делать очень удобно.

В Delphi именно generics, как в C#/java, а не templates, как в C++
Различие довольно существенное.

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

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

//Будет требоваться любой record
TType1<T: record> = class     

//Будет требоваться любой класс
TType2<T: class> = class     

//Будет требоваться любой класс, в котором реализован коснтруктор Create
TType3<T: class, constructor> = class     

//Будет требоваться класс TMyClass или наследники и поддерживается интерфейс ISomeIntf
TType4<T: TMyClass, ISomeIntf> = class     

//Будет требоваться класс TMyClass или наследники и TList<T> где T - TMyClass
TType5<T: TMyClass; T2: TList<T>> = class     

И так далее. Пример из боевого проекта:

type
  TProcEntityList<TItem: TEntity, constructor; TList: TPageEntityList<TItem>;
  TParams: TJSONParamList, constructor> = reference to function(out List: TList;
    Params: TParams; out Error: TErrorMessage): Boolean;

  TProcBasicList<TItem: TEntity, constructor, IBasicItemList;
  TList: TEntityList<TItem>; TParams: TJSONParamList, constructor> = reference
    to function(out List: TList; Params: TParams;
    out Error: TErrorMessage): Boolean;

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

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

Он не удобный, но достаточно простой.

как работают циклы, выделение стека памяти

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

А строки там тоже такие же? Си сразу с порога бьёт новичка по еблищу указателями, потому и был придуман Паскаль как введение в программирование перед изучением Си. Этакие счетные палочки перед изучением счета в столбик.

Си сразу с порога [...], потому и был придуман Паскаль

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

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

Нет, Pasacal был придуман для обучения как упрощённый Algol (потому и имеет синтаксис от Algol), и был придуман за два года до C.

Для сравнения учебный язык Basic основан на упрощённом синтаксисе Fortran.

А строки там тоже такие же?

Циклы там точно такие же ;) А строки.. Указатели.. Концепция спичечных коробок, в которых хранятся бумажки с адресами других коробок - сложное..

Тогда уж лучше Modula-2... :-)

Зачем останавливаться на полпути, берите Oberon.

Он не столь красив и лаконичен, ИМХО

Хотелось бы пример сравнения Оберона с Модулой и Паскалем.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@Dreucocuтоже такого не утверждал. Из процитированного Вами этого не следует.

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

Видите? МОГ. "Мог", а не "должен". Про "должен" никто не говорил.

Хорошо, если вы верите в способность @Ken-Sei поддерживать адекватную беседу, предпримем ещё попытку.

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

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

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

Я не знаю, как ещё понятнее выразить эту мысль.

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

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

это ваше частное мнение

Ясное дело. Мы же тут не в комитете каком-то сидим.

Сотни моих знакомых преподавателей

Если у вас сотни знакомых преподавателей - моё почтение, конечно же.

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

Хотя до сих пор не понимаю, как синтаксический сахар у вас связан с творчеством. Отсутствие сахара ученика как-то ограничивает или демотивирует?

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

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

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

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

По поводу методичек и Pascal собственно. Сейчас два года уже как Паскаль вымарывается из школьной программы, полностью или почти заменяясь Питоном. В новом ФГОС образца 2022 года на углубленном уровне Паскаль отсутствует. Всякий: Турбо, Delphi, PascalABC.NET. Там Python и C++. Все новые учебники уже полностью переписаны под Питон. А старыми нельзя будет пользоваться. Питон идет с 7 класса. Потом в 8, 9, 10 и 11. И начало выглядит так (учебник Босовой): ввод числа

a = input()
a = int(a)

а ввод двух чисел -

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

И это на первых же занятиях. Так что пока мы с вами спорим синтаксический сахар пришел в виде тотального Питона.

Мы, когда учим школьников, начинаем с минимальным синтаксическим сахаром.

В общем-то, это и был мой основной поинт.

Так что пока мы с вами спорим синтаксический сахар пришел в виде тотального Питона.

Не знал. Ну штош: теперь будущих Боров и Гауссов ничего не ограничивает в их нестандартном мышлении)

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

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

a = input()

a = int(a)

Зачем переиспользовать переменную с разными типами данных? Можно взять 2 разные переменные, или в 1 строчку написать. Зачем учить плохому?

Поддержу.
А ещё можно сразу научить давать пременным осмысленные наименования.

integerValue = int(floatValue)

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

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

Ну, например, задача чего-то отсортировать. В старом добром паскале ученик пишет функцию сортировки. Или процедуру. Или пузырьком. Или изобретает свой способ - готовой сортировки там нет. Попутно врюхивает концепцию массивов, вложенных циклов, учится не выходить за границы массива.. В новом модном паскале ученик-Гаусс вызывает метод Sort. Задача решена? Да. Правильно? Да. Похожая ли вышла конструкция? Нет. Этого ли хотел учитель? Не уверен.

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

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

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

Одна из методик - сразу показываем Sort.

Тогда нужно показывать и остальные 50 методов, которые умеет список/коллекция/последовательность/чего там еще есть в языке.
Раз уж начали изучать структуры данных - не нужно останавливаться.

Ну нет, не надо. Это зависит от методики. Тем более, что во многих языках sort - внешняя функция.

Просто время игрушечных языков 50 летней давности ушло.

Просто время игрушечных языков 50 летней давности ушло.

Но олимпиадное программирование не ушло же? Алгосики-то школьникам всё равно надо щёлкать или методика предполагает сразу необузданное творчество?

Список языков на международных ACM ICPC:

    C
    C++
    Java.
    Python (2 & 3)
    Kotlin

не вижу тут Паскаль.
А кстати, в 90-х был )))

И правда. Ну и ладно, ну и хорошо. Я на международную олимпиаду в своё время не выходил, конечно, но на городской/областной Pascal был)

PS JavaScript, слава богам, всё-таки нет
PPS Не хватает Go, хехе

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

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

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

Но олимпиадное программирование это как высокий спорт.

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

Просто время игрушечных языков 50 летней давности ушло.

А алгоритмы как были так и остались. Хотя если исходить из того, что математика программисту не нужна, и алгоритмы тоже не нужны, тогда начинать с ООП, прямо из середины (пишите через точку то что предлагает автокомплит в IDE) вполне здравая идея.

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

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

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

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

"бесполезный тролль" - кого-то он мне напоминает. Не вас ли сэр))

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

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

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

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

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

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

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

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

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

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

+потом загрузить через 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 и сейчас задача явно не для студента первого курса).

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

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

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

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

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

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

Согласен

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

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

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

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

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

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

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'

Я могу привести аргумент, который по-моему тут забыли: первый язык программирования должен по моему мнению обладать несколькими качествами. Задача первого языка не научить ученика программировать что-то конкретное, а научить принципам и как постигать эти принципы в других языках. Тогда он без проблем сможет между ними переходить. Сразу скажу, что паскаль и бэйсик (не VBA, а что то более простое) лучше для этого чем питон или js. Во первых язык не должен содержать лишних концепций, которыми питон и js обладают в изобилии (взять хоть значение undefined в js. Попробуйте человеку ничего не знающему о переменных и типах объяснить концепцию, что переменная может иметь значение null, но ещё и быть undefined... А другие языки без этого счастливо живут. Таким образом лишние концепции скрывают базовые принципы. И в питоне такого полно. И хоть Гвидо и заявлял, что "должен быть только один путь", на самом деле вышло, что питон очень набитый разными фичами язык. Как итог, у обучаемого возникает масса побочных и не нужных на начальном этапе вопросов) . По этой же причине не подходят и си с ассемблером - очень много деталей. Во вторых язык должен минимизировать время ожидания положительного результата. Здесь уже паскаль не на высоте - нужен процесс компиляции. Но может помочь среда или ide если компиляция настроена одной кнопкой и выполняется быстро. В минус паскалю (классическому, не делфи, т к в делфи тоже очень много деталей) играет и то, что он из коробки не даёт возможности дать ученику задачи с графикой, а средний человек лучше воспринимает визуальные результаты. А это важно, т к при обучении быстрая обратная связь ускоряет процесс на порядки. Т е буквально нарисованная на экране мордочка из трёх кругов и двух полосок лучше будет стимулировать к обучению, чем пресловутый хэллоу ворд или задачки с запросом возраста текстом из консоли. ООП в первом языке скорее вреден, чем полезен. Без паттернов проектирования ООП - это чемодан без ручки, а давать паттерны человеку, ни разу в жизни не написавшему реальных и более-менее объемных программ бесполезно и даже вредно. (В статье упомянули лоу-код конструкторы, но это не ООП вообще. И я считаю, что это наоборот переупрощение т к они продвигают другую концепцию, которая никогда не заменит классическое программирование и потому годятся лишь для детей и менеджеров =) ) Поэтому, классический паскаль в этом плане даже очень подходящий. Но не факт, что самый подходящий.

ПС: можно с изложенным не согласится, т к я в основном опираюсь на свой личный опыт самостоятельного обучения и попыток разной степени успешности обучать других людей. По моему мнению самым лучшим языком для обучения именно школьников из тех, что знаю я до сих пор остаётся бэйсик в его до vba-шную эпоху, но какой-нибудь его вариант позволяющий работать с графикой. Сам я самообучался на zx-spectrum basic и ретроспективно понимаю, что это во многом было проще, чем если бы я сегодня взял любой из распространённых языков, типа питон, си, js, с# или даже тот же делфи. Понимаю, глядя на то, как осваивают их новички.

переменная может иметь значение null, но ещё и быть undefined

Может - ладно. Можно порешать 100 задач с leetcode и ни разу с этим не столкнуться. Не обязательно при обучении использовать все-все фичи языка.

QBASIC - прекрасен. Я с него начинал, потом успешно перешёл на VBA.

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

Согласен, и графические операторы PSet, Line, Circle, Paint доступны примерно везде (хотя последний как раз недоступен именно в Visual Basic, что вынуждает использовать WinAPI).

В VB6.0 - был доступен.

Значит, моя память спит с другим.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 мы еще давно со школьниками пытались делать подобное, но там всё с нуля, и получается сложно - это не масштабируется на массовые занятия, и трата времени сильно большая, а времени жалко.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Я бы давно, на месте разработчиков Делфи передал (.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);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

А в каких популярных языках их нет? Зачастую нет статической диспетчеризации из примеров которые сходу приходят в голову

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

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

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

UFO just landed and posted this here

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ой блин... снова Паскаль..., т.к. я с 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 .... молодому человеку (со сколки лет там обучают) по мимо нашего программирования нужно еще кучу чего учить, а еще отдыхать и с друзьями общаться, и более сложные темы будет время в институте изучать

 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.

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

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

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

Нет, не стеб

вот грамматика 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), то что ты это знаешь, не вопрос, где о этом написано официально ?

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

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

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

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

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

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

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

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

https://en.delphipraxis.net/topic/5676-pc-specs-for-delphi/

https://stackoverflow.com/questions/171827/looking-for-a-complete-delphi-object-pascal-syntax


http://dgrok.excastle.com/

https://groups.google.com/g/comp.lang.pascal.delphi.misc/c/LT_hN86lEh0/m/-fHdf743PSYJ

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

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

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

Так... погодь... то, что скинул мне принципиально не подходит, я вот хочу свой парсер/линтер/компилятор/статический анализатор для Delphi 7 - 2010 написать

И вот из того описания, что скинуто, ну ни как это не сделать, пока что я видел картинку, а chm как понимаю этого описания нет

нет формального описания грамматики для построения AST и правил вывода типов в случае Generic/Variant/и т.д. для вычисления типов этого AST

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ну, если честно, я бы мог и поспорить и сравнить. Только пространств имен около 60. И я не уверен, что это все.

Hidden text

В std очень много обобщённого программирования.
Абстракные алгоритмы на любых контейнерах, в том числе не известных std, всякие абстракции-обёртки над итераторами, диапазонами (views, ranges, string_view). Одни только функции с датой/временем/интервалами тянут на целую книгу.

Можно тут посмотреть оглавление
https://eel.is/c++draft/

Посмотрел почти весь список (конечно, только по названиям заголовков). Могу сказать, что Делфи вообще не отстает в этом. Возможно, даже обгоняет.

Очевидно, конечно, что полного пересечения всего что есть в плюсах в std и в delphi RTL нет. Но. В Делфи тоже очень много обобщенного программирования, работа с итераторами, диапазонами и прочим.

Вот тут кусочек по обобщенным спискам разного рода

Тут часть методов для работы с датой и временем

Там прям очень дохрена

Работа с символами

Со строками

А так же с сетью, регулярками, масками, аналитикой, хешем, json, файлами и фс, с кодировкой, объектами синхронизации, архивацией и ещё много-много всего.

Глянуть можно тут https://docwiki.embarcadero.com/Libraries/Athens/en/System

Я думаю, Delphi отстаёт от c++, который отстаёт от C#.
Когда-нибудь каждый догонит текущую ситуацию, а фаворит гонки продвинется ещё дальше.

Ну например, можно ли взять кусок массива с 5-го элемента по 30-й и передать как абстрактный кусок памяти без копирования (получатель не должен знать, что лежит уровнем ниже - массив/список/вектор).

Или вот я вижу некий абстрактный TEnumerable<T>. Есть ли метод, ищущий первый элемент, удовлетворяющий переданному предикату?

Ну по твоей задаче достаточно просто передать указатель и длину, или привести указатель к массиву длинной 30-5. Копирования не будет, будет указатель на память.

TEnumerable<T> - абстракция, которая позволяет создать последовательность, даже не из последовательных данных. На его основе созданы все списки. В частности TList<T> который является предком многих других. И вот TList<T> имеет возможность задать предикат для поиска и сортировки.

Если честно, я не уверен, что Delphi отстает от C++ в RTL, но однозначно отстает в кол-ве сторонних библиотек. При чем отстает не столько по библиотекам решающим современные проблемы, сколько по тем, что создавались между 2005-2015 годами для C++. А это значительный пробел. И приходится эти библиотеки брать из C++.

достаточно просто передать указатель и длину

Что то на СИшном. А как это должно выглядеть по паскалевски? Чтобы компилятор не разрешал стрелять в ногу? ;)

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

var ArrSource := [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];

type
  TArraySlice = array[0..4] of integer;

var ArrSlice: TArraySlice;
ArrSlice := TArraySlice((@ArrSource[3])^); //4, 5, 6, 7, 8

Без копирования, как просили?

Без копирования

Как думаете, откуда уши растут у шарпового Span и сишного ranges?
Я думаю, это из серверной разработки, когда для обработки http-заголовков решили не сплиттить входящий запрос на кусочки, а придумали Span-ы и string_view. А дальше выделяем кусок Content-Length: 123 и передаём в функции, которые раньше принимали строки (с минимальным рефакторингом кода), и всё по-прежнему красиво, выглядит как будто мы пакет побили на строки и разбираемся с ними отдельно, а копирований и аллокаций - нет.

Решение с TArraySlice не позволит провернуть такой трюк, несите другое.

То есть
ArrSource[4] := 0

приведет к тому, что
ArrSlice[0] == 0


Правильно?

А слона то я и не заметил, тут нужен PArraySlice ))

тут нужен PArraySlice ))

Воу, полехчи. TArraySlice не гуглится, приходится на слово верить, что оно что-то копирует (или не копирует). А тут такое..

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

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

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

Это и будет без копирования

Верю ;)

Передача и чтение будет как надо.

Несуществующий код всегда работает как надо ;))

Какой несуществующий код? Это тип определяет ограничения на количество

TArraySlice = array[0..4] of integer;

Чтоб к нему можно было привести указатель. И по этому указателю передавать. Мы говорим тому, кто принимает такой параметр, что указатель на данные - это всего 5 элементов интов, а с какого места начинать указываем в передаче параметра.

Это что то на сишном ;)

ArrSlice := TArraySlice((@ArrSource[8])^);

взорвется или нет? ;)

Когда в паскаль начинают тащить С, получается странное.

Конкретно этот код - копирует, потому что переменная ArrSlice - не ссылочного типа, а тип-значение.

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

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

При передаче резолвить указатель не надо, а привести после к типу

type
  TMyCustomList = class ...

begin
  list := TMyCustomList.Create;
  ArrSlice = TArraySlice((@list[5])^);

glhf...

достаточно просто передать указатель и длину

Решение в стиле plain old C, рушит безопасность по выходу за границы области.

TEnumerable<T> - абстракция, которая позволяет создать последовательность, даже не из последовательных данных

Как раз, удобная абстракция для наложения произвольных фильтров и произвольных поисков. Зачем требовать List<T>

И вот TList<T> имеет возможность задать предикат для поиска и сортировки

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

В современных языках такие цепочки трансформаций оптимизируются в compile-time, поэтому хорошо, когда оно встроено в std, а не написано на коленке поверх стандартных TEnumerable, например через yield.

Ты просто не понимаешь, что такое TEnumerable. Это просто абстрактный класс, который позволяет сверху реализовать методы Current и MoveNext. И более ничего. Сам он ничего не хранит

И что мешает сделать ему
function Filter(source: TEnumerable<T>; predicate: TFunction<T, bool>): TEnumerable<T>;
в стандартной библиотеке?

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

Enumerator - сам как предикат, класс, который его реализовал принимает твой предикат, а енумератор генерируется на его основе (твоего предиката). Enumerator - используется как результат работы списка с предикатом

Ну, например, мне именно такое никогда не требовалось

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

Enumerator

Много теории. А на практике, однострочником можно ли перелить из одного TList в другой TList только чётные элементы?

Но зачем именно однострочником, Холмс? У вас там за лишние строки штрафуют?

Можно каждую трансформацию данных начинать с церемонии
for i := 0 to list.Count-1 do begin bla-bla end;
А можно написать только то, что нужно для задачи и пойти решать следующие задачи, не распыляясь на итерации по спискам.

Ну, допустим, если такое действительно необходимо - вынесите bla-bla-bla в отдельную функцию. Зачем хотеть тащить в спецификацию языка абсолютно все. С++ уже придуман ;)

Тут bla-bla это суть, а мне нужно избавиться от повторяющихся for

Одной строкой нет, предикат может быть анонимной функцией, но не лямбдой. Лямбд пока нет. Т.е. в любом случае будет на 3 сроки больше. Но да, "одной" строкой можно.

Тогда ткните в документацию embarcadero, какой метод надо использовать.

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

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 Язык программирования - тот же софт, те ми же глюками, а ТехЗадания нет на него, спецификации нет

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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