Pull to refresh

Comments 312

Чует мое сердце ой сейчас и будет…
И так первое, PascalABC.Net это среда для НОВИЧКОВ, для детей, для тех кто только открывает дверь в мир программирования. То что вы перечислили да это есть, НО это уже совсем другой уровень. Паскаль как учебный язык по моему мнению считается на более лучшим. Да, сейчас прибегут "профи" и будут кричать что он умер и "наше все" Питон или С.
Но как учитель еще раз говорю, для понимания алгоритмов и начало программирования Паскаль самое то. Вирт не зря сделал его близким к человеческой логике.
На счет PascalABC.Net что Вы можете предложить в его замену?

TB<T, T2> = class(TA) — это для начинающих? Боюсь представить себе с чем работают кончающие

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

… а чем конкретно Паскаль "ближе к человеческой логике", чем тот же Питон? (я уж молчу про бесценность REPL и интерактивных ноутбуков вроде Jupyter, а есть ли что-то аналогичное для Паскаля?)

lair ну хотя бы тем что приближен к человеческому языку if (если) then(тогда) else (иначе) не говоря уж о begin и end. Циклы тоже сделаны так как они должны быть While Пока until До for Для
Все же английский дети раньше начинают изучать чем программирование.
Для понимания основных начальных алгоритмических структур он ближе.
И опять все забывают что школа не готовит программистов, ее задача в другом, показать что данное существует.

Считаю что тезис "Паскаль ближе к человеческому языку" неактуален. Новички в программировании обычно еще и новички в английском языке. С точки зрения "человеческого смысла" для них нет существенной разницы между
if a < b then work() else smoke() end
и
asdf a < b lkjh work() zxcv smoke() poiu.
В условиях РФ все языки программирования равноудалены по "человеческому смыслу" операторов.

Новички в программировании обычно еще и новички в английском языке.

английский изучают с 4 класса (а некоторые и с началки), а Информатику с разделом программирование с 7 класса.

английский изучают с 4 класса (а некоторые и с началки), а Информатику с разделом программирование с 7 класса.

Это как раз попадает под категорию "новички в английском языке" (если это не спецшкола, конечно).


BTW, у меня английский был с седьмого.

как новички уже простые слова Начало Begin, конец end, И And, ИЛИ Or к этому моменту уже знают.

Знают, однако требования к синтаксической строгости у них невысокие.

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

Согласен. Если слова if, end еще знают, то всякие else, until вряд ли. К тому же Паскаль очень многословный, а дети медленно печатают
UFO just landed and posted this here
ну хотя бы тем что приближен к человеческому языку if (если) then(тогда) else (иначе)

Питон:


if x > 0:
  print('More')
else:
  print('Not more')

Вы правда считаете, что замена : на then что-то изменит в читаемости?


не говоря уж о begin и end

А что begin и end?


Циклы тоже сделаны так как они должны быть While Пока until До for Для

Что значит "так как они должны быть"? В Питоне совершенно нормальный while, и семантически корректный for (for word in words:).


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

Я вот не вижу отличия на приведенных вами примерах.


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

Вы правда считаете, что замена: на then что-то изменит в читаемости?

Да, считаю.
И данное проверено многолетней практикой.


А что begin и end?

а то что ДЕТИ видят где начало, а где конец
и будь то начало программы или программного блока.


Что значит "так как они должны быть"? В Питоне совершенно нормальный while, и семантически корректный for (for word in words:).

нормальный говорите, вспомните как цикл ДО в Питоне
не говоря уже про for
я еще и еще раз говорю ВЫ уже профессионалы и вам подобные конструкции обыденность, а ребенку надо обычными словами объяснить что бы ОН понял в чем различие циклов и как они работают.

И данное проверено многолетней практикой.

Вы можете дать ссылки на исследования?


а то что ДЕТИ видят где начало, а где конец

Предположим, это действительно играет роль. Одно отличие.


нормальный говорите, вспомните как цикл ДО в Питоне

А зачем он нужен?


не говоря уже про for

for w in words, говорю же. Прекрасная вещь.


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

А зачем? Если задача — как вы утверждаете — "показать что данное существует", то нет никакой необходимости разбираться в видах циклов, достаточно while и for (each in).


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

Вы можете дать ссылки на исследования?

25 лет педработы устроит?
Сразу скажу десятки бывших учеников кто работает начиная от Яндекса и кончая Googla претензий что начинали на Паскаль не предъявляли.

25 лет педработы устроит?

Нет, конечно. Может быть, на наблюдаемой области просто преподаватели лучше умели преподавать Паскаль, нежели Питон.


Сразу скажу десятки бывших учеников кто работает начиная от Яндекса и кончая Googla претензий что начинали на Паскаль не предъявляли.

Я тоже никому не предъявлял претензий за Basic (кажется, Q) и Fortran. Но это не значит, что я считаю их подходящими.

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

Милости просим, придите и покажите как надо учить на Питоне чтобы все и все поняли :)


Очень хорошо рассуждать по прошествии опыта и лет.


Но это не значит, что я считаю их подходящими.

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

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

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


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


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

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

Я вроде нигде не говорил, что я умею учить на Питоне.

Да, но в говорите что :


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

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


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

Извиняю :)
На счет Доказывают исследования. как раз они ни чего не доказывают. Где то видел очень неплохое исследование что лучшей способ переноски воды, решето. :)

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

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


На счет Доказывают исследования. как раз они ни чего не доказывают.

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

Я вроде нигде не говорил, что я умею учить на Питоне. Я говорил, что сам по себе опыт преподавания, извините за прямоту, еще ничего не доказывает. Доказывают исследования.
Статья как раз в тему :)
Доказательства в науке? Их нет
Что мы реально подразумеваем под исследованиями, и как это помогает получать информацию для понимания вещей? Люди, ожидающие наличия доказательств в каждом научном исследовании, будут жестоко разочарованы.
habr.com/post/417143

А зачем? Если задача — как вы утверждаете — "показать что данное существует", то нет никакой необходимости разбираться в видах циклов, достаточно while и for (each in).

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


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

Не игнорирую, тогда уж лучше Scratch, НО если начитать с более младшего возраста.

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

Так может в учебной программе проблема?


Второе, если человек который хочет стать программистом не понимает отличия цикла Пока от До, то это грустно.

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


Не игнорирую, тогда уж лучше Scratch, НО если начитать с более младшего возраста.

Давно на Scratch можно делать ноутбуки?

Так может в учебной программе проблема?

Этот вопрос не ко мне. Я бы вообще убрал бы Информатику из обязательных предметом.


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

Вы не поверите, но я видел уже "дипломированных" которые не понимали различия.


можно делать ноутбуки?

а в этом какой смысл? тем более для простого ребенка ;)

Этот вопрос не ко мне.

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


Вы не поверите, но я видел уже "дипломированных" которые не понимали различия.

Поверю. Я вам больше того скажу, я вот различие понимаю, но я попробовал и так и не смог вспомнить ни одного случая за 20 лет своего опыта, когда я использовал бы цикл until. Этому немало способствует то, что почти 15 лет из этих 20 я пишу на языке, в котором такого цикла нет.


а в этом какой смысл?

Большой. Ноутбук (в смысле Jupyter Notebook) — это прекрасный способ оформить работу с данными и графиками, а это требуется в намного более широкой области деятельности, нежели только программирование. Получаем три-в-одном: программирование, форматирование, и, что самое важное, развиваем навык связного изложения мыслей. Я вот где-то в районе 6-8 класса защищал бизнес-план на экономике, и мне бы там это сильно пригодилось.


Недавно кто-то (я подозреваю, что Paige Bailey, но не могу найти цитату) шутил, что Jupyter Notebook — это новый стандарт для любой научной работы, включающей статистику.

я попробовал и так и не смог вспомнить ни одного случая за 20 лет своего опыта, когда я использовал бы цикл until
Зависит от задач. Бывает, что наиболее удобным для данного случая является именно Until.

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

А я вот ни разу elsif не использовал…
until-подобные циклы часто применяются при использовании атомарных операций или оптимистических блокировок
Паскалевский until — вполне удобная конструкция, но совершенно не вписывается в питоновский синтаксис «на отступах».
Интересно, что Ruby, язык чуть более близкий к паскалю, чем python, и достаточно успешный, в качестве альтернативы вообще не рассматривается.
Потому что «на отступах». Попробуйте написать аналогичный этому фрагмент в паскаль-стиле, где внутренности цикла обрамлены сверху repeat и снизу until i<10 соответственно
i = 0
while i < 10:
    print(i)
    i += 1 
do :
    print(i)
    i += 1 
    until i<9

Так что причина не в этом, а в том что судя по всему за основу брался C-синтаксис, в котором слова until просто нет. Но зато есть do… while.
do :
    print(i)
    i += 1 
    while i<9
В питоне, слава богу, нет do )
Компактность набора ключевых слов — одно из достоинств этого языка.
> Я вам больше того скажу, я вот различие понимаю, но я попробовал и так и не смог вспомнить ни одного случая за 20 лет своего опыта, когда я использовал бы цикл until.

Ну реально раз в год приходится писать цикл с проверкой в конце, то есть в котором надо безусловно войти в первую итерацию.
За счёт того, что обычно это C/аналог, он оказывается do — while. Разница с repeat — until только в направлении условия.

> Недавно кто-то (я подозреваю, что Paige Bailey, но не могу найти цитату) шутил, что Jupyter Notebook — это новый стандарт для любой научной работы, включающей статистику.

Я бы даже сказал, что это правда в виде шутки :)
Большой. Ноутбук (в смысле Jupyter Notebook) — это прекрасный способ оформить работу с данными и графиками, а это требуется в намного более широкой области деятельности, нежели только программирование

Ноутбук для реального программирования не очень удобен, увы. Так — наброски сделать — да. Отчет, еще какую-то визуализацию. Реальное же приложение если и получится, то с трудом. Плохо, что в самом питоне нет среды подобной Delphi. Ноутбук мне понравился за неимением среды. Но имея полноценную среду, я бы никогда её на ноутбук не поменял.
Ни разу не видел реальных программ или сайтов, подобным ноутбуку. Даже не представляю, где он может пригодится кроме как недо-среды для питона.
Наш отдел аналитики прямо из jupyter запускал сложные обсчёты на машине с GPUʼшками.
Видно, им никто почему-то не запрещал это делать :)
А «реальное приложение» делается из него просто копированием кода в отдельный файл и установкой нескольких параметров. Хотя, думаю, уже сделали переходник для прямого запуска в формате файла сохранения jupyter (всех проблем — вытащить пачку элементов из json и напустить на них eval).
Видимо я что-то делал не так, но у меня ощущения от jupiter остались, как от чего-то глючного и тормозного.
А «реальное приложение» делается из него просто копированием кода в отдельный файл и установкой нескольких параметров. Хотя, думаю, уже сделали переходник для прямого запуска в формате файла сохранения jupyter

Я неоднократно видел хуки, которые генерят .py-файл из ноутбука либо на сохранении, либо на коммите.

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

А кто-то предлагал делать на Jupyter "реальные приложения"? Он немного не для этого предназначен.


Но имея полноценную среду, я бы никогда её на ноутбук не поменял. [...] Даже не представляю, где он может пригодится кроме как недо-среды для питона.

Вы, видимо, не занимаетесь исследованием данных, статистикой и машинным обучением.

Занимаюсь, в том числе. Исследования — исследованиями, но результаты в ноутбуке не отдать никому, увы. Посмотреть/показать — максимум. Как приложение не получится оформить.
Исследования — исследованиями, но результат в ноутбуке не отдать никому, увы.

Результат исследований? Почему? Ну сохраните его в HTML.

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

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

бесценность REPL и интерактивных ноутбуков вроде Jupyter, а есть ли что-то аналогичное для Паскаля?)

Так в чем же бесценность именно Юпитера? Таких бесценных программ в своих отраслях — вагон и тележка. В той же химии, математике, сопромате, черчении. И Юпитер — да, хорошая оболочка в своей, весьма частной области, не более того.
Так в чем же бесценность именно Юпитера?

В простоте и распространенности. Идешь ты в AWS SageMaker — а там те же ноутбуки. Идешь ты в Azure — а там снова ноутбуки.

Ок, для своей, довольно ограниченной области они полезны и распространены. Главное — не стоит обобщать.

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

А кто-то предлагал делать на Jupyter «реальные приложения»

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

А кто-то это делал? Я, вроде бы, упоминал его как средство работы с данными.

Ну вы же писали:
… а чем конкретно Паскаль «ближе к человеческой логике», чем тот же Питон? (я уж молчу про бесценность REPL и интерактивных ноутбуков вроде Jupyter, а есть ли что-то аналогичное для Паскаля?)

Таким образом пытаясь противопоставить Питон/Юпитер Паскалю/ABC.

Я противопоставлял питон паскалю. А REPL и ноутбуки — приятное дополнение.

То есть — пытались втянуть ноутбуки в область сред для универсальных языков. Но они там выглядят весьма блекло.

Повторяю: "приятное дополнение".

Учебную программу вы пишите сами. Разве нет? Это ведь не учебный план, который вам "спускают сверху".
Я в целом согласен, что студентам нужно иметь представление, что циклы бывают разные, но уж точно не из за того, что "надо по программе".

Учебную программу вы пишите сами. Разве нет? Это ведь не учебный план, который вам "спускают сверху".

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

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


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

В питоне подобных скобочек нет, и я сомневаюсь, что отличать "действие, которое будет повторяться" от "действия, которое выполнится после цикла" только по отступу будет сильно проще.

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

Тут, даже, лучше не просто if, а end if, end case, end for и тому подобное.
Потому что несколько end не намного лучше, чем несколько } — то есть оставляет возможность запутаться.
А тут уже надо иметь поддержку от редактора, как, например, '%" в vim, для перехода на парную скобку.
end if само по себе не помогает, если этих if было три вложенных.

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

> И данное проверено многолетней практикой.

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

Моя практика показывает, что одна из основных граблей для начинающих, которую приходится преодолевать именно форсированием дисциплины написания — это то, что забывают, что вокруг нескольких операторов под условием надо ставить скобки вида begin-end. И потому я сейчас за те языки, в которых невозможно конструктивно не поставить эти скобки (отступами, как в Python, явными парными скобками, как в Perl, Go, Swift, или автооткрытием с закрытием через другой элемент того же уровня, как в Modula или Ruby… — все три варианта хороши, каждый по-своему, и каждый лучше того, что в Pascal, C, Java).

> а то что ДЕТИ видят где начало, а где конец
> и будь то начало программы или программного блока.

Они точно так же видели, бы, например, в варианте Модулы:

if условие then
команда1
команда2
else
команда3
команда4
end

(отступов, извините, нет, хабр не знает Modula для тега code)

но количество тупых втыканий в экран и жалоб «почему не работает», повторяюсь, меньше, чем с потерянной парой begin-end после then в Паскале. А уж почему перед else нельзя ставить ';', это вообще приходится зубрить как чистую магию…

Не зря Вирт изменил это правило синтаксиса в своих последующих разработках, но Паскаль успел уйти из-под его контроля…

> ребенку надо обычными словами объяснить что бы ОН понял в чем различие циклов и как они работают.

Различие между циклом с проверкой «до» и проверкой «после» — да, полностью согласен.

Но когда на это накладывается то, что в варианте с проверкой «до» мы проверяем условие _продолжения_, а с проверкой «после» — условие _выхода_, уже сбивает с толку.

А то, что repeat-until является сам по себе скобками блока, а while — нет, сбивает ещё раз. И только после пятого «дети, это невозможно понять, это надо только запомнить!» получается устойчиво пробиться через эту несогласованность.
Моя практика показывает, что одна из основных граблей для начинающих, которую приходится преодолевать именно форсированием дисциплины написания — это то, что забывают, что вокруг нескольких операторов под условием надо ставить скобки вида begin-end.

Любопытно. Я своим великовозрастным студентам вообще не рассказываю, что (в java, c#, js) они опциональны. Как следствие — все всегда ставят. Если кто-то сам об этом узнал, то из подобных проблем человек уже вырос.


А уж почему перед else нельзя ставить ';', это вообще приходится зубрить как чистую магию…

Казалось бы "потому что компьютер не понимает такую фразу". Проблема актуальна не так уж долго, чтобы приходилось "зубрить".


Но когда на это накладывается то, что в варианте с проверкой «до» мы проверяем условие продолжения, а с проверкой «после» — условие выхода, уже сбивает с толку.

Это где так? Условие в цикле и в while() {} и в do{}while(); описывает условие продолжения.
Я сейчас на всякий случай даже проверил.


c#
int i = 0;
while(i < 5)
{
    Console.WriteLine(i);
    i++;
}
Console.WriteLine("---------------");
i = 0;
do
{
    Console.WriteLine(i);
    i++;
} while (i < 5);

Вывод


0
1
2
3
4
---------------
0
1
2
3
4
> Любопытно. Я своим великовозрастным студентам вообще не рассказываю, что (в java, c#, js) они опциональны. Как следствие — все всегда ставят. Если кто-то сам об этом узнал, то из подобных проблем человек уже вырос.

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

> Это где так? Условие в цикле и в while() {} и в do{}while(); описывает условие продолжения.

В Паскале, очевидно. Я говорил как раз про него и его недостатки.
А то, что repeat-until является сам по себе скобками блока, а while — нет, сбивает ещё раз. И только после пятого «дети, это невозможно понять, это надо только запомнить!» получается устойчиво пробиться через эту несогласованность.

Блок Repeat'а заканчивается until'ом. Парной конструкции для while, увы, не существует. Поэтому добавляют обычные программные скобки. Что тут запоминать? For, к слову, также организован.
А в C — не так: что while, что do-while требуют один оператор или блок.
А в Perl — while и until взаимозаменяемы как в цикле с предусловием, так и в цикле с постусловием.
И оба их варианта именно в этом смысле логичнее (особенно перловый).
Вы правда считаете, что замена: на then что-то изменит в читаемости?
Только для новичка.
Ближе тем, что он более лаконичен. И позволяет проще описывать свои «хотелки». Python — язык отличный. Я на нем сам пишу.
Ближе тем, что он более лаконичен. И позволяет проще описывать свои «хотелки».

А можно, пожалуйста, конкретные примеры?

Ну, например, проще гораздо пишутся структуры данных. Например, стек. Банальщина, но все же. И человек меньше отвлекается на всякие детали синтаксиса. Код намного проще выглядит в Python, чем в том же C#. Что для обучения играет положительную роль.
Ну, например, проще гораздо пишутся структуры данных. Например, стек.

А можно, пожалуйста, конкретные примеры?

Отвлеченный пример. Только что сочинил. Вот простой до безобразия класс:
class Example:
	def __init__(self, x, y):
		self.x = x
		self.y = y

а на C#:
public class Example
{
	public int x, y;

	public Example(int x, int y)
	{
		this.x = x;
		this.y = y;
	}
}

Но суть в том, что даже здесь код на Python проще.

Эм, а ничего, что я спрашивал, чем Паскаль проще, чем Питон, а не чем Питон проще, чем C#?


(на этом фоне обсуждать ваш пример не буду, хотя у меня есть много грубого что сказать по этому поводу)

А в чем простота кода питона по сравнению с C# тут? Как по мне, так код на сишарпе лучше читаем — Класс, с двумя полями, вот тут инициализация. Меньше строк далеко не всегда лучше. Хотя сравнивать языки с разной типизацией само по себе глупое занятие

Особенно с учетом того, что в Delphi эта вся обвязка прописывается автоматом 1-2 нажатиями кнопок. Думаю, что в Шарпе не сложнее.
Нет, не проще, да короче, но не проще, магическое __init__ уж точно не упрощает код.
Ага, особенно __init__ сильно улучшил читаемость :)
IMHO — улучшил. Потому что универсальное имя для конструктора на все случаи. В коде же на каком-нибудь C++ иногда, пока дойдёшь до конструктора, забываешь, как класс звался, и чем является функция с данным именем.
В какой-то мере согласен, просто имя, такое же как у класса, тоже не супер.
Благо в Delphi/ObjectPascal так старательно слитым автором поста все максимально логично: конструктор в коде выделен ключевым словом constructor вместо function/procedure.
Ну если с плюсами разве что сравнивать :)
UFO just landed and posted this here
Не понял суть комментария в обсуждаемой ветке.
А можно пример того как вы на питоне представляете стек?

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

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


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


На основе реального опыта (помогал в изучении программирования с нуля) скажу — у учащегося начинает болеть голова даже когда вы пишете "i++" вместо "i = i + 1". Лично я тоже начинал изучение программирования с паскаля (правда тот что TurboPascal, без всяких извращений) и не вижу в этом никаких проблем (хотя возможно С-89 тоже неплохой выбор)

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

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


Что касается Паскаля — чем проще язык и чем меньше в нем вариативности — тем проще его изучить начинающему.

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


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

… мне тут кто-то недавно рассказывал про необходимость знать именно три вида циклов.


На основе реального опыта (помогал в изучении программирования с нуля) скажу — у учащегося начинает болеть голова даже когда вы пишете "i++" вместо "i = i + 1".

Ну так не надо писать i++. Это, знаете, как в изучении естественного языка — сначала дают простые нормы, потом сложные, потом ненормативные варианты.

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

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


… мне тут кто-то недавно рассказывал про необходимость знать именно три вида циклов.

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

Конкретное решение конкретных задач на конкретном языке — именно то, что нужно начинающему

Вот решение конкретных задач — это не изучение языка. Достаточно показывать те конструкции, которые нужны для решения задач.


Ну, в идеале-то необходимо знать все виды циклов.

В школе? Зачем?

Вот решение конкретных задач — это не изучение языка. Достаточно показывать те конструкции, которые нужны для решения задач.

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


В школе? Зачем?

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

Ну так а как вы будете решать задачи без изучения языка?

Легко — давать только те конструкции, которые нужны для решения задач.


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

Все то же самое можно сказать про "10 вариантов решений".

Не ради холивара, вижу что вы всей душой за Питон :) Паскаль может и не хорош для обучения, но во всех книжках школьных — он, и pascal.abc всегда рассматривал только именно как для школ, с меньшей болью иметь возможность следовать школьной программе. Одно дело когда надо исопльзовать другую среду, а другое когда уже и язык другой. И как ниже упомянули begin/end — помня одноклассников скажу, что для многих это существеннее и проще, чем пытаться объяснить зачем нужна табуляция. Увы. Прививать стиль написания кода в школе тем кому это мало надо это будет сверх-задачей, тут то еще хоть как то что то.
Для меня всегда бОльшим вопросом было почему они пилят свою IDE а не модуль для студии.
У нас аргументировали его использование, интернета почти небыло, что домой принести быстро легко и бесплатно, весил тогда еще мало.
и не по теме
Мне в целом не критично на чем писать (ну я про простенькое конечно на уровне знания синтаксиса), но вот с операторными скобками нравится больше. Питоном приходилось пользоваться, но эта привычка увы, постоянный дискомфорт :(.
Это так же как в бейсике, где надо обозначать не окончание ";", а что следующая является продолжением — тоже боль.
и интерактивных ноутбуков вроде Jupyter, а есть ли что-то аналогичное для Паскаля?)

Jupyter — это костыль, хоть и весьма качественный. Для Паскаля нет необходимости что-либо подобное делать, так как там есть формы. Можно вывести быстро, что угодно и как угодно. Сразу сделать из этого бинарник и отдать. А вот попробуйте из Юпитера сделать монолитный бинарь :)
Пока ту форму напишешь — задолбаешься. Оперативность графического REPL, которую предоставляет jupyter, настолько высока и полезна при разработке, что тут сложно найти аналоги.
В Lazarus/Delphi не надо ничего писать — достаточно накидать в редакторе форм нужную форму, ничего проще для быстрого создания GUI чем данные IDE в жизни не видел.
Ничего писать не надо. Форма идёт в комплекте с модулем, накидать можно на неё чего угодно за несколько минут — и картинок и графиков. Да и тот же ноутбук можно повторить 1:1, только, видимо, никому такое чудо пока в голову не приходило :)
Ничего писать не надо

То есть data wrangling произойдет горним чудом?


Вот смотрите, типовой сценарий, сегодня был:


  1. есть csv, читаем его в датафрейм (полторы строчки кода, alt-enter, видим на экране таблицу с данными)
  2. давайте-ка построим график (строчка кода, alt-enter, на экране график)
  3. ой, нет, не такой (изменили одно слово, ctrl-enter, на экране график)
  4. а давайте-ка на метрики посмотрим (строчка кода, alt-enter, на экране цифры)
  5. ага, давайте данные немножко пошмурзим
  6. что будет, если вызвать вот эту функцию на индексе (строчка кода, alt-enter, на экране таблица)
  7. ага, то, что надо, давайте одну колонку на это поделим (вписали в ту же строчку еще два слова, ctrl-enter, на экране таблица)
  8. и от этого график (вписали еще одно слово, ctrl-enter, на экране график)
  9. ага, вроде то, что надо, еще раз метрики (скопировали строчку, alt-enter, цифры)
  10. все, так и будем делать — причем делать вообще на другом языке и в другой среде

А теперь скажите мне, как вы такой же последовательности достигнете с обычными гуевыми формами и циклом edit-compile-run? Паскаль же вроде как компилируемый язык?

Паскаль же вроде как компилируемый язык?

Реализаций скриптов под Паскаль я знаю штук 5, наверно, при том, что вообще никогда этим не интересовался. Всё там скриптиться, любые графики выводить — несколько строк кода. Динамически в том числе. Недавно делал как раз.
Динамически графики удалять, добавлять, менять, форматы вывода графиков менять, что угодно, в десяток строк от силы. А потом на скриптах пиши что хочешь.
То, что у вас вызывает такое восхищение делается за недели две на Delphi, ну может за месяц. С результами хоть в гуе, хоть в вебе.
То, что у вас вызывает такое восхищение делается за недели две на Delphi, ну может за месяц. С результами хоть в гуе, хоть в вебе.

Ну вот когда сделаете — приходите, покажете. Прямо сейчас этого для Паскаля нет (если я не прав — покажите).


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

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

Довольно просто: скриптовой язык, результаты работы выводим в TChart/TImage, динамически создающиеся. Могу набросать концепцию в коде, если сильно хочется. Для реализации полнофункциональных ноутбуков я, увы, слишком занят.
Ноутбуки могут быть реализованы на формах, при желании.

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


Довольно просто: скриптовой язык

То есть уже не Паскаль?


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

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


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


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

Почему REPL это бесценное преимущество для обучения?
Ну то есть я понимаю, что можно на лету что-то написать и увидеть, но ведь это баловство или личные/производственные эксперименты.
Представьте, что занятия проводятся в формате группа студентов + преподаватель в каком-нибудь образовательном учереждении. Студентам так или иначе надо фиксировать и сдавать выполненные работы. Причин (сейчас приходит в голову) две: 1) надо отчитываться перед контролирующими органами. 2) При наличии сниппетов у студентов, можно им помогать методом "вспомни на что похожа задача и сделай как уже делал раньше".
В большинстве случаев результат работы студента это файл с исходным кодом.
Если результат — файл, то какая разница, нужно ли его компилировать, чтобы получить результат, или нет?

Почему REPL это бесценное преимущество для обучения?

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


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

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


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

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

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

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


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

Браузер и PDF отлично справляется с поставкой текстового описания задачи и математических формул. Рисовать графики вообще не всегда нужно.


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

Ну в IDEA для этого достаточно добавить класс с методом main. В MSVS еще пару шагов надо сделать. Но в целом не так уж трудоемко.

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

Баловство и эксперименты — неотъемлимая и очень важная часть хорошего обучения.


С открытой IDEA можно в классе с main методом писать код и запускать горячей клавишей. Обратная связь вряд ли будет медленнее.

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


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


Браузер и PDF отлично справляется с поставкой текстового описания задачи и математических формул.

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


(более того, иногда ноутбук содержит готовые шаблоны кода с "а ваше здесь")


Ну в IDEA для этого достаточно добавить класс с методом main. В MSVS еще пару шагов надо сделать. Но в целом не так уж трудоемко.

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

Баловство и эксперименты — неотъемлимая и очень важная часть хорошего обучения.

Не могли бы вы привести какие-нибудь авторитетные источники, подтверждающие эту мысль?


Давайте еще уточним, вы говорите про обучение или про самообучение? Если про обучение, то в какой форме, по какой дисциплине?
Я разговариваю о системном очном обучении с преподавателем по дисциплине Основы программирования.


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

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


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

Заданий вида "реализуй расчет по формуле" на дисциплине Основы программирование довольно мало (по крайней мере у меня), чтобы это было значительным преимуществом. Это кусок темы про арифметические операторы и может быть кусок темы про циклы.


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

Первая же тема посвящена как раз тому, чтобы учащийся мог написать и запустить простейшую программу. Без этого бессмысленно изучать более сложные материи.
Плюс, людям очень важно увидеть скомпилированный бинарник "Task5.exe" и запустить его. Это создает необходимое ощущение прогресса и "чего-то настоящего". В этом смысле java даже проигрывает C#.

Не могли бы вы привести какие-нибудь авторитетные источники, подтверждающие эту мысль?

К сожалению, нет. Это мое личное мнение.


Давайте еще уточним, вы говорите про обучение или про самообучение? Если про обучение, то в какой форме, по какой дисциплине?

В школе, по дисциплине "информатика". Не программирование как специализация.


Заданий вида "реализуй расчет по формуле" на дисциплине Основы программирование довольно мало (по крайней мере у меня), чтобы это было значительным преимуществом.

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


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

print "hello world". Написали, нажали Enter (или Ctrl-Enter), работает.


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

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

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

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


print "hello world". Написали, нажали Enter (или Ctrl-Enter), работает.

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

Что такое евклидово расстояние между векторами?

Извините, оговорка, "вектор" в значении "The position of a point in a Euclidean n-space is a Euclidean vector".


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

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


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

Подождите, речь была "написать и запустить".


Плюс как-то получить исходные данные от "потенциального пользователя".

Для первой "программы" это прекрасно делается с помощью функции с аргументами. В каком-то смысле это понятнее, чем cin/cout.

Подождите, речь была "написать и запустить".

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


Для первой "программы" это прекрасно делается с помощью функции с аргументами. В каком-то смысле это понятнее, чем cin/cout.

Вот тут согласен с вами, у питона с функциями как то сильно проще, чем в java, c#. Но при чем тут REPL?)

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

Вот именно поэтому я предпочитаю ноутбуки чистому REPL. В них все это как раз есть.


Вот тут согласен с вами, у питона с функциями как то сильно проще, чем в java, c#. Но при чем тут REPL?

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

UFO just landed and posted this here
Материал так легче и лучше усваивается — когда не спать хочется от скуки и тупой зубрёжки без понимания, а реально интересно.

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

UFO just landed and posted this here
= возможность свободно и наглядно попрактиковаться.

Что мешает свободно и наглядно практиковаться в main методе единственного java класса в IDEA?

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


(я отдаю себе отчет, что это формально не REPL, а interactive environment, но в питоне именно он)

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

С какой целью нас может интересовать состояние переменных в конце выполнения?

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

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

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

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

Так им и способ показать надо. Ну и да, никто не предлагает делать это в первую неделю (и даже месяц).

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

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

Ну, обратного вроде бы никто и не утверждал.

Сохранение состояний — я праивльно понял что это можно сохранить в полноценный документ со всеми расчетами а потом открыть в другом месте и продолжиьт расчеты?
В универе мы «баловались» с GAP (и ныне неподдерживаемой для нее оболочкой GGAP), удобно было что всякие недельные расчеты сохранялись, и потом уже быстро можно спокойно пользовать. Без прекручивания баз данных и прочего, здесь и сейчас сразу же из wysiwyg редактора (GGAP, в консольке конечно не так). Или вернуться и поправить и пересчитатается весь набор данных который дальше потом используется.
По началу казалось дикостью, а потом ак то приходит понимаение что удобно вот так здесь и сейчас посомтрет ьчто как куда, без компиляции лишний раз и дебага.

К сожалению, нет — только внутри сессии.

UFO just landed and posted this here

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

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

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

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


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

"зачем там REPL и сохранение переменных после работы программы?".

Чтобы черепашкой управлять, конечно же.

В итоге получается, что достоинство REPL в том, что под него написан один конкретный инструмент — черепашка на питоне, который помогает создать вау-эффект на первых занятиях у начинающих.
Это и правда полезная фича для определенной аудитории. Но если бы на java под IDEA была написана удобная черепашка, то достоинство REPL в питоне сошло бы на "нет".

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

Нет, получается, что вы не распознали иронию.


А достоинство REPL — в простоте экспериментирования.

А я не иронизировал про черепашку и REPL, на ней действительно удобно учить самым-самым основам :)

UPD Что не отменяет удобства REPL для кучи других задач.

Ты — не иронизировал, я — иронизировал. Separation of Concerns.

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

SICP, глава 1.1.1:


If you present Lisp with a number [...] the interpreter will respond by printing

Это классно, что в MIT взяли именно питон, но почему вы решили, что причина в REPL и в отображении значений переменных после работы программы?

Это классно, что в MIT взяли именно питон

Эээ, ну ладно, вы не читали SICP, но у меня же прямо в цитате сказано, что не Питон.


почему вы решили, что причина в REPL и в отображении значений переменных после работы программы?

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

Эээ, ну ладно, вы не читали SICP, но у меня же прямо в цитате сказано, что не Питон.

Я SICP правда не читал, но судя по выдаче гугла там уже не lisp, а питон. Впрочем, интересно и почитаю в ближайшее время.


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

Я в первую очередь хочу сказать, что ваше утверждение "REPL бесценен для обучения" неверно. Да, в MIT используется. Но я с тем же успехом могу сказать что "компиляция исходного кода бесценна для обучения потому что Страуструп успешно преподавал на C++". Я так понял, что такие подходы у них — это культурное наследие из 80х. Оценивать "ценность" REPL надо исходя из того, как вокруг него строится учебный процесс.
Инженеров можно сделать и с REPL и без него.

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

Оно неопровержимо (в значении "нефальсифицируемо"), поэтому вам не удастся доказать мою неправоту, как, впрочем, и мне — мою правоту. Что характерно, доказать ваше утверждение "REPL [...] хорош [...] не для системного образования студентов" вы аналогичным образом не сможете.


Лично мне с REPL легче, чем без него. При этом учился я как раз без REPL.

Давайте вот прям на примере. Я вот тут делал тупенький вебинар для пары друзей с ответом на вопрос «как работает это ваше машинное обучение» — www.youtube.com/watch?v=1B6-aH25EU8

По пути демонстрируется сборка и проверка решения с помощью REPL. Это не Юпитер, это обычный емакс с лиспом.
Я строил курс обучения вокруг REPL.
Он позволяет тупо открыть его на проекторе и показывать вживую как работает код с практически мгновенной обратной связью и мгновенными ответами на вопросы студентов.
А если подключить turtle graphics, который как раз заточен под репл, то все становится совсем-совсем хорошо.

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


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

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

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

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


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


Не говоря о том, что «мгновенная» компиляция и запуск проигрывают REPL в отзывчивости и скорости обратной связи.

Можно узнать, с каким счетом проигрывают?) В IDEA я нажимаю Shift+F10 и у меня за секунду появляется окно с выводом. Мы ведь про основы программирования говорим, где программы на тысячу строк — редкость.

Ну вот смотрите. Приходите вы и на вас смотрит 50 пар глаз из которых интересно вас слушать хорошо если 10-ку. Если вы первую лекцию посвятите тому как открыть IDEA, как в ней создать проект, что такое «скомпилировать», то на следующую к вам уже придет не 50 человек, а 25 (я напоминаю, что это вчерашние дети и подростки).

Альтернативный вариант — вы приходите, запускаете ОДНУ программу с минимальным интерфейсом и начинаете объяснять простейшие принципы показывая выполнение по одной команде с мгновенной реакцией и результатом. Потом подлкючаете черепашку и начинаете ей рисовать что-нибудь интересное по пути объясняя как вводимые команды влияют на поведение черепашки. Я вам гарантирую, что все 50 пар глаз будут наблюдать за «магией».

Чтобы заинтересовать нужно быть немножко фокусником и REPL позволяет им стать.

А вот потом уже практическая часть, IDE, компиляция и домашние задания сдаваемые через github. Потому что стало понятно и интересно.

Собственно, вы сами упомянули IDEA. Посмотрите на то, что предлагает сам JetBrains, они пришли к примерно такому же подходу — www.jetbrains.com/pycharm-edu

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


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

Но, повторюсь, дело не в этом. Дело в том, что Jupyter есть уже сейчас, а REPL есть в Питоне из коробки (и, если я ничего не путаю, был всегда). И вот ровно это для обучения бесценно.
Максимум, чему вы сможете научить в Юпитере — это какая-либо обработка данных. В Паскале вы можете научить чему угодно: вплоть до создания этих же самых ноутбуков :) В которых уже сможете научить обработке данных.
Юпитер — это оболочка для работы (в том числе и для обучения) в весьма ограниченной сфере: работе с данными.
Паскаль же, как универсальный язык, и его оболочки, позволяют научится чему угодно. В том числе и тому, что умеет Юпитер. Даже и Питон можно подключить, я ссылку давал.
За счет универсальности Паскаль и его среды более подходят как для работы и для обучения.
Максимум, чему вы сможете научить в Юпитере — это работать с данными.

Это, очевидно, неправда.


А в Паскале вы можете научить чему угодно: вплоть до создания этих же самых ноутбуков

А почему вы противопоставляете Юпитер Паскалю? Правильно противопоставлять Паскалю Питон (в котором тоже можно научить чему угодно), а Юпитеру — формы (в которых тоже можно научить не всему).

Паскаль давно сросся с формами. На голом Паскале вполне можно создать любые формы, не прибегая к средовым редакторам, другое дело, что зачем это делать. Питон же сам не сможет ничего создать. Максимум — присоединиться к Qt, который за него будет всё и рисовать.
в которых тоже можно научить не всему
Подробнее. Нет, некоторые вещи Паскаль в реализации Delphi покроет слабо — драйвера, например. Остальное вроде бы всё покрыто вполне: основные платформы, веб. Хочется — можно и к Питону подключится и к Qt (в реализации FreePascal).
Паскаль давно сросся с формами.

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


Питон же сам не сможет ничего создать.

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


Подробнее.

А что "подробнее", это та же самая ошибка, только наоборот: я не буду спорить, что в Паскале можно научить чему угодно (хотя, конечно, вопрос усилий), но речь-то шла о формах. Научить в формах написанию консольных приложений? Web (HTTP) API сервисов?

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

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

uses
 Vcl.Forms,
 vcl.Dialogs,
 vcl.Graphics,
 Vcl.StdCtrls;

type
 TDummy = class
  class procedure Button1Click(Sender: TObject);
 end;

var
 Form2: TForm;
 Button1: TButton;

 { TDummy }

 class procedure TDummy.Button1Click(Sender: TObject);
 begin
  ShowMessage('Hello world!');
 end;

begin
 Application.Initialize;
 Application.MainFormOnTaskbar := True;
 Form2 := TForm.Create(nil);
 Button1 := TButton.Create(Form2);
 Form2.Name := 'Form2';
 Form2.Left := 0;
 Form2.Top := 0;
 Form2.Caption := 'Form2';
 Form2.ClientHeight := 153;
 Form2.ClientWidth := 364;
 Form2.Color := clBtnFace;
 Form2.OldCreateOrder := False;
 Form2.PixelsPerInch := 96;
 Button1.Name := 'Button1';
 Button1.Parent := Form2;
 Button1.Left := 144;
 Button1.Top := 64;
 Button1.Width := 75;
 Button1.Height := 25;
 Button1.Caption := 'Button1';
 Button1.TabOrder := 0;
 Button1.OnClick := TDummy.Button1Click;
 Application.Run;
 Form2.ShowModal;
end.

Форму, опять же, можно грузить прямо из текста, могу кинуть код. Исходник формы (dfm) можно набрать в блокноте, если сильно хочется. Другое дело, что в среде это всё сильно удобнее делать. Но если хочется без среды — пожалуйста :)
Научить в формах написанию консольных приложений?
Не понятно, зачем именно так делать. Консольные приложения вполне работают в Паскале наравне с 'обычными' VCL/FMX. Однако, если сильно хочется, то можно вывод консоли перенаправить в форму.
Научить в формах написанию консольных приложений? Web (HTTP) API сервисов
Кроме форм есть DataModule. Сам, собственно, Web сервисом занимаюсь, среди прочего.
Программа может вполне существовать без среды выполнения вообще.

Не, не может. Вашу вот программу можно запустить на моем планшете?


Набросал программу, которой достаточно компилятора для сборки и запуска:
uses
Vcl.Forms

Ага, очень смешно. А VCL (про который даже в названии написано, что это библиотека) — это часть компилятора, да? А как так вышло, что во FreePascal не она, а LCL, если это, как вы говорите, часть языка? А в PascalABC.net — System.Windows.Forms и FormsABC?


Форму, опять же, можно грузить прямо из текста, могу кинуть код. Исходник формы (dfm) можно набрать в блокноте, если сильно хочется. Другое дело, что в среде это всё сильно удобнее делать. Но если хочется без среды — пожалуйста

И какое отношение это имеет к среде выполнения? Вы точно ее со средой разработки не путаете?


Не понятно, зачем именно так делать

Чтобы учить всему на формах (это, напомню, ваше противопоставление Юпитеру), очевидно.


Кроме форм есть DataModule.

Вот именно, что кроме форм.

Не, не может. Вашу вот программу можно запустить на моем планшете?

Под FMX пересобрать — и можно.
Ага, очень смешно. А VCL (про который даже в названии написано, что это библиотека) — это часть компилятора, да? А как так вышло, что во FreePascal не она, а LCL, если это, как вы говорите, часть языка? А в PascalABC.net — System.Windows.Forms и FormsABC?

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

Путаете вы.
Чтобы учить всему на формах (это, напомню, ваше противопоставление Юпитеру), очевидно.

И что?
Вот именно, что кроме форм.

И что? Что вы пытаетесь доказать? Что учить всему этому неудобно или невозможно? Смешно же.
Под FMX пересобрать — и можно.

А что мешает запустить вашу программу на планшете? Уж не различие ли сред выполнения?


Но среды то нет? Мы же говорили про среды.

Есть, конечно. .net, в который входит System.Windows.Forms — это среда выполнения.


И что? Что вы пытаетесь доказать?

Что ваше противопоставление "Максимум, чему вы сможете научить в Юпитере — это работать с данными. [...] А в Паскале вы можете научить чему угодно: вплоть до создания этих же самых ноутбуков" (выделение мое) — некорректно. А когда мы переходим к корректному противопоставлению "максимум, чему вы можете научить в Питоне / максимум, чему вы можете научить в Паскале" — выясняется, что в Питоне, внезапно, можно научить всему тому же, чему и в Паскале.

UFO just landed and posted this here

Да, вы правы: научить людей ставить begin и end в Питоне очень сложно.

UFO just landed and posted this here
Ну конечно же нету, ведь то что вы привели — не Питон, а совсем другой язык :-)
А что мешает запустить вашу программу на планшете? Уж не различие ли сред выполнения?

Достаточно пересобрать с FMX, и ничего не помешает.
А когда мы переходим к корректному противопоставлению «максимум, чему вы можете научить в Питоне / максимум, чему вы можете научить в Паскале» — выясняется, что в Питоне, внезапно, можно научить всему тому же, чему и в Паскале.

Когда для Питона будут нормальные, распространенные среды — тогда можно говорить о том, что на нём можно всему научить. А пока сред нет — то и предмета для разговора нет. Для Паскаля такие среды существуют уже десятилетия.
Теоретизировать можно сколько угодно. Однако практика — критерий истины.
Достаточно пересобрать с FMX, и ничего не помешает.

Один и тот же бинарник?


И да, как раз FMX/VCL в этом случае являются интерфейсом к среде выполнения (или, иначе говоря, фреймворком/платформой).


И, что самое главное: так с какими же формами "сросся Паскаль"? С VCL? С FMX? С LCL? С FormsABC?


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

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

А зачем мне Дельфи, чтобы запускать Питон?

UFO just landed and posted this here

У Питона уже есть интерпретатор.

UFO just landed and posted this here

А что, от добавления питона в дельфи он каким-то магическим образом станет компилироваться?

А зачем мне Дельфи, чтобы запускать Питон?
Вам хочется интерпретируемые скрипты — вот один из вариантов. Их много, на цвет и вкус. Как подключаемые, так и полностью реализованные на Delphi.

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

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

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


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

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


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

А почему вы решили, что Юпитер должен вам в этом помочь? Почему вы вообще решили, что он для этого предназначен?


Недо-среда, как изначально и говорил. Кого чему на этом можно научить?

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

А почему вы решили, что Юпитер должен вам в этом помочь? Почему вы вообще решили, что он для этого предназначен?
Так это вы тут за Юпитер активно топите :) Я тут при чём?
Так это вы тут за Юпитер активно топите

Я нигде не предлагал использовать его для описанной вами задачи


Я тут при чём?

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

Я нигде не предлагал использовать его для описанной вами задачи
Вы же предлагали бесценный инструмент для обучения программированию, как противопоставление ABC:
… а чем конкретно Паскаль «ближе к человеческой логике», чем тот же Питон? (я уж молчу про бесценность REPL и интерактивных ноутбуков вроде Jupyter, а есть ли что-то аналогичное для Паскаля?)
Однако на поверку он таким не является, увы.
Вы же предлагали бесценный инструмент для обучения программированию, как противопоставление ABC:

Э нет. ABC я противопоставляю Питон. Ноутбуки и REPL — приятное дополнение.


Однако на поверку он таким не является, увы.

Что-то вы не привели ни одного аргумента для этой поверки.

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

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

Так, давайте для начала определимся — вы под формой понимаете обычный такой десктопный GUI, вот такого толка?

Можно писать в Lazarus. Да, это сложнее, но если все подробно объяснять, то нормально. Тем более баги в программах уровня «Hello world» не будут вылезать, как например здесь.
А что мешает использовать старый добрый Делфи?
Ничего. А Вы бы что предпочли из этих двух?
Обрезанный. Без графиков, без работы с СУБД, без отчетов. Все нужно или писать самому или докупать.

Впрочем, компонентам работы с СУБД можно достаточно легко найти замену.

Но для целей обучения постоянно меняющиеся условия лицензирования не располагают к долгому планированию. Сегодня Стартер есть, завтра отменят.
Для новичков, обучающихся Паскалю, есть PascalABC без всяких .Net. Поэтому нет никакого смысла использовать для обучения PascalABC.Net если то, что отличает его от обычного паскаля реализовано плохо.
Для новичков, обучающихся Паскалю, есть PascalABC без всяких .Net
А где оно есть и чем оно лучше?
У меня оно находится на второй странице результатов и пишет:
С сентября 2007 года система Pascal ABC не поддерживается. Последней версией стала 3.0. На смену ей пришла более современная система программирования PascalABC.NET, основанная на платформе Microsoft.NET и позволяющая генерировать .exe-файлы.

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

А вот Паскаль… вроде как и настоящий язык — а вроде как и нет.
Даже стало любопытно как много людей использует для программирования именно .NET часть в Pascal? В школе и университете, мне кажется, этим не занимаются. Обычно же классический Pascal иучают и отдельно C#.
Времена старого и доброго Pascal закончились.
Да, начались времена Ады, ну или того же Free Pascal (хоть про него и говорят, что, мол, был придуман людьми, не знающими про Аду, для людей, не знающих про Аду).

Я сам еще лет пять назад топил против Паскаля. Теперь понимаю, что бы неправ. Отличный язык.
Дайте детям на выбор Python для Minecraft и Pascal. И посмотрите на результат через пару недель.

Программированием надо заинтересовать, иначе любое знание придет и тут же уйдет.
В первом случае все ограничиться игрой в Minecraft, а со вторым, возможно ребенок заинтересуется не красивыми кубиками, а именно программированием.
Угу, платная игра с донатом и микротранзакциями — самое то, что стоит внедрять как обязательный элемент школьного образования. Выбор детей — это хорошо. А кто проплачивать это будет? Родители? Школа?
Как то смешалось всё мягкое с теплым, а люди с конями…

Правильно тут многие написали — Pascal (в любой его ипостаси) — язык для новичков.

Нельзя говорить одновременно о профессиональном росте программиста и программировании на Pascal. Ну не стыкуется это от слова «совсем».

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

Возьмем такую виртуальную, но тем не менее существующую (как говорят) профессию, как математик-алгоритмист.

Вот дают ему сердешному задание для оптимизации логистической работы:

1. Поставки, срок начала выполнения которых близок к дедлайну (с учетом возможных задержек в пути), должны начаться сегодня.
2. Поставки, дедлайн для которых далек, можно отложить до лучших времен (ну за исключением тех пунктов, куда можно что-то необременительно по весу и габаритам закинуть «по дороге».
3. Остальные поставки оптимизируются с учетом расхода времени, бензина, ограничений законодальства по ОТ и др.
4. И все это для полутора-двух-трех сотен пунктов поставок, сообщение между некоторыми из них только через Северный полюс на сломанных лыжах.

Ну, это я для примера… Просто для того, чтобы почувствовали насколько эта задача «интересная».

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

Он — ни разу не программист. У него другая работа. Но сделать работающий макет своего алгоритма ему необходимо. Хотя бы для того, чтобы убедиться, что временная сложность его полиномиальна, а не экспоненциальна. Т.е., он уверен, что результат близкий к оптимальному его алгоритм обеспечит, но за 5 минут или за 5 часов — вот в чем вопрос! Сколько реально (а не умозрительно) потребуется памяти, не будет ли вылетов из-за слишком глубоких рекурсий и т.д.

Ну и на каком языке ему писать этот макет, не привлекая специалистов? Чисто для себя, для проверки?

Вот тут мне и кажется, что и C# и Pyton требуют более высокого порога вхождения, чем тот же самый Pascal. Пусть даже он ABC.Net
Более того, IMHO, для таких целей процедурные языки гораздо более подходящие, чем чистые ООП-языки. Т.е., чем проще, тем лучше. Но не слишком просто, чтобы иметь возможность делать что-то чуть более серьезное, чем сложение и вычитание.
Математик-алгоритмист, испытвающий проблемы с порогом вхождения в C# или Pyton — это чудо как хорошо.
Ну я не математик, правда, и не программист. Обычный инженер-технарь. Но для решения технических (и не очень) задач приходилось и программировать и алгоритмы изобретать.

Так вот, совершенно не возникало трудностей с такими языками, как Fortran IV, PL/1, C. Даже Forth и ассемблер для Intel 8080/8086 освоил. Много писал на том же Turbo Pascal, Clarion. Немного знаком с C++, PHP (на нем даже что-то полезное сваял, как ни странно).
А вот ни C#, ни Pyton не зашли ни с первой попытки, ни со второй.

Хотя, есть подозрение, что дело в мотивации — по большому счету ни тот, ни другой мне не нужны.
Ну и на каком языке ему писать этот макет, не привлекая специалистов? Чисто для себя, для проверки? Вот тут мне и кажется, что и C# и Pyton требуют более высокого порога вхождения, чем тот же самый Pascal. Пусть даже он ABC.Net

Вам кажется. Особенно учитывая то количество математических алгоритмов, которые есть в numpy и scipy, а так же Jupyter Notebook, в котором эту задачу можно делать прямо с самого начала.


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

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

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

Вот только для некоторых сред выполнения глубина рекурсии O(ln(n)) — проблема, а для некоторых и O(n) не проблема.

Как то попросили посмотреть почему програмка не работает. Оказалось она на PascalABC.
И суть была в том что то ли continue внутри цикла работало как break, то ли наоборот, т.е. баг в самом компиляторе, хотя вроде он и не совсем сырой раз в школах его давно используют.
Удачного обучения с break/continue, детки. :)
вроде он и не совсем сырой раз в школах его давно используют.
Это, мне кажется, не настолько связанные вещи. Недавно ставил Кумир (в котором «язык РАЯ» или что-то похожее, с русскими ключевыми словами) — так там в инсталляторе все русские буквы были «закрокозябрены», включая надпись, имеющая значение «Продолжить».

По теме.
В файле «Сравнение PascalABC.NET и старого Паскаля» в разделе «Сравнение версий языка Паскаль» почти всё остальное называется отжившим.

Дальше утверждается «PascalABC.NET опережает Free Pascal по скорости выполнения программ
на большинстве тестов. Ниже приводится пример со всеми включенными оптимизациями.» и приводятся:
две программы
uses Windows;
{$apptype console}
var
tt: Cardinal;
n,i,j: integer;
s: real;
begin
tt := GetTickCount;
n := 10000;
s := 0.0;
for i:=1 to n do
for j:=1 to n do
s := s + 1.0/(i*j);
writeln(GetTickCount-tt);
end.

и
begin
var n := 10000;
var s := 0.0;
for var i:=1 to n do
for var j:=1 to n do
s += 1.0/(i*j);
writeln(Milliseconds);
end.


Как я и предполагал, скомпилировать первую под Линуксом мне не удалось.
(То, что в качестве IDE для PascalABC.NET под Линуксом предлагается использовать geany, а не «красивый GUI», уже не так существенно — никто же не собирается учить программированию не под Виндоуз (сарказм). )
Когда же я убрал из обеих программ вычисление затраченного времени и поручил измерение команде time, первая (FreePascal) оказалась в два раза быстрее. Я даже догадываюсь, почему.
Всё смешалось в доме Облонских.
Язык программирования — это не IDE и не компилятор, это набор правил. Понятия не имею, насколько хорош или плох язык PascalABC.Net, но претензии были только к IDE и компилятору.
Но в любом случае, не понимаю, зачем было свою IDE городить, когда Visual Studio поддерживает Language Extensions, а VS Community бесплатная?
В школе сталкивался с PascalABC (ещё не .NET) так и не смог его освоить толком, но больше потому что не видел никаких практических задач которые можно с таким языком решить.

Вот скажем язык применяемый в Sanny Builder 3 для программирования скриптов в играх серии GTA я очень легко освоил, потому что было интересно и результат сразу виден, плюс примеров куча (хотя язык та ещё дрянь, большинство функций вызываются опкодами из 4-х шестнадцатиричных символов, что требует постоянного программирования мышкой).

И скриптовые языки типа Bash/Batch легко освоил уже позже т.к. столкнулся с рядом задач которые можно было легко решить такими языками.

Проще говоря проблема освоения языка в решаемых им задачах, особенно для новичка, написать миссию для GTA куда увлекательнее было чем писать какой то унылый калькулятор, который умеет меньше встроенного в винду приложения калькулятор.
Среда PascalABC тоже кривая. Ниже примеры с комментариями.
//Ошибка: Нельзя преобразовать выражение типа integer к типу Object.
procedure F(x: object);
begin
  exit;
end;
 
begin
  F(1); // <--
end.


//Ошибка: P недоступно.
type
  T1 = class
  private // Либо protected
    procedure P;
    begin
      exit;
    end;
    
  public
    procedure P(x: integer);
    begin
      exit;
    end;
  end;
  
var
  A: T1;
  
begin
  A := T1.Create();
  A.P(1); // <--
end.


//Ошибка: private/protected работают некорректно.
type
  T1 = class
  // Если убрать всю секцию public, то доступ к P пропадет из вне класса.
  // То же самое будет если public и private поменять местами.
  public
    procedure P(x: integer);
    begin
      Writeln('1');
    end;
 
  private
    procedure P;
    begin
      Writeln('2');
    end;
  end;
 
var
  A: T1;
 
begin
  A := T1.Create();
  A.P(); // Доступ есть.
end.
Подучить бы тебе Паскаль…

Так я и подумал сразу, что какой то обиженный из-за пары ошибок в редакторе IDE школьник. Был еще маловероятный вариант 2 — что кто то решил использовать П.АБЦ для серьезной работы, но отпал.

ТЛДР — ты не понимаешь синтаксис ООП. Попробуй повторить фокус (написать аналог) в C# или в C++
Посмотрел повнимательнее утром на свежую голову. Проверил в версии 3.4.0.1694

Итого — 1й пример стал работать (хотя конечно для стандартного Паскаля не должен был, боксинг добавился вместе с .NET).
2й-работает, все доступно, см ниже
3й — тоже работает, хотя [вроде] не должен, см ниже

Взял пример, прямо из онлайн справки АВС Паскаля «Классы/Видимость членов класса и модификаторы доступа». Читаем
Кроме того, private и protected члены видны отовсюду в пределах модуля, в котором определен класс
Пример разнес по юнитам — все отработало согласно описанию.

Ну учебная же среда, хотя это немного другой Паскаль =)
Надо так учить мат.часть

Но минус откатил на плюс за свою невнимательность.

Автор — это шутка? Тебе компилятор просто не дает выстрелить в ногу, радовался бы, в js, Python… можно и прострелить, а Pascal уберег тебя от тупой ошибки. Имхо дело не в «плохом и ужасном» паскале.
Ну офигеть кривость! Если поменять private и public местами, то доступ, видите ли, пропадает…

Вы вообще знаете что эти ключевые слова означают? Подсказка: они управляют доступом извне класса :-)
А вы вообще знаете что такое перегрузка функций? Подсказка: это когда есть много функций — а имя у них одно.
Ну офигеть кривость! Если поменять private и public местами, то доступ, видите ли, пропадает…


Как я понял, автор имеет в виду не замену public на private, а порядок описания секций private и public.
В примере 2 порядок один, в примере 3 — порядок другой. Поведение, по словам автора, разное.
Да, я уже увидел. Почему-то первый раз показалось что компилятор прав, сейчас вижу что нет.
Это среда, которая делалась для замены Turbo Pascal или платного Делфи.
Все таки среда создавалась в 2002 году.

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

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


Хотя, на мой взгляд, проект слишком разросся. Вопрос сколько процентов от него используется в обучении.
Так разаработчики предпочитают «добавлять фичи, а не фиксить баги».

Я много с ним не занимался, но уже видел, как в «Watch» не обновляется присваиваемое значение элемента массива. И как-то раз удалось просто случайно уронить компилятор.
Просто не нужно было учебную оболочку пытаться тянуть до уровня языка. В результате и оболочка стала плохой и реализация языка так себе. Как в старой хохме: русский уже забыл, но английский еще не выучил.
Просто не нужно было учебную оболочку пытаться тянуть до уровня языка.

Проблема в том, что ни ALGOL, ни Modula — не имели на PC нормальной реализации, а Pascal — имел.

PS если кто не помнит, Pascal планировался как чисто учебный язык после изучения, которого нужно переходить ALGOL. Позже была создана Modula — тоже как язык для работы, к которому легко перейти зная Pascal.
Я имел в виду Pascal ABC, если что. Позиционировались как учебная оболочка — так бы и оставались.
1) С тем как хорошо автор поста знает паскаль, все ясно:

2) Не ясно, зачем автор требует от среды, созданной исключительно для обучения, кучи продвинутых фич. (А с приведенным примером выше, можно усомниться в том, что автор действительно глюки словил, а не напоролся на собственноручно расставленные грабли)
3) Советую автору взглянуть на настоящую IDE для Object Pascal — Lazarus.
Небольшое замечание про обобщения: их компиляцию довольно трудно реализовать, так как появляются много нюансов и тонкостей, особенно если завязываться на Reflection.Emit.
Как пример рассмотрим аналог из статьи:
class TA<T> {
 T x;
}
class TB<T, T2>: TA<T>
{
}

Первая неожиданность в том, что TA<T> и TA<T>, который базовый класс TB<T, T2>, — это разные типы.
Первый TA<T> — это обобщённый тип со свободным типом-параметром T.
Второй TA<T> — это конкретизированный обобщённый тип TA<T>, в котором тип-параметр T конкретизирован типом-аргументом T класса TB<T, T2>.
Чтобы было понятней, перепишу пример так:
class TA<T> {
 T x;
}
class TB<D, N>: TA<D> {
}

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

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

Третья неожиданность заключается в том, что авторы ICorDebug — набора интерфейсов для доступа к отладчику .NET, поддержку обобщённых типов добавили позже, с неполным отображением.

(Это всё моё мнение, поддержкой проекта я занимался 6-8 лет назад, сейчас с наличием .NET Core с открытыми исходниками, наверное, будет полегче).
Какая, однако, активная темка тут на Хабре нашлась! Лол, да это же победа.

По факту, не так давно этот человек начал активно заливать г#$%ом страницу Википедии проекта — размещать там ссылки на Issue на гитхабе, рассказывать о том, насколько же «нельзя» этим Паскалем пользоваться… Теперь вот дошел до того, что целый пост на Хабр написал с той же целью. Интересно только, в чем мотивация.

По части того, насколько активно в обучении используются те или иные фичи — расскажу свою историю. Закончил я мехмат ЮФУ в 2016 году (магистратуру — начинал, соответственно, в 2010). В качестве первого языка для курса «Основы программирования» (продуктивной работы и хороших студентов Вам, Станислав Станиславович!) на первом году обучения был поставлен именно он. Поначалу (я пришел с крайне неплохим бэкграундом в плане опыта программирования на фоне остальных однокурсников) действительно возникала куча вопросов. В основном, связанных с тем, что в продакшене этот язык не используется, и возможность не предвидится. Курс, однако, закончился, а потом…

На втором году обучения вся группа «подтянула» свои знания по C#, Java, C++, Python буквально за две-три недели за язык (ну ладно, на С++ целый год потратили, да, но писать простенькие программы смогли очень быстро), а сложность освоения новых языков свелась практически к нулю. Почему? Потому, что буквально на каждую конструкцию, которая в них встречалась, находилась та, которую мы уже выучили, и знали принципы работы с ней на языке PascalABC.NET. Спрашиваете, зачем все эти фичи, которые реализуют разработчики? Именно по этой причине — обеспечить плавный и легкий переход на практически любой язык, любую среду программирования. То, что не является стабильным (т.е. экспериментальные, разрабатываемые фичи), мною за время обучения не было увидено ни разу — разве что, сам накопаешь кровно-потными трудами, если есть желание что-то «поломать». К моменту, когда пришла пора рассказывать об этих самых фичах на курсах по ЯП, они уже протестированы и стабильны.

То, что человек тут пишет о использовании PascalABC.NET в крупных проектах и промышленной разработке (и о том, что этого нужно избегать), явно говорит о том, что он еще школьник (ну, максимум, первый-второй курс) — зайдите интереса ради на форум мехмата — там таких добрый десяток, с «крупными» проектами вроде «напишем свой тридэ движок на пацкалях, и будем игры писать». Людям, которые имеют работу в нашей области, не нужно объяснять, почему язык не ставит себе целью эту самую промышленность. На это же намекают и орфографические ошибки вроде «по чему». Опять же, юношеский максимализм и абсолютизм, с которым эта «критика» преподносится, указывает на то же самое. Школьники, пожалуй, порой и умные вещи говорят, но в таких случаях их редко можно от взрослого человека отличить.

То, что там есть баги, вполне объяснимо малым размером команды, которая, к слову, не только этим занимается — проект некоммерческий, надо еще и кушать что-то. Там, где максимальный охват аудитории (школа, первокурсники), 99,9% функциональности работает на отлично.

Вопрос к автору у меня только один. Откуда столько хейта? Двойку поставили?
Обидно просто. Учитывая объем работ команды разработчиков, усилия приложены титанические. И обучающий эффект мощнейший, по крайней мере, в руках хорошего преподавателя. А тут появляется п#$%#к, который на весь интернет орет о том, как этот ЯП нужно чуть ли не через Роскомнадзор запретить.
Извиняюсь, с «крупными проектами» я тут переборщил — здесь этого не было. Было в Википедии :) Впрочем, из «попрограммировал на PABC.NET, стал разработчиком среднего уровня, среда жить не дает», оно планомерно вытекает…

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

Кому оно вообще нужно? Форматирование какбэ для удобства не только чтения, но и написания служит… Если не делаешь это на автомате руками, работа превращается слегка в боль, не? Если сначала код писать, а потом форматировать, то в чем цель? Сдать преподу, чтоб два не поставил за корявый вид, который читать противно?.. Форматирование кода — базовый скилл вроде, должен быть встроен в любого программиста на уровне коры мозга.

Нет, один юзкейс есть — вставить код из стековерфлоу. А еще?
Если не делаешь это на автомате руками, работа превращается слегка в боль, не?

Конечно, нет. За меня большую часть форматирования делает IDE, чтобы я мог потратить свое время на что-нибудь более интересное.

Да. И когда мне выпадает необходимость пописать где-нибудь вроде Atom или Notepad++, я эти табы с пробелами ставлю сам, причем, не «напрягаясь», и не «задумываясь». Это ж столько мыслительной деятельности занимает — кнопки на клавиатуре нажимать.
Да.

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


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

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

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

Да

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

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

Вот вам и ответ на то, зачем нужно автоформатирование.


Имелось в виду, что большая часть IDE умеет во время написания кода это делать.

Цитирую: "делаешь это на автомате руками".

Это не автоформатирование IDE, а базовая фича любого редактора текста уровня выше «Блокнот», никак не привязанного ни к какому конкретному языку.

Имеется в виду, что если конкретный редактор этого не поддерживает, это не вызывает проблем. Ну, у меня, по крайней мере.
Это не автоформатирование IDE, а базовая фича любого редактора текста уровня выше «Блокнот», никак не привязанного ни к какому конкретному языку.

То есть то, что автоформатирование зависит от языка (и принятых в команде стандартов), вас не очень волнует?


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

У меня тоже не вызовет, но раздражать будет неимоверно.

Я в последних сообщениях говорил только о табах, не путайте теплое с мягким. Сами завели рассказ про «16 пробелов»…

Форсирован формат кода в Python — и то, не так, чтоб очень сильно. За его пределами каждый что хочет, то и делает. В каждой фирме отдельный стайлгайд с правилами вроде «кривые скобки ставим на той же строке, что и описание функции». По хорошему — можно настроить какой-нибудь AStyle, и делать как душе угодно. Вот только не стоит просить еще и кастомного форматирования от разработчиков — у них и без того на это времени нет. Вы напрямую утверждаете, что это ну очень нужно — так епт, сделайте! Пулл-реквесты в репозитарий никто не отменял. Только вот что-то никто не торопится…
Я в последних сообщениях говорил только о табах, не путайте теплое с мягким. Сами завели рассказ про «16 пробелов»…

… которые тоже зависят от языка.


За его пределами каждый что хочет, то и делает.

Дада, про go fmt никто не слышал.


Вы напрямую утверждаете, что это ну очень нужно — так епт, сделайте!

Так у меня и так все есть и работает.

UFO just landed and posted this here

Мне кажется, мы под Smart Identation разное понимаем. Я вот привык к следующему:


  1. набираем if(x>0)
  2. нажимаем Enter, получаем сдвиг относительно if
  3. набираем {, она немедленно сдвигается под if (т.е., сдвиг убирается)
  4. нажимаем Enter, получаем сдвиг относительно {
UFO just landed and posted this here
Но описанное вами поведение не требует настройки под определённый стиль программирования.

Во-первых, требует: редактор с кодстайлом автоматически унесет фигурную скобку на предыдущую строку, если так сказано в кодстайле.


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

UFO just landed and posted this here
Зависит, но только от языка.

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


То есть всё что нужно — это детектор языка

Синтаксический анализатор, вы хотели сказать?


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

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

UFO just landed and posted this here
Smart indentation никак не мешает им это делать. (Ну и не помогает.)

Я же говорю: разные понятия. Для меня это тоже входит в обязанности Smart Indentation


Скорее некое его урезанное подобие.
Можно взять два конкретных "любых редактора" — vim

Вот я взял vim — и таки да, "урезанное".


switch(Some())
{
        case string s when s == "1":
                a1();
                return;
                case string s
                        when s == "2":
                        a2();
                return;
        case string s when s == "3":
                a3();
                return;
}

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

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

А вот интересный вопрос. В тех версиях visual studio или idea, которые можно назвать «базовыми» тоже ведь нет никаких синтаксических анализаторов.
Нет, я про Visual Studio Shell.

Туда же (даже еще хуже, потому что afaik, shell вообще не предназначен для самостоятельного запуска).

Так ведь и голым вимом мало кто пользуется.

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

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

Вообще, мне нравится, как постепенно эскалируется от "базовая фича любого редактора текста уровня выше «Блокнот»" к "фича любого продвинутого редактора", а там уже и vim появился.

По факту, не так давно этот человек начал активно заливать г#$%ом страницу Википедии проекта — размещать там ссылки на Issue на гитхабе, рассказывать о том, насколько же «нельзя» этим Паскалем пользоваться…
Вы можете как-то обосновать предположение, что это был именно автор данной статьи? Там, действительно, есть некие правки человека с тем же именем и фамилией, но достаточно мелкие, вроде изменения регистра переменной или последовательные правки с вставкой и удалением ссылки на несуществующую страницу, не приводящие в итоге к изменению статьи.
В некотором смысле. Там были еще правки от незарегистрированного пользователя, и их стиль изложения/суть претензий крайне сильно напоминают то, что написано здесь. Была еще найдена связь между пользователем с тем же именем с сайта cyberforum, с выложенными исходниками того же характера, а также кусками кода, который он выкладывал как на форум Паскаля, так и на cyberforum.

TL; DR — прямый улик нет, но косвенных — полно. Для того, чтобы с ними ознакомиться, предлагаю зайти на it.mmcs.sfedu.ru, и там темка сейчас в топе, с говорящим названием.
Потому, что буквально на каждую конструкцию, которая в них встречалась, находилась та, которую мы уже выучили, и знали принципы работы с ней на языке PascalABC.NET. [...] плавный и легкий переход на практически любой язык

В PascalABC.net есть list comprehensions и динамическая типизация? Указатели? async/await? Паттерн-матчинг?

Указатели — есть. async/await — в разработке, насколько мне известно. Паттерн-матчинг — недавно появился. Динамическая типизация — нет, это базовый параметр языка, да и зачем? По моему, она — лишний повод стрелять себе в ногу, но это уже религия и дело вкуса. List comprehensions — нет, но их аналоги легко реализуются на LINQ, с похожей логикой мысли. Зачем два раза одно и то же писать, если оно уже есть?

Пардон, эти элементы языка (ну, кроме указателей) далеко за пределами уровня школьника или студента 1-2 курса (вспоминаем, что я говорил об аудитории).
да и зачем? [...] Зачем два раза одно и то же писать, если оно уже есть?

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


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

Вы говорили, что задача PascalABC.net — "обеспечить плавный и легкий переход на практически любой язык, любую среду программирования". Одно другому противоречит.

1) Речь об аналогах и ассоциациях, которые в голове появляются автоматически. Эта функция исполняется. Тащить все подряд в язык — годный способ испортить все, что можно.
2) Нет, не противоречит. Когда человек приходит с PABC.NET на C#, он знает о большей части средств — ООП, LINQ, базовая работа со стандартными классами, и т.д. Для чего нужен async/await, на первом-втором курсе вообще, я считаю, рановато рассказывать. Противоречия нет в том смысле, что то, что изучили с использованием PABC.NET транслируется на все остальное. То, что чего-то не рассказали — не смертный приговор. Именно поэтому тратится еще две недели, на «доковыривание» отдельной функциональности языков, на которые пытаемся переходить :)
Речь об аналогах и ассоциациях, которые в голове появляются автоматически.

А откуда они появляются, если вы async/await не видели никогда?


Когда человек приходит с PABC.NET на C#, он знает о большей части средств — ООП, LINQ, базовая работа со стандартными классами, и т.д.

А когда он приходит на Scala? Или любой другой функциональный язык?


Именно поэтому тратится еще две недели, на «доковыривание» отдельной функциональности языков, на которые пытаемся переходить

… а люди-то месяцами и годами языки учат.

А откуда они появляются, если вы async/await не видели никогда?

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

Ну то есть Паскаль в любой его форме тут ни при чем. QED.

Для того, чтобы был смысл лезть на StackOverflow, нужна какая-то база в голове. Когда ее нет, ни он не поможет, ни Таненбаум, ни Страуструп. Паскаль позволяет ее сформировать.
Паскаль позволяет ее сформировать.

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


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

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

А вот это уже чистой воды демагогия. Предлагаю завершить дискуссию.

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

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

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

А когда он приходит на Scala? Или любой другой функциональный язык?


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

… а люди-то месяцами и годами языки учат.

Суть — довести до состояния, когда человек может сам продолжить что-то изучать, без указки, мела, и преподавателя. Эта цель выполняется на 100%.
Я извиняюсь, может, еще и логическую парадигму в один язык напихаем?

Ну то есть "плавный и легкий переход на практически любой язык" тоже не выполнено. Ок.


Суть — довести до состояния, когда человек может сам продолжить что-то изучать, без указки, мела, и преподавателя. Эта цель выполняется на 100%.

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

практически

Я тут не говорил «любой», я сказал «практически любой». Brainfuck, Prolog, Haskell, J, и прочие не в счет.

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

Ну, да. Если не учитывать то, что почти для любого языка (может, кроме Питона) придется делать горы ссылок на будущее вроде «пишите пока так, потом расскажем», которые зачастую убивают любое желание что-то делать.
Я тут не говорил «любой», я сказал «практически любой». Brainfuck, Prolog, Haskell, J, и прочие не в счет.

А, в значении "любой похожий на PascalABC.net". Спасибо, мне это не нужно.


Если не учитывать то, что почти для любого языка (может, кроме Питона) придется делать горы ссылок на будущее вроде «пишите пока так, потом расскажем», которые зачастую убивают любое желание что-то делать.

Странно, и как я без этого обходился, когда изучал C#?

А, в значении «любой похожий на PascalABC.net».

ООП, статическая строгая типизация, элементы ФП, императивная парадигма. «Любой похожий», ага. Только таких (за исключением типизации) — большинство. Да, я знаю, что и вакансию Haskell найти реально при желании — но эта ситуация скорее исключение, чем правило.

Странно, и как я без этого обходился, когда изучал C#?

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

using System;
using System.Collections.Generic;

namespace Crap
{
	class SomeClass
	{
		public static void Main(<kokoko>)
		{
			System.Console.WriteLine("Hello, World!");
		}
	}
}

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

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

Ну вот дженерики еще, ага.


Ну, имея бэкграунд уровня «поработал программистом N лет» позволяет без этого обходиться.

… а как я изучал те языки, на которых я работал до C#? А так же.


И тут код вроде

Вы про C# interactive не слышали, да?

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

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

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

Я лично вообще сомневаюсь в полезности лекций по оформлению решений и по синтаксису языка. Для этого есть практические занятия и методички. Я ведь недавно дописал под 2013, а актуальная версия уже 2017 и VS:Code появился.
В формате лекции было бы полезнее дать идею "зачем" и "где применяется", "какие проблемы бывают", связать с другими предметами (вроде ОС или сетей или дискретной математики) и т.п. Правда я в этом смысле не настоящий сварщик. У меня курсы без выделенных часов на лекции и все это приходится на практике рассказывать.

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

Я тут не говорил «любой», я сказал «практически любой». Brainfuck, Prolog, Haskell, J, и прочие не в счет.
Ага, ещё C++ отметается (там метапрограммирование есть всякое) и Python с PHP (совсем другая парадигма где мы имеем «два» уровня и часто бывает полезно не писать «эффективный» велосипед, а вызвать «не слишком подходящий» примитив, так как он за счёт того, что написан на C, работает в 10 раз быстрее).

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

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


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

Побойтесь высших сил, метапрограммирование школярам читать :-)
А почему нет? Тот же самый LINQ, который вроде как PascalABC есть — это метапрограммирование в чистом виде.

Беда метапрограммирования не в том, что это сложная и заумная концепция, а в том, что в соременных мейстриймовых языках — оно плохо реализовано.

Не могу сказать, проще, или нет. Но эффект я видел лично. Это реально работает.
А вы уверены, что в этом заслуга именно PascalABC и что выпускники MIT'а (недавно переключившиеся со Scheme на Python) имеют с этим большие трудности? Или, может быть, вопрос в правильном построении курса программирования?
Простите, но с каких пор LINQ является метапрограммированием?
В том месте, где парсится Expression Tree и по коду на C# порождается совсем другой код на C#.

Что, собственно, метапрограммирование заметно более высокого порядка, чем возможно в C++.

Уверен на 99.9%, впрочем, что в PascalABC.Net ничего этого нету, полноценных механизмов, поверх которых построен LINQ не предусмотрено, а есть набор костыликов, который позволяет делать вид, что что-то такое у нас типа как вроде есть… но вот конкретно здесь, конкретно сейчас, а «шаг влево, шаг вправо — расстрел».

Впрочем Pascal'ю не привыкать: write(x:10:3) — вроде как и функция (во всяком случае так заявляет руководство), а на самом деле нет — хитрая конструкция, подобную которой самому сделать нельзя.
Уверен на 99.9%, впрочем, что в PascalABC.Net ничего этого нету, полноценных механизмов, поверх которых построен LINQ не предусмотрено, а есть набор костыликов, который позволяет делать вид, что что-то такое у нас типа как вроде есть… но вот конкретно здесь, конкретно сейчас, а «шаг влево, шаг вправо — расстрел».

Ну а почему, кстати? Если там компилятор умеет порождать expression tree (что, все-таки, разумной сложности задача), то дальше это уже сваливается в стандартную имплементацию в .net.

Если там компилятор умеет порождать expression tree (что, все-таки, разумной сложности задача), то дальше это уже сваливается в стандартную имплементацию в .net.
По моему вы сами ответили на этот вопрос. Гораздо проще для реализаторов «увидев» нужные зацепки вызвать стандартную реализацию, чем предоставлять полноценные средства работы с Expression Tree…

Что такое "полноценные средства работы с Expression Tree" и почему стандартная реализация неполноценна?

Другой код на C# никто не порождает, максимум — байт-код материализатора.


В любом случае, использование LINQ метапрограммированием не является, а реализацию Queryable провайдера никто в школе делать не будет.

Другой код на C# никто не порождает, максимум — байт-код материализатора.
Это уже расщепление волос.

LINQ — это просто пример метапрограммирования, куда более приближенный к тому метапрограммированию, которое появилось в 60е в Lisp'е и в 70е в Forth'е, чем то, что творится в C++.

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

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

а реализацию Queryable провайдера никто в школе делать не будет.
А вот это как раз скорее показатель того, что даже и в C# всё весьма и весьма переусложнено… это вам не Lisp и не Forth…

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

write(x:10:3) — вроде как и функция (во всяком случае так заявляет руководство), а на самом деле нет — хитрая конструкция, подобную которой самому сделать нельзя.
В том-то и дело, что это не «настоящая» функция процедура (руководства под рукой нет, чтобы процитировать), а специальная языковая конструкция (ну или оператор, если хотите). Обычных функций и процедур с переменным числом аргументов в паскале нет (хотя бы из-за порядка складывания оных в стек). Видимо, поэтому же для строк стандарт ISO Extended Pascal специально определяет WriteStr().
В том-то и дело, что это не «настоящая» функция процедура (руководства под рукой нет, чтобы процитировать), а специальная языковая конструкция (ну или оператор, если хотите).
В том-то и дело, что стандарт это называет File handling procedures.

Обычных функций и процедур с переменным числом аргументов в паскале нет (хотя бы из-за порядка складывания оных в стек).
Угу. Поэтому в том же стандарте, отдельно, есть ещё и разделы The procedure read и The procedure write (и такие же для readln и writeln). Так, без задней мысли: вот да, у нас есть «нормальные» процедуры… а есть The procedure read и The procedure write… у которых особенный, отдельный, синтаксис…

P.S. Про то, что read и write это не функции, а процедуры и стандарт их чётко отличает… каюсь, забыл…
Ну вот я знаю нескольких человек, которые ещё в 90-е послали нафиг Паскаль по нескольким причинам, одной из которых было, что не хотели себя чувствовать быками по сравнению с Юпитером: ему позволено создавать отдельный синтаксис для особых случаев, а им — нет.
Да, много нас таких было (которые послали нафиг; я на лабах, помнится, так и заявил преподавателю, что буду писать и сдавать всё на сях). Тогда мы еще не понимали, чем же паскаль всё-таки хорош (более-менее понимали лишь чем он плох).
я знаю нескольких человек, которые ещё в 90-е послали нафиг Паскаль

А я вот в 90-е с C++ перешёл на Delphi, потому что написание под Windows на C++ было ещё тем песцом, а Delphi позволил это сделать легко легко и быстро.
Я думал в школах до сих пор учат на turbo pascal 7 с синим фоном :)
Скрин
image

Честное слово — это было бы полезнее. По крайней мере тем, что не возникает иллюзий на тему того, что на этом можно что-то «реальное» писать.

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

Дополним это учителями, которые на вопрос "а где же можно что-то "реальное" писать?" ответить не могут...

Вот чего-чего, а стилей, дизайнов и прозрачностей чем меньше — тем лучше.
вырвиглазный синий экран
Да господь с вами, этот классический борландовский интерфейс — едва ли не лучший из текстовых UI, он и по сей день отлично выглядит (и по цветам, и по общей организации).
Ага! В ту эпоху он был самый лучший!
danfe Позвольте уточнить: на этом [нельзя] что-то «реальное» писать — это вы про паскаль вообще (в широком смысле) или именно про TP7?

Turbo-Pascal был обрезанной версией для бедных, и писать было лучше на полноценном Borland Pascal.
Наминусовали, молодцы. Только сути не замечаете. Школьника надо заинтересовать. Студента — немного меньше, но тоже. Средства, которые предоставляют TP/BP (в том числе, средства отображения), не позволяют это сделать.

PABC.NET: Школьник вернется домой с урока, сядет к себе за компьютер, напишет очередной «калькулятор», или прыгающий спрайт, и пойдет друзьям показывать. И в этот момент выберет свою будущую профессию, поскольку ему это понравилось. Максимальный эффект за минимум усилий.

TP/BP: Чтобы школьник что-то там нарисовал, ему нужно сначала рассказать, в какой кусок системной памяти и по какому адресу заливать байтики изображения. И как их получить. Рассказать, какие прерывания включают графический режим. Выдать ему dosbox. Немного не та история, да? А программу, которую он напишет, потратив сотни, тысячи часов войны с указателями и попытками вычитать картинку из файла, потом еще и не показать никому. Результат?

По поводу стилей и прочего — извините, пжлст, но тому же школьнику «яркое» и «современное» будет смотреться лучше, чем среда уровня «кассовый аппарат в Магните с кучей горячих клавиш». Все то, что там народ пишет — сугубо из ностальгических соображений аля «ну, нам же было норм». Простите, времена поменялись.
TP/BP: Чтобы школьник что-то там нарисовал, ему нужно сначала рассказать, в какой кусок системной памяти и по какому адресу заливать байтики изображения. И как их получить. Рассказать, какие прерывания включают графический режим.

Какие-то устаревшие у вас представления о BP седьмой версии…

Не уверен насчет BP, но вот хорошая ссылка для TP, которая ярко показывает «возможности»…

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

Но лично я помню что в BP существовал еще и системный модуль Graph, который даже скачивать не требовалось.
Школьник вернется домой с урока, сядет к себе за компьютер, напишет очередной «калькулятор», или прыгающий спрайт, и пойдет друзьям показывать. И в этот момент выберет свою будущую профессию, поскольку ему это понравилось.

… и друзья школьника, посмотрев на калькулятор и спрайтики, покажут школьнику свой крутой смартфон с гоночками и стрелялками или что позабористее из Steam, и скажут — «а так можешь?» и школьник отойдет в печали подумав — «и правда, не могу...», а потом, когда школьник узнает, что большие дяди для рисования прыгающих спрайтов используют всякие нипанятные штуки типа OpenGL и DirectX, он может начать сильно возмущаться — почему его любимую песочницу, в которой он так легко клепал учебные поделия, совершенно не используют в продакшене, ему же, оказывается, придётся учить всякие ужасные классы и указатели, а потом и решит — ну его нафиг, это программирование. Или выберет путь копипастера со stack Overflow и GitHub — а что, рефераты с курсовыми сдавать стало проще. И пойдёт пацан к успеху.

Я скорей поверю, что школьник нагуглит не DirectX и OpenGL, а Unity или CryEngine, на которых можно за недельку по видеоурокам сделать простейшую стрелялку. Время указателей еще придет. Но позже.

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

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

По крайней мере тем, что не возникает иллюзий на тему того, что на этом можно что-то «реальное» писать.
Позвольте уточнить: на этом [нельзя] что-то «реальное» писать — это вы про паскаль вообще (в широком смысле) или именно про TP7?
Возможно автор комментария не в курсе сколько всего «реального» было на TP написано, и продолжает использоваться в некоторых местах.
Я про TP7, разумеется. И нет, я как раз в курсе, сколько всего было написано… Самый древний рарит, который я видел — это жутчайшая система анализа «чёрных ящиков» (те, которые на само деле оранжевые) даже на TP7, а на, прости господи, Turbo Pascal 3.0. Несколько тысяч .CHN файлов! Как это всё писалось и что случилось за долгие годы с авторами — можно только догадываться.

Но в современном мире TP (да и BP7 тоже), увы, годится только для обучения. Хотя бы потому что созданные им бинарники на современных 64-битных операционках (хотя на десктопе, хоть на телефоне) запускаются только под эмулятором…

С тем же успехом можно какой-нибудь CodeWarrior куда-нибудь пытаться прикрутить… А тоже ведь крутая штука в своё время была…
PascalABC.Net единственно вменяемое, что разрабатывается в России для школьников, для обучения. Разработчики позиционируют свой язык именно для обучения. Коллектив небольшой и заслуживает всяческих похвал и благодарности за свою работу, сравнения с MS просто смешные.

Articles