Несколько причин забыть PascalABC.Net

Введение


Времена старого и доброго 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: Ссылка на объект не указывает на экземпляр объекта.
в PascalABCCompiler.NETGenerator.ILConverter.ConvertCommonGenericInstanceTypeMembers(ICommonGenericTypeInstance value)
в PascalABCCompiler.NETGenerator.ILConverter.ConvertFromTree(IProgramNode p, String TargetFileName, String SourceFileName, CompilerOptions options, String[] ResourceFiles)
в PascalABCCompiler.Compiler.Compile()'
Нормально? Не думаю. А вот и ссылка на этот Issue. Сразу можно сделать два вывода: не надо использовать автоклассы в этом компиляторе с обобщениями.

Не используйте форматирование


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

Ну. И что?
Реклама
Комментарии 312
    +1

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

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

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

        +2

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

          +2

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

            +2

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

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

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

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

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


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

                  +3

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

                    –5

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

                  0

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

                  +3
                  Согласен. Если слова if, end еще знают, то всякие else, until вряд ли. К тому же Паскаль очень многословный, а дети медленно печатают
                  • НЛО прилетело и опубликовало эту надпись здесь
                  0
                  ну хотя бы тем что приближен к человеческому языку 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 можно вообще оформлять домашние работы с последовательным описанием и графиками, это будет развивать много полезных навыков.

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

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


                    А что begin и end?

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


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

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

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

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


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

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


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

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


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

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


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

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


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

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

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

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

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


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

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

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

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


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


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

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

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

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


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


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

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

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

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


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

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


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

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

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

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


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

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

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

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

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


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

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

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

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


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

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


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

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

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

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


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

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


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

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

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

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


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

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


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

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


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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                                            0

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

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

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

                                            0

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


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

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

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

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

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

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

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

                                              Моя практика показывает, что одна из основных граблей для начинающих, которую приходится преодолевать именно форсированием дисциплины написания — это то, что забывают, что вокруг нескольких операторов под условием надо ставить скобки вида 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 — нет, сбивает ещё раз. И только после пятого «дети, это невозможно понять, это надо только запомнить!» получается устойчиво пробиться через эту несогласованность.
                                                0
                                                Моя практика показывает, что одна из основных граблей для начинающих, которую приходится преодолевать именно форсированием дисциплины написания — это то, что забывают, что вокруг нескольких операторов под условием надо ставить скобки вида 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
                                                  +2
                                                  > Любопытно. Я своим великовозрастным студентам вообще не рассказываю, что (в java, c#, js) они опциональны. Как следствие — все всегда ставят. Если кто-то сам об этом узнал, то из подобных проблем человек уже вырос.

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

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

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

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

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

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

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

                                                      –6
                                                      Отвлеченный пример. Только что сочинил. Вот простой до безобразия класс:
                                                      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 проще.
                                                        +2

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


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

                                                          0
                                                          Извиняюсь, невнимательно прочитал.
                                                          +1

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

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

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

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


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


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

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

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


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

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


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

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


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

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

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

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


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

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

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

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


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

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

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

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


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

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

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

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


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

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

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

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

                                                                    То есть 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? Паскаль же вроде как компилируемый язык?

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

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

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


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

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

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

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


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

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


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

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


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


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

                                                                              0

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

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

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


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

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


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

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

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

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


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

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


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

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

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

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


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

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


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


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

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


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


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

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

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

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


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


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

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


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

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


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

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

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

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


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

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


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

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


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

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


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

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

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

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


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

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

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

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


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

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


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

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


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

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

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

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


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

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

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

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


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

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

                                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                                            0
                                                                                            Материал так легче и лучше усваивается — когда не спать хочется от скуки и тупой зубрёжки без понимания, а реально интересно.

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

                                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                0
                                                                                                = возможность свободно и наглядно попрактиковаться.

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

                                                                                                  0

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


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

                                                                                                    0

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

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

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

                                                                                                        0

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

                                                                                                          0

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

                                                                                                            –1

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

                                                                                                              0

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

                                                                                                                0

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

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

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

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

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

                                                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                            0

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

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

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

                                                                                                                0

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


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

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

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

                                                                                                                    0

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

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

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


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

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

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

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

                                                                                                                            0

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

                                                                                                                              0

                                                                                                                              SICP, глава 1.1.1:


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

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

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

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


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

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

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

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


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

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

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

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


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

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

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

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


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

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

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

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


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


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

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

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

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

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

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

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

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


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

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

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


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

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

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

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


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

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


                                                                                                  Подробнее.

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

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

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

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


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

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


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

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


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

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


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

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

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

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

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

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

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

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

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


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

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


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

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

                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                              0

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

                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                  0
                                                                                                                  Ну конечно же нету, ведь то что вы привели — не Питон, а совсем другой язык :-)
                                                                                                              –1
                                                                                                              А что мешает запустить вашу программу на планшете? Уж не различие ли сред выполнения?

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

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

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


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


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


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

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

                                                                                            –1
                                                                                            Вот, к слову, проект
                                                                                            Python for Delphi:
                                                                                            github.com/pyscripter/python4delphi
                                                                                              +1

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

                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                  0

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

                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                      +1

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

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

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

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

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


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

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


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

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


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

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

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

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


                                                                                                            Я тут при чём?

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

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

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


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

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

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

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

                                                                                        0

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

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

                                                                                            Может, его стоимость

                                                                                              0
                                                                                              Delphi Starter — бесплатный. С коммерческой лицензией.
                                                                                              www.embarcadero.com/products/delphi/starter/free-download
                                                                                                +1
                                                                                                Обрезанный. Без графиков, без работы с СУБД, без отчетов. Все нужно или писать самому или докупать.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                                                                                                      Вот тут мне и кажется, что и C# и Pyton требуют более высокого порога вхождения, чем тот же самый Pascal. Пусть даже он ABC.Ne