Comments 173
И, насколько я себя помню, самое сложное в детстве, это было понять, что такое потоки. А Вы не только потоки сразу даёте, но ещё и локаль.
И если к десятому классу они ещё не занимались программированием, то 90% из них точно не пойдёт в программисты, и им точно не надо знать чем int отличается от char, что такое void, cin и cout. Имхо, проще подошло бы вообще не столько программирование, сколько написание простейшей игры из трёх функций на pygame (с дополнительной упрощающе оболочкой) или love2d (и так сойдёт), учитывая что там python/lua, минимум слов/особенностей фреймворков, и максимум предметной области.
За полтора часа, стоит объяснить, что такое переменная/функция/массив, и написать простейшую «игру» с кликаньем на кружочки, которые перемещаются по экрану. Это же значительно сильнее заинтересует десятиклассников, чем унылое «введите число, вот вам работа по формуле». Преподавание не должно быть унылым, это основное правило для преподавателя, любящего свой предмет.
В ВУЗе можно выпендриваться со скучными ханойскими башнями и всякими алгоритмами Монте-Карло, а в школе извольте подавать игрушки.
И если к десятому классу они ещё не занимались программированием, то 90% из них точно не пойдёт в программисты,
В корне не согласен!
На примере своих учеников могу сказать что некоторые определяются даже не 10, а в 11 классе. НО если есть желание и голова все будет. У меня много примеров которые начинали в 10 и сейчас кто учится, а кто уже профессионально кодит :)
За полтора часа, стоит объяснить, что такое переменная/функция/массив,
Да именно так, плюс еще объяснить виды и назначение циклов и научить структурировать задачу
и написать простейшую «игру» с кликаньем на кружочки, которые перемещаются по экрану.
а вот это лишнее, или может в качестве саморазвития на лето ;)
некоторые определяются даже не 10, а в 11 классеЕсли бы даже так. Я вот в первой половине выпускного класса думал, что буду архитектором. Во второй — экономистом. Поступил на криптографа…
В соседней, математической школе того же выпуска — целых три. В соседней спортивной — ноль. В ещё одной английской — два. Я смотрю на то, куда поступали выпускники, и кем они стали.
Программистов мало. И собираются они в специализированных учебных учреждениях. И я совершенно не понимаю, зачем давать что-то сложнее игрушки из трёх команд тем, кто будет экономистом, юристом, актёром или менеджером среднего звена. Им это не нужно, напротив, испугаются и будут вспоминать как страшный сон. За полтора часа, нужно успеть сделать минимум, чтобы вытащить действительно заинтересовавшихся, проведя отсев всех остальных, которым это не нужно. Но чтобы и им тоже было интересно, потому что мало ли что.
Представь что ты — полный гуманитарий, у которого в голове не укладывается, что такое массив.
Ну не помещается и всё тут!
Полуторачасовая программа должна быть рассчитана и на таких тоже, чтобы понятно было вообще всем. Ибо из гуманитариев иногда тоже вырастают программисты, и неплохие. Если заинтересовались и всё таки вкурили.
достаточно логики.
правда, я противник «визуального программирования», но для детей и гуманитариев, наверное, подойдет…
ну а МИТвский Скратч (равно как и леговский язык ) — он как раз для детишек.
printf
простой и понятный. А как работают cin
и cout
лично я понял только во втором семестре, когда мы стали изучать объекты и перегрузку операторов. До этого воспринималось как магия, было непонятно почему именно так а не иначе.Прогали же в детстве и на Си, и на асме, и ничего. Кому интересно — во всем разберется.
Я бы разделил — кому "решать разные задачи" — Питон, а кому "стать программистом" — С (не ++).
Большинство из детей не станет программистами, но зато они смогут написать, пусть даже отвратный, код на питоне, чтобы автоматизировать какие-то свои прикладные задачи.
дети, обученные питону, маловероятно потом осилят порог вхождения в яп низкого уровня
Что характерно, необученные питону — тоже.
Скорее всего, практически ничего не поняли, но умело поддержали разговор, всё-таки десятый же класс.
Тут, ИМХО, неудачно выбран язык программирования. В старом добром Паскале или Бейсике, например, та же задача решается как раз наглядно, без лишних неочевидных абстракций.
Зачем объяснять отдельно про namespace?
вообще надо убрать и using namespace и указывать его явно для каждого метода.
ВО первых гораздо проще ассоцифция: все методы iostream принадлежат к группе std — стандартные. ГРуппа или namespace — это как фамилия для методов. Позволяет отличать методы с одинаковыми именами в разных библиотеках.
А еще нельзя использовать слово функция. У детей функция в математике и у них начинает клинить от того, что эти две сущности с одинаковыми названиями никак не получается совместить вместе в голове. Понимание что функция потому и функция, что близка математической функции — приходит гораздо позже.
Локаль зачем-то использует. Транслит для первого урока — выше крыши.
Короче, ИМХО автору надо серьезно поработать над способом подачи материала.
UPD:
ОТдельный вопрос — кто придумал начинать обучение детей программированию с С++, а не с лого или муравья.
У детей функция в математике
И что, понятие функции в математике и в процедурных языках — более-менее перекликается. Нужно только заострить внимание на различиях.
#include , using namespace — дать им как данное. Просто пока мы тут пишем, оно нам нужно, кому интересно — могу после урока объяснить что это.
Если кто-то хочет русские буквы, то дать setlocale просто как некоторое заклинание, а не вдаваться в подробности про кодировки. Так и говорим: «Чтобы компьютер понял наши русские буквы мы напишем setlocale(LC_ALL, „rus“).» Ни слова больше.
Зато важные моменты проскочили галопом по европам.
int n = 2;
coun << n;
2. Запишем 2 числа в разные переменные, сложим, и посмотрим, что там записалось:
int n = 2;
int m = 3;
int summ = n + m;
cout << summ;
3. Научим программу принимать наше число и складывать:
int n;
cin >> n;
int m = 3;
int summ = n + m;
count << summ;
4. Обучим условию if, и выводу текста:
int n;
cin >> n;
if (n > 5)
count << "bolhe 5";
else
count << "menshe 5";
5. Ищем степень числа с помощью цикла:
int n;
cin >> n;
int i = 0;
int p = 1;
while (i < n) {
p = p * 2;
i = i + 1; //mogno napisat i++
}
count << p;
6. И вот только теперь можно переходить к игре угадай число. Но мне кажется на первом уроке до этого пункта вряд ли можно дойти.
p.s. Сам не преподаватель ни разу, но мнение имею. :)
Зачем объяснять отдельно про namespace?
вообще надо убрать и using namespace и указывать его явно для каждого метода.
using namespace был в шаблоне файла. Как бы это выглядело, если бы я сказал «а теперь уберём эту строку — она не нужна»? (почему не нужна? зачем её тогда добавили в шаблон?) Да и std:: в пяти местах выглядело бы не лучше.
У лектора и с структурой проблемы.
Почему мой выбор структуры не имеет права на жизнь? Поставил одно интересное задание (а школьникам действительно было в результате интересно угадывать, какое же число загадал компьютер) и дополнил существующий шаблон простейшей программы на реально используемом ЯП до решения. Если бы вы внимательно читали статью, то я готовился совершенно к другому уроку. Несколько задач (три листа распечаток кода), сначала никаких циклов, линейные алгоритмы, потом ветвление и множественный выбор. Всё согласно рекомендациям, которые мне дали. Но жизнь вносит свои коррективы.
ОТдельный вопрос — кто придумал начинать обучение детей программированию с С++, а не с лого или муравья.
Как я уже писал в статье, я именно начинал учиться программировать именно с Лого. В 7 классе. Урок проходил в университете и пришлось выбирать из того, что было установлено в компьютерном зале кафедры «Радиоэлектроника» — либо C/C++, либо Java. Остальное ПО — MathCAD, Multisim, офис и пару САПР.
А еще нельзя использовать слово функция
Я считаю, что можно. Как уже отвечали в комментариях — это понятие сходно с математическим, а на различия заострять внимания не было бы времени. Да и перегружать информацией школьников не хотелось.
огромные сомнения, что школьники, не умевшие программировать, что-то вынесли из этого урока
Проверить это невозможно. Но и считать школьников за дураков тоже неправильно. Если поставите себя на их место, то вполне реальна такая ситуация. Школьник: «Хм. Чтобы начать программировать на C++ нужно поставить Code::Blocks. Если выбрать проект, появится текст программы, которая работает. Я могу этот текст изменять. Мы работали с целыми числами, а как ввести и вывести вещественное число?» Потом полезет в интернет и скачает учебник.
В данном примере огромное количество абстракций-черных ящиков
Вы что-то имеете против абстракций? Вы знаете досконально, как устроен каждый агрегат автомобиля? Большинство просто поворачивают ключ и едут.
ничего не поняли, но умело поддержали разговор
Не нужно считать школьников за дураков.
В старом добром Паскале или Бейсике, например, та же задача решается как раз наглядно
Согласен на все 100. Но приходится работать с тем, что есть. У меня есть определённый багаж знаний по C++, на компьютере есть среда разработки. Вспоминать Паскаль (даже не синтаксис, а всевозможные нюансы) и устанавливать компилятор на 15 компьютеров ради одного урока? Подготовка к нему у меня и так заняла 2 рабочих дня. Причём 90% подготовленного материала пришлось выбросить. Хотя к этому я был готов — слишком много было неизвестно об уровне подготовки школьников. Представьте, что это был бы урок не программирования, а физики. Я бы подготовил множество опытов по электричеству, а оказалось бы, что они только кое-как механику проходили.
устанавливать компилятор на 15 компьютеров ради одного урокадля паскаля есть PascalABC.NET (впрочем, там декларировано, что не только паскаль). Ну и — да, ради одного урока… ради ЦЕЛОГО урока…
и ради этого нужно вспоминать паскаль, или закон ома, или валентность элементов, или отличия ямба от хорея…
Проверить это невозможно. Но и считать школьников за дураков тоже неправильно.
А я и не считаю их дураками. Ваш урок тяжело воспринимается для обычного человека, а не для дурака. Это вы почему-то делаете выводы «раз не понял, то дурак», «не понял, но умело поддержал разговор — тоже дурак». Не надо так :)
Вы что-то имеете против абстракций? Вы знаете досконально, как устроен каждый агрегат автомобиля? Большинство просто поворачивают ключ и едут.
Абстракции же бывают разными. Я много чего имею против неочевидных абстракций. Они для понимания требуют подготовки, и преподносить на уроке их как первое блюдо, значит, сбить обучаемого с толку. В современном автомобиле, кстати, таких абстракций как раз практически нет — все элементы управления выполняют прямое назначение. Руль для поворота влево-вправо, селектор для выбора, ехать вперед, назад или припарковаться, педалька для разгона, педалька для торможения. Всё просто и понятно. Да, с профессиональным ростом можно углубиться в детали реализации, но «пользовательский» уровень очевиден для восприятия. Критерий очевидности достаточно простой — если абстракцию можно объяснить известными человеку понятиями, она годится для использования на уроке. Если нельзя, то не годится.
Вот, к примеру, абстракция writeln('Привет, Чебурашка') — хорошая. Она выводит текст на экран, школьник знает, что такое текст, что такое экран, и что такое Чебурашка. При этом нам не нужно опускаться на более детальный уровень процедур Паскаля, на реализацию ввода-вывода, и тем более до compiler magic, через который там реализована половина модуля system.
А вот абстракция using namespace std отвратительна до безобразия. Для пояснения, что она делает, нужно проваливаться где-то на три-четыре уровня вглубь. Или вообще не пояснять, дескать, пока пишите, ибо так надо, потом разберём. И это не говоря уже о том, что в хелловорлде на С++ её вообще можно было безболезненно убрать.
Вспоминать Паскаль (даже не синтаксис, а всевозможные нюансы) и устанавливать компилятор на 15 компьютеров ради одного урока?
Ну вы-то зачем его проводили? Чтобы детям рассказать про программирование, верно? ИМХО, надо или делать качественно, или не делать. Тем более что вспомнить Паскаль или Бейсик на уровне вводного урока, это минут 15 надо. И ещё столько же, чтобы найти в интернетах дистрибутив того или другого и установить.
И мне кажется, что язык тут не особо важен и вообще не нужен (нужен только как инструмент)
Важно умение работать с алгоритмами — в этом и суть информатики в школе.
Поэтому итог №4 можно не включать))
Булева алгебра, теория множеств, алгоритмы — вот, что нужно на уроке информатики.
Возможно ещё какие-то другие основы из мат.логики…
Когда мне это (гораздо позже) понадобилось в жизни – написал калькулятор/конвертор и забыл, а сортировку посмотрел в педивикии.
Инструмент важен, чтобы не превозмогать героически C-подобный синтаксис, а смочь быстро закодироваь любой алгоритм.
А школьникам, полагаю, было бы интересно сделать какую-то простенькую игру. Графическую, ибо ввод/вывод текста, когда у всех уже стартфоны, выглядит несколько неуместно.
Вот зачем мне в школе XXX? Без понимания, куда это всё приткнуть?
Вместо XXX подставляем по очереди дисциплины и их части и ищем обоснования.
Проблема в подходе к образованию, а не в самой области знаний.
А вообще, да: «Я никогда не позволял школе вмешиваться в моё образование», Марк Твен.
В идеале. конечно, школа не нужна — ребёнок сам легко освоит школьную программу к 14 годам. А родители легко помогут ему в сложных моментах, подскажут/направят. Только это в идеале, а не в реальности…
Ну и по поводу знания современными школьниками химии и физики: очень сомневаюсь, что хотя бы половина учеников способна пересказать хоть какую-нибудь тему из курса физики/химии…
Пересказать тему через год после окончания обучения.
Поднимается ведь вопрос о том, чтобы знания остались на всю жизнь, т.к. их отсутствие «может привести к болезненным последствиям, а то и в мир иной».
И бесстрашно суют пальцы в блок питания без гальванической развязки потому, что на нем написано 12 вольт… удивляются в конце концов размороженной бутылке пива, потому, что «это же не вода, а пиво»
и дна известная картинка про закон ома даёт больше, чем целый урок объяснений им заучивание формул…
Зубрёжка с периодическим повторением? Ну таких же не бывает?
В детстве память эффективно работает…
Но тема из учебника по технической дисциплине (физика/химия), это надо было заморочиться вызубрить, да ещё как-то закрепить (например папа с мамой поспрашивали, потом урок перенесли, пришлось повторять, а потом ещё и в вузе повторно и при этом так и не попытаться понять...)
Но это же удивительная редкость…
Вот так это и бывает :)
А вот вызубрить тему из учебника по физике, да чтобы на всю жизнь и без понимания…
но это ничуть не запрещает запомнить другое…
12 вольт
Вы имеете в виду, что забывают про первичную обмотку?
а при прохождении под ЛЭП во время дождя с лопатой на плече — может быть достаточно и совсем не касающейса провода лопаты… я уж не буду рассказывать про спазм гортани от того, что пацаненок лизнул «крону»…
я уж не буду рассказывать про спазм гортани от того, что пацаненок лизнул «крону»…
А мне, пожалуйста, расскажите. Каков механизм этого процесса?
Вот зачем мне в школе булева алгебра или двоичная система в тетрадке? Без понимания, куда это всё приткнуть?
А надо с пониманием. Вот как интегралы, один учитель заставляет зубрить формулы а-ля «интеграл от е в степени икс равен е в степени икс плюс константа», а другой сперва поясняет на практическом примере: «как бы вы посчитали площадь вот этой хитровымудренной фигуры?»
Так же и булева алгебра, её можно преподавать по-разному, и интересно, и бестолково. Но я согласен с тем, что начинать изучение компьютера с булевой алгебры — моветон из прошлого. Это все равно, что начинать обучение вождению автомобиля с изучения тактов ДВС.
UPD. Немного промахнулся с постом, на который отвечал :)
А то ведь может статься, что форму интеграла вспомнит только когда скрутит его из проволоки, чтобы достать ключи из унитаза.
Из области мечт: то перед началом любого обучения хорошо бы знать, понадобится ли эта дисциплина индивиду в будущем.
Это после изобретения машины времени только…
А так я уже сталкивался с детьми «Я буду спортивным тренером, мне не нужна ни математика, ни история… вообще ничего кроме физкультуры»
Но школьник – это всё же уже не бестолковое нечто, которое не может определиться, чем оно хочет заниматься в дальнейшем, и хочет ли вообще. То уровень ясельной группы детсада. А у нас принято всех под одну гребёнку, и в школе, и в ВУЗе.
Потому и из области мечт, наравне со специально выведенной породой людей под определённые задачи…
«О дивный новый мир» Хаксли?
Мне нравится)) Все заняты своим делом, все счастливы.
Кто выпадает — отправляйся на остров, там делай, что пожелаешь))
То уровень ясельной группы детсада.
Вы слишком высокого мнения о детях. Единицы к 9му классу определяются с вопросом «чем хочет заниматься в дальнейшем, и хочет ли вообще.»
Мне кажется проблема в делении людей на категории. Есть базовые вещи, которые должны знать все, специализация не начинается с первого класса.
Можно выдумывать бытовые и специализированные задачи, когда нужны какие-то знания, а можно рассказывать про великих спортсменов, которые дают автографы «Никогда не здавайся!»…
Не, я как раз довольно низкого мнения о детях и о людях в целом.Странно… Вот же было высказываение:
Но школьник – это всё же уже не бестолковое нечто, которое не может определиться, чем оно хочет заниматься в дальнейшем, и хочет ли вообще. То уровень ясельной группы детсада.Где тот, кто к школе не определился с целями — это бестолковое нечто, а никак не обычный ребёнок…
Как-то не увязывается в единую систему…
Как-то не увязывается в единую систему…
Если человек к 9-му классу решил стать (или остаться) быдлом – это всё же его осознанное решение. Именно поэтому я не считаю его бестолковым (в смысле не способным к принятию решений). А нравится ли это решение вам или мне – вопрос десятый.
У меня по ходу обсуждения сложилась такая картинка:
1)Есть люди которые определились с целями и для достижения целей нужны действия.
2)Есть люди которые определились с целями, и цель их — бездельничать.
3)Есть люди которые не определились с целями
У меня проценты распределяются так:
1) 3%
2) 3%
3) 94%
Вы же считаете, что множество 3) входит в 2)
Тогда да, всё хорошо сложилось. Вопросов больше не имею))
Могу и про свою жену рассказать: 10 лет художка, 1,5года учёбы на архитектора, переоценка, теперь педагог-психолог инклюзивного образования.
Есть такая система рукопашного боя "Система Кадочникова". В видео про нее кончено преувеличивают, но идея там хорошая. Подход основан на принципах механической физики — рычаг, сила, точки опоры, степени свободы.
Но я согласен с тем, что начинать изучение компьютера с булевой алгебры — моветон из прошлого. Это все равно, что начинать обучение вождению автомобиля с изучения тактов ДВС.
Тут важно определить, чему учат на информатике. Компьютером пользоваться? Тогда программирование исключать надо, лучше сделать упор на табличные и текстовые редакторы.
«Изучение компьютера» в школах сейчас очень странное.И мне очень сильно кажется, что начать с алгоритмов лучше…
Ну и логика/множества/алгоритмы — это не ДВС, это более общие вещи, более глобальные…
Представьте себе вводный урок по первой помощи: давайте придушим котенка и будем делать ему искусственное дыхание! Молодец, Маша, котенок ожил. А Петя, увы, не справился — котенок сдох, а все потому, что Петя… (далее сложные медицинские термины).
Или вводный урок токарного дела: дети, вот эта кнопочка включает станок. А теперь все берем заготовку, зажимаем в патроне и вытачиваем кеглю. Молодец, Петя, был аккуратен и резец всего-лишь лопнул. А вот Маша допустила ошибку, и кусок резца распорол Васе лобик…
Примеров можно приводить сколько угодно: ничему не учат с конкретных примеров на первом уроке! Да и на втором тоже…
И только в программировании принято обрушить на голову ушат совершенно непонятных сведений, и считать это успешным, если BSOD ни у кого не появился…
Программирование — это не склеивание соплями «знаний» кусков из странных английских слов и непонятных символов. Программирование — это на 99% алгоритмизация, и на 1% все прочее. Если мысли в голове, как скакуны, если перед началом работы нет понятия, КАК решать задачу, объяснить, нахрена при решении нужен цикл или еще что-то, будет невозможно.
Я бы рассказал о том, что такое решение задачи с точки зрения программиста. Как задачу следует ставить, как разбивать её на подзадачи и зачем, что такое логическая оптимизация и зачем она нужна… Да, это более скучно, но результативнее. А после вышеописанного урока в самом идеальном случае мы получим в классе 1-2 новых «индуса», а в худшем — все ученики скажут «ну и хрень эта ваша программирования»… Оба результата успехом преподавателя никак назвать нельзя.
Как задачу следует ставить, как разбивать её на подзадачи и зачем, что такое логическая оптимизация и зачем она нужна
Т.е. полгодика сидеть слушать препода, а потом показать настоящий компьютер? Почему бы просто сразу не объяснять, как делать правильно, а как — нет?
Меня мой преподаватель в ВУЗе с первого занятия на первом курсе увлек, хотя в пору моего обучения плановое «посещение дисплейного зала» было только в конце второго семестра ТРЕТЬЕГО курса…
А сейчас в школе информатику изучал сын. И мы вместе ржем над тем, как это делается.
Рассказанное в статье — лучше, чем существующее, но лучше только на чуть-чуть.
Почему-то все считают, что обучение детей — это то же самое, что обучение взрослых, только чуть-чуть проще. А на самом деле все гораздо сложнее…
Именно так меня и учили. Инструктор убедился, что я глохну не каждый раз, и мы поехали в город. Уже больше пяти лет безаварийного стажа.
Разумеется, один пример не тенденция, но такой подход тоже имеет право на жизнь.
Программирование я, кстати, изучал примерно так же, когда меня внезапно отправили на олимпиаду, потому что я мог нарисовать хелловорлд в редакторе форм вижуал бейсика.
Если мы хотим, чтобы детям было интересно, то можно сразу показывать блестящий корпус и тыкать кнопки. Если мы растим программистов — то сначала слушаем теорию. Много говорится, что языки с низким порогом входа дают быстрый старт, но потом приходится тяжело. Тут то же самое: сначала быстро и легко продвигаемся, потом вязнем. Нужен баланс. Вряд ли за один час можно что-то путное сделать, но при большем времени — однозначно давать и теорию и практику. Обучать детей намного сложнее, чем взрослых, тут свои подходы нужны.
Т.е. полгодика сидеть слушать препода, а потом показать настоящий компьютер? Почему бы просто сразу не объяснять, как делать правильно, а как — нет?
нет, можно сразу посадить за компы, а потом смотреть как они тупо смотрят в экран и не могут сделать нахождения НОДа
Проходили знаем ;) с первого дня кричат скорей за компьютеры, а после самые крикливые на практике не то что "игрушку", а просто ноль знаний.
Котята не умирают, люди не страдают, заготовки не ломаются…
Для врачей есть специальные тренажёры — и это очень круто, когда можно что-то попробовать, без риска убить…
Авиасимуляторы — аналогично, очень полезно.
Я писал комментарии к высказыванию
По-моему, кроме как в программировании, подобного подхода никогда не придерживаются при обучении чему угодно!Когда человек пишет первый раз пишет программу — он ошибается, он не должен написать её сразу правильно. Если он ошибётся — у него есть возможность исправить ошибку — последствий никаких.
Представьте себе вводный урок по первой помощи: давайте придушим котенка и будем делать ему искусственное дыхание! Молодец, Маша, котенок ожил. А Петя, увы, не справился — котенок сдох, а все потому, что Петя… (далее сложные медицинские термины).
Или вводный урок токарного дела: дети, вот эта кнопочка включает станок. А теперь все берем заготовку, зажимаем в патроне и вытачиваем кеглю. Молодец, Петя, был аккуратен и резец всего-лишь лопнул. А вот Маша допустила ошибку, и кусок резца распорол Васе лобик…
Когда человек первый раз вытачивает деталь и делает ошибку — портится заготовка (без учёта опасностей работы с оборудованием)
Когда человек первый раз спасает котёнка и делает ошибку — погибает животное.
Давайте ещё примеры придумаем:
Человек первый раз произносит слово на иностранном(или родном) языке (читает слово, например) и делает ошибку, его поправляют и он может исправить ошибку. Последствий нет.
Человек первый раз суммирует два числа, ошибается, ему указывают на ошибку. Последствий нет.
Человек садится за авиасимулятор, делает ошибку на взлёте. Но никто не разбился. (а это может быть первым шагом к освоению професии лётчика)
ну и т.д.
Попробовать что-то в ситуации, когда нет опасных последствий — это не плохо.
Автор поставил задачу показать аспект кодотворения, причем упор сделал на результат: мы написали эти, пока ещё не совсем понятные нам 15 строк кода, и теперь компьютер может загадывать числа и подсказывать нам.
10 класс – это конечно уже поздновато начинать с программированием, но, вспоминая себя где-нибудь в 6-7 классе, могу сказать, что меня это точно заинтересовало бы и вот тогда я бы уже хотел учиться.
Странная манера преподавания программирования…
Фраза для привлечения внимания?
давайте придушим котенка и будем делать ему искусственное дыхание!
Нет, давайте отгадаем число, которое загадал компьютер!
ничему не учат с конкретных примеров на первом уроке! Да и на втором тоже…
Ну, не было у меня второго урока. И третьего, и десятого. Были бы — не было бы статьи.
И только в программировании принято обрушить на голову ушат совершенно непонятных сведений
Не знал. Информация 100% верна?
если BSOD ни у кого не появился
Вот-вот, на втором уроке я бы показал, как перейти в нулевое кольцо защиты процессора и как обрушить ядро ОС Windows NT.
Программирование — это не склеивание соплями «знаний»
Согласен. Зачем вы это мне говорите?
странных английских слов
Не понимать, что ви говорить.
Если мысли в голове, как скакуны
МОИ мысли — МОИ скакуны!
нахрена при решении нужен цикл
Я вроде бы объяснил. Если не поняли — прочтите заново.
Я бы рассказал о том, что такое решение задачи с точки зрения программиста.
Расскажите, пожалуйста. Я ведь не программист.
после вышеописанного урока в самом идеальном случае мы получим в классе 1-2 новых «индуса»
Вау! Это круто! Тогда мне пора развешивать объявления «Научу индусскому коду за один сеанс» и грести бабло лопатой. На самом деле нет, после вышеописанного урока мы не получим 1-2 новых «индуса».
все ученики скажут «ну и хрень эта ваша программирования»
Возможно, спорить не буду.
Оба результата успехом преподавателя никак назвать нельзя.
Пойду напьюсь безалкогольной водки в компании воображаемых друзей.
Программирование — это на 99% алгоритмизация, и на 1% все прочее
Вам, видимо очень повезло с работой. За четыре года работы разработчиком могу сказать: программирование, это на 0.000001% алгоритмизация.
Александр как коллега к коллеге, а что это было? Курсы, плановые уроки, факультатив, лагерь и будет ли продолжение.
Полностью согласен с DrPass для первого урока это жестоко, даже первокурсники которые С и С++ не видели будут плакать, а тут школьники. Все же разумнее сначала познакомить с алгоритмами и примерами на Питоне или Паскале. Потому что все что не понятно человек обычно забывает или пугается этого.
Да и для первого знакомства с языком можно использовать браузерные версии в сети, во первых проблем с настройками среды не будет, а во вторых с локализацией возиться не надо.
Ну значит еще и коллеги по "несчастью" :) Добрый совет, лучше либо отойти от подобной структуры занятий либо сменить язык на более менее человечное (по мне Паскаль как раз). Занятия лучше тогда строить по прицепу, рисуем алгоритм (с объяснениями) показываем его реализацию на языке (это в классе), а дома они уже на базе подобного решают задачи и посылают на почту или куда выкладывают для проверки.
Так как приверженец старой школы, то с начала рисую блок-схемы, а затем уже даю код.
Если вижу кода у человека нет, заставляю рисовать схему (да я изверг) и показывать разными цветами что к кому и каким циклам относится, после параллельно перевести схему в код и отметить соответствия.
Не было у меня возможности ни дать домашнее задание, ни даже прочитать вводную лекцию. Звыняйтэ.
По поводу ЯП — использовал лучшее из того, что было.
Я тоже изверг и заставляю студентов рисовать.
Сейчас в качестве учебного используем PascalABC.NET косяки конечно найти можно но для своих целей вполне подходит.
Наверное лучше был бы JS или специальный язык для обучения, который позволяет ошибаться и пропускать некоторые моменты.
лучше был бы JS или специальный язык для обучения
JS, в котором вычислять 1+'1'?
Это ещё более жестоко.
Да даже Паскаль был бы лучше (про Питон уже говорили).
Простой пример:
console.log('Привет Мир')
и программа готова. Либо:
#include <iostream>
// Десяток строк спустя...
cout << "Привет мир" << endl;
// Еще парочка малопонятных строк
Питон не знаю, меня всегда раздражало влияние правильности моей программы в зависимости от того, сколько я поставил пробелов. Мне кажется, детям тоже это тяжело объяснить почему один код работает, а другой нет.
меня всегда раздражало влияние правильности моей программы в зависимости от того, сколько я поставил пробелов. Мне кажется, детям тоже это тяжело объяснить почему один код работает, а другой нет.
Объяснить необходимость форматирования кода, который работает и без форматирования, тоже не всегда получается. От студентов слышал аргументы «Мне удобно, когда все по левому краю». При этом любой вопрос по коду приводит к долгим попыткам вчитаться в неструктурированный набор символов.
в фортране оно вообще не предусматривалось. в бейсике (в тех версиях, где строки нумеровались) — своеобразное форматирование получали нумерацией строк.
в макроассемблерах — локальными метками.
кстати, после прочтения ВанТассела, своеоьразно структурированный и легкочитаемый код в стиле «без гоуту» стал даже в ассемблерах…
Вас же в C-подобный языках фигурные скобки не смущают? И выравнивания вы все-равно делаете. И, я так подозреваю, делаете это зачастую средствами IDE. С пробелами все точно так-же.
но к ним еще нужно прийти
Не так уж далеко идти:
function f2c(f){
return (-32 + f) / 1.8; // Да, если написать f - 32, всё будет нормально
}
f = prompt("Температура по Фаренгейту", 0);
console.log(f2c(f));
А для одного урока как раз важен быстрый старт.
Вспомнил о своем опыте — в классе 11 учился на игре программируемых танчиков, не помню названия. Это был си-подобный язык с основными конструкциями. Было интересно видеть как только что созданный бот сам перемещается, сам стреляет. А пока пишешь бота, попутно изучаешь код — условия, циклы, расчеты, функции. Сейчас есть нечто более симпатичное: codingame.com (или люой код-раш)
А вот трактовки терминов получились довольно вольными.Мы-то знаем, что такое заголовочный файл. Знаем, где он хранится на диске, и что в нём находится. Но опять же, тянем за верёвочку и мы будем обязаны объяснить, что функцию до использования нужно объявить, чтобы компилятор знал о количестве и типе передаваемых параметров, да и много других вещей (именованные константы, пользовательские типы данных, директивы препроцессора). А это в свою очередь, тянет за собой ещё кучу материала. В условиях ограниченности времени пришлось этим пожертвовать. И в статье я хотел это показать — «смотрите, я сказал неправильно, но при этом минимизировал вред неокрепшей детской психике».
Но опять же, тянем за верёвочку и мы будем обязаны объяснить […]
Подробные объяснения можно опустить. Достаточно сказать: это — заголовочный файл, его нужно подключить для того, чтобы использовать все, что в нем объявлено.
Я не просто так цепляюсь к словам. Регулярно вижу студентов, которые приходят с привычкой использования неподходящего термина и путаются, когда речь заходит непосредственно о библиотеках.
Присоединяюсь к комментаторам, которые говорят, что это было мило но бесполезно. У вас был всего один урок для того, чтобы ребята поняли, что программирование — это не удел каких-то высоколобых гениев. Вы им показали обратное. Что я бы сделал, попав в такую ситуацию? Вместо программирования научил бы ребят за урок рисовать простые html странички. Это был бы некий импульс, которым они могут воспользоваться дальше сами. А давать им плюсы — значит не вызвать ровно никакого интереса. Ещё можно было дать им простеньких скриптов на php.
Кстати, это камень не в сторону школьников. Они ровно такие, как должны быть. Их надо заинтересовать и показать, что они что-то могут сами, чтобы дальше они изучали самостоятельно предмет — в этом и есть миссия преподавателей.
Вместо программирования научил бы ребят за урок рисовать простые html странички
Не, не. Вместо рисования простых хтмл страничек я бы научил ребят ухаживать за ёжиками. А ещё лучше — копать яму. Просто, понятно и практическая польза есть…
Господа, вы совершенно напрасно считаете детей идиотами не способными к логическим выводам и абстрактному мышлению. Выбор языка, возможно, не самый удачный но вот я, к примеру, учился программировать на калькуляторе б3-34 в 7-ом классе. А учительница математики-информатики, которая мне его подсунула, так и не осилила эту магию :)
Выбор языка, возможно, не самый удачный но вот я, к примеру, учился программировать на калькуляторе б3-34 в 7-ом классе
Ну так наоборот, вам достался самый простой для понимания инструмент, который выполняет ровно то, что ему написали в программе, без каких-либо дополнительных неочевидных действий. По простоте для обучения программированию Б3-34 и всякие остальные МК-61/52 уступали разве что «Луноходу» (который был у некоторых особо примажоренных советских детей).
Стековая машина и обратная польская нотация — далеко не самый простой для понимания вариант. Я встречал тогда порядком людей, которые программировали на паскале и алголе на бэсм-6, но не могли понять как победить эту странную машинку. :)
Стековая машина и обратная польская нотация — далеко не самый простой для понимания вариант.
Программа — это всего лишь порядок действий для достижения цели. С точки зрения будущего программиста нет особой разницы, закидывать цифры в стек и делать там арифметические операции, или гонять черепашку по экрану командами «влево на 10», «опустить перо», «вверх на пять». Или луноход по комнате. Ключевой момент тут в том, что калькулятор непосредственно выполняет команды по программе, совсем так же, как если бы их вводил человек в диалоговом режиме.
Тем не менее, практика показывает, что концепция обратной польской записи и стековой машины сложны для понимания довольно большим количеством людей. В том числе с высшим естественным образованием.
Ваше сравнение с луноходом я не осилил. С этой точки зрения любая программа — это "луноход". Ну, ладно, любая однопоточная программа. Любую однопоточную программу процессор выполняет непосредственно, как если бы человек вводил инструкции в диалоговом режиме. Не?
Не?
Не.
Пример как раз в обсуждаемой статье. Вот программа, которая генерирует случайное число и выводит его на экран.
Из 11 строчек кода не считая пустых строк:
— три содержат подключения библиотек
— одна подключает пространство имен
— три строчки — синтаксическая рамка для программы
— одна строчка делает какую-то магию для устранения кракозябр
— одна строчка делает какую-то непонятную фигню для операционной системы
— наконец, две (меньше десяти процентов кода!) делают что-то непосредственно относящееся к генерации числа и выводу на экран, но и то, каким-то магическим способом.
У лунохода нет ни синтаксических рамок, ни библиотек, ни магии. Команда «вперед» двигает его вперед. Программа, генерирующая случайное число на МК-52, тоже содержит вполне себе очевидный код:
К сч
Согласитесь, несколько нагляднее и проще для понимания, чем на С++?
Тем не менее, практика показывает, что концепция обратной польской записи и стековой машины сложны для понимания довольно большим количеством людей
Практика показывает, что этим же людям сложно обращаться и с мультиварками и стиральными машинами. Ничего в стеке сложного к пониманию для ребенка нет. Подавляющее большинство взрослых и квадратное уравнение не решат, в то же время как они же в детстве их щёлкали сотнями.
Дети-то способны к чему угодно. Я о том, что детей нужно заинтересовать. А чтобы заинтересовать — нужно показать некий интересный практический пример, который они смогут развивать.
Помню, как мы в школе занимались тем, что переписывали бейсиковый код с бумажек в среду разработки. Информатика была два раза в неделю (а не единственный урок), но это никого не заинтересовало вообще.
По моему первым языком программирования должен быть язык с развитым REPL. Обучение пойдет проще, и они сразу смогут использовать его как продвинутый калькулятор.
… седьмую строку опустим вниз (поставим курсор в начале строки и нажмём Enter). И в пустой седьмой строке введём setlocale(LC_ALL, «rus»); А во второй строке введём #include locale. Кто-то LC_ALL написал строчными буквами (пришлось объяснить, что строчные и заглавные буквы отличаются...
Такой подход в духе «спишем с доски» не очень работает (по личным наблюдениям). В таких примерах много магии. Что такое LC_ALL? — макрос. А что такое макрос? А вывод в консольку… Человек, который раньше не занимался программированием, не поймет, что такое потоки, и тем более как работает конструкция с оператором "<<" в количестве более одного. Даже я, вроде бы был знаком со всем этим (с конца 9 класса — С, потом С++, да и в институте что-то было), последние пол года-год не видел толком этих языков и не сразу сообразил, что откуда должно вернуться, чтобы это сработало.
Так что на мой взгляд нужно начинать с того, чтобы всю эту магию как-то развеять. У нас в школе это происходило вот таким образом. Разумеется, со временем класс разделился на тех, кому это нужно, и на тех, кому больше интересна физика (у нас был физмат), но тем не менее — подход работает. При этом не возникало какой-то мысленной привязки к языку, со временем каждый пробовал то, что ему больше было интересно. Да и задачки хоть и были сначала далекие от реальности, но тем не менее интересные (а после того, как у меня получилось вывести на экран множество мандельброта с возможностью зумить я уже не мог оторваться от процесса).
Да, большинство не вынесет тягот обучения — заскучает, но вы откроете другой части глаза в мир программирования и в будущем они скажут вам большое спасибо.
Полтора часа на "показать программирование" — это очень мало, особенно сейчас, когда надо и красиво и быстро и масштабируемо.
А это все за собой тянет уже целую пачку библиотек и сопутствующих приложений
Интересный (я не уверен, что единственно правильный) — это взять задачу из жизни/специальности этих студентов и показать, как можно решение автоматизировать
Ps лет 10 назад, чтобы побороть страх девочек-заочниц с гуманитарного факультета перед компьютерами, показал им форум для мам. В дальнейшем это был бонус за хорошо выполненные задания
Скажем составить UDP сервер-биржу, которая бы позволила выторговать балы или даже небольшие деньги. «Живые» задачи вызывают здоровый интерес, позитив, а у некоторых даже жажду знаний (желание заниматься этим в не учебное время).
Поддерживаю Python
И я поддерживаю.
Скажем составить UDP сервер-биржу, которая бы позволила выторговать балы или даже небольшие деньги. «Живые» задачи вызывают здоровый интерес, позитив, а у некоторых даже жажду знаний (желание заниматься этим в не учебное время).
Не уверен, что десятиклассники за 1-1,5 справились бы с этой задачей. Более того, не уверен, что я бы справился.
А им дать шаблон клиента (который позволит что-то добыть, общаясь с сервером по тривиальному протоколу)
Общая мысль получается «зачем программировать? — неинтересно».
В итоге круто когда лекторы интегрируют реальный мир в урок, и в современном формате (понятно что когда то вывод картинок на дисплей был крут, но те времена прошли).
Насчет алгоритма, неважно какой он будет, скажем сервер запрашивает курсы обмена «бубликов на балы» и таких цифр много. В шаблон клиента можно внести не всю суть коммуникации сервера-клиента, а только алгоримическую функцию которая будет давать те самые курсы. А далее можно скажем давать подсказки как можно применить циклы или условия. Скажем «если бубликов более 10» — не продавать. Тут все ограничено фантазией)
К тому же синтаксис python не очень удобен для REPL.
Статья в стиле "как превратить школьников в попугаев". Дайте сложный материал вместо простого, не объясняйте термины, учите их бесполезному, заставляйте писать под диктовку. Попугай готов!
Поддерживаю Python как первый язык для школьников.
Как второй язык после простого Python лучше выбирать перспективный Rust. Благо материала на русском языке уже достаточно.
Очень жаль, но именно такие «преподаватели» как вы, могут легко отбить всякое желание заниматься предметом.
Но лично бы я больше запомнил пример про «угадай число», чем вывод надписи «сладкие пончики», но автор сумел «вместить» оба примера – РЕСПЕКТ.
Но вот с объяснением что такое локаль, я думаю здесь перебор – ведь это всего лишь дети. Некоторые студенты первого курса IT специальности могли впасть в ступор ).
— Уже пару лет назад в немалом количестве учебных заведений, первый язык программирования (Pascal) заменили на #C. Я с таким решением категорически не согласен:
1) Простая программа на Pascal (hello word!) не имеет подключаемых модулей. Уже меньшее насилие над головой.
2) Потом преподаватель объясняет, как можно очищать экран при выводе в консоль (модуль uses crt, и вызов процедуры ClrScr). Затем про цвет шрифта.
3) Потом уже затрагивается тема потоков ввода вывода и постепенно далее.
А если посадить школьника или первокурсника перед полнофункциональной средой разработки, то я не думаю, что многие бы не задумались что это за бред. Я был свидетелем как человек поступил на программиста и увидя воочию что это такое, сказал: я думал тут типа как рисовать в photoshop и т.д.
PS: Я лично не рискнул бы за один урок показать и угадайку (идеи бы даже не возникло). Эх-х не рисковый я парень ).
А для этого важно не чем (С++, Python, C#, Pascal etc) завлекать, но как завлекать! Из данного урока ученики (совсем незнакомые с программированием) узнали много новых терминов, которые через неделю забудутся, и узнали, что программирование это «что-то написать, чтобы что-то написалось в черном окошке».
Поэтому, наверное, в моем идеальном мире, где нет жесткого плана сверху,
Нужно показать, не что
Т.е. цель заинтересовать, а далее тем, кто заинтересуется и придет после школы, там и будет и матчасть, и структуры данных, и различные языки программирования от С++ до Python.
Ваше предположение верно.
Но вот как быть? что выбрать? Рассказать про ВКонтакте с ЧПУ и роботами-манипуляторами, или показать все воочию без теории? Вопрос спорный. Я сам ответа найти не могу найти. Но мое мнение что воспоминания буду дольше храниться о том. Что мы, когда то набирали НАСТОЯЩУЮ программу. Как бы парадоксально это не звучало.
Основная задача учителя это попасть (вспомнить как это было) в шкуру ребенка. И понять что и как он/она видит. И двигаться именно с этой точки. То кол-во информации, которая усвоена Вами может совершенно отсутствовать в головах тех людей, которым Вы пытаетесь что-то объяснить.
ну, вообще-то педагогов этому специально обучают. (и методикам преподавания вообще, и особенностям восприятия материала у детей того или иного возраста, и специфике преподавания именно своего предмета). правда, обучаются далеко не все…
непедагогам — тяжелее. поэтому у них два выхода — либо иметь талант, либо учиться.
И главное Вы никогда не узнаете их настоящую реакцию, понимают они что-то или нет. Часто правильные ответы могут быть элементарным белым шумом.
с одного занятия — не узнаешь. а вот после цикла занятий — запросто
ну а спор об одном и том же под разным углом — так все люди разные. Женщина смотрит на котика в одни дни месячного цикла как на ребенка, в другие — как на мягкую игрушку, в третьи — как на потенциального зассанца. мужик прикидывает, например, сколько ж это существо сожрет, и будет ли оно мешать занятиям сексом с подругой. аллергик любого пола смотрит на него как на источник аллергии. ветеринар — как на потенциального клиента на стерилизацию (потенциальный разовый доход), а кошкозаводчик — как на объект для разведения (потенциальный долговременный доход). и что?
давно-давно, в 1989 году возникло новое веяние — «шефство вуза над школой». уж не знаю, из каких таких расчетов нашей кафедре достался класс «корветов», и задание вести углубленные уроки информатики для отдельных классов одной из школ. В связи с чем нам были вручены ключи от аудитории, куча коробок, и задание: смонтировать, запустить, изучить и нАчать… Технически монтаж особых затруднений не вызвал. а вот подготовка к преподаванию — вызвала. За плечами тогда было 2.5 года обучения (на специальности, не связанной напрямую с программированием), ФЮП (факультет югого программиста, на котором учили в основном фортрану), много-много часов в дисплейных классах на базе СМ-4 (и ФЮПовском, и кафедральном), возня с Правец-8Д (шабашки, кои по тем временам проходили через кооперативы), ну и фортран, бейсик, си, и ассемблеры 580-го и 11-й… т.е. некоторый опыт программирования — был. Опыт командования (ну и обучения сослуживцев) в армии — тоже. Опыта обучения школьников — не было вообще. литературы тоже было не слишком много — учебники Ершова не особо помогли, два других были еще хуже, а в педагогических — без педагога не разберешься. преподы с кафедры загадочно улыбались (типа «выплывай сам»).
пришлось строить свой учебный план. за основу взял именно то, что несмотря на специализированный класс — дети будут разные. хочешь-не хочешь, а учить придется всех. пытался построить от полезности компа как информационного инструмента, уйти от исключительно «школьно-вычислительных задач» (набившего оскомину решения квадратного уравнения). пока были пара вводных уроков, посвященных истории и применению, общался и узнавал об интересах. из интересов — возникали примеры и задания. в качестве примеров «для блондинок» было предложено смасштабировать выкройку- просто потому, что четыре подруги рисовали на обложках тетрадей какие-то платья. интересующийся авиацией парнишка делал игру-самолет (с учетом срыва в штопор при больших углах атаки). «спортсмен» хоть и очень любил играть в «каратэ», но освоил и «анимацию» (с учетом возможностей Корветов). кто-то делал для школы «тестирование по физике». так что в среднем все нашли применение в своей области интересов. забавно, что году в 2005 меня узнал охранник в «пятерочке», поблагодарил за интересное преподавание, и скзал, что уроки ему пригодились. правда, я так и не понял, в чем… Да, двое заняли призовые места на городской олимпиаде по информатике, и затем поступили на наш факультет (правда, один недоучился — но это другая история, лихие 90-е. хотя по учебе — он все вычислительные задачки делал влёт). по меньшей мере один — одинэсничает. так что даже один из 40, заинтересовавшийся всерьез и сделавший программирование профессией — это уже достижение для «юного педагога» :-)
я тоже получил бесценный опыт (хотя первое время спина реально была мокрой), реально дополняющий «командный». возможно, что если б не наступившие времена — остался бы работать на кафедре. по крайне мере, бывший завкафедрой об этом говорил…
зы. но за один урок я бы не сделал ничего…
Один урок программирования