От основ Python до игрового бота с искусственным интеллектом всего за несколько недель

Важность любознательного обучения и расширения возможностей учащихся

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

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

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

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

К счастью, мои родители и другие наставники убедили меня не сдаваться.

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

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

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

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

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

  • Каждый студент создал разные настольные игры, используя 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-м классе чертовски круто и очень весело. Как я мог не увлечься?!

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

С точки зрения программирования наиболее важными вещами, которые я изучил, были:

  1. Как использовать сообщества с открытым исходным кодом для повышения эффективности разработки. Мой проект сильно зависел от внешних пакетов (как и все современное программное обеспечение). Я использовал gspread (оболочку Python для API Google Sheets) для поддержки удаленной базы данных пользовательских данных и, конечно же, Pygame для фактического пользовательского интерфейса.
  2. Когда пришло время интегрировать режим «Человек против ИИ» для трех игр, я глубоко погрузился в минимаксный алгоритм и сокращение альфа-бета. Я хотел привыкнуть к этим концепциям, чтобы использовать их идеи для реализации собственного решения. Я потратил достаточно времени на планирование своих алгоритмов на бумаге, прежде чем перевести их на Python.

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

  1. В классе мы изучили различные навыки, включая шаблоны проектирования (чаще всего Model-View-Control), которые мы могли использовать для структурирования наших проектов, лучшие практики для документации и различные методы тестирования качества нашего кода (белый и черный ящик, положительный и отрицательный).
  2. Я также воспользовался открытостью проекта, чтобы улучшить свои мягкие навыки установления личных сроков и перерывов во время разработки проекта, чтобы отражать и переоценивать цели и приоритеты.

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

Прелесть всего этого заключалась в том, насколько полномочием я себя чувствовал после первого года обучения в старшей школе. С тремя старшими братьями и сестрами, которые все закончили престижные университеты и работали на впечатляющих должностях, и в конкурентной академической среде, в которой я вырос, это чувство было немаловажным. Я нашел навык/язык, в котором якобы хорошо разбирался, любил делать и мог быть использован для совершения невероятных вещей! Мне всего 16 лет, и я чувствую, что могу делать что угодно с CS после менее чем года обучения, этого было достаточно, чтобы убедить меня, что это мой путь.

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

Разве мне не повезло, что родители предложили остаться в классе после первой проваленной контрольной? Ни один из нас сейчас не читал бы это, если бы не они.

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