… или что-то еще в этом отношении

Через две недели после моего пребывания в Flatiron School у меня появилась смелая идея создать свою первую программу искусственного интеллекта.

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

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

Первое, что я сделал, это яростно исследовал и прочитал все теории и концепции, которые легли бы в основу моего кода.

Это была моя первая ошибка.

То, что я нашел, было статьями за статьями, в которых подробно описывались Алгоритмы MiniMax, Эвристические оценки, Итеративное углубление и Альфа-бета-обрезка.

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

Это была моя вторая ошибка.

Вскоре после того, как я разочаровался в программировании, не имея реальных знаний о концепциях ИИ, я вспомнил О да, у меня не настроены крестики-нолики…

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

Я думаю, мы все можем догадаться, как это произошло.

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

До меня у меня была полуфункциональная программа CLI Tic-Tac-Toe, в которую могли играть два пользователя, фрагмент кода, который я удалил в отчаянии, потные ладони, слабые колени, тяжелые руки и, если вы еще не поняли , мамины спагетти.

Что же пошло не так?

Ну, честно говоря, много чего сделал. Но самое главное, я не подходил к этому через призму развития как MVP.

Эрик Райс, имя которого я не знал до конца этой недели, определяет минимально жизнеспособный продукт как

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

Цикл Build/Measure/Learn, описанный в The Lean Startup самим Эриком, представляет собой непрерывный процесс, через который проходят разработчики при создании сложных программ. Это основа для создания и последующего улучшения функциональности продуктов посредством цикла создания гипотез, создания небольших образцов, тестирования и получения отзывов от потенциальных клиентов, а также обучения на основе ответов.

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

Самое лучшее в глупости — это бесконечное количество возможностей учиться. Итак, вот несколько ключевых уроков, которые я усвоил о том, как построить что-либо правильно:

  1. Сделайте свою цель конкретной и никогда не упускайте ее из виду

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

2. Ставьте более мелкие цели, которые приведут вас к основной цели «g»

Если бы я помнил первоначальную цель, я бы стремился к тому, чтобы мой MVP мог распечатать сетку 3 x 3 в моей командной строке для крестиков-ноликов и строить оттуда вверх. Таким образом, независимо от временных ограничений, мне было бы что показать за свою работу. Процесс приближения к цели с меньшими задачами также приводит к новым знаниям, которые могут помочь в принятии решений относительно следующей цели.

3.Работайте с кем-нибудь или с резиновой уткой

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

4. Если вы не получите его сегодня, вы получите его завтра.

Перспектива действительно важна. Я новичок, и мне предстоит многому научиться.

Лучше иметь возможность создать что-то работающее, каким бы маленьким оно ни было, чем застрять с огромным куском неработающего кода.

Если у меня не получится сегодня, я могу попробовать еще раз завтра.