Другие языки программирования и технологии

Зачем в школах учат паскаль

Язык древний, в некоторых школах учат питон, он современный и более прост в обучении.
Древность не является безусловным недостатком, а современность не является безусловным преимуществом. LISP - язык более древний, чем Паскаль, а интерес к нему только растёт, поскольку сложность среднего проекта уже вырастает из коротких штанишек императивных машинно-ориентированных языков. Надо смотреть на возможности языка, такие как
a. Возможность повторного использования поведения, алгоритмов.
b. Статический контроль правильности программы.
c. Система типов: статически контролируемая, но расширяемая.
d. Модульность (возможность структурирования большого количества кода).
e. Ортогональность средств (возможность комбинировать фичи).
f. Синтаксическая "понятность", читабельность (код чаще читают, чем пишут).
g. Трассируемость ошибок времени выполнения. Здравствуйте, долгие человеко-месяцы поиска причины коредампов в приложениях на C++.
h. Переносимость - чтобы программу не требовалось дописывать для исполнения на другой платформе.
i. Отсутствие необходимости для программиста заниматься низкоуровневыми вопросами: управлением памятью, выбором типов подходящей размерности (вспомним сотни #ifdef-ов в проектных заголовках C/C++), реализацией типовых коллекций (в 1990-х каждый проект начинался с реализации своих классов string, vector, map, далее везде) и алгоритмов и др.
j. Возможность (но не обязанность, как в C/C++) задания поведения программы на низком уровне для микрооптимизаций в отдельных местах.
k. Доступ к API операционной системы.

Паскаль плох не тем, что его изобрели в середине 1960-х годов, а тем, что в нём представлены только пункты b и f. И всё. Причём, чёткость его синтаксиса и строгий статический контроль достигаются фактическим отказом от повторного использования кода. Это машинно-ориентированный язык, но без доступа к машине. Какого размера тип integer? А хз. Как прочитать пару блоков из середины файла, не поднимая в кэш всё остальное? А никак. Полиморфные операции, одна и та же функция для операций над real и integer? Только в стандартном рантайме: read(), write() умеют принимать произвольные типы и переменное количество параметров, а пользователю - шиш. Зато есть бинарный оператор возведения в степень и процедура (!), удаляющая символы из строки, это очень "важно". Кстати, в стандарте Паскаля даже строкового типа нет. Берите array[m..n] of char с границами, известными на момент компиляции, и ни в чём себе не отказывайте. Хотите хотя бы задать их константами, чтобы по всей программе не писать array[1..100]? Хрен вам, константа не является легальной границей массива. Хардкодьте, дублируйте параметры и код, объявляйте глобальные переменные, - вот что предлагает чистый Паскаль. Можно возразить, что "я на Борланде писал, там всё есть", ну так сначала попробуйте свою программу на Борланде запустить на юниксовой платформе и озвучьте стоимость переноса. Да и есть у Борланда далеко не всё.

А Питон хорош не тем, что его выпустили в 21-м веке, а тем, что в нём наличествуют средства более высокого уровня абстракции, чем в Паскале, C, C++, Java, C# и других императивных мастодонтах. Если в Паскале массив и цикл - единственные коллекция и средство выражения повторений, в C/C++ они - основные (vector, set, map - чуждые надстройки, for each - не более, чем сахар), то в Питоне три основных коллекции являются базовыми типами языка, есть удобный литеральный синтаксис, а для повторений первичны декларативные конструкции, и только на крайние случаи оставлен императивный цикл.

И плох Питон не тем, что в нём один универсальный целый тип, а не 50 платформенно-зависимых под ифдефами (это как раз плюс), а тем, что в нём слабо представлены статический контроль программы (пп. b, c, d), и отсутствием низкоуровневых средств повышения производительности (j, k; для этого есть библиотеки, но их приходится писать на низкоуровневых языках).
АГ
Александр Гришенков
54 053
Лучший ответ
>Зачем в школах учат паскаль
Затем, что он дает хорошее представление о работе вычислительных машин и не прививает плохой стиль программирования.

>Язык древний,
И что с того? Как это мешает учиться программировать?

>в некоторых школах учат питон, он современный и более прост в обучении.
И обладает таким количеством встроенной магии, что по-настоящему научиться на нем чему-то - та еще задача. По большому счету, там уже умные дяди все написали за тебя.
Karl Nurmakhanbet
Karl Nurmakhanbet
80 940
Владимир Зима Паскаль прививает:
  • Использование глобальных переменных.
  • Дублирование кода (есть массив и 100 разных операций над ним? гоняй 100 циклов).
  • Отсутствие понятия о структурах данных.
  • Нерасширяемая система типов.
  • Отсутствие понятия об операциях с файлами (последовательно прожевать файл input - "достижение"). О передаче сообщений по сети, распределённых вычислениях и т.п. лучше вообще помолчать.
  • Чугунная, непробиваемая императивщина. Вернуть два значения из функции? Используй процедуру и var. Вывести в одной ветке условия a, b, c, d, а в другой - a, b, c, e (где d и e -разных типов)? Правильно, пиши два writeln и повторяй весь список параметров.
  • Переносимость? Не, не слышали. Есть 10 разных реализаций Паскаля, а поскольку на стандарте ничего жизнеспособного не напишешь, все пользуются расширениями.
Затем, что на Pascal ты понимаешь, что как и зачем ты пишешь. И понимаешь вычислительную стоимость каждой конструкции, которую ты пишешь. На Pascal ты можешь научиться анализировать, насколько твой код адекватен поставленной задаче.

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

Pascal даёт умение решать задачи. А Python даёт навык выбора готового ответа из предложенного списка - даже если правильного ответа в списке нет.
АВ
Андрей В
92 232
Владимир Зима Потом этих решальщиков задач только успевай бить по рукам и переучивать.

И "на Pascal ты понимаешь, что как и зачем ты пишешь" - смешно. Я на Паскале 2 года ковырялся, а понимать стоимость операций начал только на C. Отношений языка к машинной архитектуре бывает три:
Оставить её в языке, как сделано в C. Пишите #ifdef-ы и не отвлекайтесь на бизнес-логику.
Скрыть её преимущества, но оставить зависимость. Так сделано в Паскале. Какое стандарт нам гарантирует максимальное значение типа integer?
Абстрагироваться, убрав зависимость, но оставив интерфейс для использования машины, если нужно. Так сделано в Питоне. Хочешь целое число как абстракцию - бери int. Хочешь как элементарный тип для быстрых вычислений - бери numpy. Это не "чёрный ящик", есть исходники и документация.
Потому, что учителям надо деньги платить

Время обучения ограничено
Чтобы отбивать желание быть программистом)))
Hurshed Netu*
Hurshed Netu*
10 755
Он лучше
**
*oleg* *sergeevich*
2 170
Потому что Pascal - это язык для обучения, а Python - для разработки.
Максат Имбаев
Максат Имбаев
1 288
Чтобы у детей было понимание что такое алгоритм , а паскаль показывают потому что алгоритм лучше всего проявляется программах