Другие языки программирования и технологии
Зачем в школах учат паскаль
Язык древний, в некоторых школах учат питон, он современный и более прост в обучении.
Древность не является безусловным недостатком, а современность не является безусловным преимуществом. 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; для этого есть библиотеки, но их приходится писать на низкоуровневых языках).
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; для этого есть библиотеки, но их приходится писать на низкоуровневых языках).
>Зачем в школах учат паскаль
Затем, что он дает хорошее представление о работе вычислительных машин и не прививает плохой стиль программирования.
>Язык древний,
И что с того? Как это мешает учиться программировать?
>в некоторых школах учат питон, он современный и более прост в обучении.
И обладает таким количеством встроенной магии, что по-настоящему научиться на нем чему-то - та еще задача. По большому счету, там уже умные дяди все написали за тебя.
Затем, что он дает хорошее представление о работе вычислительных машин и не прививает плохой стиль программирования.
>Язык древний,
И что с того? Как это мешает учиться программировать?
>в некоторых школах учат питон, он современный и более прост в обучении.
И обладает таким количеством встроенной магии, что по-настоящему научиться на нем чему-то - та еще задача. По большому счету, там уже умные дяди все написали за тебя.
Владимир Зима
Паскаль прививает:
- Использование глобальных переменных.
- Дублирование кода (есть массив и 100 разных операций над ним? гоняй 100 циклов).
- Отсутствие понятия о структурах данных.
- Нерасширяемая система типов.
- Отсутствие понятия об операциях с файлами (последовательно прожевать файл input - "достижение"). О передаче сообщений по сети, распределённых вычислениях и т.п. лучше вообще помолчать.
- Чугунная, непробиваемая императивщина. Вернуть два значения из функции? Используй процедуру и var. Вывести в одной ветке условия a, b, c, d, а в другой - a, b, c, e (где d и e -разных типов)? Правильно, пиши два writeln и повторяй весь список параметров.
- Переносимость? Не, не слышали. Есть 10 разных реализаций Паскаля, а поскольку на стандарте ничего жизнеспособного не напишешь, все пользуются расширениями.
Затем, что на Pascal ты понимаешь, что как и зачем ты пишешь. И понимаешь вычислительную стоимость каждой конструкции, которую ты пишешь. На Pascal ты можешь научиться анализировать, насколько твой код адекватен поставленной задаче.
А на Python тебе всё уже разжевали и в рот положили - без малейших усилий с твоей стороны. Даже вычислительную сложность собственного кода ты на Python понять не сможешь - так как не знаешь, что именно происходит при выполнении тех операций, из которых ты собираешь свой код.
Pascal даёт умение решать задачи. А Python даёт навык выбора готового ответа из предложенного списка - даже если правильного ответа в списке нет.
А на Python тебе всё уже разжевали и в рот положили - без малейших усилий с твоей стороны. Даже вычислительную сложность собственного кода ты на Python понять не сможешь - так как не знаешь, что именно происходит при выполнении тех операций, из которых ты собираешь свой код.
Pascal даёт умение решать задачи. А Python даёт навык выбора готового ответа из предложенного списка - даже если правильного ответа в списке нет.
Владимир Зима
Потом этих решальщиков задач только успевай бить по рукам и переучивать.
И "на Pascal ты понимаешь, что как и зачем ты пишешь" - смешно. Я на Паскале 2 года ковырялся, а понимать стоимость операций начал только на C. Отношений языка к машинной архитектуре бывает три:
Оставить её в языке, как сделано в C. Пишите #ifdef-ы и не отвлекайтесь на бизнес-логику.
Скрыть её преимущества, но оставить зависимость. Так сделано в Паскале. Какое стандарт нам гарантирует максимальное значение типа integer?
Абстрагироваться, убрав зависимость, но оставив интерфейс для использования машины, если нужно. Так сделано в Питоне. Хочешь целое число как абстракцию - бери int. Хочешь как элементарный тип для быстрых вычислений - бери numpy. Это не "чёрный ящик", есть исходники и документация.
И "на Pascal ты понимаешь, что как и зачем ты пишешь" - смешно. Я на Паскале 2 года ковырялся, а понимать стоимость операций начал только на C. Отношений языка к машинной архитектуре бывает три:
Оставить её в языке, как сделано в C. Пишите #ifdef-ы и не отвлекайтесь на бизнес-логику.
Скрыть её преимущества, но оставить зависимость. Так сделано в Паскале. Какое стандарт нам гарантирует максимальное значение типа integer?
Абстрагироваться, убрав зависимость, но оставив интерфейс для использования машины, если нужно. Так сделано в Питоне. Хочешь целое число как абстракцию - бери int. Хочешь как элементарный тип для быстрых вычислений - бери numpy. Это не "чёрный ящик", есть исходники и документация.
Потому, что учителям надо деньги платить
Время обучения ограничено
Время обучения ограничено
Чтобы отбивать желание быть программистом)))
Он лучше
Потому что Pascal - это язык для обучения, а Python - для разработки.
Чтобы у детей было понимание что такое алгоритм , а паскаль показывают потому что алгоритм лучше всего проявляется программах
Похожие вопросы
- Зачем учат Паскалю?
- в школе учат программированию на паскале а в институте на чём? си++?
- Почему программисты, сидящие здесь, хотят, чтобы в школах вместо паскаля изучали С++ C# и т.д.?
- Посоветуйте, как начать учить Паскаль?
- учу паскаль. мне трудно запомнить описание всех операторов, функций. извеняюсь, нельзя ли откуда это записать
- Стоит ли учить паскаль?
- Почему в некоторых вузах и школах учат Pascal? В чём профит?
- Если сейчас в школах учат программировать, то зачем нужны колледжи и Универы?
- Объясните зачем учить ЯП Паскаль для обучения программированию?
- Паскаль, зачем его учат школьники?