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 был простым и удобным, то на нём все и писали бы, но не пишут

UFO just landed and posted this here

как и 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 недели и сразу выучить С ;) Циклы там точно такие же. А со стеком - лучше заходите в Ассемблер; на языках высокого уровня достаточно понимания что стек есть и он не резиновый.

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

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

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

UFO just landed and posted this here

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

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

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

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

UFO just landed and posted this here

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

UFO just landed and posted this here

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

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

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

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

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

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

UFO just landed and posted this here

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

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

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

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

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

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

UFO just landed and posted this here

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

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

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

UFO just landed and posted this here

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

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

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

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

UFO just landed and posted this here

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


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

UFO just landed and posted this here

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

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

UFO just landed and posted this here

Это утверждает не @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 лет назад и сейчас использовалась стандартная функция. Да и алгоритм вычисления синуса все таки никто не пишет.

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

UFO just landed and posted this here
UFO just landed and posted this here

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

UFO just landed and posted this here

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

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

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

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

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).

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

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

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

UFO just landed and posted this here

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

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

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

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

UFO just landed and posted this here

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

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

UFO just landed and posted this here

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

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

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-спрайтами в отдельных картинках. Делать что-то вроде игры "танчики", как на Денди была. Это разбудит интерес, дети сами будут спрашивать "как сделать это" и "как сделать так, чтобы".

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

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

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

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

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

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

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

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

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


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

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

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

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

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

UFO just landed and posted this here

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

UFO just landed and posted this here
UFO just landed and posted this here

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

И что в java не так с типизацией если не брать type erasure в generics?

А что не так с типизацией в Бейсике?

В BASIC нельзя создавать свои типы, что не позволяет ученикам преподать некоторые концепции. Microsoft VBA/VB.NET не в счёт, это уже не BASIC - там номера строк у каждой строки не требуются, это франкенштейн, натянутый на платформу COM или .NET

А QBasic - это франкенштейн, натянутый на что?

Фичи, о которых идёт речь, есть в стандартах ANSI/ECMA?

Не понял вопрос. О каких фичах речь?

О типах, создаваемых пользователем.

Насколько я помню, нет. Но как это отвечает на мой вопрос?

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

А что на счёт ответа на мой вопрос?

QBasic может, то только потому что он тоже франкенштейн

А QBasic - это франкенштейн, натянутый на что?

Вы меня ввели в заблуждение )))
У меня не было намерения называть QBasic франкенштейном, это я за вами повторил, ошибочно. Приношу QBasic-у извинения.

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

Вы сказали, что VB - это франкенштейн натянутый на COM (это действительно так), но добавили, что там нет обязательной нумерации строк.

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

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

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

А не пробовали учителям платить как ИТишникам? Нее ?? В школьном курсе 90 процентов не доплачивают учителям за ваши хотелки... Может лучше границу между реальностью и мечтами проведёте?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Pascal ABC не существует с 2007 года - это был интерпретатор языка Turbo Pascal, написанный на Delphi с тем, чтобы его можно было под Windows запускать без всяких дурацких DosBox. И с этого же года уже 17 лет существует PascalАВС.NЕТ, но это совсем другой язык, по сути - C# в синтаксисе Pascal.

Здесь везде и идет речь о PascalАВС.NЕТ

по сути - C# в синтаксисе Pascal

То есть на самом деле в школе изучают Шарп, но в пересказе ? ;)

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

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

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

В современном "Паскале" (Delphi) есть это всё, кроме, наверно, LINQ (имеется ввиду именно особый синтаксис LINQ, а не только особая работа со списками как с датасетами) и срезов.

Современный Паскаль - это не Deplhi, а PascalАВС.NЕТ. В Delphi кое-что появилось на годы позднее, а многое вообще так и не появилось.

UFO just landed and posted this here

От тех, кто считает наносекунды. Но таким и Delphi противопоказан. Там же - ужас, ужас - при передаче строки параметром в фунцию происходит инкремент числа ссылок на строку, а это - кошмар, кошмар - ненужный memory-traffic, вытеснение из кешей полезных данных и нагрузка на межъядерную синхронизацию кешей.

Что ж вы за ерунду-то несете? const перед аргументом строки ставить пробовали?

Да, я знаю. Но не все ставят const ))) Большинство прикладных программистов не ставит.
К тому же, проблема не исчезает, если строку надо сохранить в массив, или в свойство/поле класса.

А ещё такой прикол: строковые литералы, объявленные в коде, копируются в динамическую память каждый раз при использовании. Мне было интересно, зачем так сделано, и я докопался до объяснения: якобы, строка может находиться в DLL (BPL), которая может строку куда-то передать, а потом сама DLL может быть выгружена. С тем и живём.. Теперь и вы можете мучаться и содрогаться каждый раз, используя строковый литерал в исходнике )))

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

UFO just landed and posted this here

Всё понятно, видимо под linq вы имеете ввиду linq2objects как технологию доступа к базе. Хотя linq это намного более общий механизм в языке, который позволяет писать в стиле sql-like, оставаясь в синтаксисе c#. А так, кто мешает из другого языка подключить этот ваш DirectOracleAccess? Ну, или сокет открыть и писать туда байтики?

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

Не Шарп, а в дополнение к стандартным конструкциям Паскаля, некоторые конструкции, которые есть в C#. Типа лямбд, LINQ, срезов.

(0..100).Cartesian(2)

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

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

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

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

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

ЗЫ

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

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

(0..1000).

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

(0.1000)

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

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

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

UFO just landed and posted this here

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

UFO just landed and posted this here

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

UFO just landed and posted this here

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

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

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

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

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

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

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

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

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

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

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

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

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

Вот именно. Причем сразу, без захода в латынь паскаль ;)

ЗЫ: обычно, если нужен английский язык - учат именно английский, не латынь.

Язык для обучения здесь явно звучит в уничижительном смысле - в противовес чему-то великому, используемому в промышленном программировании. Не принимается - это не так. PascalABC.NET используется для обучения, но сфера его применения куда больше - думаю, проще почитать на сайте. По мощности он в чем-то опережает даже современный Delphi (в котором так и не появились лямбда-функции с автовыводом типа), а по производительности немного отстает от C#.

По поводу "притащили", которое тоже звучит как неприкрытая претензия. Давайте-ка перепишем код в чуть более читаемом виде

(0..1000).Where(x -> Valid(x)).First.Print

Это не "что-то, выглядящее как функциональщина", это цепочки методов, которые и являются одним из элементов функционального программирования, которое сегодня немного в разное время стало появляться в современных меинстрим языках: Java, Kotlin, Rust и даже в C++ 20 довернули-таки ranges. Замечу, что в этом все упомянутые языки похожи друг на друга и никто не обвиняет друг друга, чем же это отличается от кого-то. Эти средства сегодня должны быть почти в каждом современном языке.

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

Я заинтересовался вашей фразой про "неявно созданные классы" - какие классы вы тут имели в виду?

Паскаль - умет в ООП, в функциональное программирование, обмазан сахаром, можно писать заклинания в 1 строчку ; вероятность найти работу на нем - около 0.

Питон - все то же; вероятность найти на нем работу > 0.

Почему не учить питон сразу? Элементарно, Ватсон. Не нужно сколько недопрограммистов. Фильтр пройдут только те, кто способен переучиться. А то каждый школоло способен прикинуть, что программистам на питоне платят денег, а он уже почти программист, можно пробовать. </s>

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

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

Си Шарп - "умет в ООП, в функциональное программирование, обмазан сахаром, можно писать заклинания в 1 строчку ; вероятность найти работу на нем - около" (с Ваши слова) найти работу больше 10 процентов, второй язык по популярности. ... Почему не учить си Шарп сразу, а может через год появиться новый язык, надо заранее изучить, как раз изучил его и сразу в поле на трактор.... Гениально!! А вы спросили нужен ли детям вообще язык программирования?)

UFO just landed and posted this here

Почему не учить си Шарп сразу

Вот именно

а может через год появиться новый язык

Может. Даже если шарп сместится на 3 место - это все равно > 0. Даже если захочется переучиться - какая разница, переучиваться из шарпа или паскаляАБС, который, по факту, тот же шарп, но с begin-end и околонулевой применимостью.

А вы спросили нужен ли детям вообще язык программирования?)

Странный вопрос. Не нужен конечно. Им и математика не особо нужна. Вопрос был про то что в школе изучать ;)

Ну, смотрите, математику после школы более-менее знает половина. И это при 8 часах в неделю.

Может, скудные часы информатики лучше посвятить тому, с какой стороны за мышку браться, что значит кнопка "Insert" и чем Delete отличается от Bacspace?

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

QBASIC НЕ умеет в ООП, функциональное программирование и не обмазан сахаром.

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

Нам не нужны недопрограммисты.

Я заинтересовался вашей фразой про "неявно созданные классы" - какие классы вы тут имели в виду?

Поясняю.

a = List(1, 2, 3)
a = [1, 2, 3]

Видите разницу? 2 вариант читается немного хуже. Что-то создается, но мимокрокодил, незнакомый с языком, даже загуглить не сможет. 1 вариант - google://list python

(0..1000).Where(x -> Valid(x)).First.Print

А тут что происходит?
(1..1000) - что - создается. Что-то нужное. Ок.

(0..1000).Where() - у него есть метод Where. Гуглим - ага, это sequence. Ок.


function First(): T;

      Возвращает первый элемент последовательности.

Ок.

И у этого элемента мы вызываем метод Print. Хм. У Integer есть метод Print?? вот_так_поворот.жпг . Или документация врет, и на самом деле First возвращает последовательность из 1 элемента? Или 0,,1000 это не Integer а что-то другое? Или на самом деле этот код никто не запускал? ;)

девочка_и_паскальАВС.жпг ;)

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

Ну это мир 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

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

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

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

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

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

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

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

UFO just landed and posted this here

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

циклы везде циклы, переменные везде переменные

Как бы да, но нет. В функциональных языках циклы либо не используются, либо организуются через хвостовую рекурсию. А переменные там могут оказаться неизменяемыми и конструкция i := i + 1 попросту невозможна.

К функциональным языкам лучше подходить со знанием императивных.

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

Пайтон сложен в обучение, как первый язык я бы не советовал, я знаю Паскаль, базис Делфи ( написал программу тестирование и работу с базами данных ), пхп, javaScript, c# основы все знаю и решил попробовать голый Пайтон сложный язык, для его обучения лучше знать основы с+, с++. Голый Пайтон нигде не используется, так как в графике он просто Г... То есть интерфейс лучше написать на js, си Шарп и так далее, а уже остальное на питоне.

Да, в Python есть свои особенности, но в школе до них вряд ли надо доходить, да и не получится). А числа поскладывать, текст попечатать - самое оно.

Но и Паскаль нормально, если заранее в школе настроить среду разработки.

Я пару месяцев поработал в СОШ - убежал от греха подальше)

Python активно используется в продукте, в некоторых компаниях даже с перевесом, и работать на нем проще: развитая инфраструктура ИТП, просто нужны навыки

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

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

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

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

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

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

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

UFO just landed and posted this here

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

>Почему автор задаётся вопросом о нужности/ненужности Паскаля

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

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

>Да, автор. Оказывается, чтобы жить, вовсе не обязательно быть программистом или ещё кем-то

Естественно.

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

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

Умение делать электронное устройство требуется далеко не всем. И в настоящее время во многих случаях практичнее покупать готовые сборки.

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

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

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

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

Потому что все основные "фичи" программирования (будь то работа с памятью, DLL, многопоточность, ООП и т.д.) реализованы в Паскале интуитивно понятно и не требуют тонкого искусства проктологии.

А в Джаваскрипт многие важные концепции отсутствуют в принципе.

Разве для front-end написание DLL является необходимостью, без которого он не сможет выполнять обязанности ?

Разве для Delhi | Pascal знание React или Vue является необходимостью ?

Обучение программированию - это обучение базовым концепциям и технологиям. React и Vue это уже прикладная сфера.

а я чет думал что базовые концепты, это там циклы, переменные и т.д. но не как dll, dll вообще то же прикладная часть специфичная для windows, и тем более activex, которого под nix днем, с огнем не найдешь.

да и последнее время ведется спор о ООП

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

ActiveX сюда приплетать не нужно.

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

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

Прямой аналог подгрузки скриптов - это директива import в C++ (например "import <iostream>"). Загрузка dll существенно сложнее.

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

Прямой аналог подгрузки скриптов  - это директива import в C++

я имел ввиду загрузку по сети файлов (примитивный случай GET запрос -> и функция eval), а этот пример статической компиляции - и он принципиально другой

Касательно архитектуры приложений - то, это только windows приложения, то есть других не бывает что ли? т.е. приложения под arudino и микроконтроллеры, DOS блин, под крипту (смарт контракты), и т.д. уже не самостоятельные приложения ?

если уж докапыватся, то в частности DLL, Threads, OOP - это все частные случаи технологий, и то что их где-то нет, а где-то по другому реализованы (js) вкусовщина

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

Погрузка скриптов для интерпретатора в скриптовых языках = импорт модулей для компилятора в компилируемых языках. В обоих случаях это импорт кода для интерпретации/компиляции.

Мы говорим о школьном курсе программирования. Какая у школьников "DOS под крипту"?

а я правильно понял, что без знания написания dll front-end разработчик уже не может выполнять свои обязанности ?

Поработаю адвокатом Delphi.:)

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

Исключительно потому что вы редко пишете на Delphi.

Но скажите, при необходимости разработать web-сайт, приложение или сервис вы выберите Delphi для серверной части и базы данных или что-то более практичное?

Я выбрал Delphi именно потому что это наиболее практичный выбор.

Сборка проекта занимает секунды. Библиотеки BPL дают расширенный функционал. Код для работы с БД полностью интегрирован в приложение. Проблемы с зависимостями мне точно не грозят. Когда я пишу обработчики событий, основное приложение даже не отключается от сервера, я просто временно переключаю обработку на библиотеку №2, а библиотеку №1 отключаю и дописываю функционал. Я даже использую встроенный ассемблер с SSE2 и имею +50% к производительности в критичных функциях. И т.д. и т.п.

Извините, но серверный Javascript - это просто убожество по сравнению с Delphi.

А в оконных ОС вся работа строится вокруг объектов

И в чём проблема?

Компилятор Pascal действительно хорош. Но является ли наличие компилятора преимуществом при обучении?

Является, потому что отладку кода никто не отменял.

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

Может конечно.

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

Создавать динамические объекты? Нет проблем.

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

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

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

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

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

Спасибо за ваше мнение. Мой знакомый тоже пишет всё, что возможно на Delphi и зарабатывает на этом.

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

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

То, что JavaScript пихают везде - это другой вопрос и согласен с тем, что вместо самописных API хотелось бы увидеть полноценный доступ к SQL-запросам.

А с чего вы взяли, что это бунт? Или слишком часто похожее мнение стало появляться? Если так, то на это, возможно, есть причины. Дело не в том, что те, кто плохо учился выбрали скрипты. Я сам перешел с Delphi на скрипты по одной простой причине - после Delphi 7 с это платформой начали творить непонятно что.

В комментариях часто упоминается Delphi, хотя я специально выбрал Pascal, а не Turbo, Object, Delphi или Lazarus. И хотел узнать мнение, знакомство с основами текстового программирования следует как и раньше начинать с консоли от простого к сложному или в современных условиях возможен и практичен другой вариант - от сложного к простому и с рабочим браузером, а не как в Pascal ABC.Net.

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

1 +⁤⁤⁤ 1

Это не операция сложения двух чисел, не строка из 5 символов и даже не изображение.

Но, если он так хорош, то, наверно, мозолил бы глаза то здесь, то там, а такого не наблюдается

Над развитием языка и IDE Delphi работает несколько десятков программистов из никому не известной компании. Над NodeJS и V8 работают тысячи или десятки тысяч программистов с гигантом индустрии во главе. Силы и бюджеты явно не сопоставимы. И что я вижу в итоге? Delphi позволяет мне в одиночку разрабатывать весь набор (сервер + десктопное приложение + Android-приложение + телеграм-бот). А на JS для этого потребовалась бы целая команда. Из моего опыта, разработка на Delphi получается эффективнее буквально во всех аспектах.

А с чего вы взяли, что это бунт?

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

Или слишком часто похожее мнение стало появляться?

Я не могу понять, кто высказыват эти мнения.

Если это профессиональные программисты, почему их так волнует использование "begin .. end", но для них совсем не важно что даже крупные проекты на Паскале собираются за секунды?

Почему комментаторы считают что наличие или отсутствие строгой типизации это важно? На одном языке пишут S = 'Example ' + 1, на другом языке S := 'Example ' + I2S( 1 ). В одном случае преобразование делает интерпретатор, в другом случае это обязанность программиста. Это настолько существенная разница?

В комментариях часто упоминается Delphi, хотя я специально выбрал Pascal, а не Turbo, Object, Delphi или Lazarus

Потому что Turbo и Object Pascal устарели.

даже крупные проекты на Паскале собираются за секунды?

Гуглохром собирается очень долго. Бесит. Где можно посмотреть гуглохром, переписанный на Delphi?

Ага, небольшое приложение на Rust собиралось почти сутки на VPS-сервере.

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

Тем хуже для rust ;) Так где можно скачать исходники браузера, чтобы собрать за 5 минут под Delphi?

Чистых исходников Chromium на Delphi (как и на любом языке, кроме плюсов), нет. Есть просто Cef (обертки).

Насколько мне известно, гуглхром написан на С++ и Go. Можно поинтересоваться, почему вы решили что существуют исходники на других языках?

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

Если кто-то согласится это оплатить, можно и переписать, почему нет.

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

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

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

К примеру, Mozilla решила переписать браузер, и взяла не Delphi, а rust, который компилируется медленнее, чем C++.

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

В мире ОЧЕНЬ мало приложений с миллиардом пользователей, для которых 200 миллисекунд - это профит. Это ниша для таких языков как Rust.

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

Для более скромных приложений Delphi - оптимальный выбор

Чем тогда объяснить его низкую долю на рынке? Бизнес-то денежки считает умеет, нельзя сказать что "просто не нравится".

Я уже отвечал.

Delphi - закрытая система, принадлежащая компании, о которой вы даже не слышали. Над языком и IDE работает несколько десятков человек. Лицензия стоит от 2000 до 4500 долларов + подписка от 600 до 2200 долларов в год.

То есть для стартапов Delphi слишком дорог. А крупные компании привязаны к кодовой базе и компетенциям своего штата программистов.

Да, бизнес денежки считать умеет, компания выбрала рыночную нишу и нормально ее окучивает: в рейтинге TIOBE Delphi стабильно держится на 11-м месте: https://www.tiobe.com/tiobe-index/

Я говорю за себя: ни на каком другом языке я не смог бы сделать MVP за одну неделю и дальше разрабатывать в таком темпе. При том что выбор Delphi не ограничивает перспективы моего проекта, я не встану в тупик потому что на Delphi что-то нельзя сделать. Можно почти всё.

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

в рейтинге TIOBE Delphi стабильно держится на 11-м месте

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

И еще один момент: если отдавать на фриланс, я могу закрыть почти весь свой код и также SQL-код

Это про dcu? Так себе решение, потому что заставляет "фрилансера" тоже использовать delphi и той же версии, что у вас. Уж лучше DLL, которую можно подключить вообще из любого языка.

Опять же не проблема. Чтобы версия Delphi совпала, надо обновить условно-бесплатную Community Edition. Там нет выбора версии, поэтому у всех установится одна и та же.

Элементарно, Ватсон. Кто вменяемый будет вкладываться в написание кодовой базы на на чужом проприетарном языке? С единственным проприетарным компилятором. Особенно когда есть своя собственная альтернатива (go), или плюсы. Вздумается авторам продаться подороже, сделать компилятор платным, внедрить в него закладку - и что?

Отвечаю и вам, и комментатору выше одновременно, потому что аргументы у вас схожие.

Язык не может быть проприетарным, компилятор - может. Но это не остановило C++ который был насквозь проприетарным в 90-е, а сейчас во все поля свободный и любимый. Один язык исключение? Добавим туда же java, javascript, которые sun/mozilla/microsoft пытались сделать проприетарными, да не вышло.

Был бы спрос, можно было бы быстро силами сообщества доделать Lazarus (он уже почти всё умеет, что Delphi 5, а дальше уже не принципиальные рюрешчки). Значит, кроме фанатов, оно никому и не нужно.

UFO just landed and posted this here

Аргумент играет против вас. Зачем пилить свободные компиляторы (и не один), когда есть множество проприетарных. Один сдулся - перешёл на другой.

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

Язык не может быть проприетарным

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

Но это не остановило C++ который был насквозь проприетарным в 90-е, а сейчас во все поля свободный и любимый.

Спасибо Столману за наше счастливое детство ;)

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

Конечно. Но спроса нет.

он уже почти всё умеет, что Delphi 5

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

Это что-то на археологическом

Значит, нафиг никому не надо тащить в Lazarus лямбды и всё такое.
Было бы надо - развивали бы.

А кому принадлежал "насквозь проприетарный" C++?

Страуструпу и Столлману?

А проприетарный Delphi принадлежал Никлаусу Вирту?

В 90-х рынок C++ компиляторов был поделен между Watcom, Borland, Microsoft, IBM. У каждой были свои проприетарные расширения языка, как сейчас у Delphi.

Проприетарный Delphi принадлежал фирме Борланд.

Для C++ существовал GCC, поэтому о проприетарности говорить не приходится.

Ну вы пишете, что проблема Delphi в

Delphi - закрытая система, принадлежащая компании, о которой вы даже не слышали

Я думаю, всегда было нормально садиться на коммерческие компиляторы, что тогда Watcom или какой-нибудь Clipper, что сейчас все пишут в Visual Studio. Это не мешает (хорошим) языкам развиваться в том числе в направлении опен-сорса, и становиться мейнстримом.

Delphi начиная с версии 1.0 был проприетарным. Причём принадлежал третьеразрядным фирмам Borland, Codegear, Embarcadero и Idera, которые не имели ресурсов чтобы продвигать свой продукт в массы.

Для C++ существовала масса компиляторов, как проприетарных, так и открытых. C++ продвигали как UNIX-сообщество, так и Майкрософт с Интелом. С++ с конца 80-х имел за собой колоссальный человеческий и финансовый ресурс.

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

Для того чтобы стать мейнстримом, нужна поддержка таких китов как Microsoft, Google, Oracle и т.д. Но владельцы Delphi никогда не искали поддержку гигантов индустрии.

Накидано на вентилятор, если честно.

Mozilla давно Rust разрабатывает. И Delphi тут не при чем. На нём они его и делают. Это раз.

Два, Delphi не только быстро компилирует, но и работает не хуже, чем C++. Медленнее, местами, не спорю, т.к. не все новые инструкции поддерживает компилятор (например, векторные), но то ли ещё будет.

А тяп-ляп и в продакшен - это вы про современный веб.

1) почему именно javascript ? Ни с++, ни Пайтон, ни Свифт?) вдруг мне нужно на бэкендера учиться, а ты меня заставляешь на фронтенда, на какой кряк мне знания фронтенда? То же самое в мобильном направлении.. 2) автор расписал огромную простыню, но по факту не написал, а почему мне вообще нужен язык программирования? Может я ни разу с этим всем в жизни не встречусь.... 3) Паскаль как язык обучения нормальная тема, до сих пор учебники ссср для учебы имеют огромный и отличный базис для обучения школота. 4) все современные языки программирования каждый год рассматриваются в пользу того или иного, раньше актуально был пхп, сейчас Пайтон, но и Пайтон устарел, javaScript тоже устарел лучше него nodejs и так далее. У меня огромный вопрос к автору, почему ты сам не пойдешь в учителя и не преподашь ученикам javascript , как только наберёшься опыта, приходи пиши, я с удовольствием почитаю

1) А с чего ты решил, что я тебя заставляю? Я ни ФГОС, ни программ, ни методических рекомендаций не пишу и, вроде, таких целей в личном мнении не заявлял. Если кто-то хочет написать про с++, Пайтон или Свифт, то пусть пишет. Или на хабре принято в каком-то определённом векторе излагать мысли?
2) "Зачем вообще мне нужен язык программирования?" - вот тема для ещё одной статьи. Почему бы вам её не предложить сообществу?
3) Это ваше мнение. У меня другое и думаю, что это не приводит к проблемам.
4) Уважаю ваше мнение, но тут просто всё в кучу. JavaScript устарел, давайте фронт на ноде писать. Если приготовите его, то я не против.

Почему не пойду в учителя? В школе я уже работал учителем (не информатики) и признаться, не увидел в этом своего призвания. А почитать - не проблема - http://droidscript.ru

Я отвечу, позиция понятна и я с ней согласен

Pascal - по мне это традиция обучения, но ее не критикуют, а тот кто критикует, ему достается

Я так же мыслю, если задача обучить программированию, то обучать имеет на языках
1 которые доступны - самый доступный js, он есть в браузере (Chrome,IE,Firefox) на любой современной ОС

2 есть современные ide как браузерах бесплатные, так и stand alone и тут выступают море языков

3 аргументы, про то, что вы не умеете готовить Pascal, ну они мимо, задача же обучить программированию, а не Pascal

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

4.1 Для меня в сознательном возрасте было открытие ООП как парадигмы, но вот если кто-то просто и на пальцах показал бы так, надо, а так не надо в программировании, я бы многое бы отдал бы - это я о ценности преподавателя, она просто недооцененная

4.2 Уже значительно позже изучая функциональщину (опять самостоятельно) я смотрю на это ООП как ну... случайный виток в эволюции языков

4.3 Изучая теорию компиляторов и разных парадигм, шаблонов, design pattern, dsl, ddd, ... смотрю на очередные языки (и Delphi рулит), нет... не один язык не является совершенным, все эти споры о языках это просто спор не по сути

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

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

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

кому то и Delphi зайдет, а кому то нужно и по проще, например Python, тем более что и там и там есть базовые понятия как if / while / function / array / recursion

А вот типизация на начальных этапах, так же как и компиляция это усложнение, которое не ускоряет понимание базовых понятий, а скорее на оборот

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

Да, но объяснить какие-то вещи, всё-таки, можно. Процесс обучения двухсторонний: есть источник информации, есть приемник)

А мы всё изучаем транзисторы чтобы потом перейти к микроконтроллерам когда нужны уже процессоры.

Так микроконтроллер пофункциональные и посложнее процессора, т. к. это суть однокристальная ЭВМ с памятью и периферией.

Не тот пример автор сгенерировал.

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

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

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

А что такое робот? Это микроконтроллеры, это мало памяти, мало мегагерц, и это язык C.

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

А что такое робот? Это микроконтроллеры, это мало памяти, мало мегагерц, и это язык C.

Никто не мешает взять микроконтроллер, где много мегагерц, много памяти и питон ;)

В современном микроконтроллере ресурсов больше чем Радио-86РК так то.

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

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

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

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

А нафига всё это в обязательном школьном курсе?

С вероятностью 80% человек после школы вообще никакого кода писать не будет. Даже говнокода.

получит по башке от указателей

Получит, но не поймет от чего и как. В микроконтроллере промах мимо памяти это reboot; там никто memory access не проверяет.

дадут практику написания говнокода

Можно подумать, на С нельзя писать говнокод. Еще легче чем на питоне ;)

Почему ребут? Обычно silent memory corruption или, в хорошем раскладе, попадание в соответствующий обработчик (который запросто может быть бесконечным циклом с nop и только при включенном wdt уже ребут)

А используя тот же Паскаль, можно писать нормальным языком Си для Ардуино и подключаться к микроконтроллеру по COM порту или BT и управлять сложным скриптом на Паскале, выводить графики или сложную информацию. При чем на телефон

Если из этой схемы убрать Паскаль - все становится значительно проще.

;)
Если в схеме уже есть плюсы (ардуино - это С++), зачем туда тащить еще один язык?

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

Если в школе изучают паскаль - это неплохо. Часто вообще не изучают вообще ничего. Изучают в школе то, что знает учитель информатики. Уровень школы сейчас зашкаливает, обучают самому необходимому. Чего только стоит основы религии. А часов истории, больше чем английского или математики.

Чего только стоит основы религии.

Если знание основ религии не позволит попасть в псевдорелигиозную секту - этот предмет полезнее программирования.

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

выработка рационального мышления

Без т.наз. гуманитарных наук - откуда это мышление возьмется?

В гуманитарных школьных предметах даже не пахнет гуманитарными науками. Не путайте.

А рациональное мышление берётся из философии науки, которая неявно присутствует во всех естественных науках.

Если коротко, то пост сводится к: "Зачем мыть тарелку, если она опять будет грязной? Для того, что бы не быть свинотой и в конечном итоге не заболеть."

Плохая аналогия подобна котёнку с дверцей.

Кажется, этот ответ лежит на поверхности. Есть известное выражение: "работает - не трогай"! Мало кому хочется переписывать какой-то старый софт, хотя все понимают, что это необходимо. Однако это затратно и порой требует приложения больших усилий. Так и в данном случае, переписывать часть учебной программы — это как провести целую реформу. Вопрос о том, на каком языке следует изучать программирование, спорный, и особенно спорно, что JavaScript подходит лучше, чем Pascal.

Articles