Введение
Времена старого и доброго Pascal закончились. Пришло время новых сред разработки под этот язык. Появилось множество диалектов этого языка. Хотя все они имели что-нибудь общее. Сегодня поговорим о диалекте PascalABC.Net и о том почему же стоит от него отказаться, если Вы всерьез хотите заняться программированием и считаете, что это Ваше будущее.
Первый взгляд
Представьте, что Вы новичок. Даже если это не так. Вообразите, что Вы первый раз пришли в мир программирования и первое что Вам дают изучить — язык Pascal. И говорят, конечно же, писать именно в среде PascalABC.Net. Хорошо, Вы садитесь и начинаете потихоньку изучать сам язык. Ваш скил поднимается и Вам все больше хочется узнать чего-то нового. И вот Вы уже не тот новичок каким были в начале, а человек со средним уровнем знаний программирования. И начиная именно с этого момента — Вы начинаете ощущать некоторый дискомфорт при работе в PascalABC.Net. И чем дальше продвигается изучение языка, и платформы .Net, тем сильнее Вы чувствуйте, что писать то становится не очень удобно. Вы начинаете замечать некоторую нестабильность самой IDE. К слову, Вы уже, наверняка, столкнулись с проблемой при нажатии Ctrl+Z — вылетании ошибки в самой PascalABC.Net при попытке отмены какого-нибудь действия, после чего о редактировании кода и не могло быть и речи. Это только одна проблема из
А что же дальше?
А дальше начинается самое интересное. Вы использовали когда-нибудь при работе обобщения? Если нет, то это стоит сделать, так как именно здесь Вы встретите много подводных камней, и, наверняка, это перевернет Ваше положительное мнение о PascalABC.Net на противоположное. Для примера:
type
ft = () -> integer;
begin
var f: ft := () -> 0;
var a := Arr(0).Select&<integer, ft>(i -> f);
end.
Есть у нас тип функции ft, есть массив (из одного элемента — нуля). Здесь мы вызываем Select для преобразования каждого элемента массива в функцию. Однако, при наведении на a анализатор кода вместо того, чтобы показывать sequence of ft, показывает sequence of integer. А при наведении на Select вместо того, чтобы показывать ft показывает нам загадочное TResult (которое ни о чём не говорит). И это в самой последней версии этой IDE. Почему? Дальше поймете по чему.
Не используйте обобщения
Да, именно так звучит этот заголовок. Не думайте, что я шучу. Я на полном серьезе. Если хотите использовать их — идите и пишите на C#, поскольку в PascalABC.Net они реализованы лишь для галочки (слишком некачественно). К примеру, есть у нас обобщенный тип (автокласс) TA, имеющий один шаблонный параметр T. От него наследуется другой класс — TB, добавляя еще один шаблонный параметр-тип T2.
type
TA<T> = auto class
X: T;
end;
TB<T, T2> = class(TA<T>)
Y: T2;
constructor Create(x: T; y: T2) := (self.X, self.Y) := (x, y);
end;
begin
end.
И всего то. Но компиляцию это не проходит. Компилятор вылетает с ужасающей ошибкой:
Internal compiler error in module [pabcnetc.exe] :'System.Exception: System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.Нормально? Не думаю. А вот и ссылка на этот Issue. Сразу можно сделать два вывода: не надо использовать автоклассы в этом компиляторе с обобщениями.
в PascalABCCompiler.NETGenerator.ILConverter.ConvertCommonGenericInstanceTypeMembers(ICommonGenericTypeInstance value)
в PascalABCCompiler.NETGenerator.ILConverter.ConvertFromTree(IProgramNode p, String TargetFileName, String SourceFileName, CompilerOptions options, String[] ResourceFiles)
в PascalABCCompiler.Compiler.Compile()'
Не используйте форматирование
Звучит забавно, но как можно не пользоваться форматированием кода при написании программ? И почему нет? Да, пожалуй звучит так, но помните, что мы пишем именно в PascalABC.Net. И сразу пример почему нет:
type
TA = class
property Prop1: real read 0 write begin end;
end;
begin end.
А теперь нажмите Ctrl+Shift+F (форматировать код) и на выходе будет красоваться это:
type
TA = class
property Prop1: real read function#GetGen2(real read 00write
procedure#SetGen1(valuereal read 0 write begin endbegin endproperty
Prop1: real read#GetGen2 0 write#SetGen1;
end;
TA = class
property Prop1: real read 0 write begin end;
end;
begin end.
А теперь представьте, что этот проект — что то важное для Вас и Вы пользовались этими расширенными свойствами не один раз. А потом взяли все и отформатировали. Учтите, что не стоит забывать об ошибке с Ctrl+Z, поэтому может получиться так, что отменить Вы это уже не сможете.
Не самое лучшее отношение разработчиков к пользователям и их просьбам
Да-да, именно так. Вы когда нибудь общались с ними на форуме? Если нет, то попробовать стоит, зрелище это не из веселых. Например, сколько я не просил исправить баг с Ctrl+Z, ничего от этого не изменилось — было либо полное игнорирование, либо что-то наподобие:
Мы не можем это сделать. Это слишком трудно.Я не цитировал. Но общий смысл таков, что делать им это лень. Извините меня, но вы же сами захотели эту среду сделать (хотя это не ваша основная работа), так будьте добры делать ее качественно. Такое отношение не только убивает желание помогать разработчикам исправлять баги в среде, но и писать вообще в ней.
А куда идти, если все так плохо?
Буду краток — на C#, ребята из Microsoft постарались и сделали язык намного качественнее, чем разработчики PascalABC.Net свой.
Заключение
Да, я осветил лишь малость тех проблем, которые есть в этой среде, но помните, что хоть PascalABC.Net и тянется к C# она никогда им не станет — проще будет написать среду заново, чем исправлять уже существующую (чего не хотят делать разработчики, хотя это их вина, что IDE в таком состоянии).
P.S. А вот и пример бага, который проявляется при написании простейших программ. И вот еще (с массивами).
ru_vlad
Чует мое сердце ой сейчас и будет…
И так первое, PascalABC.Net это среда для НОВИЧКОВ, для детей, для тех кто только открывает дверь в мир программирования. То что вы перечислили да это есть, НО это уже совсем другой уровень. Паскаль как учебный язык по моему мнению считается на более лучшим. Да, сейчас прибегут "профи" и будут кричать что он умер и "наше все" Питон или С.
Но как учитель еще раз говорю, для понимания алгоритмов и начало программирования Паскаль самое то. Вирт не зря сделал его близким к человеческой логике.
На счет PascalABC.Net что Вы можете предложить в его замену?
DASM
TB<T, T2> = class(TA) — это для начинающих? Боюсь представить себе с чем работают кончающие
ru_vlad
DASM данное не ко мне, а к Volobuev_Ilya
я как раз и писал что данные примеры ошибок это не для новичков, когда подобное они узнают уже будут в другой среде кодить
lair
… а чем конкретно Паскаль "ближе к человеческой логике", чем тот же Питон? (я уж молчу про бесценность REPL и интерактивных ноутбуков вроде Jupyter, а есть ли что-то аналогичное для Паскаля?)
ru_vlad
lair ну хотя бы тем что приближен к человеческому языку if (если) then(тогда) else (иначе) не говоря уж о begin и end. Циклы тоже сделаны так как они должны быть While Пока until До for Для
Все же английский дети раньше начинают изучать чем программирование.
Для понимания основных начальных алгоритмических структур он ближе.
И опять все забывают что школа не готовит программистов, ее задача в другом, показать что данное существует.
akryukov
Считаю что тезис "Паскаль ближе к человеческому языку" неактуален. Новички в программировании обычно еще и новички в английском языке. С точки зрения "человеческого смысла" для них нет существенной разницы между
if a < b then work() else smoke() end
и
asdf a < b lkjh work() zxcv smoke() poiu
.В условиях РФ все языки программирования равноудалены по "человеческому смыслу" операторов.
ru_vlad
английский изучают с 4 класса (а некоторые и с началки), а Информатику с разделом программирование с 7 класса.
lair
Это как раз попадает под категорию "новички в английском языке" (если это не спецшкола, конечно).
BTW, у меня английский был с седьмого.
ru_vlad
как новички уже простые слова Начало Begin, конец end, И And, ИЛИ Or к этому моменту уже знают.
lair
Знают, однако требования к синтаксической строгости у них невысокие.
akryukov
Наверняка школьники изучают базовую грамматику и какие-то бытовые шаблоны фраз. Сомневаюсь, что conditional statements входят в программу для школьников до 7 класса.
Simplifier
Согласен. Если слова if, end еще знают, то всякие else, until вряд ли. К тому же Паскаль очень многословный, а дети медленно печатают
JobberNet
Эти все слова -легко посмотреть в словаре, прямо на мобильнике.
lair
Питон:
Вы правда считаете, что замена
:
наthen
что-то изменит в читаемости?А что
begin
иend
?Что значит "так как они должны быть"? В Питоне совершенно нормальный
while
, и семантически корректныйfor
(for word in words:
).Я вот не вижу отличия на приведенных вами примерах.
И еще раз повторюсь, я считаю, что REPL и интерактивность намного важнее, чем (мифическая) близость к человеческому языку. В Jupyter можно вообще оформлять домашние работы с последовательным описанием и графиками, это будет развивать много полезных навыков.
ru_vlad
Да, считаю.
И данное проверено многолетней практикой.
а то что ДЕТИ видят где начало, а где конец
и будь то начало программы или программного блока.
нормальный говорите, вспомните как цикл ДО в Питоне
не говоря уже про for
я еще и еще раз говорю ВЫ уже профессионалы и вам подобные конструкции обыденность, а ребенку надо обычными словами объяснить что бы ОН понял в чем различие циклов и как они работают.
lair
Вы можете дать ссылки на исследования?
Предположим, это действительно играет роль. Одно отличие.
А зачем он нужен?
for w in words
, говорю же. Прекрасная вещь.А зачем? Если задача — как вы утверждаете — "показать что данное существует", то нет никакой необходимости разбираться в видах циклов, достаточно
while
иfor (each in)
.Ну и да, вы последовательно игнорируете пункт про интерактивность (которая позволяет быстро и дешево пробовать все самому, в том числе и виды циклов).
ru_vlad
25 лет педработы устроит?
Сразу скажу десятки бывших учеников кто работает начиная от Яндекса и кончая Googla претензий что начинали на Паскаль не предъявляли.
lair
Нет, конечно. Может быть, на наблюдаемой области просто преподаватели лучше умели преподавать Паскаль, нежели Питон.
Я тоже никому не предъявлял претензий за Basic (кажется, Q) и Fortran. Но это не значит, что я считаю их подходящими.
ru_vlad
Милости просим, придите и покажите как надо учить на Питоне чтобы все и все поняли :)
Очень хорошо рассуждать по прошествии опыта и лет.
Ну вы это еще не весь мир ;) я регулярно спрашиваю что можно изменить в учебном процессе, и почти все говорили что лучше начинать с того что было (Паскаль).
lair
Я вроде нигде не говорил, что я умею учить на Питоне. Я говорил, что сам по себе опыт преподавания, извините за прямоту, еще ничего не доказывает. Доказывают исследования.
(я просто учился у людей с самым разным по продолжительности опытом преподавания, и по моим наблюдениям эта самая продолжительность никак не коррелировала с качеством даваемых знаний и навыков)
Ну вот если бы кто-то спросил у меня, я бы рекомендовал Питон.
ru_vlad
Да, но в говорите что :
так вот раз вы утверждаете что Питон лучше для преподавания, а
учителя не могут его объяснить, придите и покажите как надо :)
Извиняю :)
На счет Доказывают исследования. как раз они ни чего не доказывают. Где то видел очень неплохое исследование что лучшей способ переноски воды, решето. :)
lair
Этого я тоже не утверждаю. Пока что я всего лишь говорю, что не вижу подкрепленных исследованиями аргументов, что Паскаль лучше для преподавания, чем Питон. Типичный пример неотвергнутой нулевой гипотезы.
Вот так взяли и опровергли все статистические методы оптом (ну и вообще чуть ли не все современное экспериментальное знание).
ElectroGuard
habr.com/post/417143
ru_vlad
Ну во первых учебную программу не кто не отменял, а там есть пункт про различия циклов. Второе, если человек который хочет стать программистом не понимает отличия цикла Пока от До, то это грустно.
Не игнорирую, тогда уж лучше Scratch, НО если начитать с более младшего возраста.
lair
Так может в учебной программе проблема?
Если он хочет стать программистом, он прекрасно сможет понять это различие в тот момент, когда оно первый раз попадется ему в книге.
Давно на Scratch можно делать ноутбуки?
ru_vlad
Этот вопрос не ко мне. Я бы вообще убрал бы Информатику из обязательных предметом.
Вы не поверите, но я видел уже "дипломированных" которые не понимали различия.
а в этом какой смысл? тем более для простого ребенка ;)
lair
Да почему, вполне к вам, это же вы предлагаете Паскаль, а потом защищаете его учебной программой (которая, вполне вероятно, под Паскаль и писалась).
Поверю. Я вам больше того скажу, я вот различие понимаю, но я попробовал и так и не смог вспомнить ни одного случая за 20 лет своего опыта, когда я использовал бы цикл
until
. Этому немало способствует то, что почти 15 лет из этих 20 я пишу на языке, в котором такого цикла нет.Большой. Ноутбук (в смысле Jupyter Notebook) — это прекрасный способ оформить работу с данными и графиками, а это требуется в намного более широкой области деятельности, нежели только программирование. Получаем три-в-одном: программирование, форматирование, и, что самое важное, развиваем навык связного изложения мыслей. Я вот где-то в районе 6-8 класса защищал бизнес-план на экономике, и мне бы там это сильно пригодилось.
Недавно кто-то (я подозреваю, что Paige Bailey, но не могу найти цитату) шутил, что Jupyter Notebook — это новый стандарт для любой научной работы, включающей статистику.
GeekberryFinn
lair
Я совершенно не спорю, что это зависит от задач, но вот в моем личном опыте получилось вот так.
GeekberryFinn
А я вот ни разу elsif не использовал…
mayorovp
until-подобные циклы часто применяются при использовании атомарных операций или оптимистических блокировок
longclaps
Паскалевский until — вполне удобная конструкция, но совершенно не вписывается в питоновский синтаксис «на отступах».
Интересно, что Ruby, язык чуть более близкий к паскалю, чем python, и достаточно успешный, в качестве альтернативы вообще не рассматривается.
GeekberryFinn
Почему не вписывается?
longclaps
Потому что «на отступах». Попробуйте написать аналогичный этому фрагмент в паскаль-стиле, где внутренности цикла обрамлены сверху repeat и снизу until i<10 соответственно
GeekberryFinn
Так что причина не в этом, а в том что судя по всему за основу брался C-синтаксис, в котором слова until просто нет. Но зато есть do… while.
longclaps
В питоне, слава богу, нет do )
Компактность набора ключевых слов — одно из достоинств этого языка.
netch80
> Я вам больше того скажу, я вот различие понимаю, но я попробовал и так и не смог вспомнить ни одного случая за 20 лет своего опыта, когда я использовал бы цикл until.
Ну реально раз в год приходится писать цикл с проверкой в конце, то есть в котором надо безусловно войти в первую итерацию.
За счёт того, что обычно это C/аналог, он оказывается do — while. Разница с repeat — until только в направлении условия.
> Недавно кто-то (я подозреваю, что Paige Bailey, но не могу найти цитату) шутил, что Jupyter Notebook — это новый стандарт для любой научной работы, включающей статистику.
Я бы даже сказал, что это правда в виде шутки :)
ElectroGuard
Ноутбук для реального программирования не очень удобен, увы. Так — наброски сделать — да. Отчет, еще какую-то визуализацию. Реальное же приложение если и получится, то с трудом. Плохо, что в самом питоне нет среды подобной Delphi. Ноутбук мне понравился за неимением среды. Но имея полноценную среду, я бы никогда её на ноутбук не поменял.
Ни разу не видел реальных программ или сайтов, подобным ноутбуку. Даже не представляю, где он может пригодится кроме как недо-среды для питона.
netch80
Наш отдел аналитики прямо из jupyter запускал сложные обсчёты на машине с GPU?шками.
Видно, им никто почему-то не запрещал это делать :)
А «реальное приложение» делается из него просто копированием кода в отдельный файл и установкой нескольких параметров. Хотя, думаю, уже сделали переходник для прямого запуска в формате файла сохранения jupyter (всех проблем — вытащить пачку элементов из json и напустить на них eval).
Error1024
Видимо я что-то делал не так, но у меня ощущения от jupiter остались, как от чего-то глючного и тормозного.
lair
Я неоднократно видел хуки, которые генерят .py-файл из ноутбука либо на сохранении, либо на коммите.
lair
А кто-то предлагал делать на Jupyter "реальные приложения"? Он немного не для этого предназначен.
Вы, видимо, не занимаетесь исследованием данных, статистикой и машинным обучением.
ElectroGuard
Занимаюсь, в том числе. Исследования — исследованиями, но результаты в ноутбуке не отдать никому, увы. Посмотреть/показать — максимум. Как приложение не получится оформить.
lair
Результат исследований? Почему? Ну сохраните его в HTML.
ElectroGuard
Не результаты исследований, а применение результатов в реальном приложении. Результаты интересны в лучшем случае разработчикам, да и то если они действительно есть.
lair
Вам не приходило в голову, что результатами исследований могут быть данные, графики и документы, и ни в какое последующее "реальное приложение" они не пойдут?
ElectroGuard
Так в чем же бесценность именно Юпитера? Таких бесценных программ в своих отраслях — вагон и тележка. В той же химии, математике, сопромате, черчении. И Юпитер — да, хорошая оболочка в своей, весьма частной области, не более того.
lair
В простоте и распространенности. Идешь ты в AWS SageMaker — а там те же ноутбуки. Идешь ты в Azure — а там снова ноутбуки.
ElectroGuard
Ок, для своей, довольно ограниченной области они полезны и распространены. Главное — не стоит обобщать.
lair
На всякий случай напомню, что обсуждаемый комментарий относится к "довольно ограниченной области" преподавания информатики.
ElectroGuard
Ответил внизу.
ElectroGuard
Просто не стоит Юпитер преподносить как образец универсальной среды программирования. В одной, крайне ограниченной области, он полезен, не более того.
lair
А кто-то это делал? Я, вроде бы, упоминал его как средство работы с данными.
ElectroGuard
Ну вы же писали:
Таким образом пытаясь противопоставить Питон/Юпитер Паскалю/ABC.
lair
Я противопоставлял питон паскалю. А REPL и ноутбуки — приятное дополнение.
ElectroGuard
То есть — пытались втянуть ноутбуки в область сред для универсальных языков. Но они там выглядят весьма блекло.
lair
Повторяю: "приятное дополнение".
akryukov
Учебную программу вы пишите сами. Разве нет? Это ведь не учебный план, который вам "спускают сверху".
Я в целом согласен, что студентам нужно иметь представление, что циклы бывают разные, но уж точно не из за того, что "надо по программе".
ru_vlad
Школьная "жесткая", конечно можно кое что поменять, но не в больших объемах. Даже прокуратура следит что бы было в соответствии с учебниками и прочим.
akryukov
Справедливости ради замечу, что "потерять скобочку" (в языках со скобочками) — одна из самых популярных проблем у начинающих. Учитывая это, потерять
then
иend
немного сложнее. В питоне подобных скобочек нет, и я сомневаюсь, что отличать "действие, которое будет повторяться" от "действия, которое выполнится после цикла" только по отступу будет сильно проще.В конце концов IDE может сама расставить отступы, ориентируясь на скобки. В питоне же так не получится, потому что отступы значимы и нужно понимать смысл программы.
lair
Это сложный вопрос, для ответа на который нужно исследование. Лично я отступы воспринимаю лучше, чем текст, а если я уже ориентируюсь на отступы, то текст становится избыточным.
GeekberryFinn
Тут, даже, лучше не просто if, а end if, end case, end for и тому подобное.
Потому что несколько end не намного лучше, чем несколько } — то есть оставляет возможность запутаться.
netch80
А тут уже надо иметь поддержку от редактора, как, например, '%" в vim, для перехода на парную скобку.
end if само по себе не помогает, если этих if было три вложенных.
akryukov
Студенты и обычные горячие клавиши со скрипом изучают, что уж говорить о таких специализированных.
Получается, что использование горячих клавиш — навык опытного пользователя с развитой моторикой рук.
netch80
> И данное проверено многолетней практикой.
То есть ваша практика сравнивает именно форматы записи Паскаля и Питона? Или как?
Моя практика показывает, что одна из основных граблей для начинающих, которую приходится преодолевать именно форсированием дисциплины написания — это то, что забывают, что вокруг нескольких операторов под условием надо ставить скобки вида 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 — нет, сбивает ещё раз. И только после пятого «дети, это невозможно понять, это надо только запомнить!» получается устойчиво пробиться через эту несогласованность.
akryukov
Любопытно. Я своим великовозрастным студентам вообще не рассказываю, что (в java, c#, js) они опциональны. Как следствие — все всегда ставят. Если кто-то сам об этом узнал, то из подобных проблем человек уже вырос.
Казалось бы "потому что компьютер не понимает такую фразу". Проблема актуальна не так уж долго, чтобы приходилось "зубрить".
Это где так? Условие в цикле и в
while() {}
и вdo{}while();
описывает условие продолжения.Я сейчас на всякий случай даже проверил.
Вывод
netch80
> Любопытно. Я своим великовозрастным студентам вообще не рассказываю, что (в java, c#, js) они опциональны. Как следствие — все всегда ставят. Если кто-то сам об этом узнал, то из подобных проблем человек уже вырос.
Ну а мне приходилось «лечить» после школьного обучения, где скобки begin-end не ставили и не говорили, что они нужны.
> Это где так? Условие в цикле и в while() {} и в do{}while(); описывает условие продолжения.
В Паскале, очевидно. Я говорил как раз про него и его недостатки.
ElectroGuard
Блок Repeat'а заканчивается until'ом. Парной конструкции для while, увы, не существует. Поэтому добавляют обычные программные скобки. Что тут запоминать? For, к слову, также организован.
netch80
А в C — не так: что while, что do-while требуют один оператор или блок.
А в Perl — while и until взаимозаменяемы как в цикле с предусловием, так и в цикле с постусловием.
И оба их варианта именно в этом смысле логичнее (особенно перловый).
GeekberryFinn
Volobuev_Ilya Автор
Ближе тем, что он более лаконичен. И позволяет проще описывать свои «хотелки». Python — язык отличный. Я на нем сам пишу.
lair
А можно, пожалуйста, конкретные примеры?
Volobuev_Ilya Автор
Ну, например, проще гораздо пишутся структуры данных. Например, стек. Банальщина, но все же. И человек меньше отвлекается на всякие детали синтаксиса. Код намного проще выглядит в Python, чем в том же C#. Что для обучения играет положительную роль.
lair
А можно, пожалуйста, конкретные примеры?
Volobuev_Ilya Автор
Отвлеченный пример. Только что сочинил. Вот простой до безобразия класс:
а на C#:
Но суть в том, что даже здесь код на Python проще.
lair
Эм, а ничего, что я спрашивал, чем Паскаль проще, чем Питон, а не чем Питон проще, чем C#?
(на этом фоне обсуждать ваш пример не буду, хотя у меня есть много грубого что сказать по этому поводу)
Volobuev_Ilya Автор
Извиняюсь, невнимательно прочитал.
Nagg
А в чем простота кода питона по сравнению с C# тут? Как по мне, так код на сишарпе лучше читаем — Класс, с двумя полями, вот тут инициализация. Меньше строк далеко не всегда лучше. Хотя сравнивать языки с разной типизацией само по себе глупое занятие
ElectroGuard
Особенно с учетом того, что в Delphi эта вся обвязка прописывается автоматом 1-2 нажатиями кнопок. Думаю, что в Шарпе не сложнее.
Error1024
Нет, не проще, да короче, но не проще, магическое __init__ уж точно не упрощает код.
ElectroGuard
Ага, особенно __init__ сильно улучшил читаемость :)
netch80
IMHO — улучшил. Потому что универсальное имя для конструктора на все случаи. В коде же на каком-нибудь C++ иногда, пока дойдёшь до конструктора, забываешь, как класс звался, и чем является функция с данным именем.
Error1024
В какой-то мере согласен, просто имя, такое же как у класса, тоже не супер.
Благо в Delphi/ObjectPascal так старательно слитым автором поста все максимально логично: конструктор в коде выделен ключевым словом constructor вместо function/procedure.
ElectroGuard
Ну если с плюсами разве что сравнивать :)
JobberNet
А в Delphi объектная модель — та же самая, что и в Borland C++, не совпадая с объектной моделью в Borland Pascal.
ElectroGuard
Не понял суть комментария в обсуждаемой ветке.
retran
А можно пример того как вы на питоне представляете стек?
Честно говоря, сложно представляю себе нормальную реализацию на языке в котором нормальные массивы придется подключать через numpy.
APXEOLOG
Скажу честно, я никогда не изучал питон, хотя программирую больше 10 лет. И каждый раз когда я сталкиваюсь с кодом на питоне, на меня накатывает уныние. По сравнению с большей частью других распространенных языков он не понятен и не интуитивен (это мое мнение)
Что касается Паскаля — чем проще язык и чем меньше в нем вариативности — тем проще его изучить начинающему. Весь синтаксический сахар только отвлекает и мешает разобраться в сути, особенно когда учащийся пытается что-то нагуглить в интернете и находит 10 разных (даже если на вид) решений, или ему рассказывают о 5 способах записать одно и то же (а уж если у них еще и небольшие отличия в деталях то это совсем провал)
На основе реального опыта (помогал в изучении программирования с нуля) скажу — у учащегося начинает болеть голова даже когда вы пишете "i++" вместо "i = i + 1". Лично я тоже начинал изучение программирования с паскаля (правда тот что TurboPascal, без всяких извращений) и не вижу в этом никаких проблем (хотя возможно С-89 тоже неплохой выбор)
lair
А я вот не изучал питон вплоть до последнего полугода, хотя до этого почти 20 лет обходился без него. И не считаю его после этого менее интуитивным, чем другие языки, с которыми я работал — просто он другой, и моя предыдущая интуиция к нему неприменима. Это не новое ощущение, прямо скажем, я больше одного раза с этим сталкивался когда учил очередной новый язык или подход.
Давайте для начала определимся с задачей: у нас стоит задача изучить язык или познакомиться с программированием?
… мне тут кто-то недавно рассказывал про необходимость знать именно три вида циклов.
Ну так не надо писать
i++
. Это, знаете, как в изучении естественного языка — сначала дают простые нормы, потом сложные, потом ненормативные варианты.APXEOLOG
Программирование и так слишком абстрактно, чтобы учить его еще и в отрыве от языка. Конкретное решение конкретных задач на конкретном языке — именно то, что нужно начинающему
Ну, в идеале-то необходимо знать все виды циклов. Другое дело что приоритет у этих знаний далеко не высший
lair
Вот решение конкретных задач — это не изучение языка. Достаточно показывать те конструкции, которые нужны для решения задач.
В школе? Зачем?
APXEOLOG
Ну так а как вы будете решать задачи без изучения языка? Мы же говорим не только про составление алгоритма, но и про его реализацию, а реализация всегда привязана к языку (можно конечно в псевдокоде писать, но какой профит от этого учащемуся?)
Разные виды циклов лучше подходят под разные виды задач. Нет ничего плохого, чтобы показать иной метод решения при случае (когда нет риска перегрузить учащегося)
lair
Легко — давать только те конструкции, которые нужны для решения задач.
Все то же самое можно сказать про "10 вариантов решений".
zartarn
Не ради холивара, вижу что вы всей душой за Питон :) Паскаль может и не хорош для обучения, но во всех книжках школьных — он, и pascal.abc всегда рассматривал только именно как для школ, с меньшей болью иметь возможность следовать школьной программе. Одно дело когда надо исопльзовать другую среду, а другое когда уже и язык другой. И как ниже упомянули begin/end — помня одноклассников скажу, что для многих это существеннее и проще, чем пытаться объяснить зачем нужна табуляция. Увы. Прививать стиль написания кода в школе тем кому это мало надо это будет сверх-задачей, тут то еще хоть как то что то.
Для меня всегда бОльшим вопросом было почему они пилят свою IDE а не модуль для студии.
Это так же как в бейсике, где надо обозначать не окончание ";", а что следующая является продолжением — тоже боль.
ElectroGuard
Jupyter — это костыль, хоть и весьма качественный. Для Паскаля нет необходимости что-либо подобное делать, так как там есть формы. Можно вывести быстро, что угодно и как угодно. Сразу сделать из этого бинарник и отдать. А вот попробуйте из Юпитера сделать монолитный бинарь :)
netch80
Пока ту форму напишешь — задолбаешься. Оперативность графического REPL, которую предоставляет jupyter, настолько высока и полезна при разработке, что тут сложно найти аналоги.
Error1024
В Lazarus/Delphi не надо ничего писать — достаточно накидать в редакторе форм нужную форму, ничего проще для быстрого создания GUI чем данные IDE в жизни не видел.
ElectroGuard
Ничего писать не надо. Форма идёт в комплекте с модулем, накидать можно на неё чего угодно за несколько минут — и картинок и графиков. Да и тот же ноутбук можно повторить 1:1, только, видимо, никому такое чудо пока в голову не приходило :)
lair
То есть data wrangling произойдет горним чудом?
Вот смотрите, типовой сценарий, сегодня был:
А теперь скажите мне, как вы такой же последовательности достигнете с обычными гуевыми формами и циклом edit-compile-run? Паскаль же вроде как компилируемый язык?
ElectroGuard
Реализаций скриптов под Паскаль я знаю штук 5, наверно, при том, что вообще никогда этим не интересовался. Всё там скриптиться, любые графики выводить — несколько строк кода. Динамически в том числе. Недавно делал как раз.
Динамически графики удалять, добавлять, менять, форматы вывода графиков менять, что угодно, в десяток строк от силы. А потом на скриптах пиши что хочешь.
То, что у вас вызывает такое восхищение делается за недели две на Delphi, ну может за месяц. С результами хоть в гуе, хоть в вебе.
lair
Ну вот когда сделаете — приходите, покажете. Прямо сейчас этого для Паскаля нет (если я не прав — покажите).
Но вы-то начали с того, что ноутбуки не нужны, потому что "есть формы". Ну вот есть у вас формы. Как вы с формами получите описанную выше последовательность действий?
ElectroGuard
Ноутбуки могут быть реализованы на формах, при желании.
Довольно просто: скриптовой язык, результаты работы выводим в TChart/TImage, динамически создающиеся. Могу набросать концепцию в коде, если сильно хочется. Для реализации полнофункциональных ноутбуков я, увы, слишком занят.
lair
Вы, кажется, не поняли сути проблемы. Ноутбуки уже есть, их не надо реализовывать. А реализовать-то можно, при определенном усилии, что угодно, только нас интересует существующая инфраструктура.
То есть уже не Паскаль?
Судя по тексту выше, вы еще и не очень себе представляете набор требуемой функциональности.
Но, повторюсь, дело не в этом. Дело в том, что Jupyter есть уже сейчас, а REPL есть в Питоне из коробки (и, если я ничего не путаю, был всегда). И вот ровно это для обучения бесценно.
А наличие в Паскале форм никак не решает задач, для которых используется REPL.
akryukov
Почему REPL это бесценное преимущество для обучения?
Ну то есть я понимаю, что можно на лету что-то написать и увидеть, но ведь это баловство или личные/производственные эксперименты.
Представьте, что занятия проводятся в формате группа студентов + преподаватель в каком-нибудь образовательном учереждении. Студентам так или иначе надо фиксировать и сдавать выполненные работы. Причин (сейчас приходит в голову) две: 1) надо отчитываться перед контролирующими органами. 2) При наличии сниппетов у студентов, можно им помогать методом "вспомни на что похожа задача и сделай как уже делал раньше".
В большинстве случаев результат работы студента это файл с исходным кодом.
Если результат — файл, то какая разница, нужно ли его компилировать, чтобы получить результат, или нет?
lair
Потому что свобода экспериментов. "Что будет, если, что будет, если". И очень быстрая обратная связь.
А если у него не сниппет, а ноутбук, то там будет текстовое описание задачи, математические формулы в читаемом виде и графическое представление. Так разбираться в задаче намного проще.
Разница в том, какие действия должен произвести учащийся, чтобы этот файл получить.
akryukov
Ну так я и говорю: исключительно для баловства и экспериментов.
С открытой IDEA можно в классе с main методом писать код и запускать горячей клавишей. Обратная связь вряд ли будет медленнее.
Браузер и PDF отлично справляется с поставкой текстового описания задачи и математических формул. Рисовать графики вообще не всегда нужно.
Ну в IDEA для этого достаточно добавить класс с методом main. В MSVS еще пару шагов надо сделать. Но в целом не так уж трудоемко.
lair
Баловство и эксперименты — неотъемлимая и очень важная часть хорошего обучения.
Ну, в моем личном опыте (на выборке из нескольких языков) это сильно медленнее.
Плюс из main-метода сложно подряд вывести (читаемую) таблицу, график, еще один график, еще одну таблицу, и так до посинения. Я уже приводил частый сценарий использования (он, правда, не от школьного обучения, но не суть).
Получаем описание и формулы отдельно, код отдельно. Неудобно же. А тут строго одно под другим — формула, затем ее представление на питоне.
(более того, иногда ноутбук содержит готовые шаблоны кода с "а ваше здесь")
Это если мы исходим из того, что учащийся может написать линейный код без экспериментов.
akryukov
Не могли бы вы привести какие-нибудь авторитетные источники, подтверждающие эту мысль?
Давайте еще уточним, вы говорите про обучение или про самообучение? Если про обучение, то в какой форме, по какой дисциплине?
Я разговариваю о системном очном обучении с преподавателем по дисциплине Основы программирования.
Вы правы, ваш пример не относится к обучению основам программирования, в контексте которого построена вся статья.
Заданий вида "реализуй расчет по формуле" на дисциплине Основы программирование довольно мало (по крайней мере у меня), чтобы это было значительным преимуществом. Это кусок темы про арифметические операторы и может быть кусок темы про циклы.
Первая же тема посвящена как раз тому, чтобы учащийся мог написать и запустить простейшую программу. Без этого бессмысленно изучать более сложные материи.
Плюс, людям очень важно увидеть скомпилированный бинарник "Task5.exe" и запустить его. Это создает необходимое ощущение прогресса и "чего-то настоящего". В этом смысле java даже проигрывает C#.
lair
К сожалению, нет. Это мое личное мнение.
В школе, по дисциплине "информатика". Не программирование как специализация.
Я имею в виду не "реализуй расчет по формуле", а "надо посчитать евклидову дистанцию между векторами". Очень удобно сначала выписать себе формулу, по которой ведется расчет, потом ее реализовать.
print "hello world"
. Написали, нажали Enter (или Ctrl-Enter), работает.Тут мне сложно судить, у меня такого ощущения не было, но у каждого, я подозреваю, свои предпочтения.
akryukov
Что такое евклидово расстояние между векторами? Вот расстояние между точками знаю, угол между векторами знаю.
Независимо от этого, вычисления по формуле — малая часть курса, которая оптимизации не требует. Можно ведь IDE не в полный экран развернуть. Тогда браузер будет видно и этого хватит.
Еще ведь надо сохранить в таком виде, чтобы можно было воспроизвести. Плюс как-то получить исходные данные от "потенциального пользователя".
lair
Извините, оговорка, "вектор" в значении "The position of a point in a Euclidean n-space is a Euclidean vector".
Когда на следующий день перечитываешь, придется снова два места открывать и синхронизировать. Все еще неудобно.
Подождите, речь была "написать и запустить".
Для первой "программы" это прекрасно делается с помощью функции с аргументами. В каком-то смысле это понятнее, чем cin/cout.
akryukov
Даже если я не написал слово "сохранить" в том сообщении, учащемуся нужна возможность дома вспомнить и запустить материал, который проходили на занятии. Они могут и в тетрадь записать этот
print "Ура, заработало"
. Но лучше в файл, пригодный для (компиляции+)запуска, потому что бумага синтаксис не проверяет.Вот тут согласен с вами, у питона с функциями как то сильно проще, чем в java, c#. Но при чем тут REPL?)
lair
Вот именно поэтому я предпочитаю ноутбуки чистому REPL. В них все это как раз есть.
При том, что REPL дает быстрый цикл для экспериментов. Функция — это всего лишь простой способ сымитировать пользовательский ввод в REPL.
JobberNet
А за источниками — это вам к биологам, изучающим, то как живые существа учатся играя.
akryukov
Ну так надо такие задания готовить, чтобы не скучно было делать. И требовать от студентов не зубрежки буква-в-букву, а понимания и умения излагать свои мысли. При чем тут баловство с REPL?
JobberNet
= возможность свободно и наглядно попрактиковаться.
akryukov
Что мешает свободно и наглядно практиковаться в main методе единственного java класса в IDEA?
lair
А он после выполнения сохраняет состояние всех переменных в памяти, так, чтобы можно было посмотреть, что где? Или "запускайте, дети, дебаггер"?
(я отдаю себе отчет, что это формально не REPL, а interactive environment, но в питоне именно он)
akryukov
С какой целью нас может интересовать состояние переменных в конце выполнения?
Если показать получившееся значение, то можно print добавить.
Если ошибку обнаружить, надо либо над кодом медитировать, либо следить за изменением переменных. А это точно дебаггер.
lair
Ну так для тех же экспериментов. Я же не зря приводил пример. REPL с сохранением состояния позволяет сначала загрузить данные и увидеть, что в них, потом — на основании того, что мы увидели — их обработать, потом оценить результат и обработать другим образом.
akryukov
Как именно задача "загрузить данные, посмотреть на них, обработать" соотносится со школьной информатикой?
lair
Напрямую. Это один из примеров того, где (рудиментарное) программирование может пригодиться для решения прикладной задачи из биологии или экономики или (нужное вписать).
akryukov
Я думаю вы переоцениваете уровень знаний и навыков людей, которые начинают программировать. Они просто не увидят способов решения такой "прикладной" задачи.
lair
Так им и способ показать надо. Ну и да, никто не предлагает делать это в первую неделю (и даже месяц).
akryukov
Чтобы показывать способ решать подобную задачу, нужно и предварительный материал пройти. Для средних учащихся это совсем не месяц и даже не пол года.
lair
Ну, обратного вроде бы никто и не утверждал.
zartarn
Сохранение состояний — я праивльно понял что это можно сохранить в полноценный документ со всеми расчетами а потом открыть в другом месте и продолжиьт расчеты?
В универе мы «баловались» с GAP (и ныне неподдерживаемой для нее оболочкой GGAP), удобно было что всякие недельные расчеты сохранялись, и потом уже быстро можно спокойно пользовать. Без прекручивания баз данных и прочего, здесь и сейчас сразу же из wysiwyg редактора (GGAP, в консольке конечно не так). Или вернуться и поправить и пересчитатается весь набор данных который дальше потом используется.
По началу казалось дикостью, а потом ак то приходит понимаение что удобно вот так здесь и сейчас посомтрет ьчто как куда, без компиляции лишний раз и дебага.
lair
К сожалению, нет — только внутри сессии.
JobberNet
akryukov
Что значит "наглядность"? Какие полезные выводы можно сделать глядя на переменные, которые получились после работы программы?
Сейчас выглядит так, как будто разработчики не реализовали очистку переменных, а вы подаете это как фичу.
lair
Да очень просто: был у нас набор данных, мы его загрузили, вывели топ, вывели гистограммы. А теперь вопрос из аудитории: а какие данные попадают в такой-то бин? Если у меня набор данных так и остался в памяти, я могу просто отфильтровать и показать.
akryukov
Смотреть на детализацию по гистограммам наверное классно, но при чем тут школьная информатика?
Посмотрите хотя бы в интернете, как выглядят учебные программы по информатике в школе и основам алгоритмизации для студентов, прикиньте какие программки там люди пишут и в этом контексте уже ответьте на вопрос "зачем там REPL и сохранение переменных после работы программы?".
lair
Чтобы черепашкой управлять, конечно же.
retran
Я строил курс обучения вокруг REPL.
Он позволяет тупо открыть его на проекторе и показывать вживую как работает код с практически мгновенной обратной связью и мгновенными ответами на вопросы студентов.
А если подключить turtle graphics, который как раз заточен под репл, то все становится совсем-совсем хорошо.
akryukov
Расскажите, как у вас была организована практическая часть?
Как учащиеся выполняли и сдавали вам задания?
В общем то я могу и IDEA на проекторе открыть и что-нибудь в ней писать с попутными словесными комментариями. Зачем для этого именно REPL, если оно компилируется моментально?
ahmpro
При каждой компиляции и запуске у вас полностью обнуляется состояние(переменные, функции, объекты и т.д.), в то время как в REPL вы фактически изменяете одно состояние, что позволяет проверять состояние любых объектов и изменять код на лету. Своего рода бесрочный дебаг-режим.
А это очень полезно для подробного объяснения что же на самом деле происходит.
Не говоря о том, что «мгновенная» компиляция и запуск проигрывают REPL в отзывчивости и скорости обратной связи.
akryukov
Ну нет. Не так уж и полезно, как вы мне пытаетесь "продать".
Зачем мне состояние по итогам работы программы? Для объяснения "как все происходит" мне надо показать как ведут себя переменные во время работы цикла. Точек остановки и пошагового выполнения, я так понимаю, в REPL нет?
Зачем мне выводить весь ворох промежуточных переменных, если я могу написать одну команду вывода, чтобы обратить внимание на значение одной важной для объяснения переменной?
Можно узнать, с каким счетом проигрывают?) В IDEA я нажимаю Shift+F10 и у меня за секунду появляется окно с выводом. Мы ведь про основы программирования говорим, где программы на тысячу строк — редкость.
retran
Ну вот смотрите. Приходите вы и на вас смотрит 50 пар глаз из которых интересно вас слушать хорошо если 10-ку. Если вы первую лекцию посвятите тому как открыть IDEA, как в ней создать проект, что такое «скомпилировать», то на следующую к вам уже придет не 50 человек, а 25 (я напоминаю, что это вчерашние дети и подростки).
Альтернативный вариант — вы приходите, запускаете ОДНУ программу с минимальным интерфейсом и начинаете объяснять простейшие принципы показывая выполнение по одной команде с мгновенной реакцией и результатом. Потом подлкючаете черепашку и начинаете ей рисовать что-нибудь интересное по пути объясняя как вводимые команды влияют на поведение черепашки. Я вам гарантирую, что все 50 пар глаз будут наблюдать за «магией».
Чтобы заинтересовать нужно быть немножко фокусником и REPL позволяет им стать.
А вот потом уже практическая часть, IDE, компиляция и домашние задания сдаваемые через github. Потому что стало понятно и интересно.
Собственно, вы сами упомянули IDEA. Посмотрите на то, что предлагает сам JetBrains, они пришли к примерно такому же подходу — www.jetbrains.com/pycharm-edu
akryukov
Я в начале первой лекции выясняю кто и что уже знает, зачем пришли, что ожидают по итогам. Затем отталкиваясь от этой информации рассказываю о применимости того, что мы планируем изучать. Рассказываю какие инструменты мы будем применять и где их достать. Уточняю где взять задания, как их сдавать.
Ну а потом уже открываю IDEA, создаю проект и вместе с ними начинаю идти по заданиям.
Заинтересовываю перспективой а не "магией" с черепахой. Впрочем у меня великовозрастные ученики, им черепашка нафиг не нужна. В школе совсем другая специфика.
ElectroGuard
Юпитер — это оболочка для работы (в том числе и для обучения) в весьма ограниченной сфере: работе с данными.
Паскаль же, как универсальный язык, и его оболочки, позволяют научится чему угодно. В том числе и тому, что умеет Юпитер. Даже и Питон можно подключить, я ссылку давал.
За счет универсальности Паскаль и его среды более подходят как для работы и для обучения.
lair
Это, очевидно, неправда.
А почему вы противопоставляете Юпитер Паскалю? Правильно противопоставлять Паскалю Питон (в котором тоже можно научить чему угодно), а Юпитеру — формы (в которых тоже можно научить не всему).
ElectroGuard
Паскаль давно сросся с формами. На голом Паскале вполне можно создать любые формы, не прибегая к средовым редакторам, другое дело, что зачем это делать. Питон же сам не сможет ничего создать. Максимум — присоединиться к Qt, который за него будет всё и рисовать.
Подробнее. Нет, некоторые вещи Паскаль в реализации Delphi покроет слабо — драйвера, например. Остальное вроде бы всё покрыто вполне: основные платформы, веб. Хочется — можно и к Питону подключится и к Qt (в реализации FreePascal).lair
Вы путаете язык и среду выполнения. Не стоит так делать, люди с отличными от ваших представлений о модульности могут расстроиться.
Питон "сам" вообще ничего не делает, это язык. А использование одного компонента ничем не хуже использования другого компонента. С практической точки зрения форма в Питоне создается (может создаваться) как обычный класс.
А что "подробнее", это та же самая ошибка, только наоборот: я не буду спорить, что в Паскале можно научить чему угодно (хотя, конечно, вопрос усилий), но речь-то шла о формах. Научить в формах написанию консольных приложений? Web (HTTP) API сервисов?
ElectroGuard
Программа может вполне существовать без среды выполнения вообще.
Набросал программу, которой достаточно компилятора для сборки и запуска:
Форму, опять же, можно грузить прямо из текста, могу кинуть код. Исходник формы (dfm) можно набрать в блокноте, если сильно хочется. Другое дело, что в среде это всё сильно удобнее делать. Но если хочется без среды — пожалуйста :)
Не понятно, зачем именно так делать. Консольные приложения вполне работают в Паскале наравне с 'обычными' VCL/FMX. Однако, если сильно хочется, то можно вывод консоли перенаправить в форму.
Кроме форм есть DataModule. Сам, собственно, Web сервисом занимаюсь, среди прочего.
lair
Не, не может. Вашу вот программу можно запустить на моем планшете?
Ага, очень смешно. А VCL (про который даже в названии написано, что это библиотека) — это часть компилятора, да? А как так вышло, что во FreePascal не она, а LCL, если это, как вы говорите, часть языка? А в PascalABC.net — System.Windows.Forms и FormsABC?
И какое отношение это имеет к среде выполнения? Вы точно ее со средой разработки не путаете?
Чтобы учить всему на формах (это, напомню, ваше противопоставление Юпитеру), очевидно.
Вот именно, что кроме форм.
ElectroGuard
Под FMX пересобрать — и можно.
Но среды то нет? Мы же говорили про среды.
Путаете вы.
И что?
И что? Что вы пытаетесь доказать? Что учить всему этому неудобно или невозможно? Смешно же.
lair
А что мешает запустить вашу программу на планшете? Уж не различие ли сред выполнения?
Есть, конечно. .net, в который входит System.Windows.Forms — это среда выполнения.
Что ваше противопоставление "Максимум, чему вы сможете научить в Юпитере — это работать с данными. [...] А в Паскале вы можете научить чему угодно: вплоть до создания этих же самых ноутбуков" (выделение мое) — некорректно. А когда мы переходим к корректному противопоставлению "максимум, чему вы можете научить в Питоне / максимум, чему вы можете научить в Паскале" — выясняется, что в Питоне, внезапно, можно научить всему тому же, чему и в Паскале.
JobberNet
Для новичков язык с явными begin и end — нагляднее.
ElectroGuard
Вот, к слову, проект
Python for Delphi:
github.com/pyscripter/python4delphi
lair
А зачем мне Дельфи, чтобы запускать Питон?
JobberNet
Компилятор кода?
lair
У Питона уже есть интерпретатор.
JobberNet
Интерпретатор — это всегда мееееедлееееееноооооооо…
а компилятор — очень быстро!
lair
А что, от добавления питона в дельфи он каким-то магическим образом станет компилироваться?
ElectroGuard
lair
Мне не хочется интерпретируемые скрипты, мне хочется (универсальный) язык с REPL и интерактивной средой.
ElectroGuard
Ага, учить детей тензорам или линейной алгебре. Представляю уже :)
Нужен универсальный простой язык и среда под него. Всё остальное вторично. Паскаль подходит идеально.
Юпитер для программирования вообще слабо заточен, если уж на то пошло. Максимум — визуализация данных.
Вот сейчас пытаюсь сделать: перенести код, написанный под второй питон на третий, и написанный под линукс на винду. Нормальной среды разработки очень не хватает. Юпитер почти не помогает. Реальный кейс и шило ваш этот Юпитер. Недо-среда, как изначально и говорил. Кого чему на этом можно научить?
lair
Вы представляете себе то, чего я не говорил. Приятных фантазий.
Я даже не буду спорить об универсальности Паскаля, хрен бы с ней. Мой тезис в другом: Питон подходит не хуже.
А почему вы решили, что Юпитер должен вам в этом помочь? Почему вы вообще решили, что он для этого предназначен?
Очевидно, можно научить, для каких задач Юпитер подходит, и как их с его помощью решать. Почему вы решили, что я предлагаю преподавать с использованием Питона и исключительно Юпитера, без использования IDE?
ElectroGuard
К слову — не нужно думать, что скомпилированное — значит супер-жесткое. В Delphi можно, например, из базы данных (или просто из тескта) в текстовом виде загрузить описание формы, прямо в рантайме собрать форму и она будет работать обычным способом, её отличить даже невозможно от той, что была вкомпилирована в exe (и это можно было делать уже в Delphi 1, к слову). С кодом такие фишки делать сложнее, тут скрипты в помощь.
lair
Спасибо, я лет пятнадцать не имею никаких иллюзий по поводу жесткости скомпилированного кода. Причем, что характерно, безо всякого "с кодом такие фишки делать сложнее" — выдал код, скомпилировал, получил объект, запустил. Или выдал синтаксическое дерево, скомпилировал, получил объект, запустил.
lair
Так, давайте для начала определимся — вы под формой понимаете обычный такой десктопный GUI, вот такого толка?
Volobuev_Ilya Автор
Можно писать в Lazarus. Да, это сложнее, но если все подробно объяснять, то нормально. Тем более баги в программах уровня «Hello world» не будут вылезать, как например здесь.
GeekberryFinn
А что мешает использовать старый добрый Делфи?
Volobuev_Ilya Автор
Ничего. А Вы бы что предпочли из этих двух?
alan008
Может, его стоимость
dmytrorem
Delphi Starter — бесплатный. С коммерческой лицензией.
www.embarcadero.com/products/delphi/starter/free-download
Siemargl
Обрезанный. Без графиков, без работы с СУБД, без отчетов. Все нужно или писать самому или докупать.
Впрочем, компонентам работы с СУБД можно достаточно легко найти замену.
Но для целей обучения постоянно меняющиеся условия лицензирования не располагают к долгому планированию. Сегодня Стартер есть, завтра отменят.
alfred200
Для новичков, обучающихся Паскалю, есть PascalABC без всяких .Net. Поэтому нет никакого смысла использовать для обучения PascalABC.Net если то, что отличает его от обычного паскаля реализовано плохо.
ainoneko
У меня оно находится на второй странице результатов и пишет:
Ссылка «Официальный сайт Pascal ABC (рус.)» ведёт на новую версию.
skyblade
Когда я учился ещё был Turbo Pascal. Ентот ABC внедрялся уже позже, но я по-прежнему убеждён, что учиться нужно сразу на каком-нибудь живом и рабочем языке. Задача системы образования: выбрать какое-то учебное подмножество языка, в рамках которого будет вестись преподавание. Можно даже запилить отдельную среду выполнения для этого учебного подмножества, которая будет ограничена в функционале, но чем-нибудь более удобна для обучения, но сам язык лучше сразу брать «настоящий», а не «учебный», потому что потом приходится тратить время на разбор «как оно в этой новой технологии устроено-то?» вместо того, чтобы просто сменить редактор и продолжать «думать» как уже привык. И чтобы эта привычка уже сразу была правильная.
Да, осваивать новые технологии всё равно придётся, но это должно быть желание именно освоить новую технологиию, а не желание освоить всего-то чуть более сложные алгоритмы или структуры данных.
GloooM
Тоже впервые в школе изучал турбо паскаль и никаких особых проблем потом не испытывал с переходом на реальные языки. Возможно если бы не простота паскаля, то сложность в условном Си вообще не вызвала бы интереса к программированию. Как по мне так наоборот, ты четко понимаешь границу, вот то был учебный, а вот здесь уже реальный язык и надо «забыть все чему тебя учили»(тм) и приспособиться к новому языку понимая и разбирая его нюансы имея уже какой-то опыт, но не тащить весь багаж говнокодерских навыков со школы )
khim
Проблема Паскаля — в том, что это не учебный язык. Как раз со всякими Логомирами, которые, совершенно очевидно, учебный и не претендующие на создание чего-то реального проблем меньше.
А вот Паскаль… вроде как и настоящий язык — а вроде как и нет.
vldby
Даже стало любопытно как много людей использует для программирования именно .NET часть в Pascal? В школе и университете, мне кажется, этим не занимаются. Обычно же классический Pascal иучают и отдельно C#.
danfe
Я сам еще лет пять назад топил против Паскаля. Теперь понимаю, что бы неправ. Отличный язык.
AhJong
Дайте детям на выбор Python для Minecraft и Pascal. И посмотрите на результат через пару недель.
Программированием надо заинтересовать, иначе любое знание придет и тут же уйдет.
Error1024
В первом случае все ограничиться игрой в Minecraft, а со вторым, возможно ребенок заинтересуется не красивыми кубиками, а именно программированием.
Lopar
Угу, платная игра с донатом и микротранзакциями — самое то, что стоит внедрять как обязательный элемент школьного образования. Выбор детей — это хорошо. А кто проплачивать это будет? Родители? Школа?
Pochemuk
Как то смешалось всё мягкое с теплым, а люди с конями…
Правильно тут многие написали — Pascal (в любой его ипостаси) — язык для новичков.
Нельзя говорить одновременно о профессиональном росте программиста и программировании на Pascal. Ну не стыкуется это от слова «совсем».
Но в то же время, кто сказал, что человек растет профессионально именно как программист? Сопутствующих областей деятельности сейчас — вагон и маленькая тележка в придачу. И это совсем не обязательно то, что называют по старинке программистом, а по жаргонному кодер.
Возьмем такую виртуальную, но тем не менее существующую (как говорят) профессию, как математик-алгоритмист.
Вот дают ему сердешному задание для оптимизации логистической работы:
1. Поставки, срок начала выполнения которых близок к дедлайну (с учетом возможных задержек в пути), должны начаться сегодня.
2. Поставки, дедлайн для которых далек, можно отложить до лучших времен (ну за исключением тех пунктов, куда можно что-то необременительно по весу и габаритам закинуть «по дороге».
3. Остальные поставки оптимизируются с учетом расхода времени, бензина, ограничений законодальства по ОТ и др.
4. И все это для полутора-двух-трех сотен пунктов поставок, сообщение между некоторыми из них только через Северный полюс на сломанных лыжах.
Ну, это я для примера… Просто для того, чтобы почувствовали насколько эта задача «интересная».
И вот наш горемыка после нескольких недель бессонного труда рожает, как ему кажется, приемлемую методу. И вот дальше начинается…
Он — ни разу не программист. У него другая работа. Но сделать работающий макет своего алгоритма ему необходимо. Хотя бы для того, чтобы убедиться, что временная сложность его полиномиальна, а не экспоненциальна. Т.е., он уверен, что результат близкий к оптимальному его алгоритм обеспечит, но за 5 минут или за 5 часов — вот в чем вопрос! Сколько реально (а не умозрительно) потребуется памяти, не будет ли вылетов из-за слишком глубоких рекурсий и т.д.
Ну и на каком языке ему писать этот макет, не привлекая специалистов? Чисто для себя, для проверки?
Вот тут мне и кажется, что и C# и Pyton требуют более высокого порога вхождения, чем тот же самый Pascal. Пусть даже он ABC.Net
Более того, IMHO, для таких целей процедурные языки гораздо более подходящие, чем чистые ООП-языки. Т.е., чем проще, тем лучше. Но не слишком просто, чтобы иметь возможность делать что-то чуть более серьезное, чем сложение и вычитание.
longclaps
Математик-алгоритмист, испытвающий проблемы с порогом вхождения в C# или Pyton — это чудо как хорошо.
Pochemuk
Ну я не математик, правда, и не программист. Обычный инженер-технарь. Но для решения технических (и не очень) задач приходилось и программировать и алгоритмы изобретать.
Так вот, совершенно не возникало трудностей с такими языками, как Fortran IV, PL/1, C. Даже Forth и ассемблер для Intel 8080/8086 освоил. Много писал на том же Turbo Pascal, Clarion. Немного знаком с C++, PHP (на нем даже что-то полезное сваял, как ни странно).
А вот ни C#, ни Pyton не зашли ни с первой попытки, ни со второй.
Хотя, есть подозрение, что дело в мотивации — по большому счету ни тот, ни другой мне не нужны.
lair
Вам кажется. Особенно учитывая то количество математических алгоритмов, которые есть в
numpy
иscipy
, а так же Jupyter Notebook, в котором эту задачу можно делать прямо с самого начала.Эм, оценки реального времени выполнения и ресурсов можно делать только на том языке, на котором будет писаться production-код.
Pochemuk
Речь не идет о точной оценке времени. Но если макет покажет, что глубина рекурсий растет не как ln(n), а как n, то это явно не имеет отношения к языку программирования, а косяк в самом алгоритме.
lair
Вот только для некоторых сред выполнения глубина рекурсии O(ln(n)) — проблема, а для некоторых и O(n) не проблема.
Alert123
Как то попросили посмотреть почему програмка не работает. Оказалось она на PascalABC.
И суть была в том что то ли continue внутри цикла работало как break, то ли наоборот, т.е. баг в самом компиляторе, хотя вроде он и не совсем сырой раз в школах его давно используют.
Удачного обучения с break/continue, детки. :)
ainoneko
По теме.
В файле «Сравнение PascalABC.NET и старого Паскаля» в разделе «Сравнение версий языка Паскаль» почти всё остальное называется отжившим.
Дальше утверждается «PascalABC.NET опережает Free Pascal по скорости выполнения программ
на большинстве тестов. Ниже приводится пример со всеми включенными оптимизациями.» и приводятся:
и
KostaArnorsky
Всё смешалось в доме Облонских.
Язык программирования — это не IDE и не компилятор, это набор правил. Понятия не имею, насколько хорош или плох язык PascalABC.Net, но претензии были только к IDE и компилятору.
Но в любом случае, не понимаю, зачем было свою IDE городить, когда Visual Studio поддерживает Language Extensions, а VS Community бесплатная?
FreeManOfPeace
В школе сталкивался с PascalABC (ещё не .NET) так и не смог его освоить толком, но больше потому что не видел никаких практических задач которые можно с таким языком решить.
Вот скажем язык применяемый в Sanny Builder 3 для программирования скриптов в играх серии GTA я очень легко освоил, потому что было интересно и результат сразу виден, плюс примеров куча (хотя язык та ещё дрянь, большинство функций вызываются опкодами из 4-х шестнадцатиричных символов, что требует постоянного программирования мышкой).
И скриптовые языки типа Bash/Batch легко освоил уже позже т.к. столкнулся с рядом задач которые можно было легко решить такими языками.
Проще говоря проблема освоения языка в решаемых им задачах, особенно для новичка, написать миссию для GTA куда увлекательнее было чем писать какой то унылый калькулятор, который умеет меньше встроенного в винду приложения калькулятор.
Volobuev_Ilya Автор
Среда PascalABC тоже кривая. Ниже примеры с комментариями.
Siemargl
Подучить бы тебе Паскаль…
Так я и подумал сразу, что какой то обиженный из-за пары ошибок в редакторе IDE школьник. Был еще маловероятный вариант 2 — что кто то решил использовать П.АБЦ для серьезной работы, но отпал.
ТЛДР — ты не понимаешь синтаксис ООП. Попробуй повторить фокус (написать аналог) в C# или в C++
Siemargl
Посмотрел повнимательнее утром на свежую голову. Проверил в версии 3.4.0.1694
Пример разнес по юнитам — все отработало согласно описанию.Итого — 1й пример стал работать (хотя конечно для стандартного Паскаля не должен был, боксинг добавился вместе с .NET).
2й-работает, все доступно, см ниже
3й — тоже работает, хотя [вроде] не должен, см ниже
Взял пример, прямо из онлайн справки АВС Паскаля «Классы/Видимость членов класса и модификаторы доступа». Читаем
Ну учебная же среда, хотя это немного другой Паскаль =)
Надо так учить мат.часть
Но минус откатил на плюс за свою невнимательность.
Error1024
Автор — это шутка? Тебе компилятор просто не дает выстрелить в ногу, радовался бы, в js, Python… можно и прострелить, а Pascal уберег тебя от тупой ошибки. Имхо дело не в «плохом и ужасном» паскале.
mayorovp
Ну офигеть кривость! Если поменять private и public местами, то доступ, видите ли, пропадает…
Вы вообще знаете что эти ключевые слова означают? Подсказка: они управляют доступом извне класса :-)
khim
А вы вообще знаете что такое перегрузка функций? Подсказка: это когда есть много функций — а имя у них одно.
kogemrka
Как я понял, автор имеет в виду не замену public на private, а порядок описания секций private и public.
В примере 2 порядок один, в примере 3 — порядок другой. Поведение, по словам автора, разное.
mayorovp
Да, я уже увидел. Почему-то первый раз показалось что компилятор прав, сейчас вижу что нет.
aalebedev
Это среда, которая делалась для замены Turbo Pascal или платного Делфи.
Все таки среда создавалась в 2002 году.
Сравнивать разработку от огромной корпорации с очень небольшой командой, не совсем правильно.
Хотя, на мой взгляд, проект слишком разросся. Вопрос сколько процентов от него используется в обучении.
ainoneko
Я много с ним не занимался, но уже видел, как в «Watch» не обновляется присваиваемое значение элемента массива. И как-то раз удалось просто случайно уронить компилятор.
ElectroGuard
Просто не нужно было учебную оболочку пытаться тянуть до уровня языка. В результате и оболочка стала плохой и реализация языка так себе. Как в старой хохме: русский уже забыл, но английский еще не выучил.
GeekberryFinn
Проблема в том, что ни ALGOL, ни Modula — не имели на PC нормальной реализации, а Pascal — имел.
PS если кто не помнит, Pascal планировался как чисто учебный язык после изучения, которого нужно переходить ALGOL. Позже была создана Modula — тоже как язык для работы, к которому легко перейти зная Pascal.
ElectroGuard
Я имел в виду Pascal ABC, если что. Позиционировались как учебная оболочка — так бы и оставались.
Error1024
1) С тем как хорошо автор поста знает паскаль, все ясно:
2) Не ясно, зачем автор требует от среды, созданной исключительно для обучения, кучи продвинутых фич. (А с приведенным примером выше, можно усомниться в том, что автор действительно глюки словил, а не напоролся на собственноручно расставленные грабли)
3) Советую автору взглянуть на настоящую IDE для Object Pascal — Lazarus.
Xitsa
Небольшое замечание про обобщения: их компиляцию довольно трудно реализовать, так как появляются много нюансов и тонкостей, особенно если завязываться на Reflection.Emit.
Как пример рассмотрим аналог из статьи:
Первая неожиданность в том, что TA<T> и TA<T>, который базовый класс TB<T, T2>, — это разные типы.
Первый TA<T> — это обобщённый тип со свободным типом-параметром T.
Второй TA<T> — это конкретизированный обобщённый тип TA<T>, в котором тип-параметр T конкретизирован типом-аргументом T класса TB<T, T2>.
Чтобы было понятней, перепишу пример так:
Вторая неожиданность в том, что работа Reflection.Emit с обобщёнными типами описана довольно сжато и не всегда в итоге получалось сравнивать корректно типы и их методы.
Я поддерживал паскаль-подобный язык, компилирующийся в .Net, и обобщённые типы поддерживал только в контексте использования готовых, а реализацию объявления своих обобщённых типов отложил, так как слишком большие затраты на реализацию и поддержку с малым практическим результатом.
Третья неожиданность заключается в том, что авторы ICorDebug — набора интерфейсов для доступа к отладчику .NET, поддержку обобщённых типов добавили позже, с неполным отображением.
(Это всё моё мнение, поддержкой проекта я занимался 6-8 лет назад, сейчас с наличием .NET Core с открытыми исходниками, наверное, будет полегче).
jknight
Какая, однако, активная темка тут на Хабре нашлась! Лол, да это же победа.
По факту, не так давно этот человек начал активно заливать г#$%ом страницу Википедии проекта — размещать там ссылки на Issue на гитхабе, рассказывать о том, насколько же «нельзя» этим Паскалем пользоваться… Теперь вот дошел до того, что целый пост на Хабр написал с той же целью. Интересно только, в чем мотивация.
По части того, насколько активно в обучении используются те или иные фичи — расскажу свою историю. Закончил я мехмат ЮФУ в 2016 году (магистратуру — начинал, соответственно, в 2010). В качестве первого языка для курса «Основы программирования» (продуктивной работы и хороших студентов Вам, Станислав Станиславович!) на первом году обучения был поставлен именно он. Поначалу (я пришел с крайне неплохим бэкграундом в плане опыта программирования на фоне остальных однокурсников) действительно возникала куча вопросов. В основном, связанных с тем, что в продакшене этот язык не используется, и возможность не предвидится. Курс, однако, закончился, а потом…
На втором году обучения вся группа «подтянула» свои знания по C#, Java, C++, Python буквально за две-три недели за язык (ну ладно, на С++ целый год потратили, да, но писать простенькие программы смогли очень быстро), а сложность освоения новых языков свелась практически к нулю. Почему? Потому, что буквально на каждую конструкцию, которая в них встречалась, находилась та, которую мы уже выучили, и знали принципы работы с ней на языке PascalABC.NET. Спрашиваете, зачем все эти фичи, которые реализуют разработчики? Именно по этой причине — обеспечить плавный и легкий переход на практически любой язык, любую среду программирования. То, что не является стабильным (т.е. экспериментальные, разрабатываемые фичи), мною за время обучения не было увидено ни разу — разве что, сам накопаешь кровно-потными трудами, если есть желание что-то «поломать». К моменту, когда пришла пора рассказывать об этих самых фичах на курсах по ЯП, они уже протестированы и стабильны.
То, что человек тут пишет о использовании PascalABC.NET в крупных проектах и промышленной разработке (и о том, что этого нужно избегать), явно говорит о том, что он еще школьник (ну, максимум, первый-второй курс) — зайдите интереса ради на форум мехмата — там таких добрый десяток, с «крупными» проектами вроде «напишем свой тридэ движок на пацкалях, и будем игры писать». Людям, которые имеют работу в нашей области, не нужно объяснять, почему язык не ставит себе целью эту самую промышленность. На это же намекают и орфографические ошибки вроде «по чему». Опять же, юношеский максимализм и абсолютизм, с которым эта «критика» преподносится, указывает на то же самое. Школьники, пожалуй, порой и умные вещи говорят, но в таких случаях их редко можно от взрослого человека отличить.
То, что там есть баги, вполне объяснимо малым размером команды, которая, к слову, не только этим занимается — проект некоммерческий, надо еще и кушать что-то. Там, где максимальный охват аудитории (школа, первокурсники), 99,9% функциональности работает на отлично.
Вопрос к автору у меня только один. Откуда столько хейта? Двойку поставили?
Обидно просто. Учитывая объем работ команды разработчиков, усилия приложены титанические. И обучающий эффект мощнейший, по крайней мере, в руках хорошего преподавателя. А тут появляется п#$%#к, который на весь интернет орет о том, как этот ЯП нужно чуть ли не через Роскомнадзор запретить.
jknight
Извиняюсь, с «крупными проектами» я тут переборщил — здесь этого не было. Было в Википедии :) Впрочем, из «попрограммировал на PABC.NET, стал разработчиком среднего уровня, среда жить не дает», оно планомерно вытекает…
Не оправдываю разработчиков в плане периодически отваливающегся парсера для автоформатирования… Слегка оффтоп, на деле. Придерусь к одному моменту, ибо в недоумении.
Кому оно вообще нужно? Форматирование какбэ для удобства не только чтения, но и написания служит… Если не делаешь это на автомате руками, работа превращается слегка в боль, не? Если сначала код писать, а потом форматировать, то в чем цель? Сдать преподу, чтоб два не поставил за корявый вид, который читать противно?.. Форматирование кода — базовый скилл вроде, должен быть встроен в любого программиста на уровне коры мозга.
Нет, один юзкейс есть — вставить код из стековерфлоу. А еще?
lair
Конечно, нет. За меня большую часть форматирования делает IDE, чтобы я мог потратить свое время на что-нибудь более интересное.
jknight
Да. И когда мне выпадает необходимость пописать где-нибудь вроде Atom или Notepad++, я эти табы с пробелами ставлю сам, причем, не «напрягаясь», и не «задумываясь». Это ж столько мыслительной деятельности занимает — кнопки на клавиатуре нажимать.
lair
Я искренне вам сочувствую, раз для вас автоматизация превращает работу в боль.
16 пробелов подряд, на каждой строчке, не напрягаясь и не задумываясь?
jknight
Гхм, давно вроде как придумали табы, не? В любом адекватном редакторе можно их заменить на пробелы автоматически, если религия просит.
Имелось в виду, что большая часть IDE умеет во время написания кода это делать. Хочется лишь сказать, что то, что этого нет — минус, но не повод выкидывать что-либо на помойку. Плюсов там изрядно больше, чем мелких, но досадных минусов. Написать хорошую IDE силами 5-6 человек, и поддерживать ее с учетом выхода новых возможностей, как минимум, очень сложно. Особенно учитывая некоммерческую суть проекта.
lair
Вот вам и ответ на то, зачем нужно автоформатирование.
Цитирую: "делаешь это на автомате руками".
jknight
Это не автоформатирование IDE, а базовая фича любого редактора текста уровня выше «Блокнот», никак не привязанного ни к какому конкретному языку.
Имеется в виду, что если конкретный редактор этого не поддерживает, это не вызывает проблем. Ну, у меня, по крайней мере.
lair
То есть то, что автоформатирование зависит от языка (и принятых в команде стандартов), вас не очень волнует?
У меня тоже не вызовет, но раздражать будет неимоверно.
jknight
Я в последних сообщениях говорил только о табах, не путайте теплое с мягким. Сами завели рассказ про «16 пробелов»…
Форсирован формат кода в Python — и то, не так, чтоб очень сильно. За его пределами каждый что хочет, то и делает. В каждой фирме отдельный стайлгайд с правилами вроде «кривые скобки ставим на той же строке, что и описание функции». По хорошему — можно настроить какой-нибудь AStyle, и делать как душе угодно. Вот только не стоит просить еще и кастомного форматирования от разработчиков — у них и без того на это времени нет. Вы напрямую утверждаете, что это ну очень нужно — так епт, сделайте! Пулл-реквесты в репозитарий никто не отменял. Только вот что-то никто не торопится…
lair
… которые тоже зависят от языка.
Дада, про
go fmt
никто не слышал.Так у меня и так все есть и работает.
warlock13
Количество пробелов зависит от ЯП, но фича Smart Indentation — универсальная.
lair
Мне кажется, мы под Smart Identation разное понимаем. Я вот привык к следующему:
if(x>0)
if
{
, она немедленно сдвигается подif
(т.е., сдвиг убирается){
quverty
jknight
В некотором смысле. Там были еще правки от незарегистрированного пользователя, и их стиль изложения/суть претензий крайне сильно напоминают то, что написано здесь. Была еще найдена связь между пользователем с тем же именем с сайта cyberforum, с выложенными исходниками того же характера, а также кусками кода, который он выкладывал как на форум Паскаля, так и на cyberforum.
TL; DR — прямый улик нет, но косвенных — полно. Для того, чтобы с ними ознакомиться, предлагаю зайти на it.mmcs.sfedu.ru, и там темка сейчас в топе, с говорящим названием.
lair
В PascalABC.net есть list comprehensions и динамическая типизация? Указатели? async/await? Паттерн-матчинг?
jknight
Указатели — есть. async/await — в разработке, насколько мне известно. Паттерн-матчинг — недавно появился. Динамическая типизация — нет, это базовый параметр языка, да и зачем? По моему, она — лишний повод стрелять себе в ногу, но это уже религия и дело вкуса. List comprehensions — нет, но их аналоги легко реализуются на LINQ, с похожей логикой мысли. Зачем два раза одно и то же писать, если оно уже есть?
Пардон, эти элементы языка (ну, кроме указателей) далеко за пределами уровня школьника или студента 1-2 курса (вспоминаем, что я говорил об аудитории).
lair
Это уже второй вопрос. Вы говорите, что на каждую конструкцию была та, которую вы выучили, хотя, как можно видеть, не на каждую.
Вы говорили, что задача PascalABC.net — "обеспечить плавный и легкий переход на практически любой язык, любую среду программирования". Одно другому противоречит.
jknight
1) Речь об аналогах и ассоциациях, которые в голове появляются автоматически. Эта функция исполняется. Тащить все подряд в язык — годный способ испортить все, что можно.
2) Нет, не противоречит. Когда человек приходит с PABC.NET на C#, он знает о большей части средств — ООП, LINQ, базовая работа со стандартными классами, и т.д. Для чего нужен async/await, на первом-втором курсе вообще, я считаю, рановато рассказывать. Противоречия нет в том смысле, что то, что изучили с использованием PABC.NET транслируется на все остальное. То, что чего-то не рассказали — не смертный приговор. Именно поэтому тратится еще две недели, на «доковыривание» отдельной функциональности языков, на которые пытаемся переходить :)
lair
А откуда они появляются, если вы async/await не видели никогда?
А когда он приходит на Scala? Или любой другой функциональный язык?
… а люди-то месяцами и годами языки учат.
jknight
Тогда, когда в процессе решения поставленной задачи приходится столкнуться с необходимость что-то сделать, и человек лезет на StackOverflow. Задача любого образования — хоть школьного, хоть университетского — создать базу знаний в голове. А напихиванием различных специфичных фич гораздо проще заняться самому.
lair
Ну то есть Паскаль в любой его форме тут ни при чем. QED.
jknight
Для того, чтобы был смысл лезть на StackOverflow, нужна какая-то база в голове. Когда ее нет, ни он не поможет, ни Таненбаум, ни Страуструп. Паскаль позволяет ее сформировать.
lair
Как я уже сказал ниже, для этого достаточно любого мейнстримного языка программирования.
В моей жизни Паскаля никогда не было (кроме одного чужого диплома), и ничего, живу же.
jknight
А вот это уже чистой воды демагогия. Предлагаю завершить дискуссию.
lair
Да нет, это контрпример из жизни, который показывает, что для достижения поставленной вами цели Паскаль необходимым не является.
jknight
Необходимым — не является. А где я это утверждал? Сам на форуме гоняю регулярно школяров, которые считают, что PABC.NET — панацея и венец всему. Но здесь, в этой статье, объективно в лицо плюнули команде разработчиков. А вы сейчас предъявляете требования к языку, созданному для обучения начального уровня программирования, как к профессиональной среде для крупных проектов. Не надо так.
lair
Я? Нет. Я всего лишь говорю, что, возможно, перечисленные вами достоинства этого языка как языка для обучения — завышены.
jknight
Я извиняюсь, может, еще и логическую парадигму в один язык напихаем? А что, забавная годзилла получится.
Суть — довести до состояния, когда человек может сам продолжить что-то изучать, без указки, мела, и преподавателя. Эта цель выполняется на 100%.
lair
Ну то есть "плавный и легкий переход на практически любой язык" тоже не выполнено. Ок.
А она любым современным мейнстримным языком выполняется, для этого большая часть перечисленных фич не нужна.
jknight
Я тут не говорил «любой», я сказал «практически любой». Brainfuck, Prolog, Haskell, J, и прочие не в счет.
Ну, да. Если не учитывать то, что почти для любого языка (может, кроме Питона) придется делать горы ссылок на будущее вроде «пишите пока так, потом расскажем», которые зачастую убивают любое желание что-то делать.
lair
А, в значении "любой похожий на PascalABC.net". Спасибо, мне это не нужно.
Странно, и как я без этого обходился, когда изучал C#?
jknight
ООП, статическая строгая типизация, элементы ФП, императивная парадигма. «Любой похожий», ага. Только таких (за исключением типизации) — большинство. Да, я знаю, что и вакансию Haskell найти реально при желании — но эта ситуация скорее исключение, чем правило.
Ну, имея бэкграунд уровня «поработал программистом N лет» позволяет без этого обходиться. Тут же речь идет о тех людях, которые еще программирования в глаза не видели. И тут код вроде
будет в силу наличия всяких неймспейсов, классов, функций, и параметров ее вызова смотреться нагроможденно и глупо.
Как уже сказал, завершим дискуссию. Конструктивом здесь уже не пахнет.
lair
Ну вот дженерики еще, ага.
… а как я изучал те языки, на которых я работал до C#? А так же.
Вы про C# interactive не слышали, да?
akryukov
Это верно для тех, кто знает другие варианты. Для новичков не сильно важно, особенно если IDE уже написала. Если человек впервые начал писать, для него это просто необходимое оформление на уровне "создать проект, положить его в папку" или "файлик с кодом лежит в проекте, а проект находится в решении".
jknight
Когда скачиваешь новую среду, и пытаешься что-то сделать — да. А если задача, кроме того, качественный лекционный материал подготовить? Тоже будем про "ну, так надо, не парьтесь" рассказывать? Нет, согласен, оно так и делается. Но это, как мне кажется, не вполне корректно, хоть без него и никак.
akryukov
Я лично вообще сомневаюсь в полезности лекций по оформлению решений и по синтаксису языка. Для этого есть практические занятия и методички.
Я ведь недавно дописал под 2013, а актуальная версия уже 2017 и VS:Code появился.В формате лекции было бы полезнее дать идею "зачем" и "где применяется", "какие проблемы бывают", связать с другими предметами (вроде ОС или сетей или дискретной математики) и т.п. Правда я в этом смысле не настоящий сварщик. У меня курсы без выделенных часов на лекции и все это приходится на практике рассказывать.
jknight
Ну, это уже очень сильно от формата и цели лекции зависит. На той, о которой я говорю, цель — познакомить студентов с вменяемым количеством средств, используемых в большинстве современных ЯП на примере одного. И тут уже без привязки к синтаксису не получится...
khim
Что осталось? C#? Но если нам нужен язык, на котором работаьть нельзя, но с которого удобно переходить на C# — то может проще C# сразу выучить?
jknight
Побойтесь высших сил, метапрограммирование школярам читать :-) Если его не включать в "базовый набор", оставив его на уровне дженериков, получится вполне себе годный старт для базового С++.
Не могу сказать, проще, или нет. Но эффект я видел лично. Это реально работает. Люди, которые пришли без каких-либо знаний, получили на выходе потрясающую мобильность в плане смены ЯП по необходимости.
khim
Беда метапрограммирования не в том, что это сложная и заумная концепция, а в том, что в соременных мейстриймовых языках — оно плохо реализовано.
А вы уверены, что в этом заслуга именно PascalABC и что выпускники MIT'а (недавно переключившиеся со Scheme на Python) имеют с этим большие трудности? Или, может быть, вопрос в правильном построении курса программирования?
mayorovp
Простите, но с каких пор LINQ является метапрограммированием?
khim
В том месте, где парсится Expression Tree и по коду на C# порождается совсем другой код на C#.
Что, собственно, метапрограммирование заметно более высокого порядка, чем возможно в C++.
Уверен на 99.9%, впрочем, что в PascalABC.Net ничего этого нету, полноценных механизмов, поверх которых построен LINQ не предусмотрено, а есть набор костыликов, который позволяет делать вид, что что-то такое у нас типа как вроде есть… но вот конкретно здесь, конкретно сейчас, а «шаг влево, шаг вправо — расстрел».
Впрочем Pascal'ю не привыкать:
write(x:10:3)
— вроде как и функция (во всяком случае так заявляет руководство), а на самом деле нет — хитрая конструкция, подобную которой самому сделать нельзя.lair
Ну а почему, кстати? Если там компилятор умеет порождать expression tree (что, все-таки, разумной сложности задача), то дальше это уже сваливается в стандартную имплементацию в .net.
khim
mayorovp
Что такое "полноценные средства работы с Expression Tree" и почему стандартная реализация неполноценна?
mayorovp
Другой код на C# никто не порождает, максимум — байт-код материализатора.
В любом случае, использование LINQ метапрограммированием не является, а реализацию Queryable провайдера никто в школе делать не будет.
khim
LINQ — это просто пример метапрограммирования, куда более приближенный к тому метапрограммированию, которое появилось в 60е в Lisp'е и в 70е в Forth'е, чем то, что творится в C++.
Где метапрограммирование, конечно, есть, вот только вместо простой концепции, которую вполне можно было бы и в школе изучить, оно превращено в ребус, к которому и разрабочики со стажем-то подходят с опаской.
Тот факт, что оно не было добавлено в язык, а было там обнаружено в результате «археологических раскопок» — ни разу не оправдание.
А вот это как раз скорее показатель того, что даже и в C# всё весьма и весьма переусложнено… это вам не Lisp и не Forth…
mayorovp
Нет, это показатель того что перед Queryable провайдерами ставится достаточно сложная задача: преобразование AST-запроса к объектам в текстовый запрос к хранилищу (обычно это SQL-запрос).
danfe
функцияпроцедура (руководства под рукой нет, чтобы процитировать), а специальная языковая конструкция (ну или оператор, если хотите). Обычных функций и процедур с переменным числом аргументов в паскале нет (хотя бы из-за порядка складывания оных в стек). Видимо, поэтому же для строк стандарт ISO Extended Pascal специально определяет WriteStr().khim
Угу. Поэтому в том же стандарте, отдельно, есть ещё и разделы The procedure read и The procedure write (и такие же для readln и writeln). Так, без задней мысли: вот да, у нас есть «нормальные» процедуры… а есть The procedure read и The procedure write… у которых особенный, отдельный, синтаксис…
P.S. Про то, что
read
иwrite
это не функции, а процедуры и стандарт их чётко отличает… каюсь, забыл…netch80
Ну вот я знаю нескольких человек, которые ещё в 90-е послали нафиг Паскаль по нескольким причинам, одной из которых было, что не хотели себя чувствовать быками по сравнению с Юпитером: ему позволено создавать отдельный синтаксис для особых случаев, а им — нет.
danfe
Да, много нас таких было (которые послали нафиг; я на лабах, помнится, так и заявил преподавателю, что буду писать и сдавать всё на сях). Тогда мы еще не понимали, чем же паскаль всё-таки хорош (более-менее понимали лишь чем он плох).
GeekberryFinn
А я вот в 90-е с C++ перешёл на Delphi, потому что написание под Windows на C++ было ещё тем песцом, а Delphi позволил это сделать легко легко и быстро.
arturpanteleev
Я думал в школах до сих пор учат на turbo pascal 7 с синим фоном :)
khim
Честное слово — это было бы полезнее. По крайней мере тем, что не возникает иллюзий на тему того, что на этом можно что-то «реальное» писать.
jknight
Нет. Один взгляд на этот вырвиглазный синий экран отбивает любое желание что-то изучать. У всех. Без исключений. В 2018 году, в век торжества разных там стилей, дизайнов, и прозрачностей, этой образины существовать не должно.
jknight
Дополним это учителями, которые на вопрос "а где же можно что-то "реальное" писать?" ответить не могут...
mayorovp
Вот чего-чего, а стилей, дизайнов и прозрачностей чем меньше — тем лучше.
danfe
GeekberryFinn
Ага! В ту эпоху он был самый лучший!
Turbo-Pascal был обрезанной версией для бедных, и писать было лучше на полноценном Borland Pascal.
jknight
Наминусовали, молодцы. Только сути не замечаете. Школьника надо заинтересовать. Студента — немного меньше, но тоже. Средства, которые предоставляют TP/BP (в том числе, средства отображения), не позволяют это сделать.
PABC.NET: Школьник вернется домой с урока, сядет к себе за компьютер, напишет очередной «калькулятор», или прыгающий спрайт, и пойдет друзьям показывать. И в этот момент выберет свою будущую профессию, поскольку ему это понравилось. Максимальный эффект за минимум усилий.
TP/BP: Чтобы школьник что-то там нарисовал, ему нужно сначала рассказать, в какой кусок системной памяти и по какому адресу заливать байтики изображения. И как их получить. Рассказать, какие прерывания включают графический режим. Выдать ему dosbox. Немного не та история, да? А программу, которую он напишет, потратив сотни, тысячи часов войны с указателями и попытками вычитать картинку из файла, потом еще и не показать никому. Результат?
По поводу стилей и прочего — извините, пжлст, но тому же школьнику «яркое» и «современное» будет смотреться лучше, чем среда уровня «кассовый аппарат в Магните с кучей горячих клавиш». Все то, что там народ пишет — сугубо из ностальгических соображений аля «ну, нам же было норм». Простите, времена поменялись.
mayorovp
Какие-то устаревшие у вас представления о BP седьмой версии…
jknight
Не уверен насчет BP, но вот хорошая ссылка для TP, которая ярко показывает «возможности»…
mayorovp
А что не так с этой ссылкой? Готовый модуль как бы. В него не надо заглядывать, его можно брать и использовать.
Но лично я помню что в BP существовал еще и системный модуль Graph, который даже скачивать не требовалось.
DoctorMoriarty
… и друзья школьника, посмотрев на калькулятор и спрайтики, покажут школьнику свой крутой смартфон с гоночками и стрелялками или что позабористее из Steam, и скажут — «а так можешь?» и школьник отойдет в печали подумав — «и правда, не могу...», а потом, когда школьник узнает, что большие дяди для рисования прыгающих спрайтов используют всякие нипанятные штуки типа OpenGL и DirectX, он может начать сильно возмущаться — почему его любимую песочницу, в которой он так легко клепал учебные поделия, совершенно не используют в продакшене, ему же, оказывается, придётся учить всякие ужасные классы и указатели, а потом и решит — ну его нафиг, это программирование. Или выберет путь копипастера со stack Overflow и GitHub — а что, рефераты с курсовыми сдавать стало проще. И пойдёт пацан к успеху.
akryukov
Я скорей поверю, что школьник нагуглит не DirectX и OpenGL, а Unity или CryEngine, на которых можно за недельку по видеоурокам сделать простейшую стрелялку. Время указателей еще придет. Но позже.
DoctorMoriarty
Нагуглит — согласен. Но я имел в виду, что случится со школьником, когда он, замотивированный песочницей, решится поступить в относительно приличный вуз на чаемую специальность :-)
akryukov
Думаю ничего особенного не случится. Будет поначалу выпендриваться тем, что много знает. Потом поймет как мало на самом деле знает. С указателями скорее всего разберется успешно. По пути приоритеты в жизни поменяются и станет либо Enterprise-разработчиком, либо пойдет дальше к мечте, присоединится к какой-нибудь студии или начнет свою.
danfe
Error1024
Возможно автор комментария не в курсе сколько всего «реального» было на TP написано, и продолжает использоваться в некоторых местах.
khim
Я про TP7, разумеется. И нет, я как раз в курсе, сколько всего было написано… Самый древний рарит, который я видел — это жутчайшая система анализа «чёрных ящиков» (те, которые на само деле оранжевые) даже на TP7, а на, прости господи, Turbo Pascal 3.0. Несколько тысяч .CHN файлов! Как это всё писалось и что случилось за долгие годы с авторами — можно только догадываться.
Но в современном мире TP (да и BP7 тоже), увы, годится только для обучения. Хотя бы потому что созданные им бинарники на современных 64-битных операционках (хотя на десктопе, хоть на телефоне) запускаются только под эмулятором…
С тем же успехом можно какой-нибудь CodeWarrior куда-нибудь пытаться прикрутить… А тоже ведь крутая штука в своё время была…
ElectroGuard
Зачем менять шило на мыло?
Кроме Pascal ABC существуют:
Delphi
Lazarus/FPC
Pascal for Android
play.google.com/store/apps/details?id=com.duy.pascal.compiler&hl=ru
И I-Pascal (плагин для IDEA)
plugins.jetbrains.com/plugin/7340-i-pascal
Pascal — отличный язык.