Один урок программирования

    На днях мне довелось провести практическое занятие по программированию для учеников десятого класса одного из харьковских лицеев. Шесть лет назад я читал курс программирования в политехе, но тогда на посвящение студентов в эту, не побоюсь сказать, науку у меня было целых два семестра времени на лекционные и лабораторные занятия. А здесь было всего от силы полтора часа, да и с таким юным контингентом я ещё не работал. «Ладно», сказал я себе. И приступил к подготовке. Мне дали несколько задач, которые можно было бы порешать со школьниками. Первая из них занимала аж 70 строк индусского кода. Подготовил своё решение из 10 строк. Думал, «Сначала дам одно решение, потом покажу другое». Ещё одну задачу переписал для того, чтобы сместить акценты с программистских особенностей в предметную область (задача была геометрическая). Третья задача была наиболее простой – один человек вводит с клавиатуры число, другой отгадывает. Неинтересно. Пусть лучше компьютер загадывает и даёт подсказки. Для каждой задачи придумал последовательность подачи материала. Когда пришло время, а школьники расселись за компьютеры, я их спросил: «Кто-нибудь из вас имеет опыт программирования? Какие-то языки программирования уже изучали?». Получив отрицательный ответ, мысленно сказал себе «Печально», отложил в сторону два листа с распечаткой кода из трёх и сделал заявление: «Ну, что ж… Тогда начнём программировать!».

    Для кодеров данная статья, наверняка, интереса не представляет. Мой рассказ будет о методике преподавания в условиях ограниченного времени для людей с неокрепшей детской психикой на примере всего одного урока. Всех желающих приглашаю под кат!

    Вводное слово о программировании началось примерно так. «Компьютеры сейчас применяются практически в любой сфере человеческой жизни. Поэтому неважно, какой путь вы выберете, на кого станете учиться, уметь программировать достаточно важно. С помощью этой науки можно получить существенную выгоду». Далее я привёл пример «задаче о коммивояжёре», сформулировав её следующим образом: «Представьте, что вы работаете в Новой Почте. Вам нужно доставить множество посылок в разные города. Хорошо бы выбрать путь, чтобы был бы как можно короче. Это сэкономит деньги – курьер работать будет меньше часов, бензина потратите меньше литров». И небольшой переход: «Но, к сожалению, компьютер сам не умеет решать такие задачи. Он умеет выполнять лишь арифметические и логические операции» (ну, и другие, но не будем сейчас об этом). «Причём делает он это над числами в виде нулей и единиц» (не будем тратить время, рассказывая о двоичной системе счисления – надеюсь, в школьной программе она есть). «Команды компьютеру (машинные инструкции) тоже даются в виде чисел. Но обычно программисты пишут программы на языках, понятных человеку – например, C, Java, C++». Услышав «си-плюс-плюс», дети оживились. «Чтобы преобразовать код программы в команды компьютеру есть несколько видов программ, например, компиляторы. Чтобы более удобно с ним работать будем использовать другую программу – среду разработки, которая также включает текстовый редактор и много других полезных инструментов. Найдите на рабочем столе ярлык программы Code::Blocks и запустите его».

    Потом я рассказал, как создать новый проект и подробно, строчка за строчкой, описал содержимое файла с программой. Нумерация строк очень помогла. А вот трактовки терминов получились довольно вольными.

    image

    «Итак, можно увидеть, что в коде программы встречаются английские слова. Это и include, и using, и main, и return. В первой строке мы включаем, т.е. используем, некую библиотеку. Обычно программисты используют код, написанный другими программистами. Он включается во всевозможные библиотеки. В данном случае мы используем библиотеку iostream. Здесь i – это input (ввод), o – output (вывод), stream – поток. Т.е. библиотека содержит код для ввода с клавиатуры и вывода на экран» (перегружать школьников информацией о перенаправлении потоков ввода-вывода не стоит). «Если библиотек много, между ними могут возникнуть конфликты, поэтому код обычно размещают в разных пространствах. using namespace std нужно для того, чтобы выбрать пространство имён (namespace) std – сокращение от standard (стандартный). int говорит, что идёт речь о целых числах, об их хранении и передаче» (т.е. я имел в виду объявление переменных и возвращаемое функцией значение; о явном приведении типов рассказывать не стал) «main – имя функции. Функция – это какой-то логически завершённый участок кода, который возвращает какое-то значение. cout… c – console (консоль – клавиатура и экран), out – вывод, endl – end of line, конец строки. В седьмой строке происходит вывод текста, заключённого в двойные кавычки, на экран. return 0 в данном случае говорит операционной системе об успешном завершении программы».

    После этого предложил нажать F9, чтобы скомпилировать программу («преобразовать текст программы в машинные инструкции»). «Поздравляю! Вы написали свою первую программу!», сказал я, когда увидел, что на мониторах появились консоли с текстом. Потом уточнил: «Ну, не совсем написали – за вас это уже сделали другие. Поэтому давайте внесём изменения в код. Измените в двойных кавычках текст Hello world! на какой-нибудь другой на английском языке и ещё раз нажмите F9. Вот теперь другое дело!». Кто-то не закрыл окно запущенной программы, поэтому компиляция не прошла. Пришлось помогать. «Теперь замените текст на какой-нибудь другой, на русском языке. И удивитесь.» Те, кто написал «Привет», увидели следующее:

    image

    «Всё дело в том, что текст тоже преобразуется в нули и единицы. И как именно будет происходить это преобразование, зависит от кодировки. Кто-нибудь сталкивался с этим понятием?» В ответ – неуверенное мычание… «Давайте зададим кодировку для кириллицы. Установим (set) соответствующую локаль (locale). Для этого седьмую строку опустим вниз (поставим курсор в начале строки и нажмём Enter). И в пустой седьмой строке введём setlocale(LC_ALL, "rus"); А во второй строке введём #include <locale>». Кто-то LC_ALL написал строчными буквами (пришлось объяснить, что строчные и заглавные буквы отличаются), кто-то списал с доски L.C.A.L.L. (да, доска в ужасном состоянии), кто-то написал «russ» и не получил должного результата. Но в большинстве случаев я увидел положительный исход. Немного опечалил текст, который написала одна девочка, «хочу кушать». В таком состоянии восприятие информации довольно сильно страдает.

    Пришло время сформулировать школьникам условия задачи. «Теперь давайте напишем программу. Пусть компьютер загадает число от 0 до 99, а мы с его подсказками будем это число отгадывать». Да, это третья задача.

    «Для генерации случайного числа используется функция rand, сокращение от слова random – случайный. Чтобы её использовать, нужно подключить библиотеку cstdlib. Для генерации числа от 0 до 99 нужно взять остаток от деления результата, который возвращает функция, на 100. Операция получения остатка от деления записывается символом процента». Тут пришлось напомнить школьникам, что такое остаток от деления. Привёл пример «5%2», и им стало ясно, что я имел в виду. «Результат выполнения операции взятия остатка от деления (т.е. случайное число от 0 до 99) нужно куда-то записать. Это число целое. Странно было бы, если бы мы пытались угадать какое-нибудь вещественное число, например, 2.584 или 35.763. Для хранения результата будем использовать переменную. Переменная – это область памяти компьютера (нам пока неважно, где эта память находится), к которой можно обращаться по имени». Да, с переменными различных типов можно выполнять определённый набор операций, но это сейчас не имеет значения. «Назовём переменную u (от слова unknown). Для объявления переменной целого типа используется слово int. Такая область памяти на этих компьютерах занимает 4 байта и может вместить число примерно от минус двух до плюс двух миллиардов. Этого достаточно?» Получив утвердительный ответ, написал на доске недостающий код. Получилось следующее (вместе с исправлением вывода – теперь на экране будет не текст, а значение переменной):

    image

    Запустив программу, школьники, все до одного, увидели число 41. Не 42, но тоже сойдёт. Причём результат не изменялся от запуска к запуску. «Итак, мы получили случайное число. Действительно, кто бы мог подумать, что компьютер выдаст 41? Число 41 удовлетворяет условиям, которые мы поставили. Оно находится в интервале от 0 до 99. Но как его сделать действительно случайным? Для этого нужно задать так называемое зерно генератора случайных чисел, например, текущим временем. Добавьте перед десятой строкой строку srand(time(0)); Если программа не компилируется – добавьте библиотеку ctime»

    Теперь программа выдавала действительно случайные (ну, на самом деле не случайные, но это для этой задачи значения не имеет) числа. Исходник программы на данный момент был таким:

    image

    Осталось написать код, отвечающий за его угадывание.

    «Не думаю, что вы сможете угадать число от 0 до 99 с первого раза» Школьники улыбнулись. «Если мы будем делать какие-то одни и те же действия несколько раз, то это можно оформить в виде цикла» Так как рассказать на словах, как реализовать цикл, сложно, сначала я записал соответствующие строки на доске.

    image

    «В тринадцатой строке мы объявили переменную i (от input), аналогичную переменной u. В ней мы будем хранить введённое число. Собственно ввод осуществляется в 16-й строке. Цикл объявляется ключевым словом do. Всё, что заключено в фигурные скобки, будет повторяться пока (while) значение переменной i не равно u». Что касается этого участка кода, то типичные ошибки учеников были такие. Во-первых, они ставили вместо фигурных скобок круглые. Во-вторых, операцию сравнения «!=» писали раздельно. После компиляции программы дети настойчиво пытались отгадать число u. Меня поразило, что девочка, которая ранее написала «хочу кушать» делала это весьма успешно. Из ошибок времени исполнения я был рад увидеть следующую:

    image

    Это позволило мне объяснить, что в программе нет проверки корректности входных данных, и вводить буквы, когда от нас ожидают лишь цифры – не самая лучшая идея.

    Мы подошли к финишной прямой. Осталось добавить подсказки. Я написал на доске два «if-а» и пояснил. «Если введённое число больше загаданного, выводим соответствующее сообщение (строка 17). Если введённое число меньше загаданного – делаем так же (строка 18).» Плюс ко всему я расширил вывод сообщения о завершении «игры».

    image

    Это был окончательный текст программы, которую набрал на первом уроке программирования 10-в класс. Программа далеко не идеальна. В частности, мне не нравятся сообщения «Ваше число больше!» и «Ваше число меньше!». Они реально запутывают. Если бы у меня был второй шанс провести подобный урок, сформулировал бы по-другому.

    На этом уроке я также хотел показать ученикам алгоритм быстрого поиска загаданного числа (бинарный поиск), но оказалось, что они сами интуитивно пришли к этому решению, что не могло меня не порадовать.

    image

    Итоги подведём.

    1. Урок прошёл успешно. Все ученики справились с заданием. Задача решена. Всего одна, но решена. Не без трудностей, конечно.

    2. Я получил новый опыт преподавания. Последние два года читаю лекции и провожу лабораторные работы только студентам пятого курса, а работать с ними – совершенно иное дело. У них уже есть какая-то база, отношение к учёбе (да и к жизни в целом) другое, а мои предметы узко специализированные – материал, который я даю, в будущем пригодится от силы 2–3 нашим выпускникам из каждой группы. Здесь же есть надежда, что именно этот урок вызовет интерес к программированию у одного-двух учеников.

    3. Школьная учебная программа совершенно иная, нежели та, по которой учился я. Да, я ходил не в простую школу. В седьмом классе мы изучали Logo, в восьмом – BASIC, а в девятом – Pascal. Но, тем не менее, даже тем моим одноклассникам, которые не блистали знаниями по другим предметам (а ведь и я тоже не блистал!), информатика нравилась. Я уверен, что давать программирование в школе нужно обязательно. Оно отлично развивает мозг и позволяет понять компьютеры (без которых мы уже не представляем свою жизнь) совершенно с другой стороны.

    4. Язык C++ имеет высокий порог вхождения. Одного урока, чтобы раскрыть основы этого языка программирования, явно недостаточно. Да, я не знаю C++. Я обожаю C, а когда мне нужно ООП, я пишу на Java. Но изучать C++ в вузе скорее всего нужно (C по моему скромному мнению – обязательно). Опять же многое зависит от вуза и специальности.

    Спасибо за внимание всем, кто прочёл до конца! Буду рад ответить на ваши вопросы.

    P.S. Есть идея написать ещё одну статью об информатике в школе. Если поддержите в комментариях, статья, скорее всего (не буду обещать), увидит свет.
    Поделиться публикацией
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 173
    • +12
      Я бы учил детей Питону.

      И, насколько я себя помню, самое сложное в детстве, это было понять, что такое потоки. А Вы не только потоки сразу даёте, но ещё и локаль.
      • +3
        Поддерживаю предыдущего оратора: по опыту Питон действительно помогает меньше заморачивать учеников типизацией и больше делать упор на алгоритмы. Правда о типах всё равно обязательно следует рассказать.
        • –4
          Может лучше C#? Он ещё проще. К томуже Visual Studio очень облегчает жизнь.
          • +11
            C# проще питона?
            • 0
              Ну лично мне питон было сложнее осваивать… А на C# написал рабочий проект за ~12 часов (4 дня). До этого писал только простенькие скрипты на PHP.
              • +1
                Строже. Переход от статической типизации к динамической куда проще, чем обратно. По своему опыту преподавания языков скажу, что в самом начале язык нужен очень строгий.
              • +2
                Чем меньше слов тем лучше для детей. C# для этого избыточен, особенно учитывая тотальное ООП: слишком много абстракций.

                И если к десятому классу они ещё не занимались программированием, то 90% из них точно не пойдёт в программисты, и им точно не надо знать чем int отличается от char, что такое void, cin и cout. Имхо, проще подошло бы вообще не столько программирование, сколько написание простейшей игры из трёх функций на pygame (с дополнительной упрощающе оболочкой) или love2d (и так сойдёт), учитывая что там python/lua, минимум слов/особенностей фреймворков, и максимум предметной области.

                За полтора часа, стоит объяснить, что такое переменная/функция/массив, и написать простейшую «игру» с кликаньем на кружочки, которые перемещаются по экрану. Это же значительно сильнее заинтересует десятиклассников, чем унылое «введите число, вот вам работа по формуле». Преподавание не должно быть унылым, это основное правило для преподавателя, любящего свой предмет.
                В ВУЗе можно выпендриваться со скучными ханойскими башнями и всякими алгоритмами Монте-Карло, а в школе извольте подавать игрушки.
                • 0
                  И если к десятому классу они ещё не занимались программированием, то 90% из них точно не пойдёт в программисты,

                  В корне не согласен!
                  На примере своих учеников могу сказать что некоторые определяются даже не 10, а в 11 классе. НО если есть желание и голова все будет. У меня много примеров которые начинали в 10 и сейчас кто учится, а кто уже профессионально кодит :)


                  За полтора часа, стоит объяснить, что такое переменная/функция/массив,

                  Да именно так, плюс еще объяснить виды и назначение циклов и научить структурировать задачу


                  и написать простейшую «игру» с кликаньем на кружочки, которые перемещаются по экрану.

                  а вот это лишнее, или может в качестве саморазвития на лето ;)

                  • 0
                    некоторые определяются даже не 10, а в 11 классе
                    Если бы даже так. Я вот в первой половине выпускного класса думал, что буду архитектором. Во второй — экономистом. Поступил на криптографа…
                    • 0
                      Закончил языковую школу в Москве. Из 60 человек — полтора программиста.
                      В соседней, математической школе того же выпуска — целых три. В соседней спортивной — ноль. В ещё одной английской — два. Я смотрю на то, куда поступали выпускники, и кем они стали.
                      Программистов мало. И собираются они в специализированных учебных учреждениях. И я совершенно не понимаю, зачем давать что-то сложнее игрушки из трёх команд тем, кто будет экономистом, юристом, актёром или менеджером среднего звена. Им это не нужно, напротив, испугаются и будут вспоминать как страшный сон. За полтора часа, нужно успеть сделать минимум, чтобы вытащить действительно заинтересовавшихся, проведя отсев всех остальных, которым это не нужно. Но чтобы и им тоже было интересно, потому что мало ли что.

                      Представь что ты — полный гуманитарий, у которого в голове не укладывается, что такое массив.
                      Ну не помещается и всё тут!
                      Полуторачасовая программа должна быть рассчитана и на таких тоже, чтобы понятно было вообще всем. Ибо из гуманитариев иногда тоже вырастают программисты, и неплохие. Если заинтересовались и всё таки вкурили.
                      • 0

                        Да, согласен полностью, даже больше скажу надо убрать Информатику как предмет из 11 класса.
                        Нормально подготовится к егэ на уроке не получается, да и как было выше сказанно не всем это нужно.

                    • 0
                      Т.е. вы предлагаете за 1.5 часа дать не только основы языка, но и еще дать основы движка? Боюсь, что мозг у 90% начнет отключаться на первой трети.
                      • 0
                        Так три команды: update, mouse position и draw circle, допустим. С кружочками уже интересно баловаться, особенно если они реагируют на мышку. Заодно, сразу можно пощупать результат, и увидеть, что «всё не так бессмысленно, как подсчёт процентов и вывод суммы a и b». Ребёнок, который никогда не занимался — поймёт. А вот void/int/float — будут доходить ещё долго.
                        • 0
                          Можно ещё упростить, используя визуальное программирование (Выстраиваем логику из блоков, сразу видим код).
                          • 0
                            нужен ли в этом случае код?
                            достаточно логики.
                            правда, я противник «визуального программирования», но для детей и гуманитариев, наверное, подойдет…
                            • 0
                              его придумали не для детей и не для гуманитариев, а для 50+-летних инженеров советской закалки, которые из алгоритмики понимают только блок-схемы
                              • 0
                                систем «визуального программирования» достаточно много. Вы, видимо, имеете ввиду паронджановский «Дракон»? :-) тогда согласен
                                ну а МИТвский Скратч (равно как и леговский язык ) — он как раз для детишек.
                                • 0
                                  я про саму концепцию «визуального программирования».
                                  • 0
                                    концепция «визуального программирования» появилась впервые не у нас. поэтому считать ее «для пенсионеров советской закалки» — не стоит.
                                    у нас для «инженер-пенсионеров» и инвалидов умственного труда был придуман «дракон». «у них» — гораздо большее количество систем…
                • +4
                  Согласен. printf простой и понятный. А как работают cin и cout лично я понял только во втором семестре, когда мы стали изучать объекты и перегрузку операторов. До этого воспринималось как магия, было непонятно почему именно так а не иначе.
                  • –2

                    Прогали же в детстве и на Си, и на асме, и ничего. Кому интересно — во всем разберется.


                    Я бы разделил — кому "решать разные задачи" — Питон, а кому "стать программистом" — С (не ++).

                    • –3
                      дети, обученные питону, маловероятно потом осилят порог вхождения в яп низкого уровня. И будут всю жизнь (если доведется) писать отвратный код даже не понимая, почему он отвратный
                      • +1
                        Школа дает общие понятия, специализация уже приходит позже.

                        Большинство из детей не станет программистами, но зато они смогут написать, пусть даже отвратный, код на питоне, чтобы автоматизировать какие-то свои прикладные задачи.
                        • 0
                          Согласен и со вторым и, к сожалению, с первым.
                        • +6
                          дети, обученные питону, маловероятно потом осилят порог вхождения в яп низкого уровня

                          Что характерно, необученные питону — тоже.
                          • 0
                            Все следует изучать начиная с простого. В случае с программированием можно либо идти от низкоуровневой простоты: понять как устроен компьютер на уровне логических схем и оттуда понимать как это все программируется на машинном уровне и как затем упрощается с помощью языков программирования, — либо с алгоритмической простоты: блок-схем и затем высокоуровневых языков, позволяющих абстрагироваться от особенностей их реализации. В идеале можно сводить оба маршрута воедино, где, как мне кажется, и лежит язык C. А Python может быть хорошей основой для изучения с алгоритмического конца, хотля лучше Lisp =)
                            • 0
                              то, о чем вы говорите — это скорее электроника, больше полезная конкретно плисоводам и микроэлектронщикам. На мой взгляд, начинать лучше с работы с памятью (массивы, куча/стек, адресация). Как только просыпается понимание как устроена память, всё остальное в программировании становится интуитивно понятным и усваиваемым. А главное — нет промежуточной «магии». Дальше — хоть вниз до асма, хоть вверх в ооп.
                              • +1
                                Многие абстракции низкоуровневой работы с памятью вроде массивов, кучи, стека, могут выглядеть «магией» (в плане, почему именно так, а не иначе работают с памятью), если не понимать как физически и на уровне логических схем устроена память и как с нею работает процессор. Да, это электроника, но уровень необходимый для понимания основ не такой уж и высокий. В книге КОД Чарльза Петцольда, например, все это объяснено буквально на пальцах.
                            • +1
                              Я начинал вообще с qbasic. Интересно, что бы вы сказали обо мне.
                              • 0
                                конкретно о вас, как о программисте? — только читая код
                            • +1
                              Абсолютно полностью согласен — Python хорошо подошёл бы для обучения детей. Хотя, уверен, были бы свои подводные камни.
                              • 0
                                Еще для Python есть online консоли которые позволяют сделать все гораздо более дружелюбно, отдать группе полу-готовый скрипт, чтобы не тратить время на начальный этап.

                                Поправить ошибки удаленно, подсветка синтаксиса, ошибок и т.п.

                                Очень удобно для начинающих
                              • –2
                                Чтобы потом они никогда не стали хорошими программистами?
                                • +1
                                  Это ортогональные вещи. Что язык кого-то портит — это байки. На самом деле хорошими программистами могут стать немногие, и изучали они прежде что-то другое или нет — никакой роли не играет.
                              • +18
                                Честно говоря, у меня огромные сомнения, что школьники, не умевшие программировать, что-то вынесли из этого урока, кроме того, что программирование — это жутко сложно. В данном примере огромное количество абстракций-черных ящиков, для понимания которых нужна начальная теоретическая база. Библиотеки, локали, пространства имён. «Не верю!» (с)
                                Скорее всего, практически ничего не поняли, но умело поддержали разговор, всё-таки десятый же класс.
                                Тут, ИМХО, неудачно выбран язык программирования. В старом добром Паскале или Бейсике, например, та же задача решается как раз наглядно, без лишних неочевидных абстракций.
                                • +2
                                  У лектора и с структурой проблемы.
                                  Зачем объяснять отдельно про namespace?
                                  вообще надо убрать и using namespace и указывать его явно для каждого метода.
                                  ВО первых гораздо проще ассоцифция: все методы iostream принадлежат к группе std — стандартные. ГРуппа или namespace — это как фамилия для методов. Позволяет отличать методы с одинаковыми именами в разных библиотеках.
                                  А еще нельзя использовать слово функция. У детей функция в математике и у них начинает клинить от того, что эти две сущности с одинаковыми названиями никак не получается совместить вместе в голове. Понимание что функция потому и функция, что близка математической функции — приходит гораздо позже.
                                  Локаль зачем-то использует. Транслит для первого урока — выше крыши.
                                  Короче, ИМХО автору надо серьезно поработать над способом подачи материала.

                                  UPD:
                                  ОТдельный вопрос — кто придумал начинать обучение детей программированию с С++, а не с лого или муравья.
                                  • 0
                                    У детей функция в математике

                                    И что, понятие функции в математике и в процедурных языках — более-менее перекликается. Нужно только заострить внимание на различиях.
                                    • 0
                                      Не нужно заострять внимание на различиях на вводном уроке.
                                      • 0
                                        Так другого-то не было и не будет.
                                    • +1
                                      Полностью согласен.
                                      #include , using namespace — дать им как данное. Просто пока мы тут пишем, оно нам нужно, кому интересно — могу после урока объяснить что это.
                                      Если кто-то хочет русские буквы, то дать setlocale просто как некоторое заклинание, а не вдаваться в подробности про кодировки. Так и говорим: «Чтобы компьютер понял наши русские буквы мы напишем setlocale(LC_ALL, „rus“).» Ни слова больше.
                                      Зато важные моменты проскочили галопом по европам.
                                      Что я примерно ожидал увидеть в статье
                                      1. Запишем число в переменную n, и посмотрим что там записалось:
                                      int n = 2;
                                      coun << n;
                                      

                                      2. Запишем 2 числа в разные переменные, сложим, и посмотрим, что там записалось:
                                      int n = 2;
                                      int m = 3;
                                      int summ = n + m;
                                      cout << summ;
                                      

                                      3. Научим программу принимать наше число и складывать:
                                      int n;
                                      cin >> n;
                                      int m = 3;
                                      int summ = n + m;
                                      count << summ;
                                      

                                      4. Обучим условию if, и выводу текста:
                                      int n;
                                      cin >> n;
                                      if (n > 5)
                                        count << "bolhe 5";
                                      else
                                        count << "menshe 5";
                                      

                                      5. Ищем степень числа с помощью цикла:
                                      int n;
                                      cin >> n;
                                      int i = 0;
                                      int p = 1;
                                      while (i < n) {
                                        p = p * 2; 
                                        i = i + 1; //mogno napisat i++
                                      }
                                      count << p;
                                      

                                      6. И вот только теперь можно переходить к игре угадай число. Но мне кажется на первом уроке до этого пункта вряд ли можно дойти.

                                      p.s. Сам не преподаватель ни разу, но мнение имею. :)
                                      • 0
                                        Зачем объяснять отдельно про namespace?
                                        вообще надо убрать и using namespace и указывать его явно для каждого метода.

                                        using namespace был в шаблоне файла. Как бы это выглядело, если бы я сказал «а теперь уберём эту строку — она не нужна»? (почему не нужна? зачем её тогда добавили в шаблон?) Да и std:: в пяти местах выглядело бы не лучше.

                                        У лектора и с структурой проблемы.

                                        Почему мой выбор структуры не имеет права на жизнь? Поставил одно интересное задание (а школьникам действительно было в результате интересно угадывать, какое же число загадал компьютер) и дополнил существующий шаблон простейшей программы на реально используемом ЯП до решения. Если бы вы внимательно читали статью, то я готовился совершенно к другому уроку. Несколько задач (три листа распечаток кода), сначала никаких циклов, линейные алгоритмы, потом ветвление и множественный выбор. Всё согласно рекомендациям, которые мне дали. Но жизнь вносит свои коррективы.

                                        ОТдельный вопрос — кто придумал начинать обучение детей программированию с С++, а не с лого или муравья.

                                        Как я уже писал в статье, я именно начинал учиться программировать именно с Лого. В 7 классе. Урок проходил в университете и пришлось выбирать из того, что было установлено в компьютерном зале кафедры «Радиоэлектроника» — либо C/C++, либо Java. Остальное ПО — MathCAD, Multisim, офис и пару САПР.

                                        А еще нельзя использовать слово функция

                                        Я считаю, что можно. Как уже отвечали в комментариях — это понятие сходно с математическим, а на различия заострять внимания не было бы времени. Да и перегружать информацией школьников не хотелось.
                                      • 0
                                        огромные сомнения, что школьники, не умевшие программировать, что-то вынесли из этого урока

                                        Проверить это невозможно. Но и считать школьников за дураков тоже неправильно. Если поставите себя на их место, то вполне реальна такая ситуация. Школьник: «Хм. Чтобы начать программировать на C++ нужно поставить Code::Blocks. Если выбрать проект, появится текст программы, которая работает. Я могу этот текст изменять. Мы работали с целыми числами, а как ввести и вывести вещественное число?» Потом полезет в интернет и скачает учебник.

                                        В данном примере огромное количество абстракций-черных ящиков

                                        Вы что-то имеете против абстракций? Вы знаете досконально, как устроен каждый агрегат автомобиля? Большинство просто поворачивают ключ и едут.

                                        ничего не поняли, но умело поддержали разговор

                                        Не нужно считать школьников за дураков.

                                        В старом добром Паскале или Бейсике, например, та же задача решается как раз наглядно

                                        Согласен на все 100. Но приходится работать с тем, что есть. У меня есть определённый багаж знаний по C++, на компьютере есть среда разработки. Вспоминать Паскаль (даже не синтаксис, а всевозможные нюансы) и устанавливать компилятор на 15 компьютеров ради одного урока? Подготовка к нему у меня и так заняла 2 рабочих дня. Причём 90% подготовленного материала пришлось выбросить. Хотя к этому я был готов — слишком много было неизвестно об уровне подготовки школьников. Представьте, что это был бы урок не программирования, а физики. Я бы подготовил множество опытов по электричеству, а оказалось бы, что они только кое-как механику проходили.
                                        • 0
                                          устанавливать компилятор на 15 компьютеров ради одного урока
                                          для паскаля есть PascalABC.NET (впрочем, там декларировано, что не только паскаль). Ну и — да, ради одного урока… ради ЦЕЛОГО урока…
                                          и ради этого нужно вспоминать паскаль, или закон ома, или валентность элементов, или отличия ямба от хорея…
                                          • 0
                                            Проверить это невозможно. Но и считать школьников за дураков тоже неправильно.

                                            А я и не считаю их дураками. Ваш урок тяжело воспринимается для обычного человека, а не для дурака. Это вы почему-то делаете выводы «раз не понял, то дурак», «не понял, но умело поддержал разговор — тоже дурак». Не надо так :)

                                            Вы что-то имеете против абстракций? Вы знаете досконально, как устроен каждый агрегат автомобиля? Большинство просто поворачивают ключ и едут.

                                            Абстракции же бывают разными. Я много чего имею против неочевидных абстракций. Они для понимания требуют подготовки, и преподносить на уроке их как первое блюдо, значит, сбить обучаемого с толку. В современном автомобиле, кстати, таких абстракций как раз практически нет — все элементы управления выполняют прямое назначение. Руль для поворота влево-вправо, селектор для выбора, ехать вперед, назад или припарковаться, педалька для разгона, педалька для торможения. Всё просто и понятно. Да, с профессиональным ростом можно углубиться в детали реализации, но «пользовательский» уровень очевиден для восприятия. Критерий очевидности достаточно простой — если абстракцию можно объяснить известными человеку понятиями, она годится для использования на уроке. Если нельзя, то не годится.
                                            Вот, к примеру, абстракция writeln('Привет, Чебурашка') — хорошая. Она выводит текст на экран, школьник знает, что такое текст, что такое экран, и что такое Чебурашка. При этом нам не нужно опускаться на более детальный уровень процедур Паскаля, на реализацию ввода-вывода, и тем более до compiler magic, через который там реализована половина модуля system.
                                            А вот абстракция using namespace std отвратительна до безобразия. Для пояснения, что она делает, нужно проваливаться где-то на три-четыре уровня вглубь. Или вообще не пояснять, дескать, пока пишите, ибо так надо, потом разберём. И это не говоря уже о том, что в хелловорлде на С++ её вообще можно было безболезненно убрать.

                                            Вспоминать Паскаль (даже не синтаксис, а всевозможные нюансы) и устанавливать компилятор на 15 компьютеров ради одного урока?

                                            Ну вы-то зачем его проводили? Чтобы детям рассказать про программирование, верно? ИМХО, надо или делать качественно, или не делать. Тем более что вспомнить Паскаль или Бейсик на уровне вводного урока, это минут 15 надо. И ещё столько же, чтобы найти в интернетах дистрибутив того или другого и установить.
                                        • 0
                                          Ну да, за один урок много не освоишь. В целом неплохо, но без развития — толку мало…

                                          И мне кажется, что язык тут не особо важен и вообще не нужен (нужен только как инструмент)
                                          Важно умение работать с алгоритмами — в этом и суть информатики в школе.
                                          Поэтому итог №4 можно не включать))

                                          Булева алгебра, теория множеств, алгоритмы — вот, что нужно на уроке информатики.
                                          Возможно ещё какие-то другие основы из мат.логики…
                                          • +3
                                            Вот зачем мне в школе булева алгебра или двоичная система в тетрадке? Без понимания, куда это всё приткнуть? А у нас уроки были именно такие, и в ВУЗе аналогично – абстрактные бесполезные программки на QBASIC, которые за меня писали одногруппники за пиво.
                                            Когда мне это (гораздо позже) понадобилось в жизни – написал калькулятор/конвертор и забыл, а сортировку посмотрел в педивикии.
                                            Инструмент важен, чтобы не превозмогать героически C-подобный синтаксис, а смочь быстро закодироваь любой алгоритм.
                                            А школьникам, полагаю, было бы интересно сделать какую-то простенькую игру. Графическую, ибо ввод/вывод текста, когда у всех уже стартфоны, выглядит несколько неуместно.
                                            • 0
                                              Вот зачем мне в школе XXX? Без понимания, куда это всё приткнуть?

                                              Вместо XXX подставляем по очереди дисциплины и их части и ищем обоснования.

                                              Проблема в подходе к образованию, а не в самой области знаний.

                                              • +1
                                                Незнание физики или химии может привести к болезненным последствиям, а то и в мир иной, например.

                                                А вообще, да: «Я никогда не позволял школе вмешиваться в моё образование», Марк Твен.
                                                • +1
                                                  Мы же говорим про средних учеников?
                                                  В идеале. конечно, школа не нужна — ребёнок сам легко освоит школьную программу к 14 годам. А родители легко помогут ему в сложных моментах, подскажут/направят. Только это в идеале, а не в реальности…

                                                  Ну и по поводу знания современными школьниками химии и физики: очень сомневаюсь, что хотя бы половина учеников способна пересказать хоть какую-нибудь тему из курса физики/химии…
                                                  • 0
                                                    Пересказать-то темы они могут (примерно 3/4 старшеклассников имеет нормальнцю память и навык заучивания). а вот понимают темы — единицы. Ну а как иначе, если на физике за 5 лет преподавания — учителем продемонстрировано три опыта… и это — на физике!!!.. Где опыт можно демонстрировать на «подручных материалах» к больше чем половине тем.
                                                    • 0
                                                      А если усложнить задачу?))
                                                      Пересказать тему через год после окончания обучения.
                                                      Поднимается ведь вопрос о том, чтобы знания остались на всю жизнь, т.к. их отсутствие «может привести к болезненным последствиям, а то и в мир иной».
                                                      • 0
                                                        да, пересказывают. И чкерез больше — пересказывают. но если не понимают — все это бесполезно. ибо боятся, что «блок питания на 19 вольт 4,7 ампера сожгет ноутбук потому, что на ноутбуке написано 19 вольт 3.2 ампера».
                                                        И бесстрашно суют пальцы в блок питания без гальванической развязки потому, что на нем написано 12 вольт… удивляются в конце концов размороженной бутылке пива, потому, что «это же не вода, а пиво»
                                                        и дна известная картинка про закон ома даёт больше, чем целый урок объяснений им заучивание формул…
                                                        • 0
                                                          Пересказ без понимания… Интересно… Не могу представить…
                                                          Зубрёжка с периодическим повторением? Ну таких же не бывает?
                                                          • +1
                                                            Ну почему же? бывают… у самого в голове свалка из разных литературных творений (разных там пушкиных-лермонтовых-есенинвх-достоевских-тургеневых), исторических фактов (история РСДРП, например :-). или состав группы ОсвобождениеТруда: Плеханов-Игнатова-Засулич-Дейч-Аксельрод :-)))
                                                            В детстве память эффективно работает…
                                                            • 0
                                                              Ну какие-то факты/истории/персонажи — это нормально, что оседает в голове, особенно из гуманитарных наук. В технических тоже могут быть интересные факты, персонажи, даже какие-нибудь формулы…

                                                              Но тема из учебника по технической дисциплине (физика/химия), это надо было заморочиться вызубрить, да ещё как-то закрепить (например папа с мамой поспрашивали, потом урок перенесли, пришлось повторять, а потом ещё и в вузе повторно и при этом так и не попытаться понять...)
                                                              Но это же удивительная редкость…
                                                            • +2
                                                              10-й класс, алгебра. Моя соседка по парте, тихая троечница, пишет на доске мудрёное доказательство какой-то теоремы. Пишет, пишет. Учительница смотрит внимательно и говорит: «Алина, вроде всё нормально, но что-то я не пойму, как ты это получила из вот этого?». Алина посмотрела внимательно: «Ой, я тут одну строчку вписать забыла».
                                                              Вот так это и бывает :)
                                                              • 0
                                                                В школе — бывает, не спорю, видел.
                                                                А вот вызубрить тему из учебника по физике, да чтобы на всю жизнь и без понимания…
                                                                • 0
                                                                  это ничем принципиально не отличается от зазубривания «что думал белинский о гоголе, когда пил водку в компании тургенева, вспоминающего высказывания лермонтова о пушкине». Для одних муть — это «дуб в романе Война и Мир», для других муть — валентность кислорода, закон ома, теорема косинусов или двоичное счисление… одни восхищаются стихами пушкина, другие стенами колизея. третии — картинами васнецов, четвертые делением клеток, пятые — картой карно…
                                                                  но это ничуть не запрещает запомнить другое…
                                                            • 0
                                                              12 вольт

                                                              Вы имеете в виду, что забывают про первичную обмотку?
                                                              • 0
                                                                нет, я имею ввиду бестрансформаторные блоки питания, типа
                                                                схема
                                                                image
                                                        • 0
                                                          Много раз било током. Лет с 10. Пока жив и местами здоров. Главное, грубо говоря: два пальца одной руки в розетку можно, пальцы разных рук – нельзя. Это физика, но на бытовом уровне, без которой трудно, а закон Ома и прочий корпускулярно-волновой дуализм – может быть, полезно и интересно, но совсем необязательно. Или вот: метанол пить нежелательно, а этанол – совсем другое дело. (только не повторяйте опыт с пальцами дома)
                                                          • 0
                                                            если стоите на влажном полу — вам может хватить и «одного пальца в розетку».
                                                            а при прохождении под ЛЭП во время дождя с лопатой на плече — может быть достаточно и совсем не касающейса провода лопаты… я уж не буду рассказывать про спазм гортани от того, что пацаненок лизнул «крону»…
                                                            • 0
                                                              я уж не буду рассказывать про спазм гортани от того, что пацаненок лизнул «крону»…

                                                              А мне, пожалуйста, расскажите. Каков механизм этого процесса?
                                                              • 0
                                                                Да ничего сложного. Лизнул «крону», папа дал подзатыльник, пацан подавился батарейкой, ну а дальше спазм гортани, травмпункт, и месяц освобождения от физкультуры.
                                                                • 0
                                                                  механизма не знаю. знаю, что он лизнул, распух язык, а затем спазм гортани. скорая подумала, что приступ астмы спровоцирован аллергически, привезли его в аллергоотделение. но аллергии выявлено не было (что вообще было крайне редким случаем), повторных приступов тоже. даже в разговорах между нами, пацанами он рассказывал, как это происходило…
                                                                • 0
                                                                  Мой личный рекорд – 30 000 В – я получил как раз «дистанционно». Но вряд ли это коснётся тех, кто просто решил починить люстру. А так-то, да, нюансов куча, где-то читал, что сопротивление кожи одного конкретного человека может меняться на порядки просто от настроения.
                                                                  • 0
                                                                    Мой личный рекорд — 220В, но в полтора года. Ничего, остался жив, и сразу понял, зачем нужна изоляция.
                                                          • +1
                                                            Вот зачем мне в школе булева алгебра или двоичная система в тетрадке? Без понимания, куда это всё приткнуть?

                                                            А надо с пониманием. Вот как интегралы, один учитель заставляет зубрить формулы а-ля «интеграл от е в степени икс равен е в степени икс плюс константа», а другой сперва поясняет на практическом примере: «как бы вы посчитали площадь вот этой хитровымудренной фигуры?»
                                                            Так же и булева алгебра, её можно преподавать по-разному, и интересно, и бестолково. Но я согласен с тем, что начинать изучение компьютера с булевой алгебры — моветон из прошлого. Это все равно, что начинать обучение вождению автомобиля с изучения тактов ДВС.
                                                            UPD. Немного промахнулся с постом, на который отвечал :)
                                                            • 0
                                                              Из области мечт: то перед началом любого обучения хорошо бы знать, понадобится ли эта дисциплина индивиду в будущем.
                                                              А то ведь может статься, что форму интеграла вспомнит только когда скрутит его из проволоки, чтобы достать ключи из унитаза.
                                                              • 0
                                                                Да к школе немного другие требования. Там наоборот, должны показывать «всего понемногу», чтобы ребенок уже сам выбирал, что ему интересно, и кем он хочет стать. И в будущем, когда уже определится с направлением, хоть что-то понимал в других сферах, например, в высшей математике, если вдруг надо будет достать ключи из унитаза.
                                                                • 0

                                                                  100% согласен!
                                                                  Именно задача школы и учителей показать на сколько многогранен мир.
                                                                  И по возможности показать как данными знаниями можно пользоваться, путь даже в качестве приспособления для доставания из чего там… ;)

                                                                • +1
                                                                  Из области мечт: то перед началом любого обучения хорошо бы знать, понадобится ли эта дисциплина индивиду в будущем.

                                                                  Это после изобретения машины времени только…

                                                                  А так я уже сталкивался с детьми «Я буду спортивным тренером, мне не нужна ни математика, ни история… вообще ничего кроме физкультуры»
                                                                  • 0
                                                                    Потому и из области мечт, наравне со специально выведенной породой людей под определённые задачи…

                                                                    Но школьник – это всё же уже не бестолковое нечто, которое не может определиться, чем оно хочет заниматься в дальнейшем, и хочет ли вообще. То уровень ясельной группы детсада. А у нас принято всех под одну гребёнку, и в школе, и в ВУЗе.
                                                                    • +1
                                                                      Потому и из области мечт, наравне со специально выведенной породой людей под определённые задачи…

                                                                      «О дивный новый мир» Хаксли?
                                                                      Мне нравится)) Все заняты своим делом, все счастливы.
                                                                      Кто выпадает — отправляйся на остров, там делай, что пожелаешь))

                                                                      То уровень ясельной группы детсада.

                                                                      Вы слишком высокого мнения о детях. Единицы к 9му классу определяются с вопросом «чем хочет заниматься в дальнейшем, и хочет ли вообще.»
                                                                      • 0
                                                                        Не, я как раз довольно низкого мнения о детях и о людях в целом. Но, к счастью, встречал множество исключений. И пока кто-то не может определится, кто-то уже давно определился и делает первые успехи, а ему: «Учи интегралы, гадёныш!». Вот так таланты и пропадают.
                                                                        • 0
                                                                          Это что за таланты такие, для которых интегральное счисление не нужно?
                                                                          • 0
                                                                            Выше говорили про парнишу, которому не надо ни истории, ни математики, только физ-ру подавай. Тренером хочеть быть. И зачем спортсменам и прочим гуманитариям интегралы на самом-то деле?
                                                                            • 0
                                                                              Тот конкретный пример — это была девочка, в 5-ом классе. Ей не интегралы были не нужны, ей нужно было вялую 4 вместо еле-еле 3 по математике…

                                                                              Мне кажется проблема в делении людей на категории. Есть базовые вещи, которые должны знать все, специализация не начинается с первого класса.

                                                                              Можно выдумывать бытовые и специализированные задачи, когда нужны какие-то знания, а можно рассказывать про великих спортсменов, которые дают автографы «Никогда не здавайся!»…
                                                                          • 0
                                                                            Не, я как раз довольно низкого мнения о детях и о людях в целом.
                                                                            Странно… Вот же было высказываение:
                                                                            Но школьник – это всё же уже не бестолковое нечто, которое не может определиться, чем оно хочет заниматься в дальнейшем, и хочет ли вообще. То уровень ясельной группы детсада.
                                                                            Где тот, кто к школе не определился с целями — это бестолковое нечто, а никак не обычный ребёнок…

                                                                            Как-то не увязывается в единую систему…
                                                                            • 0
                                                                              Как-то не увязывается в единую систему…


                                                                              Если человек к 9-му классу решил стать (или остаться) быдлом – это всё же его осознанное решение. Именно поэтому я не считаю его бестолковым (в смысле не способным к принятию решений). А нравится ли это решение вам или мне – вопрос десятый.
                                                                              • 0
                                                                                А, вот как… Вы считаете, что если к 9-му классу человек не определился с целями, то он решил остаться быдлом.

                                                                                У меня по ходу обсуждения сложилась такая картинка:
                                                                                1)Есть люди которые определились с целями и для достижения целей нужны действия.
                                                                                2)Есть люди которые определились с целями, и цель их — бездельничать.
                                                                                3)Есть люди которые не определились с целями

                                                                                У меня проценты распределяются так:
                                                                                1) 3%
                                                                                2) 3%
                                                                                3) 94%

                                                                                Вы же считаете, что множество 3) входит в 2)
                                                                                Тогда да, всё хорошо сложилось. Вопросов больше не имею))
                                                                                • 0
                                                                                  Дело в том, что жизнь — штука сложная. В 9-м классе определился, а в институте что-то пошло не так, пришлось переопределиться. Или уже после института — такое тоже бывает. На такой случай полезно иметь запас знаний. В первую очередь — касающихся умения считать, потому что это пригождается гораздо чаще, чем думает школьник не сталкивавшийся с практическими задачами.
                                                                                  • 0
                                                                                    Вот нам даже пример есть, как меняется выбор к институту.

                                                                                    Могу и про свою жену рассказать: 10 лет художка, 1,5года учёбы на архитектора, переоценка, теперь педагог-психолог инклюзивного образования.
                                                                        • 0
                                                                          В моём университете тренер, когда рассказывал как правильно делать упражнения, делал отсылки к сопромату, разделам про сжатие/изгиб стержней. Ведь позвоночник — это тот же стержень (в каком-то приближении) и есть большая разница работает он на сжатие или на изгиб.
                                                                          • 0
                                                                            Да, опорно-двигательный аппарат – такая же механическая система, как и окружающие нас бездушные железки. Но чтоб сломать человеку руку или ногу совсем не обязательно рисовать эпюры)
                                                                            • 0

                                                                              Есть такая система рукопашного боя "Система Кадочникова". В видео про нее кончено преувеличивают, но идея там хорошая. Подход основан на принципах механической физики — рычаг, сила, точки опоры, степени свободы.

                                                                              • 0
                                                                                Да, он ещё предлагает почитать учебник по механике, когда спрашивают, в чём его секрет. Такой себе капитан очевидность. А достаточно просто себя пощупать, чтоб за мясом разглядеть эти рычаги)
                                                                                • 0
                                                                                  Это Вам достаточно. А достаточно ли тому, кто не знает физику?
                                                                                  • 0
                                                                                    Смотря, для чего. Для причинения увечий – более чем. Вы ведь не думаете, что у чётких ребят на районе есть степени физмат наук?
                                                                      • 0
                                                                        Но я согласен с тем, что начинать изучение компьютера с булевой алгебры — моветон из прошлого. Это все равно, что начинать обучение вождению автомобиля с изучения тактов ДВС.

                                                                        Тут важно определить, чему учат на информатике. Компьютером пользоваться? Тогда программирование исключать надо, лучше сделать упор на табличные и текстовые редакторы.

                                                                        «Изучение компьютера» в школах сейчас очень странное.И мне очень сильно кажется, что начать с алгоритмов лучше…
                                                                        Ну и логика/множества/алгоритмы — это не ДВС, это более общие вещи, более глобальные…
                                                                        • +1
                                                                          вообще, на мой взгляд — преподавать естественные науки и математику так, чтоб было непонятно «куда приткнуть» — весьма сложно. Это нужно быть весьма опустившимся субьектом (коими, впрочем, является изрядная часть школьных учителей). понимаю, что на меня могут обидеться, но тем не менее — если учитель работает в режиме «говорящей головы» (да при этом еще часть головы занята мыслями «а что мои дети сегодня на ужин жрать будут») — увы, это опустившийся препод.
                                                                  • +4
                                                                    Странная манера преподавания программирования… По-моему, кроме как в программировании, подобного подхода никогда не придерживаются при обучении чему угодно!
                                                                    Представьте себе вводный урок по первой помощи: давайте придушим котенка и будем делать ему искусственное дыхание! Молодец, Маша, котенок ожил. А Петя, увы, не справился — котенок сдох, а все потому, что Петя… (далее сложные медицинские термины).
                                                                    Или вводный урок токарного дела: дети, вот эта кнопочка включает станок. А теперь все берем заготовку, зажимаем в патроне и вытачиваем кеглю. Молодец, Петя, был аккуратен и резец всего-лишь лопнул. А вот Маша допустила ошибку, и кусок резца распорол Васе лобик…
                                                                    Примеров можно приводить сколько угодно: ничему не учат с конкретных примеров на первом уроке! Да и на втором тоже…
                                                                    И только в программировании принято обрушить на голову ушат совершенно непонятных сведений, и считать это успешным, если BSOD ни у кого не появился…

                                                                    Программирование — это не склеивание соплями «знаний» кусков из странных английских слов и непонятных символов. Программирование — это на 99% алгоритмизация, и на 1% все прочее. Если мысли в голове, как скакуны, если перед началом работы нет понятия, КАК решать задачу, объяснить, нахрена при решении нужен цикл или еще что-то, будет невозможно.

                                                                    Я бы рассказал о том, что такое решение задачи с точки зрения программиста. Как задачу следует ставить, как разбивать её на подзадачи и зачем, что такое логическая оптимизация и зачем она нужна… Да, это более скучно, но результативнее. А после вышеописанного урока в самом идеальном случае мы получим в классе 1-2 новых «индуса», а в худшем — все ученики скажут «ну и хрень эта ваша программирования»… Оба результата успехом преподавателя никак назвать нельзя.
                                                                    • 0
                                                                      Как задачу следует ставить, как разбивать её на подзадачи и зачем, что такое логическая оптимизация и зачем она нужна

                                                                      Т.е. полгодика сидеть слушать препода, а потом показать настоящий компьютер? Почему бы просто сразу не объяснять, как делать правильно, а как — нет?

                                                                      • +1
                                                                        Любую информацию можно (и нужно, особенно для детей) преподносить интересно и увлекательно. Вы же учились вождению автомобиля? Вас сразу посадили за руль, и на городских улицах вам рассказывали, как делать правильно, а как нет? Это ведь гораздо интереснее, чем сидеть и слушать препода…
                                                                        Меня мой преподаватель в ВУЗе с первого занятия на первом курсе увлек, хотя в пору моего обучения плановое «посещение дисплейного зала» было только в конце второго семестра ТРЕТЬЕГО курса…
                                                                        А сейчас в школе информатику изучал сын. И мы вместе ржем над тем, как это делается.
                                                                        Рассказанное в статье — лучше, чем существующее, но лучше только на чуть-чуть.
                                                                        Почему-то все считают, что обучение детей — это то же самое, что обучение взрослых, только чуть-чуть проще. А на самом деле все гораздо сложнее…
                                                                        • 0
                                                                          > Вас сразу посадили за руль, и на городских улицах вам рассказывали, как делать правильно, а как нет

                                                                          Именно так меня и учили. Инструктор убедился, что я глохну не каждый раз, и мы поехали в город. Уже больше пяти лет безаварийного стажа.
                                                                          Разумеется, один пример не тенденция, но такой подход тоже имеет право на жизнь.

                                                                          Программирование я, кстати, изучал примерно так же, когда меня внезапно отправили на олимпиаду, потому что я мог нарисовать хелловорлд в редакторе форм вижуал бейсика.
                                                                        • +1

                                                                          Если мы хотим, чтобы детям было интересно, то можно сразу показывать блестящий корпус и тыкать кнопки. Если мы растим программистов — то сначала слушаем теорию. Много говорится, что языки с низким порогом входа дают быстрый старт, но потом приходится тяжело. Тут то же самое: сначала быстро и легко продвигаемся, потом вязнем. Нужен баланс. Вряд ли за один час можно что-то путное сделать, но при большем времени — однозначно давать и теорию и практику. Обучать детей намного сложнее, чем взрослых, тут свои подходы нужны.

                                                                          • 0
                                                                            Т.е. полгодика сидеть слушать препода, а потом показать настоящий компьютер? Почему бы просто сразу не объяснять, как делать правильно, а как — нет?

                                                                            нет, можно сразу посадить за компы, а потом смотреть как они тупо смотрят в экран и не могут сделать нахождения НОДа
                                                                            Проходили знаем ;) с первого дня кричат скорей за компьютеры, а после самые крикливые на практике не то что "игрушку", а просто ноль знаний.

                                                                            • 0

                                                                              Мой личный опыт и наблюдения говорят совершенно об обратном.

                                                                              • 0

                                                                                Ну значит вам не сказано везет, коллега :)
                                                                                за 25 лет пед работы, в практике мало кто прямо с компа понимал программирование, студенты еще более менее, а школьники единицы

                                                                          • +1
                                                                            В программировании последствий нет.
                                                                            Котята не умирают, люди не страдают, заготовки не ломаются…

                                                                            Для врачей есть специальные тренажёры — и это очень круто, когда можно что-то попробовать, без риска убить…
                                                                            Авиасимуляторы — аналогично, очень полезно.
                                                                            • 0
                                                                              Вижу минус. Давайте расскажу подробнее. (Я вообще-то открыт к дискуссии, если я ошибаюсь — давайте обсудим.)

                                                                              Я писал комментарии к высказыванию
                                                                              По-моему, кроме как в программировании, подобного подхода никогда не придерживаются при обучении чему угодно!
                                                                              Представьте себе вводный урок по первой помощи: давайте придушим котенка и будем делать ему искусственное дыхание! Молодец, Маша, котенок ожил. А Петя, увы, не справился — котенок сдох, а все потому, что Петя… (далее сложные медицинские термины).
                                                                              Или вводный урок токарного дела: дети, вот эта кнопочка включает станок. А теперь все берем заготовку, зажимаем в патроне и вытачиваем кеглю. Молодец, Петя, был аккуратен и резец всего-лишь лопнул. А вот Маша допустила ошибку, и кусок резца распорол Васе лобик…
                                                                              Когда человек пишет первый раз пишет программу — он ошибается, он не должен написать её сразу правильно. Если он ошибётся — у него есть возможность исправить ошибку — последствий никаких.
                                                                              Когда человек первый раз вытачивает деталь и делает ошибку — портится заготовка (без учёта опасностей работы с оборудованием)
                                                                              Когда человек первый раз спасает котёнка и делает ошибку — погибает животное.

                                                                              Давайте ещё примеры придумаем:
                                                                              Человек первый раз произносит слово на иностранном(или родном) языке (читает слово, например) и делает ошибку, его поправляют и он может исправить ошибку. Последствий нет.
                                                                              Человек первый раз суммирует два числа, ошибается, ему указывают на ошибку. Последствий нет.
                                                                              Человек садится за авиасимулятор, делает ошибку на взлёте. Но никто не разбился. (а это может быть первым шагом к освоению професии лётчика)
                                                                              ну и т.д.
                                                                              Попробовать что-то в ситуации, когда нет опасных последствий — это не плохо.
                                                                            • 0
                                                                              Если в распоряжении всего один урок, то как бы хорошо ты не объяснил процесс обдумывания решения, ученики забудут все со звонком, потому что это скучно. Да и не на один урок это. Мне вот алгоритмы (без привязки к программированию) преподавали всю начальную школу.
                                                                              Автор поставил задачу показать аспект кодотворения, причем упор сделал на результат: мы написали эти, пока ещё не совсем понятные нам 15 строк кода, и теперь компьютер может загадывать числа и подсказывать нам.
                                                                              10 класс – это конечно уже поздновато начинать с программированием, но, вспоминая себя где-нибудь в 6-7 классе, могу сказать, что меня это точно заинтересовало бы и вот тогда я бы уже хотел учиться.
                                                                              • +2
                                                                                Странная манера преподавания программирования…

                                                                                Фраза для привлечения внимания?

                                                                                давайте придушим котенка и будем делать ему искусственное дыхание!

                                                                                Нет, давайте отгадаем число, которое загадал компьютер!

                                                                                ничему не учат с конкретных примеров на первом уроке! Да и на втором тоже…

                                                                                Ну, не было у меня второго урока. И третьего, и десятого. Были бы — не было бы статьи.

                                                                                И только в программировании принято обрушить на голову ушат совершенно непонятных сведений

                                                                                Не знал. Информация 100% верна?

                                                                                если BSOD ни у кого не появился

                                                                                Вот-вот, на втором уроке я бы показал, как перейти в нулевое кольцо защиты процессора и как обрушить ядро ОС Windows NT.

                                                                                Программирование — это не склеивание соплями «знаний»

                                                                                Согласен. Зачем вы это мне говорите?

                                                                                странных английских слов

                                                                                Не понимать, что ви говорить.

                                                                                Если мысли в голове, как скакуны

                                                                                МОИ мысли — МОИ скакуны!

                                                                                нахрена при решении нужен цикл

                                                                                Я вроде бы объяснил. Если не поняли — прочтите заново.

                                                                                Я бы рассказал о том, что такое решение задачи с точки зрения программиста.

                                                                                Расскажите, пожалуйста. Я ведь не программист.

                                                                                после вышеописанного урока в самом идеальном случае мы получим в классе 1-2 новых «индуса»

                                                                                Вау! Это круто! Тогда мне пора развешивать объявления «Научу индусскому коду за один сеанс» и грести бабло лопатой. На самом деле нет, после вышеописанного урока мы не получим 1-2 новых «индуса».

                                                                                все ученики скажут «ну и хрень эта ваша программирования»

                                                                                Возможно, спорить не буду.

                                                                                Оба результата успехом преподавателя никак назвать нельзя.

                                                                                Пойду напьюсь безалкогольной водки в компании воображаемых друзей.

                                                                                • 0
                                                                                  Пойду напьюсь безалкогольной водки в компании воображаемых друзей
                                                                                  судя по вашей реакции даже не на критику, а на мнение со стороны, вам ничего другого и не остается.
                                                                                  • 0
                                                                                    Котёнка №2 и Васю жалко.
                                                                                • +1
                                                                                  Программирование — это на 99% алгоритмизация, и на 1% все прочее

                                                                                  Вам, видимо очень повезло с работой. За четыре года работы разработчиком могу сказать: программирование, это на 0.000001% алгоритмизация.
                                                                                  • –3
                                                                                    Я вообще не программист по роду основной деятельности. И, возможно, я не прав, но кодирование — это не программирование. Это примерно как копание земли — не архитектура. Как только программист подготовил алгоритм, вступает в работу землекоп-кодер.
                                                                                    • +3

                                                                                      Совершенно не правы.

                                                                                      • +3
                                                                                        Вы даже не представляете себе, как сильно ошибаетесь.
                                                                                        землекоп-кодер
                                                                                        — это насколько высокомерным надо быть, чтобы написать подобное?
                                                                                  • 0

                                                                                    Александр как коллега к коллеге, а что это было? Курсы, плановые уроки, факультатив, лагерь и будет ли продолжение.
                                                                                    Полностью согласен с DrPass для первого урока это жестоко, даже первокурсники которые С и С++ не видели будут плакать, а тут школьники. Все же разумнее сначала познакомить с алгоритмами и примерами на Питоне или Паскале. Потому что все что не понятно человек обычно забывает или пугается этого.
                                                                                    Да и для первого знакомства с языком можно использовать браузерные версии в сети, во первых проблем с настройками среды не будет, а во вторых с локализацией возиться не надо.

                                                                                    • 0
                                                                                      День добрый, коллега! Это у десятиклассников такой вид практики. Ходят в университет, а преподаватели (в добровольно-принудительном порядке) читают лекции и проводят практические занятия, кто в чём горазд. Причём, так как это политех, то предметов — уйма. Из плюсов — школьники смотрят, что им нравится, а что нет; могут определиться за год, куда поступать и какие для этого нужно сдавать экзамены. Из минусов — действительно, за один урок ничему не научишься, 99% полученной информации улетучится после выхода из аудитории. Но в целом, нужно смотреть на такой вид практики в комплексе. Что включает и тематику материала, который был представлен, и манеру преподавания, и много других вещей, которые сходу не сформулируешь. Главное — чтобы у школьников осталось какое-то чувство, типа, это моё, может, стоит задуматься на счёт этого, а вот это — точно не моё.
                                                                                      • +1

                                                                                        Ну значит еще и коллеги по "несчастью" :) Добрый совет, лучше либо отойти от подобной структуры занятий либо сменить язык на более менее человечное (по мне Паскаль как раз). Занятия лучше тогда строить по прицепу, рисуем алгоритм (с объяснениями) показываем его реализацию на языке (это в классе), а дома они уже на базе подобного решают задачи и посылают на почту или куда выкладывают для проверки.
                                                                                        Так как приверженец старой школы, то с начала рисую блок-схемы, а затем уже даю код.
                                                                                        Если вижу кода у человека нет, заставляю рисовать схему (да я изверг) и показывать разными цветами что к кому и каким циклам относится, после параллельно перевести схему в код и отметить соответствия.

                                                                                        • 0
                                                                                          Надеюсь, для меня это мероприятие было разовым.
                                                                                          Не было у меня возможности ни дать домашнее задание, ни даже прочитать вводную лекцию. Звыняйтэ.
                                                                                          По поводу ЯП — использовал лучшее из того, что было.
                                                                                          Я тоже изверг и заставляю студентов рисовать.
                                                                                          • 0

                                                                                            Ну почему так ;) если повезет то из этих "мальков" хорошая абитура получится да и студенты толковые :)
                                                                                            С ними чаще интересней чем уже за взрослыми, у них можно развить интерес, а значит и толковые специалисты получатся. Так что если есть желание и возможность то со школьниками заниматься надо.

                                                                                          • 0
                                                                                            А как нынче обстоит с паскалем? Я, помнится, в начале 2000-х столкнулся с этим языком и был очень озадачен поисками такого Паскаля, который бы встал на винду, а не на виртуалку с досом.
                                                                                            • 0

                                                                                              Сейчас в качестве учебного используем PascalABC.NET косяки конечно найти можно но для своих целей вполне подходит.

                                                                                      • +2
                                                                                        Подключения, пространства имен, локали, непонятный волшебный мейн, какой-то ретурн — ужасно много «шума». Студенты такие вещи только после получения диплома иногдапонимают, а тут школяры.
                                                                                        Наверное лучше был бы JS или специальный язык для обучения, который позволяет ошибаться и пропускать некоторые моменты.
                                                                                        • +3
                                                                                          лучше был бы JS или специальный язык для обучения

                                                                                          JS, в котором вычислять 1+'1'?
                                                                                          Это ещё более жестоко.
                                                                                          Да даже Паскаль был бы лучше (про Питон уже говорили).
                                                                                          • –1
                                                                                            Да, конечно в JS ям тоже много, но к ним еще нужно прийти.
                                                                                            Простой пример:
                                                                                            console.log('Привет Мир') 
                                                                                            

                                                                                            и программа готова. Либо:
                                                                                            #include <iostream>
                                                                                            // Десяток строк спустя...
                                                                                            cout << "Привет мир" << endl;
                                                                                            // Еще парочка малопонятных строк
                                                                                            


                                                                                            Питон не знаю, меня всегда раздражало влияние правильности моей программы в зависимости от того, сколько я поставил пробелов. Мне кажется, детям тоже это тяжело объяснить почему один код работает, а другой нет.
                                                                                            • +1
                                                                                              меня всегда раздражало влияние правильности моей программы в зависимости от того, сколько я поставил пробелов. Мне кажется, детям тоже это тяжело объяснить почему один код работает, а другой нет.

                                                                                              Объяснить необходимость форматирования кода, который работает и без форматирования, тоже не всегда получается. От студентов слышал аргументы «Мне удобно, когда все по левому краю». При этом любой вопрос по коду приводит к долгим попыткам вчитаться в неструктурированный набор символов.

                                                                                              • 0
                                                                                                Это нормальное явление. Я сам врубился, зачем форматировать код, только когда написал программу с исходником более 5 кб. Пока размер исходника не превышает 1-2 кб — потребности форматировать не ощущается и, следовательно, её никак не вдолбишь. Это надо прочувствовать.
                                                                                                • 0
                                                                                                  форматирование бывает разное.
                                                                                                  в фортране оно вообще не предусматривалось. в бейсике (в тех версиях, где строки нумеровались) — своеобразное форматирование получали нумерацией строк.
                                                                                                  в макроассемблерах — локальными метками.

                                                                                                  кстати, после прочтения ВанТассела, своеоьразно структурированный и легкочитаемый код в стиле «без гоуту» стал даже в ассемблерах…
                                                                                              • +1
                                                                                                Признаюсь честно. Меня то же долго отпугивали эти пробелы. А потом мне понадобился Python и я решил, что нужно взять себя в руки. И случилось странное. Меня это абсолютно никак не напрягло. А с учетом того, что отслеживать ничего самому не нужно, все это отлично делается тем-же PyCharm, так вообще все пошло как по маслу.

                                                                                                Вас же в C-подобный языках фигурные скобки не смущают? И выравнивания вы все-равно делаете. И, я так подозреваю, делаете это зачастую средствами IDE. С пробелами все точно так-же.
                                                                                                • 0
                                                                                                  но к ним еще нужно прийти

                                                                                                  Не так уж далеко идти:
                                                                                                  function f2c(f){ 
                                                                                                   return (-32 + f) / 1.8; // Да, если написать f - 32, всё будет нормально  
                                                                                                  }
                                                                                                  f = prompt("Температура по Фаренгейту", 0); 
                                                                                                  console.log(f2c(f));
                                                                                                  
                                                                                                  

                                                                                                  • 0
                                                                                                    Ну, а в си необходимо будет объяснять детям почему 7/2 = 3. Все языки имеют свои ямы, только в js можно сесть и поехать, а в си можно копаться с магией полдня чтобы вывести 2 строчки на русском.
                                                                                                    А для одного урока как раз важен быстрый старт.

                                                                                                    Вспомнил о своем опыте — в классе 11 учился на игре программируемых танчиков, не помню названия. Это был си-подобный язык с основными конструкциями. Было интересно видеть как только что созданный бот сам перемещается, сам стреляет. А пока пишешь бота, попутно изучаешь код — условия, циклы, расчеты, функции. Сейчас есть нечто более симпатичное: codingame.com (или люой код-раш)
                                                                                                    • 0
                                                                                                      для детей есть и всякие Скрэтчи и иже. есть веб-версии. есть даже для ардуин.
                                                                                            • 0
                                                                                              Вполне допускаю, что при первом объяснении материала не нужно разъяснять все тонкости, но давайте хотя бы называть вещи своими именами. По тексту несколько раз заголовочный файл назвали библиотекой.
                                                                                              • 0
                                                                                                Признаю.
                                                                                                А вот трактовки терминов получились довольно вольными.
                                                                                                Мы-то знаем, что такое заголовочный файл. Знаем, где он хранится на диске, и что в нём находится. Но опять же, тянем за верёвочку и мы будем обязаны объяснить, что функцию до использования нужно объявить, чтобы компилятор знал о количестве и типе передаваемых параметров, да и много других вещей (именованные константы, пользовательские типы данных, директивы препроцессора). А это в свою очередь, тянет за собой ещё кучу материала. В условиях ограниченности времени пришлось этим пожертвовать. И в статье я хотел это показать — «смотрите, я сказал неправильно, но при этом минимизировал вред неокрепшей детской психике».
                                                                                                • 0
                                                                                                  Но опять же, тянем за верёвочку и мы будем обязаны объяснить […]

                                                                                                  Подробные объяснения можно опустить. Достаточно сказать: это — заголовочный файл, его нужно подключить для того, чтобы использовать все, что в нем объявлено.


                                                                                                  Я не просто так цепляюсь к словам. Регулярно вижу студентов, которые приходят с привычкой использования неподходящего термина и путаются, когда речь заходит непосредственно о библиотеках.

                                                                                                  • 0
                                                                                                    Полностью с вами согласен. Но, что сказано, то сказано. Читающие это, не повторяйте моих ошибок! :)
                                                                                              • 0

                                                                                                Присоединяюсь к комментаторам, которые говорят, что это было мило но бесполезно. У вас был всего один урок для того, чтобы ребята поняли, что программирование — это не удел каких-то высоколобых гениев. Вы им показали обратное. Что я бы сделал, попав в такую ситуацию? Вместо программирования научил бы ребят за урок рисовать простые html странички. Это был бы некий импульс, которым они могут воспользоваться дальше сами. А давать им плюсы — значит не вызвать ровно никакого интереса. Ещё можно было дать им простеньких скриптов на php.


                                                                                                Кстати, это камень не в сторону школьников. Они ровно такие, как должны быть. Их надо заинтересовать и показать, что они что-то могут сами, чтобы дальше они изучали самостоятельно предмет — в этом и есть миссия преподавателей.

                                                                                                • +1
                                                                                                  Вместо программирования научил бы ребят за урок рисовать простые html странички

                                                                                                  Не, не. Вместо рисования простых хтмл страничек я бы научил ребят ухаживать за ёжиками. А ещё лучше — копать яму. Просто, понятно и практическая польза есть…
                                                                                                  Господа, вы совершенно напрасно считаете детей идиотами не способными к логическим выводам и абстрактному мышлению. Выбор языка, возможно, не самый удачный но вот я, к примеру, учился программировать на калькуляторе б3-34 в 7-ом классе. А учительница математики-информатики, которая мне его подсунула, так и не осилила эту магию :)

                                                                                                  • +1
                                                                                                    Выбор языка, возможно, не самый удачный но вот я, к примеру, учился программировать на калькуляторе б3-34 в 7-ом классе

                                                                                                    Ну так наоборот, вам достался самый простой для понимания инструмент, который выполняет ровно то, что ему написали в программе, без каких-либо дополнительных неочевидных действий. По простоте для обучения программированию Б3-34 и всякие остальные МК-61/52 уступали разве что «Луноходу» (который был у некоторых особо примажоренных советских детей).
                                                                                                    • 0

                                                                                                      Стековая машина и обратная польская нотация — далеко не самый простой для понимания вариант. Я встречал тогда порядком людей, которые программировали на паскале и алголе на бэсм-6, но не могли понять как победить эту странную машинку. :)

                                                                                                      • 0
                                                                                                        Стековая машина и обратная польская нотация — далеко не самый простой для понимания вариант.

                                                                                                        Программа — это всего лишь порядок действий для достижения цели. С точки зрения будущего программиста нет особой разницы, закидывать цифры в стек и делать там арифметические операции, или гонять черепашку по экрану командами «влево на 10», «опустить перо», «вверх на пять». Или луноход по комнате. Ключевой момент тут в том, что калькулятор непосредственно выполняет команды по программе, совсем так же, как если бы их вводил человек в диалоговом режиме.
                                                                                                        • 0

                                                                                                          Тем не менее, практика показывает, что концепция обратной польской записи и стековой машины сложны для понимания довольно большим количеством людей. В том числе с высшим естественным образованием.
                                                                                                          Ваше сравнение с луноходом я не осилил. С этой точки зрения любая программа — это "луноход". Ну, ладно, любая однопоточная программа. Любую однопоточную программу процессор выполняет непосредственно, как если бы человек вводил инструкции в диалоговом режиме. Не?

                                                                                                          • 0
                                                                                                            Не?

                                                                                                            Не.
                                                                                                            Пример как раз в обсуждаемой статье. Вот программа, которая генерирует случайное число и выводит его на экран.
                                                                                                            image
                                                                                                            Из 11 строчек кода не считая пустых строк:
                                                                                                            — три содержат подключения библиотек
                                                                                                            — одна подключает пространство имен
                                                                                                            — три строчки — синтаксическая рамка для программы
                                                                                                            — одна строчка делает какую-то магию для устранения кракозябр
                                                                                                            — одна строчка делает какую-то непонятную фигню для операционной системы
                                                                                                            — наконец, две (меньше десяти процентов кода!) делают что-то непосредственно относящееся к генерации числа и выводу на экран, но и то, каким-то магическим способом.
                                                                                                            У лунохода нет ни синтаксических рамок, ни библиотек, ни магии. Команда «вперед» двигает его вперед. Программа, генерирующая случайное число на МК-52, тоже содержит вполне себе очевидный код:
                                                                                                            К сч

                                                                                                            Согласитесь, несколько нагляднее и проще для понимания, чем на С++?

                                                                                                            Тем не менее, практика показывает, что концепция обратной польской записи и стековой машины сложны для понимания довольно большим количеством людей

                                                                                                            Практика показывает, что этим же людям сложно обращаться и с мультиварками и стиральными машинами. Ничего в стеке сложного к пониманию для ребенка нет. Подавляющее большинство взрослых и квадратное уравнение не решат, в то же время как они же в детстве их щёлкали сотнями.
                                                                                                    • 0

                                                                                                      Дети-то способны к чему угодно. Я о том, что детей нужно заинтересовать. А чтобы заинтересовать — нужно показать некий интересный практический пример, который они смогут развивать.


                                                                                                      Помню, как мы в школе занимались тем, что переписывали бейсиковый код с бумажек в среду разработки. Информатика была два раза в неделю (а не единственный урок), но это никого не заинтересовало вообще.

                                                                                                  • +1
                                                                                                    А почему C++?
                                                                                                    По моему первым языком программирования должен быть язык с развитым REPL. Обучение пойдет проще, и они сразу смогут использовать его как продвинутый калькулятор.