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



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

Введение


Времена старого и доброго 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. А вот и пример бага, который проявляется при написании простейших программ. И вот еще (с массивами).

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



Комментарии (275):

  1. ru_vlad
    /#18883945 / +1

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

    • DASM
      /#18884017 / +5

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

      • ru_vlad
        /#18884021 / +1

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

    • lair
      /#18884095 / +1

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

      • ru_vlad
        /#18884129

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

        • akryukov
          /#18884143 / +3

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

          • ru_vlad
            /#18884161

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

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

            • lair
              /#18884175 / -2

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

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


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

              • ru_vlad
                /#18884203 / +1

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

                • lair
                  /#18884211

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

            • akryukov
              /#18884213

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

          • Simplifier
            /#18886665 / +3

            Согласен. Если слова if, end еще знают, то всякие else, until вряд ли. К тому же Паскаль очень многословный, а дети медленно печатают

            • JobberNet
              /#18886881

              Эти все слова -легко посмотреть в словаре, прямо на мобильнике.

        • lair
          /#18884155

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

          • ru_vlad
            /#18884193 / +2

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

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


            А что begin и end?

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


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

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

            • lair
              /#18884205 / -2

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

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


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

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


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

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


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

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


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

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


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

              • ru_vlad
                /#18884221 / +2

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

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

                • lair
                  /#18884227

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

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


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

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

                  • ru_vlad
                    /#18884259

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

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


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


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

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

                    • lair
                      /#18884293 / -1

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

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


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


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

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

                      • ru_vlad
                        /#18884325

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

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


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

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


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

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

                        • lair
                          /#18884329

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

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


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

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

                      • ElectroGuard
                        /#18888115 / -1

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

              • ru_vlad
                /#18884239

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

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


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

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

                • lair
                  /#18884245

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

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


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

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


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

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

                  • ru_vlad
                    /#18884263

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

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


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

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


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

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

                    • lair
                      /#18884315

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

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


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

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


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

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


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

                      • GeekberryFinn
                        /#18884351

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

                        • lair
                          /#18884355

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

                      • mayorovp
                        /#18884423

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

                      • longclaps
                        /#18884457 / +1

                        Паскалевский until — вполне удобная конструкция, но совершенно не вписывается в питоновский синтаксис «на отступах».
                        Интересно, что Ruby, язык чуть более близкий к паскалю, чем python, и достаточно успешный, в качестве альтернативы вообще не рассматривается.

                        • GeekberryFinn
                          /#18884467

                          Почему не вписывается?

                          • longclaps
                            /#18884485

                            Потому что «на отступах». Попробуйте написать аналогичный этому фрагмент в паскаль-стиле, где внутренности цикла обрамлены сверху repeat и снизу until i<10 соответственно

                            i = 0
                            while i < 10:
                                print(i)
                                i += 1 

                            • GeekberryFinn
                              /#18884505

                              do :
                                  print(i)
                                  i += 1 
                                  until i<9
                              

                              Так что причина не в этом, а в том что судя по всему за основу брался C-синтаксис, в котором слова until просто нет. Но зато есть do… while.
                              do :
                                  print(i)
                                  i += 1 
                                  while i<9
                              

                              • longclaps
                                /#18884529

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

                      • netch80
                        /#18887261

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

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

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

                        Я бы даже сказал, что это правда в виде шутки :)

                      • ElectroGuard
                        /#18887679

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

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

                        • netch80
                          /#18887731

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

                          • Error1024
                            /#18887769

                            Видимо я что-то делал не так, но у меня ощущения от jupiter остались, как от чего-то глючного и тормозного.

                          • lair
                            /#18887873

                            А «реальное приложение» делается из него просто копированием кода в отдельный файл и установкой нескольких параметров. Хотя, думаю, уже сделали переходник для прямого запуска в формате файла сохранения jupyter

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

                        • lair
                          /#18887871

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

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


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

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

                          • ElectroGuard
                            /#18887961

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

                            • lair
                              /#18887969

                              Исследования — исследованиями, но результат в ноутбуке не отдать никому, увы.

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

                              • ElectroGuard
                                /#18887979

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

                                • lair
                                  /#18888003 / +1

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

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

                                  • ElectroGuard
                                    /#18888065

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

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

                                    • lair
                                      /#18888155

                                      Так в чем же бесценность именно Юпитера?

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

                                      • ElectroGuard
                                        /#18888913

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

                                        • lair
                                          /#18889037

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

                              • ElectroGuard
                                /#18887981

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

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

                                • lair
                                  /#18888007

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

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

                                  • ElectroGuard
                                    /#18888069

                                    Ну вы же писали:

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

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

                                    • lair
                                      /#18888161

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

                                      • ElectroGuard
                                        /#18888903

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

                                        • lair
                                          /#18889041

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

                • akryukov
                  /#18884271

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

                  • ru_vlad
                    /#18884279

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

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

              • akryukov
                /#18884249

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


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

                • lair
                  /#18884281

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

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

                • GeekberryFinn
                  /#18884301

                  Тут, даже, лучше не просто if, а end if, end case, end for и тому подобное.
                  Потому что несколько end не намного лучше, чем несколько } — то есть оставляет возможность запутаться.

                  • netch80
                    /#18887329

                    А тут уже надо иметь поддержку от редактора, как, например, '%" в vim, для перехода на парную скобку.
                    end if само по себе не помогает, если этих if было три вложенных.

                    • akryukov
                      /#18887595

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

            • netch80
              /#18887311

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

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

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

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

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

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

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

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

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

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

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

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

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

              • akryukov
                /#18887627

                Моя практика показывает, что одна из основных граблей для начинающих, которую приходится преодолевать именно форсированием дисциплины написания — это то, что забывают, что вокруг нескольких операторов под условием надо ставить скобки вида 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

                • netch80
                  /#18887633 / +2

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

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

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

                  В Паскале, очевидно. Я говорил как раз про него и его недостатки.

              • ElectroGuard
                /#18887707

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

                Блок Repeat'а заканчивается until'ом. Парной конструкции для while, увы, не существует. Поэтому добавляют обычные программные скобки. Что тут запоминать? For, к слову, также организован.

                • netch80
                  /#18887723

                  А в C — не так: что while, что do-while требуют один оператор или блок.
                  А в Perl — while и until взаимозаменяемы как в цикле с предусловием, так и в цикле с постусловием.
                  И оба их варианта именно в этом смысле логичнее (особенно перловый).

          • GeekberryFinn
            /#18884201

            Вы правда считаете, что замена: на then что-то изменит в читаемости?
            Только для новичка.

      • Volobuev_Ilya
        /#18884167

        Ближе тем, что он более лаконичен. И позволяет проще описывать свои «хотелки». Python — язык отличный. Я на нем сам пишу.

        • lair
          /#18884171 / +1

          Ближе тем, что он более лаконичен. И позволяет проще описывать свои «хотелки».

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

          • Volobuev_Ilya
            /#18884177 / -3

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

            • lair
              /#18884187 / +1

              Ну, например, проще гораздо пишутся структуры данных. Например, стек.

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

              • Volobuev_Ilya
                /#18884219 / -5

                Отвлеченный пример. Только что сочинил. Вот простой до безобразия класс:

                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 проще.

                • lair
                  /#18884223

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


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

                  • Volobuev_Ilya
                    /#18884225 / -1

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

                • Nagg
                  /#18884419

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

                  • ElectroGuard
                    /#18887725

                    Особенно с учетом того, что в Delphi эта вся обвязка прописывается автоматом 1-2 нажатиями кнопок. Думаю, что в Шарпе не сложнее.

                • Error1024
                  /#18885093

                  Нет, не проще, да короче, но не проще, магическое __init__ уж точно не упрощает код.

                  • ElectroGuard
                    /#18887727

                    Ага, особенно __init__ сильно улучшил читаемость :)

                    • netch80
                      /#18887739

                      IMHO — улучшил. Потому что универсальное имя для конструктора на все случаи. В коде же на каком-нибудь C++ иногда, пока дойдёшь до конструктора, забываешь, как класс звался, и чем является функция с данным именем.

                      • Error1024
                        /#18887779

                        В какой-то мере согласен, просто имя, такое же как у класса, тоже не супер.
                        Благо в Delphi/ObjectPascal так старательно слитым автором поста все максимально логично: конструктор в коде выделен ключевым словом constructor вместо function/procedure.

                      • ElectroGuard
                        /#18887821

                        Ну если с плюсами разве что сравнивать :)

                        • JobberNet
                          /#18888531

                          А в Delphi объектная модель — та же самая, что и в Borland C++, не совпадая с объектной моделью в Borland Pascal.

                          • ElectroGuard
                            /#18888917 / +1

                            Не понял суть комментария в обсуждаемой ветке.

            • retran
              /#18886761

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

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

      • APXEOLOG
        /#18885095 / +1

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


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


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

        • lair
          /#18885123

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

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


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

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


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

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


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

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

          • APXEOLOG
            /#18885143

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

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


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

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

            • lair
              /#18885159

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

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


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

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

              • APXEOLOG
                /#18885843

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

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


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

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

                • lair
                  /#18886011

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

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


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

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

      • zartarn
        /#18886241

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

        и не по теме
        Мне в целом не критично на чем писать (ну я про простенькое конечно на уровне знания синтаксиса), но вот с операторными скобками нравится больше. Питоном приходилось пользоваться, но эта привычка увы, постоянный дискомфорт :(.
        Это так же как в бейсике, где надо обозначать не окончание ";", а что следующая является продолжением — тоже боль.

      • ElectroGuard
        /#18887645

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

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

        • netch80
          /#18887743

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

          • Error1024
            /#18887783

            В Lazarus/Delphi не надо ничего писать — достаточно накидать в редакторе форм нужную форму, ничего проще для быстрого создания GUI чем данные IDE в жизни не видел.

          • ElectroGuard
            /#18887825

            Ничего писать не надо. Форма идёт в комплекте с модулем, накидать можно на неё чего угодно за несколько минут — и картинок и графиков. Да и тот же ноутбук можно повторить 1:1, только, видимо, никому такое чудо пока в голову не приходило :)

            • lair
              /#18888051

              Ничего писать не надо

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

              • ElectroGuard
                /#18888087

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

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

                • lair
                  /#18888165

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

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


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

                  • ElectroGuard
                    /#18888937 / -1

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

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

                    • lair
                      /#18889081

                      Ноутбуки могут быть реализованы на формах, при желании.

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


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

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


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

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


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


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

                      • akryukov
                        /#18889161

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

                        • lair
                          /#18889199

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

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


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

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


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

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

                          • akryukov
                            /#18889251

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

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


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

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


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

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

                            • lair
                              /#18889305

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

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


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

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


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


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

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


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


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

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

                              • akryukov
                                /#18889399

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

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


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


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

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


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

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


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

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

                                • lair
                                  /#18889463

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

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


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

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


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

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


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

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


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

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

                                  • akryukov
                                    /#18889585

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

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


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

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

                                    • lair
                                      /#18889613

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

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


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

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


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

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


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

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

                                      • akryukov
                                        /#18889645 / -1

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

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


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

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

                                        • lair
                                          /#18889685

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

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


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

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

                                • JobberNet
                                  /#18889555

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

                                  • akryukov
                                    /#18889601

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

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

                                    • JobberNet
                                      /#18889669

                                      При чем тут баловство с REPL?

                                      = возможность свободно и наглядно попрактиковаться.

                                      • akryukov
                                        /#18889709

                                        = возможность свободно и наглядно попрактиковаться.

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

                                        • lair
                                          /#18889743

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


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

                                          • akryukov
                                            /#18889815

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

                                            • lair
                                              /#18889821

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

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

                                              • akryukov
                                                /#18889829

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

                                                • lair
                                                  /#18889845

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

                                                  • akryukov
                                                    /#18889963 / -1

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

                                                    • lair
                                                      /#18890463

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

                                                      • akryukov
                                                        /#18891089

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

                                                        • lair
                                                          /#18891155

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

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

                                              • zartarn
                                                /#18891411

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

                                                • lair
                                                  /#18891927

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

                                            • JobberNet
                                              /#18890007

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

                                              • akryukov
                                                /#18891067

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

                                                • lair
                                                  /#18891165

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

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

                                                  • akryukov
                                                    /#18892797

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


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

                                                    • lair
                                                      /#18893661

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

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

                        • retran
                          /#18889415

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

                          • akryukov
                            /#18889471

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


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

                            • ahmpro
                              /#18892789 / -1

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

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

                              • akryukov
                                /#18892811 / -1

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

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


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


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

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

                            • retran
                              /#18893939

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

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

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

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

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

                              • akryukov
                                /#18894111

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


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

                      • ElectroGuard
                        /#18890527 / -1

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

                        • lair
                          /#18890543

                          Максимум, чему вы сможете научить в Юпитере — это работать с данными.

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


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

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

                          • ElectroGuard
                            /#18891557 / -1

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

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

                            • lair
                              /#18891961 / +1

                              Паскаль давно сросся с формами.

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


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

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


                              Подробнее.

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

                              • ElectroGuard
                                /#18892711 / -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 сервисом занимаюсь, среди прочего.

                                • lair
                                  /#18893651

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

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


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

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


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

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


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

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


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

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

                                  • ElectroGuard
                                    /#18893963 / -1

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

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

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

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

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

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

                                    • lair
                                      /#18893995

                                      Под FMX пересобрать — и можно.

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


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

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


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

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

                                      • JobberNet
                                        /#18894239

                                        Для новичков язык с явными begin и end — нагляднее.

                  • ElectroGuard
                    /#18888947 / -1

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

                    • lair
                      /#18889047 / +1

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

                      • JobberNet
                        /#18889301

                        Компилятор кода?

                        • lair
                          /#18889307

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

                          • JobberNet
                            /#18889581

                            Интерпретатор — это всегда мееееедлееееееноооооооо…
                            image
                            а компилятор — очень быстро!

                            • lair
                              /#18889595 / +1

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

                      • ElectroGuard
                        /#18891617 / -1

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

                        • lair
                          /#18891969

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

                          • ElectroGuard
                            /#18893985 / -1

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

                            • lair
                              /#18894017

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

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


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

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


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

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


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

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

              • ElectroGuard
                /#18888107

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

                • lair
                  /#18888171 / +1

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

        • lair
          /#18887863

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

    • Volobuev_Ilya
      /#18884157 / -1

      Можно писать в Lazarus. Да, это сложнее, но если все подробно объяснять, то нормально. Тем более баги в программах уровня «Hello world» не будут вылезать, как например здесь.

    • GeekberryFinn
      /#18884159

      А что мешает использовать старый добрый Делфи?

      • Volobuev_Ilya
        /#18884173

        Ничего. А Вы бы что предпочли из этих двух?

      • alan008
        /#18884441

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

        • dmytrorem
          /#18886675

          Delphi Starter — бесплатный. С коммерческой лицензией.
          www.embarcadero.com/products/delphi/starter/free-download

          • Siemargl
            /#18887939

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

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

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

    • alfred200
      /#18886677 / +1

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

      • ainoneko
        /#18888649

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

        Ссылка «Официальный сайт Pascal ABC (рус.)» ведёт на новую версию.

  2. skyblade
    /#18884035 / +2

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

    • GloooM
      /#18884081 / +1

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

      • khim
        /#18885321 / +1

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

        А вот Паскаль… вроде как и настоящий язык — а вроде как и нет.

  3. vldby
    /#18884169

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

  4. danfe
    /#18884197

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

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

  5. AhJong
    /#18884237

    Дайте детям на выбор Python для Minecraft и Pascal. И посмотрите на результат через пару недель.

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

    • Error1024
      /#18885077

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

    • Lopar
      /#18885731

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

  6. Pochemuk
    /#18884313

    Как то смешалось всё мягкое с теплым, а люди с конями…

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

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

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

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

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

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

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

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

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

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

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

    • longclaps
      /#18884473

      Математик-алгоритмист, испытвающий проблемы с порогом вхождения в C# или Pyton — это чудо как хорошо.

      • Pochemuk
        /#18884605

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

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

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

    • lair
      /#18884481

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

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


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

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

      • Pochemuk
        /#18884609 / +1

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

        • lair
          /#18884873

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

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

  7. Alert123
    /#18884503 / +1

    Как то попросили посмотреть почему програмка не работает. Оказалось она на PascalABC.
    И суть была в том что то ли continue внутри цикла работало как break, то ли наоборот, т.е. баг в самом компиляторе, хотя вроде он и не совсем сырой раз в школах его давно используют.
    Удачного обучения с break/continue, детки. :)

    • ainoneko
      /#18885693

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

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

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

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


  8. KostaArnorsky
    /#18884553

    Всё смешалось в доме Облонских.
    Язык программирования — это не IDE и не компилятор, это набор правил. Понятия не имею, насколько хорош или плох язык PascalABC.Net, но претензии были только к IDE и компилятору.
    Но в любом случае, не понимаю, зачем было свою IDE городить, когда Visual Studio поддерживает Language Extensions, а VS Community бесплатная?

  9. FreeManOfPeace
    /#18884593 / -1

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

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

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

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

    • Volobuev_Ilya
      /#18884675

      Среда PascalABC тоже кривая. Ниже примеры с комментариями.

      //Ошибка: Нельзя преобразовать выражение типа integer к типу Object.
      procedure F(x: object);
      begin
        exit;
      end;
       
      begin
        F(1); // <--
      end.


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


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

      • Siemargl
        /#18884999

        Подучить бы тебе Паскаль…

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

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

        • Siemargl
          /#18886473

          Посмотрел повнимательнее утром на свежую голову. Проверил в версии 3.4.0.1694

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

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

          Кроме того, private и protected члены видны отовсюду в пределах модуля, в котором определен класс
          Пример разнес по юнитам — все отработало согласно описанию.

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

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

      • Error1024
        /#18885081 / -1


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

      • mayorovp
        /#18885349 / +1

        Ну офигеть кривость! Если поменять private и public местами, то доступ, видите ли, пропадает…

        Вы вообще знаете что эти ключевые слова означают? Подсказка: они управляют доступом извне класса :-)

        • khim
          /#18885439 / -1

          А вы вообще знаете что такое перегрузка функций? Подсказка: это когда есть много функций — а имя у них одно.

        • kogemrka
          /#18885535

          Ну офигеть кривость! Если поменять private и public местами, то доступ, видите ли, пропадает…


          Как я понял, автор имеет в виду не замену public на private, а порядок описания секций private и public.
          В примере 2 порядок один, в примере 3 — порядок другой. Поведение, по словам автора, разное.

          • mayorovp
            /#18885549

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

  10. aalebedev
    /#18884945

    Это среда, которая делалась для замены Turbo Pascal или платного Делфи.
    Все таки среда создавалась в 2002 году.

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

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


    • ainoneko
      /#18885279

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

      Я много с ним не занимался, но уже видел, как в «Watch» не обновляется присваиваемое значение элемента массива. И как-то раз удалось просто случайно уронить компилятор.

    • ElectroGuard
      /#18887759 / -1

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

      • GeekberryFinn
        /#18887943

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

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

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

        • ElectroGuard
          /#18887997

          Я имел в виду Pascal ABC, если что. Позиционировались как учебная оболочка — так бы и оставались.

  11. Error1024
    /#18885089

    1) С тем как хорошо автор поста знает паскаль, все ясно:

    2) Не ясно, зачем автор требует от среды, созданной исключительно для обучения, кучи продвинутых фич. (А с приведенным примером выше, можно усомниться в том, что автор действительно глюки словил, а не напоролся на собственноручно расставленные грабли)
    3) Советую автору взглянуть на настоящую IDE для Object Pascal — Lazarus.

  12. Xitsa
    /#18885461

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

    class TA<T> {
     T x;
    }
    class TB<T, T2>: TA<T>
    {
    }
    

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

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

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

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

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

  13. jknight
    /#18885905

    Какая, однако, активная темка тут на Хабре нашлась! Лол, да это же победа.

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

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

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

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

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

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

    • jknight
      /#18885933 / +1

      Извиняюсь, с «крупными проектами» я тут переборщил — здесь этого не было. Было в Википедии :) Впрочем, из «попрограммировал на PABC.NET, стал разработчиком среднего уровня, среда жить не дает», оно планомерно вытекает…

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

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

      Нет, один юзкейс есть — вставить код из стековерфлоу. А еще?

      • lair
        /#18886029

        Если не делаешь это на автомате руками, работа превращается слегка в боль, не?

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

        • jknight
          /#18886045

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

          • lair
            /#18886053

            Да.

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


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

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

            • jknight
              /#18886089

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

              Да

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

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

              • lair
                /#18886095

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

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


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

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

                • jknight
                  /#18886123

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

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

                  • lair
                    /#18886135

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

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


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

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

                    • jknight
                      /#18886185

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

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

                      • lair
                        /#18886193

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

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


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

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


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

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

                        • warlock13
                          /#18888435

                          Количество пробелов зависит от ЯП, но фича Smart Indentation — универсальная.

                          • lair
                            /#18889035 / +1

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


                            1. набираем if(x>0)
                            2. нажимаем Enter, получаем сдвиг относительно if
                            3. набираем {, она немедленно сдвигается под if (т.е., сдвиг убирается)
                            4. нажимаем Enter, получаем сдвиг относительно {

      • quverty
        /#18887169

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

        • jknight
          /#18889357

          В некотором смысле. Там были еще правки от незарегистрированного пользователя, и их стиль изложения/суть претензий крайне сильно напоминают то, что написано здесь. Была еще найдена связь между пользователем с тем же именем с сайта cyberforum, с выложенными исходниками того же характера, а также кусками кода, который он выкладывал как на форум Паскаля, так и на cyberforum.

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

    • lair
      /#18886051

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

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

      • jknight
        /#18886079

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

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

        • lair
          /#18886091

          да и зачем? [...] Зачем два раза одно и то же писать, если оно уже есть?

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


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

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

          • jknight
            /#18886153

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

            • lair
              /#18886163

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

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


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

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


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

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

              • jknight
                /#18886195

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

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

                • lair
                  /#18886201

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

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

                  • jknight
                    /#18886223

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

                    • lair
                      /#18886231

                      Паскаль позволяет ее сформировать.

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


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

                      • jknight
                        /#18886239

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

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

                        • lair
                          /#18886257

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

                          • jknight
                            /#18886323

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

                            • lair
                              /#18886359

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

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

              • jknight
                /#18886205

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


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

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

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

                • lair
                  /#18886215

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

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


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

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

                  • jknight
                    /#18886235

                    практически

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

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

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

                    • lair
                      /#18886249

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

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


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

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

                      • jknight
                        /#18886303

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

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

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

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

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

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

                        Как уже сказал, завершим дискуссию. Конструктивом здесь уже не пахнет.

                        • lair
                          /#18886349

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

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


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

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


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

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

                        • akryukov
                          /#18886429

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

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

                          • jknight
                            /#18886565

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

                            • akryukov
                              /#18886605

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

                              • jknight
                                /#18886633

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

                    • khim
                      /#18886571 / +2

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

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

                      • jknight
                        /#18886591

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


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

                        • khim
                          /#18886755

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

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

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

                          • mayorovp
                            /#18887227

                            Простите, но с каких пор LINQ является метапрограммированием?

                            • khim
                              /#18887489

                              В том месте, где парсится Expression Tree и по коду на C# порождается совсем другой код на C#.

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

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

                              Впрочем Pascal'ю не привыкать: write(x:10:3) — вроде как и функция (во всяком случае так заявляет руководство), а на самом деле нет — хитрая конструкция, подобную которой самому сделать нельзя.

                              • lair
                                /#18887519 / +1

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

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

                                • khim
                                  /#18887573

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

                                  • mayorovp
                                    /#18887587

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

                              • mayorovp
                                /#18887551

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


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

                                • khim
                                  /#18887565

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

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

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

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

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

                                  • mayorovp
                                    /#18887577

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

                              • danfe
                                /#18887703

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

                                • khim
                                  /#18887741 / +1

                                  В том-то и дело, что это не «настоящая» функция процедура (руководства под рукой нет, чтобы процитировать), а специальная языковая конструкция (ну или оператор, если хотите).
                                  В том-то и дело, что стандарт это называет File handling procedures.

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

                                  P.S. Про то, что read и write это не функции, а процедуры и стандарт их чётко отличает… каюсь, забыл…

                                • netch80
                                  /#18887749

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

                                  • danfe
                                    /#18887795

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

                                  • GeekberryFinn
                                    /#18887965

                                    я знаю нескольких человек, которые ещё в 90-е послали нафиг Паскаль

                                    А я вот в 90-е с C++ перешёл на Delphi, потому что написание под Windows на C++ было ещё тем песцом, а Delphi позволил это сделать легко легко и быстро.

  14. arturpanteleev
    /#18886043

    Я думал в школах до сих пор учат на turbo pascal 7 с синим фоном :)

    Скрин
    image

    • khim
      /#18886575 / +1

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

      • jknight
        /#18886607 / -2

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

        • jknight
          /#18886609

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

        • mayorovp
          /#18886669 / +1

          Вот чего-чего, а стилей, дизайнов и прозрачностей чем меньше — тем лучше.

        • danfe
          /#18887721 / +2

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

          • GeekberryFinn
            /#18887985

            Ага! В ту эпоху он был самый лучший!

            danfe Позвольте уточнить: на этом [нельзя] что-то «реальное» писать — это вы про паскаль вообще (в широком смысле) или именно про TP7?

            Turbo-Pascal был обрезанной версией для бедных, и писать было лучше на полноценном Borland Pascal.

        • jknight
          /#18889413 / -1

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

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

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

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

          • mayorovp
            /#18889641

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

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

            • jknight
              /#18889751

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

              • mayorovp
                /#18889825

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

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

          • DoctorMoriarty
            /#18893875

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

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

            • akryukov
              /#18894071

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

              • DoctorMoriarty
                /#18894121

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

                • akryukov
                  /#18894153

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

      • danfe
        /#18887745

        По крайней мере тем, что не возникает иллюзий на тему того, что на этом можно что-то «реальное» писать.
        Позвольте уточнить: на этом [нельзя] что-то «реальное» писать — это вы про паскаль вообще (в широком смысле) или именно про TP7?

        • Error1024
          /#18887789

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

        • khim
          /#18887835 / +1

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

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

          С тем же успехом можно какой-нибудь CodeWarrior куда-нибудь пытаться прикрутить… А тоже ведь крутая штука в своё время была…

  15. ElectroGuard
    /#18887651

    Зачем менять шило на мыло?
    Кроме Pascal ABC существуют:
    Delphi
    Lazarus/FPC
    Pascal for Android
    play.google.com/store/apps/details?id=com.duy.pascal.compiler&hl=ru
    И I-Pascal (плагин для IDEA)
    plugins.jetbrains.com/plugin/7340-i-pascal
    Pascal — отличный язык.