На днях мне довелось провести практическое занятие по программированию для учеников десятого класса одного из харьковских лицеев. Шесть лет назад я читал курс программирования в политехе, но тогда на посвящение студентов в эту, не побоюсь сказать, науку у меня было целых два семестра времени на лекционные и лабораторные занятия. А здесь было всего от силы полтора часа, да и с таким юным контингентом я ещё не работал. «Ладно», сказал я себе. И приступил к подготовке. Мне дали несколько задач, которые можно было бы порешать со школьниками. Первая из них занимала аж 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)


  1. AhJong
    13.06.2017 01:42
    +12

    Я бы учил детей Питону.

    И, насколько я себя помню, самое сложное в детстве, это было понять, что такое потоки. А Вы не только потоки сразу даёте, но ещё и локаль.


    1. onegreyonewhite
      13.06.2017 02:25
      +3

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


      1. Fox_exe
        13.06.2017 08:08
        -4

        Может лучше C#? Он ещё проще. К томуже Visual Studio очень облегчает жизнь.


        1. Keyten
          13.06.2017 09:21
          +11

          C# проще питона?


          1. Fox_exe
            14.06.2017 14:53

            Ну лично мне питон было сложнее осваивать… А на C# написал рабочий проект за ~12 часов (4 дня). До этого писал только простенькие скрипты на PHP.


          1. Jofr
            16.06.2017 11:10
            +1

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


        1. 16tomatotonns
          13.06.2017 10:21
          +2

          Чем меньше слов тем лучше для детей. C# для этого избыточен, особенно учитывая тотальное ООП: слишком много абстракций.

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

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


          1. ru_vlad
            13.06.2017 13:52

            И если к десятому классу они ещё не занимались программированием, то 90% из них точно не пойдёт в программисты,

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


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

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


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

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


            1. Labunsky
              13.06.2017 17:59

              некоторые определяются даже не 10, а в 11 классе
              Если бы даже так. Я вот в первой половине выпускного класса думал, что буду архитектором. Во второй — экономистом. Поступил на криптографа…


            1. 16tomatotonns
              15.06.2017 16:29

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

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


              1. ru_vlad
                15.06.2017 21:56

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


          1. evseev
            13.06.2017 23:32

            Т.е. вы предлагаете за 1.5 часа дать не только основы языка, но и еще дать основы движка? Боюсь, что мозг у 90% начнет отключаться на первой трети.


            1. 16tomatotonns
              15.06.2017 16:20

              Так три команды: update, mouse position и draw circle, допустим. С кружочками уже интересно баловаться, особенно если они реагируют на мышку. Заодно, сразу можно пощупать результат, и увидеть, что «всё не так бессмысленно, как подсчёт процентов и вывод суммы a и b». Ребёнок, который никогда не занимался — поймёт. А вот void/int/float — будут доходить ещё долго.


              1. Fox_exe
                16.06.2017 09:32

                Можно ещё упростить, используя визуальное программирование (Выстраиваем логику из блоков, сразу видим код).


                1. Mikeware
                  16.06.2017 09:49

                  нужен ли в этом случае код?
                  достаточно логики.
                  правда, я противник «визуального программирования», но для детей и гуманитариев, наверное, подойдет…


                  1. Antervis
                    19.06.2017 05:34

                    его придумали не для детей и не для гуманитариев, а для 50+-летних инженеров советской закалки, которые из алгоритмики понимают только блок-схемы


                    1. Mikeware
                      19.06.2017 07:00

                      систем «визуального программирования» достаточно много. Вы, видимо, имеете ввиду паронджановский «Дракон»? :-) тогда согласен
                      ну а МИТвский Скратч (равно как и леговский язык ) — он как раз для детишек.


                      1. Antervis
                        19.06.2017 08:54

                        я про саму концепцию «визуального программирования».


                        1. Mikeware
                          19.06.2017 09:06

                          концепция «визуального программирования» появилась впервые не у нас. поэтому считать ее «для пенсионеров советской закалки» — не стоит.
                          у нас для «инженер-пенсионеров» и инвалидов умственного труда был придуман «дракон». «у них» — гораздо большее количество систем…


    1. michael_vostrikov
      13.06.2017 06:00
      +4

      Согласен. printf простой и понятный. А как работают cin и cout лично я понял только во втором семестре, когда мы стали изучать объекты и перегрузку операторов. До этого воспринималось как магия, было непонятно почему именно так а не иначе.


    1. velvetcat
      13.06.2017 08:46
      -2

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


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


    1. Antervis
      13.06.2017 11:05
      -3

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


      1. AhJong
        13.06.2017 13:56
        +1

        Школа дает общие понятия, специализация уже приходит позже.

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


        1. Albom
          13.06.2017 13:58

          Согласен и со вторым и, к сожалению, с первым.


      1. Zenitchik
        13.06.2017 14:10
        +6

        дети, обученные питону, маловероятно потом осилят порог вхождения в яп низкого уровня

        Что характерно, необученные питону — тоже.


      1. vakimov
        13.06.2017 17:30

        Все следует изучать начиная с простого. В случае с программированием можно либо идти от низкоуровневой простоты: понять как устроен компьютер на уровне логических схем и оттуда понимать как это все программируется на машинном уровне и как затем упрощается с помощью языков программирования, — либо с алгоритмической простоты: блок-схем и затем высокоуровневых языков, позволяющих абстрагироваться от особенностей их реализации. В идеале можно сводить оба маршрута воедино, где, как мне кажется, и лежит язык C. А Python может быть хорошей основой для изучения с алгоритмического конца, хотля лучше Lisp =)


        1. Antervis
          13.06.2017 20:13

          то, о чем вы говорите — это скорее электроника, больше полезная конкретно плисоводам и микроэлектронщикам. На мой взгляд, начинать лучше с работы с памятью (массивы, куча/стек, адресация). Как только просыпается понимание как устроена память, всё остальное в программировании становится интуитивно понятным и усваиваемым. А главное — нет промежуточной «магии». Дальше — хоть вниз до асма, хоть вверх в ооп.


          1. vakimov
            21.06.2017 21:39

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


      1. lorc
        13.06.2017 18:04
        +1

        Я начинал вообще с qbasic. Интересно, что бы вы сказали обо мне.


        1. Antervis
          13.06.2017 20:17

          конкретно о вас, как о программисте? — только читая код


    1. Albom
      13.06.2017 14:01
      +1

      Абсолютно полностью согласен — Python хорошо подошёл бы для обучения детей. Хотя, уверен, были бы свои подводные камни.


      1. eugenebb
        13.06.2017 22:04

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

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

        Очень удобно для начинающих


    1. Xandrmoro
      13.06.2017 16:36
      -2

      Чтобы потом они никогда не стали хорошими программистами?


      1. Zenitchik
        13.06.2017 16:53
        +1

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


  1. DrPass
    13.06.2017 03:06
    +18

    Честно говоря, у меня огромные сомнения, что школьники, не умевшие программировать, что-то вынесли из этого урока, кроме того, что программирование — это жутко сложно. В данном примере огромное количество абстракций-черных ящиков, для понимания которых нужна начальная теоретическая база. Библиотеки, локали, пространства имён. «Не верю!» (с)
    Скорее всего, практически ничего не поняли, но умело поддержали разговор, всё-таки десятый же класс.
    Тут, ИМХО, неудачно выбран язык программирования. В старом добром Паскале или Бейсике, например, та же задача решается как раз наглядно, без лишних неочевидных абстракций.


    1. AllexIn
      13.06.2017 18:13
      +2

      У лектора и с структурой проблемы.
      Зачем объяснять отдельно про namespace?
      вообще надо убрать и using namespace и указывать его явно для каждого метода.
      ВО первых гораздо проще ассоцифция: все методы iostream принадлежат к группе std — стандартные. ГРуппа или namespace — это как фамилия для методов. Позволяет отличать методы с одинаковыми именами в разных библиотеках.
      А еще нельзя использовать слово функция. У детей функция в математике и у них начинает клинить от того, что эти две сущности с одинаковыми названиями никак не получается совместить вместе в голове. Понимание что функция потому и функция, что близка математической функции — приходит гораздо позже.
      Локаль зачем-то использует. Транслит для первого урока — выше крыши.
      Короче, ИМХО автору надо серьезно поработать над способом подачи материала.

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


      1. Zenitchik
        13.06.2017 20:40

        У детей функция в математике

        И что, понятие функции в математике и в процедурных языках — более-менее перекликается. Нужно только заострить внимание на различиях.


        1. AllexIn
          13.06.2017 21:37

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


          1. Zenitchik
            13.06.2017 22:11

            Так другого-то не было и не будет.


      1. MrShoor
        14.06.2017 05:58
        +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. И вот только теперь можно переходить к игре угадай число. Но мне кажется на первом уроке до этого пункта вряд ли можно дойти.


      1. Albom
        14.06.2017 10:49

        Зачем объяснять отдельно про namespace?
        вообще надо убрать и using namespace и указывать его явно для каждого метода.

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

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

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

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

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

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

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


    1. Albom
      14.06.2017 11:07

      огромные сомнения, что школьники, не умевшие программировать, что-то вынесли из этого урока

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

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

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

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

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

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

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


      1. Mikeware
        14.06.2017 12:04

        устанавливать компилятор на 15 компьютеров ради одного урока
        для паскаля есть PascalABC.NET (впрочем, там декларировано, что не только паскаль). Ну и — да, ради одного урока… ради ЦЕЛОГО урока…
        и ради этого нужно вспоминать паскаль, или закон ома, или валентность элементов, или отличия ямба от хорея…


      1. DrPass
        14.06.2017 13:41

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

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

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

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

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

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


  1. DS28
    13.06.2017 07:11

    Ну да, за один урок много не освоишь. В целом неплохо, но без развития — толку мало…

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

    Булева алгебра, теория множеств, алгоритмы — вот, что нужно на уроке информатики.
    Возможно ещё какие-то другие основы из мат.логики…


    1. KVL01
      13.06.2017 08:57
      +3

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


      1. DS28
        13.06.2017 10:07

        Вот зачем мне в школе XXX? Без понимания, куда это всё приткнуть?

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

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


        1. KVL01
          13.06.2017 10:30
          +1

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

          А вообще, да: «Я никогда не позволял школе вмешиваться в моё образование», Марк Твен.


          1. DS28
            13.06.2017 11:35
            +1

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

            Ну и по поводу знания современными школьниками химии и физики: очень сомневаюсь, что хотя бы половина учеников способна пересказать хоть какую-нибудь тему из курса физики/химии…


            1. Mikeware
              14.06.2017 10:15

              Пересказать-то темы они могут (примерно 3/4 старшеклассников имеет нормальнцю память и навык заучивания). а вот понимают темы — единицы. Ну а как иначе, если на физике за 5 лет преподавания — учителем продемонстрировано три опыта… и это — на физике!!!.. Где опыт можно демонстрировать на «подручных материалах» к больше чем половине тем.


              1. DS28
                14.06.2017 11:29

                А если усложнить задачу?))
                Пересказать тему через год после окончания обучения.
                Поднимается ведь вопрос о том, чтобы знания остались на всю жизнь, т.к. их отсутствие «может привести к болезненным последствиям, а то и в мир иной».


                1. Mikeware
                  14.06.2017 12:10

                  да, пересказывают. И чкерез больше — пересказывают. но если не понимают — все это бесполезно. ибо боятся, что «блок питания на 19 вольт 4,7 ампера сожгет ноутбук потому, что на ноутбуке написано 19 вольт 3.2 ампера».
                  И бесстрашно суют пальцы в блок питания без гальванической развязки потому, что на нем написано 12 вольт… удивляются в конце концов размороженной бутылке пива, потому, что «это же не вода, а пиво»
                  и дна известная картинка про закон ома даёт больше, чем целый урок объяснений им заучивание формул…


                  1. DS28
                    14.06.2017 19:57

                    Пересказ без понимания… Интересно… Не могу представить…
                    Зубрёжка с периодическим повторением? Ну таких же не бывает?


                    1. Mikeware
                      15.06.2017 07:23
                      +1

                      Ну почему же? бывают… у самого в голове свалка из разных литературных творений (разных там пушкиных-лермонтовых-есенинвх-достоевских-тургеневых), исторических фактов (история РСДРП, например :-). или состав группы ОсвобождениеТруда: Плеханов-Игнатова-Засулич-Дейч-Аксельрод :-)))
                      В детстве память эффективно работает…


                      1. DS28
                        15.06.2017 17:14

                        Ну какие-то факты/истории/персонажи — это нормально, что оседает в голове, особенно из гуманитарных наук. В технических тоже могут быть интересные факты, персонажи, даже какие-нибудь формулы…

                        Но тема из учебника по технической дисциплине (физика/химия), это надо было заморочиться вызубрить, да ещё как-то закрепить (например папа с мамой поспрашивали, потом урок перенесли, пришлось повторять, а потом ещё и в вузе повторно и при этом так и не попытаться понять...)
                        Но это же удивительная редкость…


                    1. DrPass
                      15.06.2017 13:38
                      +2

                      10-й класс, алгебра. Моя соседка по парте, тихая троечница, пишет на доске мудрёное доказательство какой-то теоремы. Пишет, пишет. Учительница смотрит внимательно и говорит: «Алина, вроде всё нормально, но что-то я не пойму, как ты это получила из вот этого?». Алина посмотрела внимательно: «Ой, я тут одну строчку вписать забыла».
                      Вот так это и бывает :)


                      1. DS28
                        15.06.2017 17:03

                        В школе — бывает, не спорю, видел.
                        А вот вызубрить тему из учебника по физике, да чтобы на всю жизнь и без понимания…


                        1. Mikeware
                          16.06.2017 08:42

                          это ничем принципиально не отличается от зазубривания «что думал белинский о гоголе, когда пил водку в компании тургенева, вспоминающего высказывания лермонтова о пушкине». Для одних муть — это «дуб в романе Война и Мир», для других муть — валентность кислорода, закон ома, теорема косинусов или двоичное счисление… одни восхищаются стихами пушкина, другие стенами колизея. третии — картинами васнецов, четвертые делением клеток, пятые — картой карно…
                          но это ничуть не запрещает запомнить другое…


                  1. Zenitchik
                    14.06.2017 20:48

                    12 вольт

                    Вы имеете в виду, что забывают про первичную обмотку?


                    1. Mikeware
                      15.06.2017 07:24

                      нет, я имею ввиду бестрансформаторные блоки питания, типа

                      схема
                      image


            1. KVL01
              19.06.2017 14:27

              Много раз било током. Лет с 10. Пока жив и местами здоров. Главное, грубо говоря: два пальца одной руки в розетку можно, пальцы разных рук – нельзя. Это физика, но на бытовом уровне, без которой трудно, а закон Ома и прочий корпускулярно-волновой дуализм – может быть, полезно и интересно, но совсем необязательно. Или вот: метанол пить нежелательно, а этанол – совсем другое дело. (только не повторяйте опыт с пальцами дома)


              1. Mikeware
                20.06.2017 09:10

                если стоите на влажном полу — вам может хватить и «одного пальца в розетку».
                а при прохождении под ЛЭП во время дождя с лопатой на плече — может быть достаточно и совсем не касающейса провода лопаты… я уж не буду рассказывать про спазм гортани от того, что пацаненок лизнул «крону»…


                1. Zenitchik
                  20.06.2017 16:27

                  я уж не буду рассказывать про спазм гортани от того, что пацаненок лизнул «крону»…

                  А мне, пожалуйста, расскажите. Каков механизм этого процесса?


                  1. DrPass
                    20.06.2017 22:10

                    Да ничего сложного. Лизнул «крону», папа дал подзатыльник, пацан подавился батарейкой, ну а дальше спазм гортани, травмпункт, и месяц освобождения от физкультуры.


                  1. Mikeware
                    22.06.2017 07:43

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


                1. KVL01
                  21.06.2017 16:21

                  Мой личный рекорд – 30 000 В – я получил как раз «дистанционно». Но вряд ли это коснётся тех, кто просто решил починить люстру. А так-то, да, нюансов куча, где-то читал, что сопротивление кожи одного конкретного человека может меняться на порядки просто от настроения.


                  1. DrPass
                    21.06.2017 17:43

                    Мой личный рекорд — 220В, но в полтора года. Ничего, остался жив, и сразу понял, зачем нужна изоляция.


        1. DrPass
          13.06.2017 10:36
          +1

          Вот зачем мне в школе булева алгебра или двоичная система в тетрадке? Без понимания, куда это всё приткнуть?

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


          1. KVL01
            13.06.2017 10:44

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


            1. DrPass
              13.06.2017 11:13

              Да к школе немного другие требования. Там наоборот, должны показывать «всего понемногу», чтобы ребенок уже сам выбирал, что ему интересно, и кем он хочет стать. И в будущем, когда уже определится с направлением, хоть что-то понимал в других сферах, например, в высшей математике, если вдруг надо будет достать ключи из унитаза.


              1. ru_vlad
                13.06.2017 13:57

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


            1. DS28
              13.06.2017 11:28
              +1

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

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

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


              1. KVL01
                13.06.2017 11:41

                Потому и из области мечт, наравне со специально выведенной породой людей под определённые задачи…

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


                1. DS28
                  13.06.2017 11:50
                  +1

                  Потому и из области мечт, наравне со специально выведенной породой людей под определённые задачи…

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

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

                  Вы слишком высокого мнения о детях. Единицы к 9му классу определяются с вопросом «чем хочет заниматься в дальнейшем, и хочет ли вообще.»


                  1. KVL01
                    13.06.2017 12:24

                    Не, я как раз довольно низкого мнения о детях и о людях в целом. Но, к счастью, встречал множество исключений. И пока кто-то не может определится, кто-то уже давно определился и делает первые успехи, а ему: «Учи интегралы, гадёныш!». Вот так таланты и пропадают.


                    1. Zenitchik
                      13.06.2017 14:16

                      Это что за таланты такие, для которых интегральное счисление не нужно?


                      1. KVL01
                        13.06.2017 14:26

                        Выше говорили про парнишу, которому не надо ни истории, ни математики, только физ-ру подавай. Тренером хочеть быть. И зачем спортсменам и прочим гуманитариям интегралы на самом-то деле?


                        1. DS28
                          13.06.2017 15:36

                          Тот конкретный пример — это была девочка, в 5-ом классе. Ей не интегралы были не нужны, ей нужно было вялую 4 вместо еле-еле 3 по математике…

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

                          Можно выдумывать бытовые и специализированные задачи, когда нужны какие-то знания, а можно рассказывать про великих спортсменов, которые дают автографы «Никогда не здавайся!»…


                    1. DS28
                      13.06.2017 15:39

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

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


                      1. KVL01
                        13.06.2017 16:23

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


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


                        1. DS28
                          13.06.2017 16:33

                          А, вот как… Вы считаете, что если к 9-му классу человек не определился с целями, то он решил остаться быдлом.

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

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

                          Вы же считаете, что множество 3) входит в 2)
                          Тогда да, всё хорошо сложилось. Вопросов больше не имею))


                        1. Zenitchik
                          13.06.2017 17:00

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


                          1. DS28
                            13.06.2017 18:11

                            Вот нам даже пример есть, как меняется выбор к институту.

                            Могу и про свою жену рассказать: 10 лет художка, 1,5года учёбы на архитектора, переоценка, теперь педагог-психолог инклюзивного образования.


              1. Zoberg
                13.06.2017 15:59

                В моём университете тренер, когда рассказывал как правильно делать упражнения, делал отсылки к сопромату, разделам про сжатие/изгиб стержней. Ведь позвоночник — это тот же стержень (в каком-то приближении) и есть большая разница работает он на сжатие или на изгиб.


                1. KVL01
                  14.06.2017 08:05

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


                  1. michael_vostrikov
                    14.06.2017 08:26

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


                    1. KVL01
                      14.06.2017 08:50

                      Да, он ещё предлагает почитать учебник по механике, когда спрашивают, в чём его секрет. Такой себе капитан очевидность. А достаточно просто себя пощупать, чтоб за мясом разглядеть эти рычаги)


                      1. Zenitchik
                        14.06.2017 11:11

                        Это Вам достаточно. А достаточно ли тому, кто не знает физику?


                        1. KVL01
                          14.06.2017 12:59

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


          1. DS28
            13.06.2017 11:26

            Но я согласен с тем, что начинать изучение компьютера с булевой алгебры — моветон из прошлого. Это все равно, что начинать обучение вождению автомобиля с изучения тактов ДВС.

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

            «Изучение компьютера» в школах сейчас очень странное.И мне очень сильно кажется, что начать с алгоритмов лучше…
            Ну и логика/множества/алгоритмы — это не ДВС, это более общие вещи, более глобальные…


          1. Mikeware
            14.06.2017 12:18
            +1

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


  1. sim-dev
    13.06.2017 08:09
    +4

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

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

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


    1. velvetcat
      13.06.2017 08:42

      Как задачу следует ставить, как разбивать её на подзадачи и зачем, что такое логическая оптимизация и зачем она нужна

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


      1. sim-dev
        13.06.2017 09:04
        +1

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


        1. Xandrmoro
          13.06.2017 18:06

          > Вас сразу посадили за руль, и на городских улицах вам рассказывали, как делать правильно, а как нет

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

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


      1. questor
        13.06.2017 09:35
        +1

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


      1. ru_vlad
        13.06.2017 14:03

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

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


        1. velvetcat
          13.06.2017 15:39

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


          1. ru_vlad
            13.06.2017 15:49

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


    1. DS28
      13.06.2017 10:04
      +1

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

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


      1. DS28
        13.06.2017 15:59

        Вижу минус. Давайте расскажу подробнее. (Я вообще-то открыт к дискуссии, если я ошибаюсь — давайте обсудим.)

        Я писал комментарии к высказыванию

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

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


    1. tapoton
      13.06.2017 13:18

      Если в распоряжении всего один урок, то как бы хорошо ты не объяснил процесс обдумывания решения, ученики забудут все со звонком, потому что это скучно. Да и не на один урок это. Мне вот алгоритмы (без привязки к программированию) преподавали всю начальную школу.
      Автор поставил задачу показать аспект кодотворения, причем упор сделал на результат: мы написали эти, пока ещё не совсем понятные нам 15 строк кода, и теперь компьютер может загадывать числа и подсказывать нам.
      10 класс – это конечно уже поздновато начинать с программированием, но, вспоминая себя где-нибудь в 6-7 классе, могу сказать, что меня это точно заинтересовало бы и вот тогда я бы уже хотел учиться.


    1. Albom
      13.06.2017 14:42
      +2

      Странная манера преподавания программирования…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


      1. sim-dev
        13.06.2017 14:46

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


        1. Albom
          13.06.2017 14:49

          Котёнка №2 и Васю жалко.


    1. fillpackart
      13.06.2017 14:43
      +1

      Программирование — это на 99% алгоритмизация, и на 1% все прочее

      Вам, видимо очень повезло с работой. За четыре года работы разработчиком могу сказать: программирование, это на 0.000001% алгоритмизация.


      1. sim-dev
        13.06.2017 15:13
        -3

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


        1. velvetcat
          13.06.2017 15:42
          +3

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


        1. fillpackart
          13.06.2017 16:40
          +3

          Вы даже не представляете себе, как сильно ошибаетесь.

          землекоп-кодер
          — это насколько высокомерным надо быть, чтобы написать подобное?


  1. ru_vlad
    13.06.2017 08:18

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


    1. Albom
      13.06.2017 13:27

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


      1. ru_vlad
        13.06.2017 14:15
        +1

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


        1. Albom
          13.06.2017 14:46

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


          1. ru_vlad
            13.06.2017 16:17

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


        1. Zenitchik
          13.06.2017 16:07

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


          1. ru_vlad
            13.06.2017 16:11

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


  1. pudovMaxim
    13.06.2017 08:39
    +2

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


    1. ainoneko
      13.06.2017 09:28
      +3

      лучше был бы JS или специальный язык для обучения

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


      1. pudovMaxim
        13.06.2017 09:58
        -1

        Да, конечно в JS ям тоже много, но к ним еще нужно прийти.
        Простой пример:

        console.log('Привет Мир') 
        

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


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


        1. Unforgiven
          13.06.2017 10:02
          +1

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

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


          1. Zenitchik
            14.06.2017 20:55

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


            1. Mikeware
              15.06.2017 07:29

              форматирование бывает разное.
              в фортране оно вообще не предусматривалось. в бейсике (в тех версиях, где строки нумеровались) — своеобразное форматирование получали нумерацией строк.
              в макроассемблерах — локальными метками.

              кстати, после прочтения ВанТассела, своеоьразно структурированный и легкочитаемый код в стиле «без гоуту» стал даже в ассемблерах…


        1. evseev
          14.06.2017 12:15
          +1

          Признаюсь честно. Меня то же долго отпугивали эти пробелы. А потом мне понадобился Python и я решил, что нужно взять себя в руки. И случилось странное. Меня это абсолютно никак не напрягло. А с учетом того, что отслеживать ничего самому не нужно, все это отлично делается тем-же PyCharm, так вообще все пошло как по маслу.

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


        1. ainoneko
          15.06.2017 07:14

          но к ним еще нужно прийти

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


          1. pudovMaxim
            15.06.2017 09:33

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

            Вспомнил о своем опыте — в классе 11 учился на игре программируемых танчиков, не помню названия. Это был си-подобный язык с основными конструкциями. Было интересно видеть как только что созданный бот сам перемещается, сам стреляет. А пока пишешь бота, попутно изучаешь код — условия, циклы, расчеты, функции. Сейчас есть нечто более симпатичное: codingame.com (или люой код-раш)


            1. Mikeware
              15.06.2017 09:40

              для детей есть и всякие Скрэтчи и иже. есть веб-версии. есть даже для ардуин.


  1. Unforgiven
    13.06.2017 09:45

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


    1. Albom
      13.06.2017 13:41

      Признаю.

      А вот трактовки терминов получились довольно вольными.
      Мы-то знаем, что такое заголовочный файл. Знаем, где он хранится на диске, и что в нём находится. Но опять же, тянем за верёвочку и мы будем обязаны объяснить, что функцию до использования нужно объявить, чтобы компилятор знал о количестве и типе передаваемых параметров, да и много других вещей (именованные константы, пользовательские типы данных, директивы препроцессора). А это в свою очередь, тянет за собой ещё кучу материала. В условиях ограниченности времени пришлось этим пожертвовать. И в статье я хотел это показать — «смотрите, я сказал неправильно, но при этом минимизировал вред неокрепшей детской психике».


      1. Unforgiven
        13.06.2017 15:15

        Но опять же, тянем за верёвочку и мы будем обязаны объяснить […]

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


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


        1. Albom
          13.06.2017 15:23

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


  1. jehy
    13.06.2017 10:13

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


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


    1. avost
      13.06.2017 10:39
      +1

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

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


      1. DrPass
        13.06.2017 10:43
        +1

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

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


        1. avost
          13.06.2017 14:38

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


          1. DrPass
            14.06.2017 00:08

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

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


            1. avost
              14.06.2017 00:22

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


              1. DrPass
                14.06.2017 01:28

                Не?

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

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

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

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


      1. jehy
        13.06.2017 10:53

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


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


  1. potan
    13.06.2017 10:46
    +1

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


    1. AlexBin
      13.06.2017 17:59

      Я сначала мельком прочитал как PERL, и подумал, что Вы ненавидите детей)) Но перечитал слово и успокоился.


  1. sfi0zy
    13.06.2017 11:07

    … седьмую строку опустим вниз (поставим курсор в начале строки и нажмём Enter). И в пустой седьмой строке введём setlocale(LC_ALL, «rus»); А во второй строке введём #include locale. Кто-то LC_ALL написал строчными буквами (пришлось объяснить, что строчные и заглавные буквы отличаются...


    Такой подход в духе «спишем с доски» не очень работает (по личным наблюдениям). В таких примерах много магии. Что такое LC_ALL? — макрос. А что такое макрос? А вывод в консольку… Человек, который раньше не занимался программированием, не поймет, что такое потоки, и тем более как работает конструкция с оператором "<<" в количестве более одного. Даже я, вроде бы был знаком со всем этим (с конца 9 класса — С, потом С++, да и в институте что-то было), последние пол года-год не видел толком этих языков и не сразу сообразил, что откуда должно вернуться, чтобы это сработало.

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


  1. alexsibtone
    13.06.2017 13:44

    Человек, в отличие от технологий, особо не изменился за сотню лет. Продолжайте, именно в возрасте 8..9 класса самое то время, когда усваиваешь все подряд.
    Да, большинство не вынесет тягот обучения — заскучает, но вы откроете другой части глаза в мир программирования и в будущем они скажут вам большое спасибо.


  1. very-smarthome
    13.06.2017 13:45
    -1

    Первый вопрос: Вы относитесь к тем, кто считает С++ самым крутым языком программирования?


    1. Albom
      13.06.2017 13:55
      +1

      Нет, не отношусь. Тем более я на C++ не пишу и даже своим студентам пятого курса честно говорю — «я его не знаю!» (некоторые мои студенты знают его лучше меня). Что я думаю о нём? 1. C++ очень хорош. 2. Он оказал огромное влияние на развитие других ЯП. 3. Он в меру опасен. 4. Он очень распространён (множество проектов и разработчиков). Лучший ли он? Возможно, в каких-то областях. Будет ли он лучшим в этих областях спустя какое-то время — никто не знает.


  1. Shakhmin
    13.06.2017 14:51

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


    Ps лет 10 назад, чтобы побороть страх девочек-заочниц с гуманитарного факультета перед компьютерами, показал им форум для мам. В дальнейшем это был бонус за хорошо выполненные задания


    1. Albom
      13.06.2017 14:52

      Интересный (я не уверен, что единственно правильный) — это взять задачу из жизни/специальности этих студентов и показать, как можно решение автоматизировать

      Хороший вариант :)


  1. hcbogdan
    13.06.2017 14:52
    +1

    Поддерживаю Python, он хорош для целей обучения. А еще я бы советовал перенести задачи из плоскости «как бы это написать на этом языке?» (неважно какой) в плоскость алгоритмических или даже прикладных.
    Скажем составить UDP сервер-биржу, которая бы позволила выторговать балы или даже небольшие деньги. «Живые» задачи вызывают здоровый интерес, позитив, а у некоторых даже жажду знаний (желание заниматься этим в не учебное время).


    1. Albom
      13.06.2017 14:56

      Поддерживаю Python

      И я поддерживаю.

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

      Не уверен, что десятиклассники за 1-1,5 справились бы с этой задачей. Более того, не уверен, что я бы справился.


      1. hcbogdan
        13.06.2017 14:59

        Вы меня неправильно поняли, составить сервер нужно организатору а не ученикам.
        А им дать шаблон клиента (который позволит что-то добыть, общаясь с сервером по тривиальному протоколу)


        1. Albom
          13.06.2017 15:04
          +1

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


          1. hcbogdan
            13.06.2017 15:12

            Насчет «урок по трейдингу» — несогласен, важно связать реальный мир с тем чем занимается ученик. Выводом символов на монитор и вводом с клавиатуры (примитивным IO) в 21-веке уже не заинтересовать, т.к скажем приложение у ученика на iphone делает это красивей удобней и лучше.

            Общая мысль получается «зачем программировать? — неинтересно».

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

            Насчет алгоритма, неважно какой он будет, скажем сервер запрашивает курсы обмена «бубликов на балы» и таких цифр много. В шаблон клиента можно внести не всю суть коммуникации сервера-клиента, а только алгоримическую функцию которая будет давать те самые курсы. А далее можно скажем давать подсказки как можно применить циклы или условия. Скажем «если бубликов более 10» — не продавать. Тут все ограничено фантазией)


    1. potan
      13.06.2017 19:02

      Все-таки лучше изучать статически типизированный язык. Легче искать ошибки и лучше поддержка IDE.
      К тому же синтаксис python не очень удобен для REPL.


  1. Nakosika
    13.06.2017 15:36

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


    1. halpro
      13.06.2017 15:47
      +1

      Как я понимаю, у автора не было времени на подробные объяснения. Из моего опыта — в принципе это достаточно сложно заинтересовать группу детей чем-то изначально им незнакомым и неинтересным. Если была бы цель показать азы программирования часов за 40, то можно было бы двигаться «от простого к сложному» и «от теории к практике».


      1. Nakosika
        13.06.2017 17:22

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


  1. halpro
    13.06.2017 15:39
    +3

    Так как я одинаково сильно люблю и ненавижу C++, не поддерживаю загрузку в неокрепшие умы 15-17 летних такого сложного для освоения языка программирования.
    Поддерживаю Python как первый язык для школьников.
    Как второй язык после простого Python лучше выбирать перспективный Rust. Благо материала на русском языке уже достаточно.


    1. SbWereWolf
      14.06.2017 18:14
      -1

      почему не PHP?


  1. user4000
    13.06.2017 15:40
    +1

    Вы что-нибудь слышали о понятии «Дидактика»?
    Очень жаль, но именно такие «преподаватели» как вы, могут легко отбить всякое желание заниматься предметом.


  1. SbWereWolf
    13.06.2017 15:41
    +1

    идея с угадыванием числе — отличная мотивация, при случае воспользуюсь вашим опытом.


  1. prishelec
    13.06.2017 22:05
    +1

    Один урок и на этом все. Больше уроков не будет. Здесь чтобы не показал (не важно что за наука) – толк не большой или вообще будет отсутствие такового.

    Но лично бы я больше запомнил пример про «угадай число», чем вывод надписи «сладкие пончики», но автор сумел «вместить» оба примера – РЕСПЕКТ.

    Но вот с объяснением что такое локаль, я думаю здесь перебор – ведь это всего лишь дети. Некоторые студенты первого курса IT специальности могли впасть в ступор ).

    — Уже пару лет назад в немалом количестве учебных заведений, первый язык программирования (Pascal) заменили на #C. Я с таким решением категорически не согласен:
    1) Простая программа на Pascal (hello word!) не имеет подключаемых модулей. Уже меньшее насилие над головой.

    2) Потом преподаватель объясняет, как можно очищать экран при выводе в консоль (модуль uses crt, и вызов процедуры ClrScr). Затем про цвет шрифта.

    3) Потом уже затрагивается тема потоков ввода вывода и постепенно далее.

    А если посадить школьника или первокурсника перед полнофункциональной средой разработки, то я не думаю, что многие бы не задумались что это за бред. Я был свидетелем как человек поступил на программиста и увидя воочию что это такое, сказал: я думал тут типа как рисовать в photoshop и т.д.

    PS: Я лично не рискнул бы за один урок показать и угадайку (идеи бы даже не возникло). Эх-х не рисковый я парень ).


  1. Demiurgos
    13.06.2017 22:41
    +2

    За один урок научить программировать невозможно, но можно завлечь юные умы.
    А для этого важно не чем (С++, Python, C#, Pascal etc) завлекать, но как завлекать! Из данного урока ученики (совсем незнакомые с программированием) узнали много новых терминов, которые через неделю забудутся, и узнали, что программирование это «что-то написать, чтобы что-то написалось в черном окошке».
    Поэтому, наверное, в моем идеальном мире, где нет жесткого плана сверху, при неограниченных ресурсах, на уроке знакомства с программированием нужно показать, что решается и как с помощью программирования: фильтры в «инстаграммах» — программирование, ЧПУ и роботы-манипуляторы — программирование, видео игры, реалистичная физика, реалистичная графика — программирование, мама/папа работают с 1С — это тоже программирование, вконтакте/фейсбуки — программирование. Это ведь все можно интересно презентовать, программирование окружает нас повсюду.
    Нужно показать, не что в какой-то непонятной программе которую непонятно откуда взять Code::Blocks/VisualStudio etc нужно набрать непонятный текст и тогда что-то произойдет, но что, например, программирование всегда под рукой, и в школьном веб тестирование можно в браузере отредактировать страницу и показать преподавателю не 60 баллов а 100 баллов, что можно в повседневных продуктах MS Office можно открыть редактор макросов и сделать разные интересные и не очень вещи, что в компьютерных играх, а точнее в редакторах карт-сценариев тоже применяется программирование.
    Т.е. цель заинтересовать, а далее тем, кто заинтересуется и придет после школы, там и будет и матчасть, и структуры данных, и различные языки программирования от С++ до Python.


    1. prishelec
      13.06.2017 23:05

      Как я сделал вывод тут все далеко не просто. А не просто в том что всего лишь один урок.
      Ваше предположение верно.
      Но вот как быть? что выбрать? Рассказать про ВКонтакте с ЧПУ и роботами-манипуляторами, или показать все воочию без теории? Вопрос спорный. Я сам ответа найти не могу найти. Но мое мнение что воспоминания буду дольше храниться о том. Что мы, когда то набирали НАСТОЯЩУЮ программу. Как бы парадоксально это не звучало.


  1. GospodinBaron
    13.06.2017 22:46

    Автору и всем кто поступает подобным образом.

    Есть такая умная мысль. Не все люди обладает чувством юмора. Но было бы хорошо, чтобы те люди, которые не обладают чувством юмора обладали бы чувством, что у них нет чувства юмора.

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

    Чтобы начать оперировать некими понятиями нужно иметь представления об этих понятиях. Если этого представления нет, а его нет, то смысла играться даже с простыми примерами нет.

    Представьте себе китайский язык. Допустим Вы его не знаете. Вам предлагают на китайском написать самое простое детское стихотворение. Любой китайский ребенок в 3 года его знает. Вы предлагаете его 10-ти классникам. Потом вы предлагаете найти небольшую ошибку в стихотворении, которую благоразумно вставили сами. Потом Вы предлагаете другой подобный пример.

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

    Я сам прошел через это. И очень хорошо помню до сих пор как порвал книгу по программированию на Паскале в клочья. Нас пол года таким образом обучали программированию. Весь класс тихо ненавидел эти уроки.
    Назревал бунт. Но в какой-то момент учителя и родители осознали, что что-то происходит не так и прекратили пытки. Я раз 5 начинал сам штудировать книгу, которую нас заставили купить и каждый раз сдавался.
    Это была худшая возможная книга по программированнию, которую я видел на своем веку.
    В итоге я порвал ее в порые гнева. Надо ли говорить, что это была единственная книга в моей жизни, которую я уничтожил. Потом нам нашли нормального преподавателя и мы все радостно программировали на Бейсике.
    Это были 80-е годы, если кому интересно.

    Чтобы не было неправильных толкований. Дело совершенно не в Паскале. Дело совершенно не в Бейсике.
    Нет никакой разницы, какому языку программирования обучать людей, хотя у каждого языка разный порог вхождения. Мало того — дело вообще не в языке программирования.

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

    Основная задача учителя это попасть (вспомнить как это было) в шкуру ребенка. И понять что и как он/она видит.
    И двигаться именно с этой точки. То кол-во информации, которая усвоена Вами может совершенно отсутствовать
    в головах тех людей, которым Вы пытаетесь что-то объяснить. И главное Вы никогда не узнаете их настоящую реакцию, понимают они что-то или нет. Часто правильные ответы могут быть элементарным белым шумом.

    Просто задуймайтесь над этим.


    1. Mikeware
      14.06.2017 12:55

      Основная задача учителя это попасть (вспомнить как это было) в шкуру ребенка. И понять что и как он/она видит. И двигаться именно с этой точки. То кол-во информации, которая усвоена Вами может совершенно отсутствовать в головах тех людей, которым Вы пытаетесь что-то объяснить.

      ну, вообще-то педагогов этому специально обучают. (и методикам преподавания вообще, и особенностям восприятия материала у детей того или иного возраста, и специфике преподавания именно своего предмета). правда, обучаются далеко не все…
      непедагогам — тяжелее. поэтому у них два выхода — либо иметь талант, либо учиться.

      И главное Вы никогда не узнаете их настоящую реакцию, понимают они что-то или нет. Часто правильные ответы могут быть элементарным белым шумом.

      с одного занятия — не узнаешь. а вот после цикла занятий — запросто


      1. GospodinBaron
        14.06.2017 13:48

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

        В первом случае легко получить комплекс неполноценности, когда что-то совершенно непонятно, хотя другие люди с этим легко разбираются. Во втором случае можно легко добиться нервного срыва у ребенка объясняя «такие тривиальные вещи».

        Речь была именно об этом, а не о методологии обучения человека чему-то. Это базовое знание, которым должен обладать любой взрослый человек.

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

        Так же отличный пример можете наблюдать, если почитаете про cargo-cult среди аборигенов Фиджи и других разных племен. Они поистине гениально копировали форму самолетов и других изделий из нашего мира не имея не малейшего представления что это такое, как работает и для чего служит. В интернете полно фотографий. Это один из классических примеров пропасти в познаниях между одной и другой цивилизацией.
        Такая же пропасть существует между детьми и взрослыми. Физически невозможно объяснить как устроен этот мир 5-тилетнему ребенку на пальцах за 5 минут.


        1. Mikeware
          14.06.2017 14:04

          я не совсем понял, что именно «плохо». то, что все люди разные?


          1. GospodinBaron
            14.06.2017 15:06

            Плохо то, что только «педагогов этому специально обучают». Этому должны обучать всех.

            Люди как ни странно мало знают о своем мышлении. И люди зачастую спорят не потому, что имеют разные точки зрения, а потому что глядят на одно и тоже под разным углом и с разным опытом.
            Одному кажется, что это мягкое, а другой уверен, что теплое.


            1. Mikeware
              14.06.2017 15:55

              то, что люди мало знают о своем мышлении — это факт. но «средний человек», обыватель — он, увы, мало о чем вообще знает. а тем более — о мышлении вообще известно не очень много.
              ну а спор об одном и том же под разным углом — так все люди разные. Женщина смотрит на котика в одни дни месячного цикла как на ребенка, в другие — как на мягкую игрушку, в третьи — как на потенциального зассанца. мужик прикидывает, например, сколько ж это существо сожрет, и будет ли оно мешать занятиям сексом с подругой. аллергик любого пола смотрит на него как на источник аллергии. ветеринар — как на потенциального клиента на стерилизацию (потенциальный разовый доход), а кошкозаводчик — как на объект для разведения (потенциальный долговременный доход). и что?


  1. nivorbud
    13.06.2017 22:47

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


  1. dyogurt
    13.06.2017 22:47

    А мне честно говоря не хватало в школе скриптовых языков, с них нужно было начинать, а потом уже переходить на более сложные. Многие даже не используют тот же Batch в полной мере, я вот даже совсем недавно узнал что там есть ООП. Потом стало его мало перешел на Powershell, потом стало и его мало изучаю C#. К программисту себя не отношу, просто эникейщик. Не кидайте помидорами)))


  1. Amerzhan
    13.06.2017 22:47

    незнаю как вас, но меня очень удивил этот учитель который припадает информатику в школе с помощью code.org. https://www.youtube.com/watch?v=cZzyJFTZfDs почему блин не был такой учитель у меня(((


  1. Mikeware
    14.06.2017 13:38
    +1

    расскажу немного о своем опыте.
    давно-давно, в 1989 году возникло новое веяние — «шефство вуза над школой». уж не знаю, из каких таких расчетов нашей кафедре достался класс «корветов», и задание вести углубленные уроки информатики для отдельных классов одной из школ. В связи с чем нам были вручены ключи от аудитории, куча коробок, и задание: смонтировать, запустить, изучить и нАчать… Технически монтаж особых затруднений не вызвал. а вот подготовка к преподаванию — вызвала. За плечами тогда было 2.5 года обучения (на специальности, не связанной напрямую с программированием), ФЮП (факультет югого программиста, на котором учили в основном фортрану), много-много часов в дисплейных классах на базе СМ-4 (и ФЮПовском, и кафедральном), возня с Правец-8Д (шабашки, кои по тем временам проходили через кооперативы), ну и фортран, бейсик, си, и ассемблеры 580-го и 11-й… т.е. некоторый опыт программирования — был. Опыт командования (ну и обучения сослуживцев) в армии — тоже. Опыта обучения школьников — не было вообще. литературы тоже было не слишком много — учебники Ершова не особо помогли, два других были еще хуже, а в педагогических — без педагога не разберешься. преподы с кафедры загадочно улыбались (типа «выплывай сам»).
    пришлось строить свой учебный план. за основу взял именно то, что несмотря на специализированный класс — дети будут разные. хочешь-не хочешь, а учить придется всех. пытался построить от полезности компа как информационного инструмента, уйти от исключительно «школьно-вычислительных задач» (набившего оскомину решения квадратного уравнения). пока были пара вводных уроков, посвященных истории и применению, общался и узнавал об интересах. из интересов — возникали примеры и задания. в качестве примеров «для блондинок» было предложено смасштабировать выкройку- просто потому, что четыре подруги рисовали на обложках тетрадей какие-то платья. интересующийся авиацией парнишка делал игру-самолет (с учетом срыва в штопор при больших углах атаки). «спортсмен» хоть и очень любил играть в «каратэ», но освоил и «анимацию» (с учетом возможностей Корветов). кто-то делал для школы «тестирование по физике». так что в среднем все нашли применение в своей области интересов. забавно, что году в 2005 меня узнал охранник в «пятерочке», поблагодарил за интересное преподавание, и скзал, что уроки ему пригодились. правда, я так и не понял, в чем… Да, двое заняли призовые места на городской олимпиаде по информатике, и затем поступили на наш факультет (правда, один недоучился — но это другая история, лихие 90-е. хотя по учебе — он все вычислительные задачки делал влёт). по меньшей мере один — одинэсничает. так что даже один из 40, заинтересовавшийся всерьез и сделавший программирование профессией — это уже достижение для «юного педагога» :-)
    я тоже получил бесценный опыт (хотя первое время спина реально была мокрой), реально дополняющий «командный». возможно, что если б не наступившие времена — остался бы работать на кафедре. по крайне мере, бывший завкафедрой об этом говорил…
    зы. но за один урок я бы не сделал ничего…


  1. Aingis
    14.06.2017 19:08
    +3

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