Что я должен делать с группой 16-17 лет, чтобы заинтересовать их информатикой?


40

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


Я не учитель и не эксперт, однако я предлагаю вам научить их программировать небольшую игру-головоломку (выберите игру, обобщение которой является NP-полной), охватывающую такие аспекты, как: генерация уровней, проверка решений, автоматический поиск решений: - )
Vor

1
Мне понравились рождественские лекции Королевского института 2008 года . Возможно, вы захотите попробовать аналогичные действия / демонстрации.
melhosseiny

Ответы:


21
  • Вы можете сделать так, чтобы они рисовали картинки, используя контекстную грамматику. Искусство , не зависящее от контекста. Это также работает для людей, которые никогда не программировали раньше, и подходит для опытных программистов. Базовый язык достаточно легко объяснить за полчаса.
  • Изучение геометрии с использованием графики Turtle также должно быть приятным. Логотип был разработан для детей, поэтому у старшеклассников не должно возникнуть никаких проблем. Есть хорошие видео о детях, использующих логотип на YouTube
  • Если вы можете заполучить некоторых роботов MindStorms, программирование их будет очень увлекательным.
  • Существует множество программных игр, в которых вы программируете роботов для борьбы друг с другом или программ сборки, которые пытаются перезаписать друг друга на виртуальной машине. Википедия по теме , связанная с stackoverflow вопрос
  • Вы также можете подумать о каком-то аппаратном проекте. Заставить микроконтроллер мигать светодиодом, например, в зависимости от количества непрочитанных писем в вашем почтовом ящике.
  • Попросите их реализовать различные алгоритмы создания лабиринтов , попробуйте найти критерии, которые делают лабиринты «трудными для людей». Если позволяет время, расширите алгоритмы, чтобы включить не только коридоры, но и комнаты.
  • Купите пару Arduinos и светодиодов. Пусть они запрограммируют мигалки.

1
Вы можете добавить ссылки на учебники по программированию в Khan Academy в список: это действительно классное / интерактивное дополнение к вышеупомянутому. Например: khanacademy.org/cs/intro-to-animation/830742281
PhD

+1 и для CFG - еще одна версия того же понятия, которую было бы неплохо попробовать и применить, - это попытка нарисовать кусты с помощью системы повторных функций; пусть они начнут с прямоугольника, задают еще несколько прямоугольников, а затем повторяют «содержимое» первого прямоугольника (включая все подчиненные прямоугольники) в каждом из подчиненных прямоугольников. Вы можете настроить цифровую версию для сравнения.
Стивен Стадницки,

13

Проверьте компьютерные науки отключен . С их сайта:

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

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

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


1
Это хорошее предложение, но я подозреваю, что ОП хочет что-то, что на самом деле использует компьютерную лабораторию, которая была отложена.
Андрас Саламон

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

11

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

То, что вы ищете, - это двухчасовое упражнение, которое удовлетворяет двум целям:

  • Достаточно увлекательно, чтобы выпускники средней школы были достаточно заинтересованы в течение двух часов,
  • Это даст им представление о том, что такое информатика, и, надеюсь, заинтересует их.

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

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

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

Затем вы можете начать обсуждение того, как найти кратчайший путь и т. Д., Пусть они попытаются сформулировать его как алгоритм и т. Д. Затем вы описываете алгоритм Дейкстры , позволяя им раскрасить узлы как посещенные , предварительные и не посещенные наборы. Bam. У вас есть алгоритм!

О

пNп


9

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

В качестве предложения, попробуйте научить их контролировать поток и важность специфики:

  1. Разделите класс на 2 «роботы» и остальные «программисты».
  2. Придумайте подходящий вызов, требующий некоторой простой логики, циклов и т. Д. - пример ниже.
  3. Попросите «программистов» написать список инструкций, которые даны «роботам»
  4. Пусть «роботы» выполняют инструкции, но пусть «роботы» знают, что если инструкции сбивают с толку, им разрешается останавливаться, ошибаться или иным образом действовать до тех пор, пока «программист» не остановится и не отладит их. Гарантированный, если дан шанс играть, высокий школьник будет.

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

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

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


1
Почему я не могу дать этому +10? Это отличная идея.
Xynariz

@Xynariz спасибо! Я делал это несколько раз с действительно небольшими группами, и это в конечном итоге приводит к тому, что это равные части, забавные и разочаровывающие - однако разочарование связано с плохо себя ведущими «роботами», а не с компьютерами, которые дети еще не понимают.

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

7

Я обучил много программистов. Если все, что у вас есть, это 2 часа, не утруждайте их обучением кодированию. Компьютерная лаборатория тоже не нужна. Чтобы перейти от нуля к привет-миру, вы потеряете половину класса и потратите 45 часов из ваших 2 часов на борьбу с глюками и ничего не сделаете.

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

Дайте им почувствовать, каково это думать, как программист. Они, безусловно, получат от этого больше, чем вы, пытаясь научить их Python за 2 часа.


6

Вы можете попробовать Алису . Это IDE и API для 3D-анимации. Он имеет всевозможные встроенные объекты (кролики, инопланетяне, деревья, здания, ...), которые вы можете поместить в начальную сцену, используя методы очень высокого уровня: like walk(north)(который анимирует руки и ноги во время движения персонажа) а такжеsay("my name is Winky") это может привести к появлению пузыря мультфильма изо рта персонажа.

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

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

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


1
Я не хотел бы использовать этот подход; это может работать для младших школьников, но старшеклассники с большей вероятностью воспримут это как ребячество. Тем не менее, это быстрый способ выполнить что- то за 2 часа ...
Izkata

6

Кодирование даже на игрушечном или графическом языке кажется надуманным в течение часа. Черт, я не уверен, что смогу снова взять Алису и сделать что-нибудь стоящее за 2 часа. Возможно выходные, но не 2 часа.

Я бы посоветовал свести CS до самого необходимого: решения проблем и анализа. Разбейте группу на команды. Потратьте 10 минут, чтобы описать несколько вычислительных проблем высокого уровня. Это должны быть простые проблемы, которые могут быть легко объяснены людям с небольшим опытом математики или CS. Примеры включают в себя:

  1. Сортировка списков
  2. Нахождение минимальных остовных деревьев
  3. Вычисление (приблизительные) корней целых чисел
  4. и т.п.

Потратьте еще 10 минут на дальнейшее обсуждение и объяснение задачи. Каждой группе назначается одна проблема, для которой они должны найти решение. У команды будет полчаса, чтобы совместно найти решение или решение для их назначенной проблемы. Затем потратьте час на то, чтобы обдумать решения во всей группе, и пусть дети выяснят, работают они или нет, есть ли более быстрый / лучший способ решения проблемы и т. Д.

Если дети не выбирают правильное / оптимальное решение, это нормально. Не просто раздавайте ответы - это абсолютно важно. Причина, по которой дети больше не делают STEM, заключается в том, что воспитатели создают у детей впечатление, что все уже понято. Потребуются очень зрелые консультанты, чтобы позволить детям попытаться решить эти проблемы, и преуспеть или потерпеть неудачу самостоятельно. Правильный ответ не в этом. Суть в том, чтобы дать детям интересные проблемы и показать детям, что такое информатика: решать проблемы и оценивать правильность и эффективность решений. Разрешение детям придумывать свои ответы даст им чувство причастности и поможет им чувствовать себя заинтересованными.

Конечно, если дети спросят, получили ли они правильный / хороший / самый известный ответ, скажите им правду. Но не просто раздайте ответы, если они не возникнут органически в результате обсуждения решений учащихся. Обобщить:

  1. Дайте детям легко понять, но богатые проблемы для изучения.
  2. Пусть дети придумают свои собственные решения, предоставляя только достаточную помощь, чтобы дети понимали проблему под рукой.
  3. Обсудите правильность / эффективность в групповой обстановке, предоставляя группам возможность объяснить свои решения. Как консультанты, вы можете свободно обсуждать правильность / эффективность настолько, насколько вы думаете, что это может быть полезно.
  4. Ни при каких обстоятельствах вы не должны представлять свои или какие-либо общеизвестные решения проблемы, если они в основном не совпадают с предложенными студентами. Не создавайте впечатление, что CS - это поле, где люди уже разобрались со всеми ответами.
  5. Если возможно, пусть дети чувствуют, что они что-то узнали, но чтобы у них все еще оставались вопросы: нашли ли они лучшие ответы? Есть ли у них другие вопросы, которые они могут решить подобным образом? Вы могли бы даже предоставить им некоторую неразрешимую проблему в удобном для восприятия формате, чтобы потом им было над чем поработать.

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

1
Подобные соревнования сильно мешают застенчивым людям и только укрепляют эго тех, кто уже знает материал. Это только укрепляет имидж CS как «только для ботаников».
adrianN

6

Мне сейчас 17 лет, и я начал программировать примерно в то время, когда мне исполнилось 16. Я собираюсь рассказать свою историю, а затем высказать некоторые предложения: Мой интерес к программированию начался, когда я наблюдал за парнем, специализирующимся на компьютерных технологиях, я позвонил в свои реестры и командную строку хотя он хотел 500 $, чтобы исправить мои BSOD, а я не заплатил, я починил их самостоятельно) Так что я погуглил «язык командной строки» и обнаружил, что есть что-то под названием «исходный код», и это позволило вам программировать , В то время я понятия не имел, что такое с ++, даже не думаю, что когда-либо слышал об этом. Поэтому я пошел на cpp.com (очень плохие учебники, вы будете изучать плохие и устаревшие методы) и начал изучать основы. Мой разум сошел с ума, и я действительно узнал, что вирус, которым я заражен, вызывая мои проблемы, был написан на c ++, что еще больше заинтересовало меня. Позже я начал читать, изучать ассемблер и другие языки высокого уровня. Сначала я захотел узнать о вредоносных программах и графическом программировании, и я это сделал.

  1. Это может звучать плохо, но многие люди моего возраста на самом деле заинтересованы в деструктивной стороне программирования. Первый вопрос, который я получаю от своих друзей, когда я говорю им, что с c ++ я неплохо справляюсь: «Можете ли вы создавать вирусы, менять классы или взламывать игры», я не совсем на этом уровне ... хотя я недавно изучал инъекцию dll, поэтому я получаю там. Возможно, вы могли бы придумать что-то похожее на вредоносное ПО, которое не опасно или незаконно, но все же интересно. (Может быть, получить регистрационную информацию ученика со школьного сервера) Вы можете поговорить с ними о том, как работают вирусы и вредоносные программы.
  2. Разработайте небольшую игру в духе покемонов и опишите им, как работают игры и игровые движки. Многие люди, вероятно, были бы удивлены, узнав, что во многих 2D играх, подобных этой, персонаж на самом деле не движется, задний план и персонаж просто используют анимацию, говорят о случайных числах и т. Д. Придумайте несколько 3D-демонстраций тоже.
  3. Попытайтесь избежать объяснения того, что делает код , попробуйте рассказать им, что программаСам не говорит о коде слишком много. По моему опыту, это простой способ потерять внимание людей, особенно если они не понимают основ языка. На самом деле, я бы постарался не размещать исходный код целиком, потому что кому-то было бы довольно обескураживающе смотреть на 500 строк кода и ничего не понимать. Также, если у вас есть кто-то, кого вы демонстрируете на это, похожий на меня, они, вероятно, зададут цепочку вопросов, потому что у них любопытный ум. То есть: вы говорите о случайных числах, они спрашивают, для чего предназначены случайные числа и откуда они берутся ... чем вы должны объяснить им электронный шум и его случайность и все такое, чем вы, вероятно, окажетесь в ситуации, когда вы просто как "я не знаю".
  4. Lego Mindstorms - отличная идея. Если вы не хотите идти по длинному маршруту и ​​использовать основной язык, он поставляется с языком программирования блочного стиля, который вы можете использовать. Я разобрался с языком примерно через 30-40 минут, все выстраивается, когда вы об этом думаете

  5. Вы можете быстро разработать приложение и показать его, поговорить с ними о $$, который может прийти от разработки приложения.


4

некоторые из моих любимых

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

  • Lego робототехника (или другие комплекты робототехники, например, штамп ). mindstorms - это игрушка, но она может быть очень продвинутой, служащей ощутимой демонстрацией абстрактных понятий. программное обеспечение, которое может быть запущено на них, может быть очень сложным, и у них могут быть сложные циклы / алгоритмы, основанные на чувственном мышлении и действии. Есть много хороших книг конструкций. Также впечатляют решатели кубов Рубика , недавно побившие мировой рекорд.

  • raspberry pi - это новая недорогая платформа, которая вызывает большой интерес и использование. он может быть использован для демонстрации программирования на Linux, робототехники и т. д., имеет выход HD и т. д., см., например, суперкомпьютер Southhampton raspberry pi со стойкой Lego.

  • Логотип, как упомянуто в другом ответе, является старой классикой. Другим новым аспектом является программирование игр, например, с появлением нового популярного языка Scratch (изобретенного в MIT ). это может преподавать много естественных / продвинутых тем CS.


2

вот другой угол. Есть так много интересных открытых проблем или появляющихся технологий в области компьютерных наук на границах научного понимания, которые могут вызвать любопытство / удивление, то есть исследование близлежащей Terra Incognita. . если вы поднимаете проблемы и затем предлагаете классу участвовать в дискуссии о последствиях решений, это может вызвать значительный интерес / вдохновение. [поскольку вы упомянули о наличии компьютерной лаборатории, можно было бы творчески разработать некоторые практические компьютерные упражнения, связанные с этими областями.]

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

  • Проблема сворачивания ДНК в белок . Есть ли алгоритм для его точного расчета?

  • искусственный интеллект в целом. Является ли это возможным? есть этика?

  • робототехника имеет различные ключевые новые области. например, автономные автомобили / вождение . это на ближайшем горизонте. как это повлияет на общество? видео конкурса DARPA не так давно впечатляет. Письмо Курцвейла имеет много вещей, чтобы войти в. беспилотные летательные аппараты - сложная тема, редко обсуждаемая открыто и все чаще используемая внутри страны. что марсоходы необыкновенные технологии и есть удивительные истории , стоящие за ней, например, как системы должны были быть отлажены дистанционно interplanetarily , когда им не удалось.

  • В последнее время в новостях широко используются информационные системы для обнаружения преступлений / терроризма.

  • бозон Хиггса не мог быть обнаружен, и суперколлайдер вообще не может функционировать без больших систем на основе CS для анализа «больших данных».

  • Закон Мура . как далеко это будет продолжаться? насколько это уже повлияло на общество / человечество?

  • Квантовые компьютеры . они возможны? они будут быстрее? они будут дешевыми или всегда непривлекательными? Dwave - это яркий пример, есть замечательная статья Ааронсона о SciAm и т. Д.

  • Алгоритм Google PageRank является одним из многомиллиардных чудес современной компьютерной науки. это будет продлено? как работает фильтрация спама? похоже, что компания движется к анализу изображений и т. д.

  • Алгоритмическая / высокочастотная торговля теперь перемещает огромное количество объема / ценности торговли. это хорошо / плохо? это увеличивается / уменьшается? будет ли это регулироваться в будущем? какого рода вычислительная гонка вооружений участвует?

  • Суперкомпьютеры огромны, решают удивительные проблемы и становятся больше. Есть ли ограничения? что они вычисляют и что они будут вычислять в будущем? в некотором роде , большие данные и анализ данных .

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


2

У меня есть предположение, что

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

Мы проводили небольшие семинары с учениками старших классов по поводу тральщика . Семинар будет примерно такой:

  1. Давайте немного поиграем в игру (большинство это знают).

  2. Что мы только что сделали? Какую проблему мы пытаемся решить? Можем ли мы сформулировать общие правила?

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

  3. Выставлять проблемы с правилами.

    На данный момент, вы хотите представить симулятор Minesweeper . Тот, что Bayer, Snyder и Chouiery, не идеален, но позволяет демонстрировать тщательно разработанные сценарии.

  4. Улучшите набор правил, чтобы охватить больше сценариев.

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

  5. Обратите внимание на ограничения.

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

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

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


1

у вас есть много дел ... но одна вещь, которая может показаться настолько привлекательной, что вы хотите получить деньги, представьте вопрос "P ≠ NP" и приз за семь тысячелетий, когда я учился в средней школе, я читал об этом, хотя не знал обозначений, единственное, что я понимаю: тут большой приз и вопрос! другие вещи представляли бы связь математики и информатики, такую ​​как: решение уравнений, проверка решений с использованием компьютеров.

другие вещи, которые я бы предложил, это представить Алана Тьюринга «отца информатики» и рассказать его историю. последнее, что я предлагаю, это нулевые доказательства знаний и игра "где Уолдо?" и играть без обмана и криптографии и кибератак.


-2

Делайте что-нибудь с Facebook, им это нравится. Может быть, это трудно для начинающих, но вы не могли бы позволить им нарисовать графики подключений, которые показывают, как их профили связаны друг с другом. Я бы порекомендовал Javascript в качестве языка программирования.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.