Старшая дочь в инязе учится. Никак у нее математика не шла, как я ни пытался, ну зато языки хорошо идут. Ладно, видать не судьба.
Но не суть.
Короче, началось у них программирование. Питон начали изучать. Не знаю нафига он им, что-то там им говорили про умение обучить ИИ языкам и пользоваться этим. Но тоже — не суть
Задание. На циклы. Пользователь вводит целое число < 10, программа должна в цикле увеличивть число на 1 пока не станет равно 10. Ну и надо вывести в результе программы количество шагов цикла. Ясно что можно тупо print(10 — N), но это лайфхак — так нельзя, надо циклы
Объяснил дочери, что надо перед циклом завести переменную, обнулить ее, и в цикле увеличения начального числа эту переменную тоже увеличивать на 1. Ну и вывести ее в результате.
Вопрос дочери ввел меня в ступор — "а откуда компьютер знает, что это то, что нужно? Зачем вообще какую-то переменную вводить?"
Н>Объяснил дочери, что надо перед циклом завести переменную, обнулить ее, и в цикле увеличения начального числа эту переменную тоже увеличивать на 1. Ну и вывести ее в результате. Н>Вопрос дочери ввел меня в ступор — "а откуда компьютер знает, что это то, что нужно? Зачем вообще какую-то переменную вводить?"
Н>И как бы вы ответили?
казалось питон функциональный (я его не знаю вообще) т.е. циклов не должно быть...
Здравствуйте, Нomunculus, Вы писали:
Н>Старшая дочь в инязе учится. Никак у нее математика не шла, как я ни пытался, ну зато языки хорошо идут. Ладно, видать не судьба. Н>Но не суть. Н>Короче, началось у них программирование. Питон начали изучать. Не знаю нафига он им, что-то там им говорили про умение обучить ИИ языкам и пользоваться этим. Но тоже — не суть
Н>Задание. На циклы. Пользователь вводит целое число < 10, программа должна в цикле увеличивть число на 1 пока не станет равно 10. Ну и надо вывести в результе программы количество шагов цикла. Ясно что можно тупо print(10 — N), но это лайфхак — так нельзя, надо циклы
Н>Объяснил дочери, что надо перед циклом завести переменную, обнулить ее, и в цикле увеличения начального числа эту переменную тоже увеличивать на 1. Ну и вывести ее в результате. Н>Вопрос дочери ввел меня в ступор — "а откуда компьютер знает, что это то, что нужно? Зачем вообще какую-то переменную вводить?"
Н>И как бы вы ответили?
Копьютер вообще ничего не "знает", это просто супер-быстрая счётная машинка, супер-сложный калькулятор, который только и умеет выполнять команды, записанные в разных видах (в исходниках, в бинарниках). Программист, а в данном случае ты, доча -- это командир компьютера. Как ты скажешь, он так и сделает. Сказано "завести переменную", так компьютер заведёт и положит туда значение, а если сказано "показать значение переменной", тогда покажет. Сам он ничего не сделает, так что надо ему по шагам расписать, что именно надо сделать.
Здравствуйте, Нomunculus, Вы писали:
Н>Вопрос дочери ввел меня в ступор — "а откуда компьютер знает, что это то, что нужно? Зачем вообще какую-то переменную вводить?"
Н>И как бы вы ответили?
Я бы сказал что "сие есть тайна великая", и за познание ея нужно заплатить самым дорогим (честью, жизнью, совестью, деньгами).
и, в соответствии с оплатой дал бы ответ — "не твое это, дитя моё. обратись другой науке".
Н>Вопрос дочери ввел меня в ступор — "а откуда компьютер знает, что это то, что нужно? Зачем вообще какую-то переменную вводить?" Н>И как бы вы ответили?
Компьютер не знает что нужно, и никто не знает что нужно, больше нет взрослых которые знают ответ и проследят за тобой, то ли ты делаешь что нужно, все наши это мы.
Как сумеешь сдать заказчику и не опозориться по сравнению с другими специалистами, так и нужно.
Данное сообщение является художественным произведением и освещает вымышленные события в вымышленном мире. Все совпадения с реальностью являются случайными. Не является инвестиционной рекомендацией.
Здравствуйте, Нomunculus, Вы писали:
Н>Объяснил дочери, что надо перед циклом завести переменную, обнулить ее, и в цикле увеличения начального числа эту переменную тоже увеличивать на 1. Ну и вывести ее в результате. Н>Вопрос дочери ввел меня в ступор — "а откуда компьютер знает, что это то, что нужно? Зачем вообще какую-то переменную вводить?"
Здравствуйте, Нomunculus, Вы писали:
Н>"а откуда компьютер знает, что это то, что нужно? Зачем вообще какую-то переменную вводить?"
Сначала человек должен понять, что ему нужно.
То есть, надо дать задачу, которую без циклов не решить*, и дождаться, пока обучаемый не скажет: "тут бы вот такую штуку, которая делает одно и то же много раз, потому что руки уже болят перепечатывать", а потом сказать: эта штука называется "цикл".
Поскольку кто умеет — делает, а кто не умеет — учит, рассчитывать на это приходится.
---
*Такую задачу ещё поискать. Всюду давно развитые декларативные средства. По сути, циклы — главным образом, инструмент тех, кто имплементирует декларативные средства, то есть, морлоков. Элоям из иняза циклы могут быть просто не нужны.
Здравствуйте, Нomunculus, Вы писали:
Н>Вопрос дочери ввел меня в ступор — "а откуда компьютер знает, что это то, что нужно? Зачем вообще какую-то переменную вводить?" Н>И как бы вы ответили?
Ну, короткий ответ: эти способности заложены к компьютер человеком. А вообще, ты бы дал дочери какие-то базовые представления, для чего нужны компьютеры, какие задачи они позволяют решать и что такое программа.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, Нomunculus, Вы писали:
Н>Объяснил дочери, что надо перед циклом завести переменную, обнулить ее, и в цикле увеличения начального числа эту переменную тоже увеличивать на 1. Ну и вывести ее в результате. Н>Вопрос дочери ввел меня в ступор — "а откуда компьютер знает, что это то, что нужно? Зачем вообще какую-то переменную вводить?"
Н>И как бы вы ответили?
На самом деле, я несколько раз, помогая новичкам сталкивался с тем, что они не понимают смысла переменных. Оно сейчас почему-то считается интуитивно-понятным, хотя у незнакомого человека это вызывает закономерный шок — "что это вообще за буквы???"
Более-менее мне удавалось объяснить это понятие идя от определения "переменная — именованная область памяти".
Т.е. примерно так:
— память это набор ячеек у которых есть свои номера/адреса (как правило с этой концепцией все более-менее знакомы и тут проблем не возникает).
— но использовать ячеек в программе очень неудобно (разбираем что "запиши число 5 в ячейку 452565" это ни разу не интуитивно и быстро приведет к путанице). Хотя раньше именно так и работали
— поэтому придумали идею давать понятные имена ячейкам памяти и в программе работать с именами, а транслятор внутри это переведет в реальный адрес автоматически.
Н>Вопрос дочери ввел меня в ступор — "а откуда компьютер знает, что это то, что нужно? Зачем вообще какую-то переменную вводить?"
Н>И как бы вы ответили?
компьютер ничего не знает, ему нужно всё объяснить (задать в коде программы).
нужно что-то (кол-во шагов цикла) подсчитать. человек для подсчета, чтобы не забыть, использует руки (загибая пальцы).
компьютер вместо руки может использовать ячейку памяти, в которой хранится число. эта ячейка называется переменной и должна иметь имя.
Здравствуйте, Слава, Вы писали:
С>Покажите ей триггерный счётчик. С>Потом перейдите к ассемблеру x86.
Вот да, лучше всего дать самые базовые основы, чтобы было представление, откуда ноги растут.
Иначе в голове останется место для всякой полумистической чепухи.
Здравствуйте, Нomunculus, Вы писали:
Н>Объяснил дочери, что надо перед циклом завести переменную, обнулить ее, и в цикле увеличения начального числа эту переменную тоже увеличивать на 1. Ну и вывести ее в результате. Н>Вопрос дочери ввел меня в ступор — "а откуда компьютер знает, что это то, что нужно? Зачем вообще какую-то переменную вводить?"
Н>И как бы вы ответили?
Допустим, твоей дочери надо составить инструкцию для трехлетнего ребенка, как попасть в десятый подъезд длинного дома. Цуфры на подъездах ребенок читать еще не научился, но на пальчиках до десяти считать умеет.
Тогда инструкция могла бы звучать так: начинай двигаться вдоль дома, и около каждого подъезда загибай пальчик. Когда загнешь все, значит, ты дошел до нужного подъезда.
Вот, руки с пальчиками и есть та самая переменная. В начале движения надо не забыть их разогнуть, это и есть обнуление. А компьютер — это ребенок, умеющий исполнять инструкции, состоящие из простых команд (программы). Только в отличии от человека, он делает это быстро и аккуратно.
Здравствуйте, Михаил Романов, Вы писали:
МР>На самом деле, я несколько раз, помогая новичкам сталкивался с тем, что они не понимают смысла переменных. Оно сейчас почему-то считается интуитивно-понятным, хотя у незнакомого человека это вызывает закономерный шок — "что это вообще за буквы???"
Понятие переменной, на самом деле, очень сложно и контринтуитивно. А уж указатель, так вообще.
МР>Более-менее мне удавалось объяснить это понятие идя от определения "переменная — именованная область памяти".
А почему не коробочка с надписью (именем переменной)? По надписи можно найти нужную коробочку, а что в ней лежит — это ее, переменной, значение?
Здравствуйте, Pzz, Вы писали:
С>>Покажите ей триггерный счётчик.
Pzz>Тогда уж сначала паяльник.
Это лишнее. Тем более что подобие триггеров можно сделать и на каких-нибудь реле, на монтажной доске, без ссаного паяльника, который был нужен учащимся в основном потому, что на родине слонов не то что монтажную доску с дырками, а мебель с отверстиями для шурупов в нужных местах выпустить не могли.
Здравствуйте, Слава, Вы писали:
Pzz>>Тогда уж сначала паяльник.
С>Это лишнее. Тем более что подобие триггеров можно сделать и на каких-нибудь реле, на монтажной доске, без ссаного паяльника, который был нужен учащимся в основном потому, что на родине слонов не то что монтажную доску с дырками, а мебель с отверстиями для шурупов в нужных местах выпустить не могли.
Ну, я, как раз, примерно с этого и начинал. С паяльника. Нет, не лишнее. Очень помогает развеивать мифы.
Но это, конечно, если всерьез этим всем интересоваться.
Здравствуйте, Pzz, Вы писали:
Pzz>А почему не коробочка с надписью (именем переменной)? По надписи можно найти нужную коробочку, а что в ней лежит — это ее, переменной, значение?
Ну можно и так, наверное. Я даже помню, что нечто похожее было в каком-то учебнике по информатике для школьников (стром).
Но мне такое описание не очень нравится тем, всё равно остался вопрос "а коробочки откуда?", и таки нужно делать следующий шаг объяснения.
А с привязкой к памяти вроде как выходит законченное объяснение...
Хотя с коробочками уровень абстрагирования всё же выше.