Re[7]: Чем плох Паскаль?
От: T4r4sB Россия  
Дата: 14.06.19 07:41
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Нет просто каждый блок может иметь свой список переменных.


Ну так вот, Паскаль в классическом виде с этим не оч. В Аде получше, знаю. Модули и Обероны не трогал, не скажу.
Re[8]: Чем плох Паскаль?
От: kov_serg Россия  
Дата: 14.06.19 07:54
Оценка:
Здравствуйте, T4r4sB, Вы писали:

_>>Нет просто каждый блок может иметь свой список переменных.


TB>Ну так вот, Паскаль в классическом виде с этим не оч. В Аде получше, знаю. Модули и Обероны не трогал, не скажу.

В паскале есть локальные функции. Чем не блоки?
Re[4]: Чем плох Паскаль?
От: kov_serg Россия  
Дата: 14.06.19 07:56
Оценка:
Здравствуйте, elmal, Вы писали:

_>>Почему некоторые люди считают что объявление переменных по месту это хорошо? Чем плохо заранее объявить что понадобиться, а не равномерно размызвать безполезное гавно по коду.

E>Плохо тем, что в результате большинство паскалистов лучше сдохнут и будут дико копипастить, но переменную не объявят . Ибо много букв, слишком сложно, проще скопипастить. А вообще, в современном мире именно классическая переменная — в большинстве случаев дурной тон и источник потенциальных ошибок. Рулит иммутабельность, соответственно рулят константы, которым нельзя повторно присвоить значения, а не переменные.
Да мне тоже erlang очень нравится. Но он не рулит, а просто инструмент.
Re[4]: Чем плох Паскаль?
От: pagid Россия  
Дата: 14.06.19 08:06
Оценка: +1
Здравствуйте, netch80, Вы писали:

N>Из этого не следует необходимость обучения мёртвому языку.

N>Из живых на эту роль отлично подходит, например, Go (ближайший по духу), Java, C#, Python.
Тоже можно. Но в C# и Java больше условностей совершенно излишних — не забыть импортировать пакеты, написать хотя бы один класс, ни к чему это школьникам.


N>Для системного уровня — C.

Зачем системный уровень школьникам


N>Во-первых, должна быть. Учат чему-то полезному, и конкретный язык здесь, хоть и не первоочередная составляющая, но важная. А если ещё при обучении человек сразу включается в реальную работу и видит полезный выхлоп от своей работы — то это ещё больше работает на качество обучения.

Математике и литературе в школе тоже учат чтобы можно было сразу включиться в реальную работу?

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

Что там переучиваться если разговор про первоначальное обучение там что переучиваться на другой язык, что доучиваться на том же до профессионального уровня трудозатраты примерно те же. А при этом представление о том, что языки бывают разные вредным не будет.
Re[4]: Чем плох Паскаль?
От: kov_serg Россия  
Дата: 14.06.19 08:11
Оценка:
Здравствуйте, netch80, Вы писали:

N>Из живых на эту роль отлично подходит, например, Go (ближайший по духу), Java, C#, Python. Для системного уровня — C.

Есть же Perl!

N>Во-первых, должна быть. Учат чему-то полезному, и конкретный язык здесь, хоть и не первоочередная составляющая, но важная. А если ещё при обучении человек сразу включается в реальную работу и видит полезный выхлоп от своей работы — то это ещё больше работает на качество обучения.

Тогда Arduino и C++ — выхлоп, заинтересованность, можно пощупать результат, спалить что-нибудь, узнать что глючат не только программы, но и железо.
N>Во-вторых, тем более не должно быть цели учить тому, после чего надо заново переучиваться.
Так надо учить базовым вещам, на основе которых будет дальше легче изучать то что понадобится, а не те что меняются каждые пол года.
Алгоритмы, оценки сложности, линейную алгебру, вычислительную математику, цос, шаблоны проектирования, организацию вычислений, архитектуры процессоров, способы решения больших задач с учетом имеющихся ограничений, организацию больших проектов, как управлять группой безответсвенных, ленивых, раздолбаев и т.п.
Re[6]: Чем плох Паскаль?
От: AlexRK  
Дата: 14.06.19 08:15
Оценка: :)
Здравствуйте, Cyberax, Вы писали:

C>>>Но после перехода на С всё стало абсолютно кристально понятно сразу же.

N>>Ну это ты зря. Как раз с синтаксисом указателей у Паскаля лучше.
C>В Паскале массивы — это нечто магическое (есть синтаксис динамических массивов, но тоже странный), а в С сразу всё становится понятно при работе с арифметикой. Такое же слышал и от других людей.

А в Го массивы, хеши, каналы — это не магическое, не? Синтаксис не странный?
Re[9]: Чем плох Паскаль?
От: T4r4sB Россия  
Дата: 14.06.19 08:16
Оценка: +4
Здравствуйте, kov_serg, Вы писали:

_>В паскале есть локальные функции. Чем не блоки?

Всем.
Re[5]: Чем плох Паскаль?
От: elmal  
Дата: 14.06.19 08:38
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Да мне тоже erlang очень нравится. Но он не рулит, а просто инструмент.

Да любой современный язык — по умолчанию не переменная (var), а val, которой не изменить значение после присваивания. Надеюсь до чистой Java такое вскоре тоже дойдет, это как раз то, что можно исправить, хоть и не полностью. Даже такой капец, как JavaScript — там именно с фичами то не так и плохо, там в другом проблема.
Re: Чем плох Паскаль?
От: Александр Кузнецов Россия  
Дата: 14.06.19 08:47
Оценка: 6 (1) +1
Здравствуйте, Cicero, Вы писали:

C>Очень часто это слышу: Паскаль(иногда конкретизируют: Turbo Pascal) не подходят для обучения программированию.

C>Обычно аргументов нет. Самый "сильный" аргумент — это несовременный!

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

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

Отсюда, кстати, вытекают и другие нюансики.

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

C>Причем если не позволяет "железо" более современные версии вполне подойдет и Turbo Pascal 5.5.
Основная проблема современного железа как раз обратная. В ВУЗе/школе ещё можно найти свалку "мечта некрофила" с компами, на которых кроме MS-DOS и Win 95 ничего не запускается, но в магазинах такие компы не продаются, уж извините. А студенты/школьники себе берут именно их. И тут выясняюся очень интересные вещи.
Например, старый DOSовский Turbo Pascal запустить, конечно, можно, с определёнными танцами, но вот попытки стартовать графический режим будут обречены на провал. А это автоматически минус довольно плотный пласт задачек и возможностей.

C>На Turbo Pascal вполне можно обучать и элементы ООП.

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

C>Почему:

C>Говоря двумя словами: потому что в Паскале минимум неоднозначности синтаксиса.
Я вам открою страшную тайну: за исключением JavaScript, все "современные" языки программирования (по крайней мере из числа более-менее использующихся на практике) практически не имеют неоднозначностей в синтаксисе. По крайней мере на том уровне, на котором учат в школё/ВУЗе. Даже классический анекдот про то, что можно, и чего нельзя написать на C и Pascal — это не более чем анекдот. Ибо на Паскале можно писать конструкции не сильно понятнее. Хотя и затратив на это чуть больше усилий, да. Это вопрос в основном культуры написания кода, которую просто надо прививать.
И да, соглашусь, на том же С формально это делать немного сложнее, чем на Паскале. Зато гораздо нагляднее )

C>ИМХО это научит контролировать код более строго.

Вот тут позволю себе не согласться, причём также ИМХО Ничто так не учит контроллировать, например, выход за границу массива, как пара раз "мордой в грязь". Паскаль в этом плане гораздо менее нагляден ))).

Если на полном серьёзе, то из опыта подготовки уже даже и не сосчитаю скольки студентов (но боюсь, что уже за 1000 перевалило) от первого курса и до работы в производстве, могу сказать, что первый язык должен быть максимально близок к тому, с чем им придётся работать на протяжении обучения и дальше. Т.е. это:
1. С-подобный синтаксис. Да, я в курсе про то, что регулярно изобретают кучу велосипедов (не как в С (тм)). Примерно 1 на 100000 из них даже реально приживаются в производстве для решения специфического класса задач. Но тем не менее подавляющее большинство разработчиков работают именно с С-подобными языковыми конструкциями. Это как с базами. Стандарт — SQL, хотя есть варианты.
2. Поддержка основных парадигм программирования (функциональное и ООП).
3. Возможность залезть в "потроха" до уровня указателей и работы с памятью.
4. Поддержка графических режимов на относительно простом уровне, без 100-500 танцев с бубном.
5. Крайне желательна возможность со временем отказаться от написания велосипедов в пользу использования библиотечных функций.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re[2]: Чем плох Паскаль?
От: AlexRK  
Дата: 14.06.19 09:05
Оценка:
Здравствуйте, Александр Кузнецов, Вы писали:

АК>Я вам открою страшную тайну: за исключением JavaScript, все "современные" языки программирования (по крайней мере из числа более-менее использующихся на практике) практически не имеют неоднозначностей в синтаксисе. По крайней мере на том уровне, на котором учат в школё/ВУЗе.


Я вам открою страшную тайну: все "современные" языки программирования (по крайней мере из числа более-менее использующихся на практике) имеют немало неоднозначностей в синтаксисе. А в Ц++ этих неоднозначностей столько, что даже парсинг кода не может быть выполнен без семантического анализа.
Re[2]: Чем плох Паскаль?
От: alpha21264 СССР  
Дата: 14.06.19 09:10
Оценка:
Здравствуйте, itmanager85, Вы писали:

I>зачем обучать мёртвому языку ?


В инязе обучение английскому начинают с латыни. Ну это так, в качестве примера.
http://s19.rimg.info/0871fde0709f1bd37b3b012eb22a4583.gif
Течёт вода Кубань-реки куда велят большевики.
Re[3]: Чем плох Паскаль?
От: koenig  
Дата: 14.06.19 09:13
Оценка: +1
I>>зачем обучать мёртвому языку ?

A>В инязе обучение английскому начинают с латыни. Ну это так, в качестве примера.



нормальные герои всегда идут в обход
Re: Чем плох Паскаль?
От: koenig  
Дата: 14.06.19 09:15
Оценка: +1
да нормальный он, сгодится
Re[3]: Чем плох Паскаль?
От: Александр Кузнецов Россия  
Дата: 14.06.19 09:16
Оценка:
Здравствуйте, AlexRK, Вы писали:

АК>>Я вам открою страшную тайну: за исключением JavaScript, все "современные" языки программирования (по крайней мере из числа более-менее использующихся на практике) практически не имеют неоднозначностей в синтаксисе. По крайней мере на том уровне, на котором учат в школё/ВУЗе.


ARK>Я вам открою страшную тайну: все "современные" языки программирования (по крайней мере из числа более-менее использующихся на практике) имеют немало неоднозначностей в синтаксисе. А в Ц++ этих неоднозначностей столько, что даже парсинг кода не может быть выполнен без семантического анализа.


Если честно, то на вскидку не могу припомнить ни одной. Либо мозг уже давно привык эти неоднозначности вполне себе однозначно разбирать, либо в командах, в которых мне приходилось работать, всегда слишком строгое соблюдение coding style было.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re[3]: Чем плох Паскаль?
От: Александр Кузнецов Россия  
Дата: 14.06.19 09:22
Оценка: +1
Здравствуйте, alpha21264, Вы писали:

I>>зачем обучать мёртвому языку ?


A>В инязе обучение английскому начинают с латыни. Ну это так, в качестве примера.


Ну, английский, всё-таки, от латыни произошёл, значительную часть слов и конструкций вполне себе успешно из неё заимствовал, и в некоторых моментах для понимания, "почему так" латынь там вполне себе может помочь.
А вот начинать учить английский с, например, старонорвежского, я бы всё-таки не советовал.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re[3]: Чем плох Паскаль?
От: Александр Кузнецов Россия  
Дата: 14.06.19 09:26
Оценка:
Здравствуйте, Pzz, Вы писали:

C>>В современном варианте было бы лучше что-то типа Питона с графической средой. Или как вариант: https://www.apple.com/swift/playgrounds/ — лучшее, что я вообще видел для детей.


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


Не навсегда, лечится, но да, процесс восстановления пациента обычно очень долгий и запущенный.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re[4]: Чем плох Паскаль?
От: AlexRK  
Дата: 14.06.19 09:54
Оценка:
Здравствуйте, Александр Кузнецов, Вы писали:

АК>>>Я вам открою страшную тайну: за исключением JavaScript, все "современные" языки программирования (по крайней мере из числа более-менее использующихся на практике) практически не имеют неоднозначностей в синтаксисе. По крайней мере на том уровне, на котором учат в школё/ВУЗе.


ARK>>Я вам открою страшную тайну: все "современные" языки программирования (по крайней мере из числа более-менее использующихся на практике) имеют немало неоднозначностей в синтаксисе. А в Ц++ этих неоднозначностей столько, что даже парсинг кода не может быть выполнен без семантического анализа.


АК>Если честно, то на вскидку не могу припомнить ни одной. Либо мозг уже давно привык эти неоднозначности вполне себе однозначно разбирать, либо в командах, в которых мне приходилось работать, всегда слишком строгое соблюдение coding style было.


Ну вот по сишарпу кое-что: http://ecsharp.net/lllpg/8-managing-ambiguity.html
И в стандарте есть целый раздел «Grammar ambiguites».
Как распарсить «a.b.c.d.e;»? Без семантической информации — никак.

В Ц++ хотя бы "a();" — что это? Тип? Функция?

С парсингом знаков "<", ">" — в почти всех современных языках ад и израиль.
Re[5]: Чем плох Паскаль?
От: Александр Кузнецов Россия  
Дата: 14.06.19 10:28
Оценка:
Здравствуйте, AlexRK, Вы писали:

ARK>Здравствуйте, Александр Кузнецов, Вы писали:


АК>>>>Я вам открою страшную тайну: за исключением JavaScript, все "современные" языки программирования (по крайней мере из числа более-менее использующихся на практике) практически не имеют неоднозначностей в синтаксисе. По крайней мере на том уровне, на котором учат в школё/ВУЗе.


ARK>>>Я вам открою страшную тайну: все "современные" языки программирования (по крайней мере из числа более-менее использующихся на практике) имеют немало неоднозначностей в синтаксисе. А в Ц++ этих неоднозначностей столько, что даже парсинг кода не может быть выполнен без семантического анализа.


АК>>Если честно, то на вскидку не могу припомнить ни одной. Либо мозг уже давно привык эти неоднозначности вполне себе однозначно разбирать, либо в командах, в которых мне приходилось работать, всегда слишком строгое соблюдение coding style было.


ARK>Ну вот по сишарпу кое-что: http://ecsharp.net/lllpg/8-managing-ambiguity.html


Примеры взяты из ссылок выше:
1. for (i = j + 1; -i > k; ++i) — сначала берём тяжёлую дубину и ломаем ей руки автора кода. Потом собираем руки обратно, выпрямляем, объясняем, в чём именно автор не прав, и даём написать ещё пару строчек. При необходимости повторять до полного просветления автора. В особо упёртых случаях применяется метод из п. 2.

2.
class A { public virtual void F(Foo x) {...} }
class B : A {
public override void F(Foo x) {...} // first
public void F(Bar x) {...} // second
}
Берём раскалённый паяльник и методом терморектального криптоанализа выясняем, что именно автор хотел сказать данной синтаксической конструкцией. Скорее всего, сказать он не хотел ничего, так как думал он в процессе её создания тем самым местом, в которое сейчас помещён паяльник. Но если вдруг объяснение автора является единственным решением, возможным при текущей архитектуре кода, паяльник (существенно большего размера) помещается в то место, которым думал, с позволения сказать, архитектор данной системы. Одного сеанса обычно хватает. Если нет, то лучше сразу в морг.

Остальное в основном в том же духе.

ARK>И в стандарте есть целый раздел «Grammar ambiguites».

ARK>Как распарсить «a.b.c.d.e;»? Без семантической информации — никак.

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

Только у топикстартера всё-таки про обучение, а не про специфику с узкой областью применения. Причём про самое начало обучения, а не про написание компиляторов, или нюансы передачи времени с .NET на iOS.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re[4]: Чем плох Паскаль?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 14.06.19 11:17
Оценка: +1
Здравствуйте, Александр Кузнецов, Вы писали:
ARK>>Я вам открою страшную тайну: все "современные" языки программирования (по крайней мере из числа более-менее использующихся на практике) имеют немало неоднозначностей в синтаксисе. А в Ц++ этих неоднозначностей столько, что даже парсинг кода не может быть выполнен без семантического анализа.

АК>Если честно, то на вскидку не могу припомнить ни одной. Либо мозг уже давно привык эти неоднозначности вполне себе однозначно разбирать, либо в командах, в которых мне приходилось работать, всегда слишком строгое соблюдение coding style было.


Есть два разных понимания "неоднозначности синтаксиса": одно — для того, кто пишет код, другое — для парсера. Частично они пересекаются, конечно.

Для того, кто пишет, важны, например, такие вещи, что в if, else, while нужно строить блок вокруг нескольких предложений, а в repeat-until — нет; что в конце main надо ставить точку после end, а у остальных — точку с запятой; что var идёт перед основным телом; что and и or почему-то приоритетнее сравнений; ну и так далее.

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

Второе — это таки что нужно делать парсеру, чтобы понять, как этот код интерпретировать. Тут Паскаль по лёгкости и однозначности разбора если не на первом месте, то близко к тому. Конечно, LISP с его LL(0)/LR(0) он не победит. Но ряд вещей в Паскале намеренно сделан в сторону облегчения разбора до уровня, когда нет никаких вариантов для отката и надо заглядывать не более чем на одну лексему: например, поэтому перед else не полагается ';', а метки для goto сделаны числами (иначе, увидев aaa, было бы ещё неясно, это aaa := 3 или aaa: bbb := 4).

А вот C++ представляет собой один из наиболее кошмарных в этом смысле примеров. Даже имея простое x *y; , вы не знаете, не проверив типы всех элементов, это объявление y как указатель на x или умножение x на y, которое имеет важные тут побочные эффекты. При том, что что такое x, может быть объявлено ниже по телу определения класса, это значит, что выбор между вариантами надо отложить.
Другой классический пример вида A B(C); точно так же откладывается до выяснения, что такое C. Подробнее, например, тут. Или вот такой пример. Или проблема с ">>", про которое заранее неизвестно, это закрытие двух шаблонов за раз или оператор сдвига (и при этом вполне может быть что-то вроде aaa<bbb<(ccc>>ddd)>>, потому что параметрами шаблона могут быть константные числа).

Но программист с этими проблемами C++ обычно не сталкивается — до тех пор, пока не обнаруживает, что A B(C); вдруг стало не тем, чем он хочет — тогда он меняет () на {} и забывает о проблеме.

Так что — определитесь, о чём вы. Если о неоднозначностях для парсинга, то вам пора таки обновить своё понимание в этой области. Если для пишущего...
вот честно говоря, написать сложную конструкцию серьёзнее, чем a (*b)()[3]; без бутылки будет трудновато. Так что C/C++ и в этом смысле ой.
Отредактировано 14.06.2019 11:19 netch80 . Предыдущая версия .
Re: Чем плох Паскаль?
От: qwertyuiop Российская Империя  
Дата: 14.06.19 11:29
Оценка:
Здравствуйте, Cicero, Вы писали:

C>Обычно аргументов нет.


Если ты это уже знаешь, зачем вообще создаешь тему?
Я отвечаю за свои слова, а не за то как вы их интерпретируете!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.