Я впервые услышал о программе MAGIC (Более активные девушки в вычислениях) от Пи-Чуан Чан и был рад стать частью этой сети замечательных наставников и подопечных со всей страны. Меня подобрали Кайла Б., десятиклассница в Салемской средней школе, Массачусетс, и нам было поручено завершить проект летом 2018 года. Я регулярно информировал Ким Фудзикаву о статусе проекта. Ким была координатором MAGIC летней программы Leap4Ed (центр, который посещала Кайла и другие подопечные).
У Кайлы был небольшой опыт программирования на Scratch, но не было никаких знаний в области компьютерных наук. Мы начали с изучения нескольких важных концепций программирования: переменных, условий и циклов. Мы решили писать код на Python, потому что это популярный и универсальный язык программирования. Наш летний проект состоял в том, чтобы запрограммировать игру Найди это! [Http://www.blueorangegames.com/spotit/], интерактивная игра с простым распознаванием образов, в которой игроку показывают изображения на двух карточках, и он должен найти изображение, общее для этих двух карточек.

Знакомство с проектом
Для нашей реализации игры мы использовали по три символа на каждой карте и попросили игрока указать, какой символ является общим. Мы использовали символы, которые присутствуют почти на каждой клавиатуре, такие как #, $,% и т. Д. Игра «Найди это!» обычно рассчитывается по времени, но мы реализовали его так, чтобы он позволял игроку сыграть в игру пять раз, прежде чем выйти и сообщить игроку свой окончательный счет (количество правильных предположений).
Я написал шаблон Python для обслуживания в качестве стартового кода для работы Kyla. Поскольку летняя программа составляла всего два месяца, нам пришлось учиться во время работы над проектом. Я включил несколько комментариев в свой шаблон, чтобы Кайла могла найти, какие структуры данных я использую. Мы узнали, насколько удобны словари и как использовать «случайную» функцию, которая при заданном диапазоне целых чисел дает нам все целые числа в этом диапазоне с равной вероятностью, поэтому мы каждый раз получаем разные целые числа. Мы также узнали, как важно документировать наш код, чтобы не забыть то, что мы хотели сделать! Фрагмент из шаблона, который я написал:

# “Documentation” is an essential aspect of coding. It explains
# your code so that it is easier for you and others to review 
# your code. “Single-line comments” such as this one use a 
# “# symbol” to indicate that this is a comment. 
# “Multi-line comments” use three double quotes to indicate the 
# start and end of the “comment block”, as you saw in the 
# beginning of this program.
#
# Additionally, each function in Python has a “docstring” 
# associated with it, like you will see in the functions below.
# These docstrings immediately follow the function name and explain
# what the function does, its inputs, if any, and its outputs, 
# if any.
def check_correct(card1, card2, choice):
"""
Given two cards, represented as “tuples” of 3 symbols:
card1 is (x1,y1,z1)
card2 is (x2,y2,z2)
where x1,x2,y1,y2,z1,z2 are symbols
determine if the selection made by the player, the third variable
choice, is the common symbol between the two cards.
Return True if it is and False if it isn’t.
"""
return False

Постоянно учимся
Работаем над «Найди это!» Проект с Кайлой стал для нас обоих полезным опытом. В течение первых нескольких недель мы обсуждали «главную» функцию, которая будет запускать наш код, и я предупредил ее, чтобы она была осторожна с кодом и избегала «бесконечного цикла». Ее следующий вопрос: «Что такое бесконечный цикл?» Объяснить это было проблемой для меня, потому что я так привык использовать эти технические слова в разговоре с другими учеными-компьютерщиками, и они просто кивали головой. Мне приходилось мыслить за пределами моей узкой сферы использования только технических слов, чтобы объяснить то, что я говорю. Я еще раз осознал, почему разнообразие так важно: оно заставляет нас думать с точки зрения другого человека, который думает иначе!
Я также посоветовал Кайле развить некоторые мягкие навыки, такие как ведение заметок для каждой встречи и обдумывание повестки дня для нашей встречи перед самой встречей, чтобы мы могли иметь более структурированный разговор. Мы обсудили различные «функции» в нашем коде и обсудили, какой подход использовать для решения проблемы. Мы разбили проблему кодирования игры на более мелкие задачи, такие как создание двух карт со случайными символами (и одним общим символом), проверка правильности выбора игроком символа и вывод всего на экран компьютера. Фрагмент функции create_two_cards, которую написала Кайла:

def create_two_cards():
"""
Return two cards, each with three random symbols represented as a tuple. The two cards should have only one symbol in common.
NOTE: I used the word ‘random’ to indicate that the random module will be used here.
HINT: Python’s random module has a lot of functions to return random integers but I prefer to use random.randint(). Look up what randint does and if it has any inputs.
"""
variable1= random.randint(0,9)
variable2= random.randint(0,9)
if variable1==variable2:
    variable2=(variable1+random.randint(0,9))%10
variable3= random.randint(0,9)
if variable1==variable3 or variable2==variable3:
    variable3=(variable1+variable2)%10
variable4= random.randint(0,9)
if variable1==variable4:
    variable4=(variable1+random.randint(0,9))%10
variable5= random.randint(0,9)
if variable5== variable1 or variable4== variable5:
    variable5=(variable1+variable4)%10
card1=(symbols_dictionary[variable1],symbols_dictionary[variable2],symbols_dictionary[variable3])
card2=(symbols_dictionary[variable4],symbols_dictionary[variable5],symbols_dictionary[variable1])
return (card1, card2) # This return statement returns two variables as a tuple

Сделано до того, как мы узнали об этом
Два месяца пролетели над нами в мгновение ока! Мы завершили наш код и создали презентацию для всех на Leap4Ed, чтобы продемонстрировать наш проект! Поскольку я был наставником Кайлы удаленно, я не мог присутствовать на презентациях проекта, но присутствовал, чтобы подбодрить ее и помочь с ее слайдами презентации и демонстрацией кода. Кайла и я отрепетировали несколько прогонов презентации перед днем ​​финальной презентации.

Это еще не до свидания
Хотя презентация готова и код готов, я еще не готов прощаться. Мы с Кайлой пообещали поддерживать связь (и делиться своими необычными фотографиями друг с другом). У меня сложилась глубокая связь с Кайлой, и я пообещал, что буду на расстоянии одного телефонного звонка.
Меня попросили представить Кайлу перед ее презентацией, и я написал аннотацию, которой хотел бы поделиться:
«Этим летом мне выпала честь быть наставником MAGIC для Кайлы, умной десятиклассницы Салемской средней. Она любознательна и стремится изучать новые концепции, чтобы улучшить свои навыки. Она не боится экспериментировать с новым инструментом и быстро понимает, над чем ей нужно работать. Кайла интересуется биологией и ее разделами, включая приматологию и ветеринарную судебную экспертизу. Она также занимается спортом и в настоящее время входит в школьную волейбольную команду. Она очень хорошо справляется со всеми этими занятиями и гарантирует, что уделяет каждому достаточно времени. Это был мой первый опыт в качестве наставника MAGIC, и я горжусь своей ученицей Кайлой. Я многому у нее научился во время встреч с наставниками и подопечными, и мне не терпится увидеть, какой путь она выберет. »