Где удобнее читать сноску, внизу страницы или в отдельном списке сносок?
Когда сносок много, то обычно делают отдельный список, иначе большая часть страницы идет под сноски. Помню, как в школе читал исторические романы Вальтера Скотта, там было очень много сносок и ни одна меня не интересовала (какое мне было дело до исторических подробностей).
Более органично было бы разбить тело функции на блоки, в каждом из которых свой набор переменных
Это как? Если функция разбивается на такие блоки, то из этой функции надо сделать несколько функций. По функции на каждый блок. BTW в Паскале допустимы вложенные функции.
Тогда может вообще программирование в школе не давать?
Нужно, чтобы определиться со специальностью. Во многих вузах будет программирование в разных количествах. Если оно вызывает аллергию, то надо идти в учителя физкультуры.
Если три строки — сложно, то шесть строк — сложнее.
Как и в литературных текстах. Когда текст разбит на главы, параграфы, пункты и т.д. ориентация и навигация в нем проще. Глава: заголовок функции; параграф: константы; параграф: типы; параграф: переменные; параграф: тело функции (операторы).
Более развитая в смысле «более сложная», но это не значит, что такая система лучше.
В том же Питоне можно показать операции с числами, потом показать операции со строками — а затем на примере разницы между числами и строками уже ввести понятие типа данных. Будет намного более понятно чем то что обычно делается.
ИМХО будет совершенно непонятно зачем нужны какие-то типы.
Отличия числа от строки я понимал интуитивно, но вот отличие «типа данных строка» от «строковой переменной» от меня ускользало...
В первом приближении такое отличие, как у слова «фрукты» от конкретного яблока и конкретной груши. На прилавке в гастрономе написано «фрукты» и там много яблок и груш. А на другом прилавке написано «рыба»…
кстати, попробуйте хотя бы мысленно объяснить ребенку отличие константы от типа данных в TypeScript, где «string» может быть в зависимости от контекста как неименованной строковой константой так и типом данных.
Поэтому не нужно учить ребенка TypeScript.
прочитав свою первую книжку по программированию от корки до корки три раза, я задал папе вопрос: «Пап, а чем отличаются переменные от типов данных?»
Видимо была плохая книжка. Это проблема многих популярных книжек — автор пытается объяснить проще, а получается неимоверно сложно.
сначала «увязать» это имя с пониманием — и на ранних стадиях это может быть довольно трудно.
Т.е. понимание уже есть. Т.к. вопрос «Пап, а чем отличаются переменные от типов данных?» говорит об отсутствии понимания. А если есть понимание — его нужно как-то назвать. Это одно из основных свойств детской психологии: давать имена игрушкам и даже любимой чайной чашке. Вы подарили ребенку плюшевого медведя — первым делом ребенок будет выбирать ему имя. Потом можете раз двадцать сказать: «убери медведя с пола» — ребенок не поймет и только почувствовав сердитую интонацию спросит: «Ты про Мишу? Так бы сразу и сказал...»
Мне кажется, что наоборот — с динамической типизацией и без нужды вручную распределять память — и дурак напишет.
А мне кажется, что с динамической типизацией очень сложно понять само понятие «тип», да и зачем понимать, если и без этого понимания всё само происходит?
То что они разного типа. Что не согласуется с Вашим утверждением:
В динамическом языке переменная — это просто ящик. У ящика не может быть типа. Тип может быть только у содержимого.
Ящики разного типа, а указатели на них одного типа, но как уже сказал:
Все, что я говорил про ящики, я говорил не про указатели.
Далее.
Если мне нужна треугольная матрица, я просто создам пустой список, и буду динамически добавлять в список новые элементы. Зачем мне заранее выделять память?
Разве создание пустого списка не распределение памяти? Пусть и фьючерсное. Но Вы подменили задачу: у Вас нижняя треугольная матрица, а у меня верхняя. Поэтому мне заранее нужно знать размер. Однако ИМХО это второстепенные технологические моменты, которые уводят нас в сторону. Принципиальный момент: закреплять ли за каждой переменной определенный тип? Я считаю, что для школьника проще закреплять. При этом не спорю, что с динамической типизацией можно писать корректные программы, но это требует определенного опыта от программиста.
Это как? Если функция разбивается на такие блоки, то из этой функции надо сделать несколько функций. По функции на каждый блок. BTW в Паскале допустимы вложенные функции.
Если три строки — сложно, то шесть строк — сложнее.
Как и в литературных текстах. Когда текст разбит на главы, параграфы, пункты и т.д. ориентация и навигация в нем проще. Глава: заголовок функции; параграф: константы; параграф: типы; параграф: переменные; параграф: тело функции (операторы).
Начинающему программа в три оператора уже кажется сложной. Если среди операторов будут объявления переменных, то покажется еще сложнее.
или ?
ИМХО будет совершенно непонятно зачем нужны какие-то типы.
Видимо была плохая книжка. Это проблема многих популярных книжек — автор пытается объяснить проще, а получается неимоверно сложно.
Т.е. понимание уже есть. Т.к. вопрос «Пап, а чем отличаются переменные от типов данных?» говорит об отсутствии понимания. А если есть понимание — его нужно как-то назвать. Это одно из основных свойств детской психологии: давать имена игрушкам и даже любимой чайной чашке. Вы подарили ребенку плюшевого медведя — первым делом ребенок будет выбирать ему имя. Потом можете раз двадцать сказать: «убери медведя с пола» — ребенок не поймет и только почувствовав сердитую интонацию спросит: «Ты про Мишу? Так бы сразу и сказал...»
Где тут байты?
У меня IDE Паскаля с открытым кодом — приспосабливайте и пользуйтесь :)
А мне кажется, что с динамической типизацией очень сложно понять само понятие «тип», да и зачем понимать, если и без этого понимания всё само происходит?
И в Паскале есть стандартная процедура new.
Если просто без обобщений:
то ok — поймет самый тупой ученик.
То что они разного типа. Что не согласуется с Вашим утверждением:
Ящики разного типа, а указатели на них одного типа, но как уже сказал:
Далее.
Разве создание пустого списка не распределение памяти? Пусть и фьючерсное. Но Вы подменили задачу: у Вас нижняя треугольная матрица, а у меня верхняя. Поэтому мне заранее нужно знать размер. Однако ИМХО это второстепенные технологические моменты, которые уводят нас в сторону. Принципиальный момент: закреплять ли за каждой переменной определенный тип? Я считаю, что для школьника проще закреплять. При этом не спорю, что с динамической типизацией можно писать корректные программы, но это требует определенного опыта от программиста.
Ok. Действительно, всё не очевидно — с чего Вы и начали. Наверное, не стоит столь неочевидное в школе изучать.