От основ Python до игрового бота с искусственным интеллектом всего за несколько недель
Важность любознательного обучения и расширения возможностей учащихся
*** Моя предыдущая статья следует за этой в хронологическом порядке и посвящена моему школьному опыту разработки продуктов, в то время как эта размышляет о моем первоначальном изучении CS и чувстве расширения возможностей, которое оно дало мне.
Мое лето после 10 класса было эпическим! Это был мой последний раз в Кэмп-Рама в Калифорнии в качестве туриста, поэтому мы с друзьями постарались максимально использовать каждый момент. Мы вдесятером просидели на одной койке уже шесть лет, и мы поклялись сделать наш год «Махон» (самая старшая возрастная группа в Кэмп-Рама) самым лучшим. Мы не ложились спать после комендантского часа каждую ночь, гуляя и наблюдая за звездами, совершали потрясающие пешие походы и слишком увлеклись нашими турнирами по фрисби-гольфу. Никогда не было скучно.
Этот невероятный летний опыт сделал возвращение в школу довольно сложным. Первые несколько недель в 11-м классе я изо всех сил пытался приспособиться к моему новому расписанию из восьми курсов, помимо подготовки к стандартным тестам и внеклассным занятиям. Когда я полностью провалил свою первую викторину по информатике по основным операторам и ключевым словам Python, я понял, что мне нужно выйти из летнего режима.
Я был взволнован тем, что впервые пошел на курс компьютерных наук, но еще ни разу в жизни не ошибался и чувствовал себя крайне сдержанно. Я сомневался, стоит ли мне вообще продолжать курс.
К счастью, мои родители и другие наставники убедили меня не сдаваться.
Оглядываясь назад, я понимаю, что это было одно из лучших и самых важных решений, которые я принял за всю свою жизнь; и это научило меня гораздо большему, чем просто важности настойчивости. Вот почему:
В течение следующих 20 недель скорость и сложность занятий росли в геометрической прогрессии, но рос и мой интерес к материалу. Я был особенно очарован вычислительным мышлением, которое было укоренено в курсе. Мне также очень понравилось время, которое я проводил, превращая свои английские решения в исполняемый код Python, который мог бы использовать непостижимую вычислительную мощность, которой обладают современные машины.
Меня позабавили кажущиеся элементарными проекты «введения в CS», которые я выполнил, начиная от игры «камень, ножницы, бумага» из командной строки и заканчивая калькулятором возраста домашних животных. Мысль о том, что у меня есть инструменты и знания для взаимодействия с компьютером и программного создания чего-то с нуля, была ошеломляющей для 16-летнего подростка.
Последующие проекты не только переплели различные новые программные концепции (функции, циклы, файловый ввод-вывод, рекурсия и объекты), которые мы изучили, но и углубили мое понимание того, как технология в целом функционирует в современном мире. Чтобы выделить несколько:
- Наш класс провел тщательный анализ эффективности различных методов сортировки (пузырьковая, вставка, Python и выбор), которые широко используются в современном программном обеспечении.
- Мы создали игру из командной строки, представляющую Игру в палочки, и дополнили ее самообучающимся, слабым компонентом ИИ, который никто в классе не смог взломать (нажмите здесь, если хотите посмотреть 20-минутную демонстрацию моего кода).
- Каждый студент создал разные настольные игры, используя Pygame, конструктор графического пользовательского интерфейса на основе Python. Я, конечно же, выбрал Connect4, мой фаворит детства.
- Сочетая еврейский характер школы с программным аспектом нашего курса, каждый из нас создал инструмент для расчета различных еврейских молитвенных часов дня. Используя API-интерфейсы местоположения и погоды (для времени восхода и заката), а также математические корректировки, проиллюстрированные в еврейском законе, мы разработали то, что каждый из нас мог бы получать ежедневно!
Примечание. Благодаря этим проектам я понял интересную кривую обучения Python. Язык очень удобочитаемый, «легкий» для понимания и простой для интеграции, если у вас есть четкое понимание основных вычислительных концепций. Однако удивительная часть (или фактическая кривая обучения) связана с обширным сообществом открытого исходного кода. Существует бесконечное количество пакетов Python, которые используются для различных целей, от веб-разработки и машинного обучения до создания игр и математического анализа. По сути, из-за этого невозможно «освоить» Python, и это одна из причин, по которой я так люблю этот язык.
Вернемся к моей истории…
По мере приближения окончания курса нам дали указание подготовиться к масштабному заключительному проекту. Я был очень взволнован, чтобы создать что-то потрясающее со всеми различными инструментами и концепциями, которые я изучил.
В то время в обществе становились все более популярными идеи искусственного интеллекта и машинного обучения. Я знал, что хочу включить аспект искусственного интеллекта в свой краеугольный камень; и кроме того, после последних нескольких месяцев на этом курсе «Введение в Python» я почувствовал, что могу делать что угодно с информатикой.
Мое проектное предложение по созданию бота для игры в шахматы было справедливо подвергнуто сомнению как слишком амбициозное. Огромное количество потенциальных ходов в шахматах усложняет разработку алгоритмов достаточно продуктивного игрока. Вместо этого я решил создать три разные игры (Checkers, Othello, Connect4) с режимами «человек против человека» и «человек против ИИ». В режиме AI также было 3 уровня сложности для каждой игры. Это была моя ценность:
Добро пожаловать в CGS (сокращение от Capstone Game Suite)!!! Здесь вы найдете удивительный опыт, в котором вы сможете пережить свое детство, играя в веселые настольные игры в виртуальной среде. Забудьте о беспорядке этих неуклюжих картонных коробок, в которых поставляются настольные игры, и создайте учетную запись на сервере CGS, чтобы начать! В настоящее время доступны такие игры, как Othello, Connect4 и традиционные шашки. Вы можете либо найти друга для игры и использовать режим «Человек» по умолчанию, либо проверить свои навыки и сразиться с компьютером, переключившись в режим «ИИ»! Остерегайтесь, он действует быстро и чрезвычайно умен из-за методов искусственного интеллекта, включенных в процесс принятия решений. Кроме того, чем выше уровень сложности, который вы выберете, тем больше времени потребуется компьютеру, чтобы сделать ход, и тем больше приложение будет разряжать аккумулятор вашего компьютера. Переходите на уровень сложности 3 на свой страх и риск :). Устали играть весь день, но хотите продолжить завтра с того места, на котором остановились? Не бойтесь, CGS автоматически сохраняет вашу игру в вашем профиле, когда вы выходите. Просто не переключайте режимы игры, так как это приведет к сбросу вашего прогресса. Ваша учетная запись также сохраняет ваши игровые записи, когда вы играете против друга или компьютера. Я надеюсь, вам понравится заново переживать свое детство с помощью этих игр, и что они пробудят интерес к чудесам информатики и искусственного интеллекта/принятия решений.
Во втором семестре моего первого года обучения у меня была привычка ложиться спать с компьютером и работать над этим завершающим проектом в течение часа каждую ночь. Я надевал свои наушники Bose и полностью погрузился в свой код Python, играя под Grateful Dead. Через несколько недель после начала семестра я уже потерял счет количеству случайных ночей, которые я вытащил. Скажем так, создавать алгоритмы для интеллектуальных ботов ваших любимых детских игр в 11-м классе чертовски круто и очень весело. Как я мог не увлечься?!
Если серьезно, поработав разработчиком программного обеспечения в израильском стартапе и создав свой собственный некоммерческий веб-сайт (подробнее об этих темах…), я могу с уверенностью сказать, что работа над этим завершающим игровым проектом многому меня научила.
С точки зрения программирования наиболее важными вещами, которые я изучил, были:
- Как использовать сообщества с открытым исходным кодом для повышения эффективности разработки. Мой проект сильно зависел от внешних пакетов (как и все современное программное обеспечение). Я использовал gspread (оболочку Python для API Google Sheets) для поддержки удаленной базы данных пользовательских данных и, конечно же, Pygame для фактического пользовательского интерфейса.
- Когда пришло время интегрировать режим «Человек против ИИ» для трех игр, я глубоко погрузился в минимаксный алгоритм и сокращение альфа-бета. Я хотел привыкнуть к этим концепциям, чтобы использовать их идеи для реализации собственного решения. Я потратил достаточно времени на планирование своих алгоритмов на бумаге, прежде чем перевести их на Python.
В дополнение к навыкам, связанным с кодированием, я также получил представление о том, что на самом деле означает разработка продукта:
- В классе мы изучили различные навыки, включая шаблоны проектирования (чаще всего Model-View-Control), которые мы могли использовать для структурирования наших проектов, лучшие практики для документации и различные методы тестирования качества нашего кода (белый и черный ящик, положительный и отрицательный).
- Я также воспользовался открытостью проекта, чтобы улучшить свои мягкие навыки установления личных сроков и перерывов во время разработки проекта, чтобы отражать и переоценивать цели и приоритеты.
Этот проект научил меня многому интересному. Да, я создал несколько потрясающих игр, расширяя свои знания в CS. Да, у меня большой опыт разработки продуктов и инструментов, применимых в реальном мире. Да, я научился концепциям искусственного интеллекта высокого уровня, которые большинство студентов даже не изучают. Я мог бы бесконечно рассказывать о том, каким невероятным был этот первый год работы с Python, но есть один центральный момент, который превыше всего.
Прелесть всего этого заключалась в том, насколько полномочием я себя чувствовал после первого года обучения в старшей школе. С тремя старшими братьями и сестрами, которые все закончили престижные университеты и работали на впечатляющих должностях, и в конкурентной академической среде, в которой я вырос, это чувство было немаловажным. Я нашел навык/язык, в котором якобы хорошо разбирался, любил делать и мог быть использован для совершения невероятных вещей! Мне всего 16 лет, и я чувствую, что могу делать что угодно с CS после менее чем года обучения, этого было достаточно, чтобы убедить меня, что это мой путь.
В продолжение сообщения из моей последней статьи — вот о чем должно быть образование: опыт и полномочия должны преобладать над знаниями и запоминанием. Представьте, как выглядело бы наше общество, если бы больше людей вдохновлялись и мотивировались десятками лет своего образования!
Разве мне не повезло, что родители предложили остаться в классе после первой проваленной контрольной? Ни один из нас сейчас не читал бы это, если бы не они.
Если серьезно, я так благодарен за курс CS для 11-го класса, который подтолкнул меня к невероятному последующему опыту с технологиями и инновациями. Мое любознательное обучение в дополнение к стилю курса, основанному на проектах, способствовало огромному количеству расширений возможностей, и я надеюсь, что в какой бы области вы ни работали или ни учились, вы сможете найти способы ощутить те же самые расширения возможностей. , потому что это действительно меняет жизнь.