Обсуждение книги Осипова А.В. «PascalABC.NET: Введение в современное программирование»

Спасибо, в исходниках поправил. В PDF исправление будут видно позднее (после перевыкладывания).

Осипов_PascalABC.NET Введение в современное программирование_2019.pdf стр. 75 Напечатано:

if not P then B;
If A then else B;

Надо :

if not P then B;
If P then else B;

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

Осипов_PascalABC.NET выбор школьника ч1_2020_09.pdf

Стр.15 книги

В последнем абзаце:

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

стр.20 книги

пример кода:

// и так тоже пишут комментарии,
// когда они не помещаются в строке

Может лучше оформить многострочным комментарием (и/или посвятить комментариям больше места):

begin
  оператор 1;
  оператор 2; // а вот так пишут комментарии
…
  оператор n;
  { и так тоже пишут комментарии,
  когда они не помещаются в строке }
end.

стр.23 книги

Может рассмотреть и такой вариант:

begin
  writeln('          *       ');
  writeln('         ***      ');
  writeln('          *       ');
  writeln('         ***      ');
  writeln('        *****     ');
  writeln('       *******    ');
  writeln('          *       ');
  writeln('         ***      ');
  writeln('        *****     ');
  writeln('       *******    ');
  writeln('      *********   ');
  writeln('     ***********  ');
  writeln('          *       ');
  writeln('          *       ');
end.

Здесь читаемость кода зашкаливает… И детям нравится. И ошибку трудно допустить. И копирование вставка закрепляется.

стр.37 книги

Напечатано:

Имеется также кортежное присваивание . Список в скобках – это

есть и кортеж, но это материал второй части книги.

Должно быть:

Имеется также кортежное присваивание . Список в скобках – это

и есть кортеж, но это материал второй части книги.

стр.40 книги

image

стр. 52 книги

Напечатано:

var S :=Sqrt(p * (p - a) * (p - b) * (p - c));

(и результат: )

Введите координаты первой вершины: -5 -3

Введите координаты второй вершины: 0 -6.1

Введите координаты третьей вершины: 11 5

Периметр треугольника равен 39.3988, площадь 821.7082

Радиуc описанной окружности 0.5004

Радиуc вписанной окружности 41.7124

Должно быть:

var S :=Sqrt(p1 * (p1 - a) * (p1 - b) * (p1 - c));

Введите координаты первой вершины: -5 -3

Введите координаты второй вершины: 0 -6.1

Введите координаты третьей вершины: 11 5

Периметр треугольника равен 39.3988, площадь 44.8000

Радиуc описанной окружности 9.1774

Радиуc вписанной окружности 2.2742

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

Только начал читать книгу и наткнулся на вот такое:

Современный PascalABC.NET нацелен на создание небольших и средних программ-ных проектов, выигрывая у своего «старшего брата» – языка C# – по лаконичности записи программ и компактности инфраструктуры, создаваемой в процессе ком-пиляции. Так, при написании простой консольной программы на C# в Visual Studio 2017 создаётся 11 папок и 10 файлов, а в PascalABC.NET– 1 файл.

Но ведь это же принципиально разные вещи! Среда разработки VS — это одно. Для упомянутых небольших и средних программ она не нужна, достаточно любого нормального текстового редактора и консольного компилятора csc, который ставится вместе с .NET и mono. А сам язык C# — это совершенно другое:

using System;
 
namespace HelloWorld {
    class Hello {         
        static void Main(string[] args)  {
            Console.WriteLine("Hello World!");
        }
    }
}

По идее достаточно это всё сохранить в файл hello.cs и скомпилировать csc. Код конечно чуток длиннее, чем на pABC, но незначительно.

Дальше странности не кончаются:

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

Каким образом FreePascal устаревший? Стабильная версия 3.2.2 вышла в мае этого года, у pABC последняя версия вышла в апреле.

Вы сами-то станете заниматься вызовами csc? Здесь речь идёт об удобности, экономии времени и места при написании программ, паскальные программы легко передавать как файлы, а в C# придётся делать архив всего проекта или отсылая файл оставлять создание проекта на другого человека. Это не всем удобно. Конечно, можно вообще использовать C# Interactive и скрипты .csx, если вы знаете что это такое.

Фрипаскаль — устаревший (к слову, последняя версия PascalABC.NET вышла вчера) по своим возможностям древний диалект паскаля. И меня дико бесило в школе то, что мы изучаем это устаревшее говно, работая в современной среде PascalABC.NET, и совсем не изучаем возможности этого современного диалекта, приходилось самому лазить по всяким киберфорумам, выискивая людей, которые могут что-то подсказать. У меня это получилось и за пару лет я успешно вкатился как в C#, так и во весь .NET, за что благодарен разработчикам этой среды и самому себе, но никак не тем людям, которые отвечали за наши образовательные программы, оставляя в них это чудище FreePascal.

2 лайка

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

И какой категории пользователей Вы предлагаете набирать коды программ в текстовом редакторе? Авторам языка C# ? Кто это назубок знает все необходимые для работы библиотеки, свойства и методы? Ерунду пишете, право же…

Каким образом FreePascal устаревший?

Очень простым. Компилятор можно перевыпускать и для Algol-60. Но вот как-то не пользуются сейчас им. FPC устарел не как компилятор, а как язык: в нем невозможно писать программы, отвечающие современным технологиям программирования.

17 сообщений было перемещено в эту тему: Болталка PascalABC.NET

Осипов_PascalABC.NET Введение в современное программирование_2019.pdf

стр. 450

Напечатано:

Writeln(a.Out, NewLine, b.Out, NewLine, c.Out, NewLine, c.Out)

Надо:

Writeln(a.Out, NewLine, b.Out, NewLine, c.Out, NewLine, d.Out)

В общем, что я хотел сказать: Говорить, что Free Pascal устаревший — это фактическая ошибка и в книге её необходимо исправить. Я так понимаю, вы и являетесь автором книги, верно? Кроме того, это, как минимум, неуважительно, к разработчикам этой платформы, которые тоже могут сюда зайти и захотеть почитать книгу.

Вот сказать так про Turbo Pascal можно, поскольку так, в общем-то, и сами разработчики думали ещё в 90-е годы, когда перестали выпускать новые версии.

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

С этим нельзя согласиться. Что важно в современном программировании:

  1. Поддержка работы с 32 и 64-битными процессорами, включая ARM, для чего требуется наличие соответствующих типов данных и способность на них запускаться без эмулятора.
  2. Поддержка различных операционных систем, поскольку Windows на настоящий момент стремительно теряет актуальность.
  3. Поддержка параллельного программирования.
  4. Поддержка объекто-ориентированного программирования.

Всё это в Free Pascal есть и поддерживается. А вот в pABCn со вторым пунктом плохо, например. IDE не запускается под линуксом, только компилятор. Да и будут ли полноценно работать программы, активно использующие графику и подобное в нём — это ещё вопрос.

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

Синтаксический сахар вроде объявления переменных внутри блоков, PrintLn и так далее — это синтаксический сахар. Из-за его отсутствия называть что-то устаревшим нельзя. Локальные для функций/процедур переменные в FPC есть и этого достаточно.

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

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

1 лайк

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

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

Вот когда это все будет в стандартной поставке FPC, можем вернуться и к этой теме. А пока что это “бла-бла”.

Язык Паскаль (точнее, Delphi), стал устаревать примерно в 1995 году когда появился язык Java. В 2000 году у фирмы, разрабатывающей Delphi, возникли проблемы - она ушла из образовательного сегмента и фактически заморозила развитие языка на долгое время. Ключевой разработчик Delphi перешел в microsoft и принимал участие в разработке C# с 2000 г. Именно поэтому C# как язык и как платформа - хороший и современный.

Именно из-за стремительного устаревания языка Delphi мы запустили проект PascalABC.NET в 2006.

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

Здесь надо сразу договорится и различать ЯЗЫК, БИБЛИОТЕКИ, КОМПИЛЯТОР и ПЛАТФОРМУ(Ы).

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

Но язык - устарел году эдак в 2000. Он не соответствует современным тенденциям лёгкости написания и понимания кода. И дело тут не только в лямбдах.

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

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

Про то что Windows стремительно теряет актуальность - посмеялся конечно )) Опять-таки - если вы говорите о профессиональном сегменте, то какой-то процент есть, но в массовом - нет.

Про пункт 2 - поддержку различных ОС. Вы смешиваете компилятор и IDE. Да, у IDE PascalABC.NET есть недостатки, но компилятор запускается везде под Mono.

Еще раз - мы говорим только про язык. Free Pascal как язык безбожно устарел как и Delphi. Устарел давно по объективным причинам. Это не значит, что его не будут использовать профи. Фортран до сих пор жив. Но школьники голосуют ногами.

2 лайка

Это лишь Ваше мнение. У меня - другое.

Я свои тезисы обосновал аргументами выше. Вы, никак не анализируя эти аргументы, заявляте “А я не согласен”.

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

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

В таком случае следует так и писать: “по нашему мнению, FPC устарел, поскольку …”, а не просто заявлять с порога, что он устарел, ставя его в один ряд c Turbo Pascal. Вы выдаёте своё субъективное мнение за неопровержимый факт, а так делать в учебном пособии нельзя.

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

Вам вместо меня ответили другие.

В любой книге, работе, публичном выступлении автор всегда высказывает свое субъективное мнение и глупо об этом объявлять. Да, находятся лица, которые используют фразы “Как общеизвестно…”, “Все знают, что…”, “Любой скажет, что…” и им подобные. Я стараюсь таких фраз избегать, поскольку меня никто не уполномочивал высказываться от мнения некоего социума. Если все же где-то подобное клише проскочет - это лишь мой недосмотр.

1 лайк

Язык Паскаль (точнее, Delphi), стал устаревать примерно в 1995 году когда появился язык Java.

Не согласен. Это вообще-то разные вещи. Delphi генерировала нативный код, а Java выполнялась в виртуальной машине. Каким образом появление второго означает устаревание первого?

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

А может быть дело в том, что иногда хорошие вещи не следует менять? Я не считаю, что пихать в язык все подряд конструкции и парадигмы — это хорошая идея. Из-за чего мне не нравится Java, C++ и C#, например.

Но язык - устарел году эдак в 2000. Он не соответствует современным тенденциям лёгкости написания и понимания кода. И дело тут не только в лямбдах.

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

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

Тогда зачем pABCn? Чем вас не устраивает уже существующий язык Python?

Некоторые задачи ЕГЭ попросту не решить на старом Паскале - нужны хорошие и простые библиотеки и лаконичный код.

Да ладно? Можно пример? Если вы про ту задачу с переводом в семиричную систему и подобные, то там вообще не нужно решать её на компьютере.

но компилятор запускается везде под Mono.

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

Но школьники голосуют ногами.

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

1 лайк

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

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