В начале нашей третьей недели в Flatiron School нам поручили первый из пяти проектов. Это повлечет за собой создание довольно простого приложения CRUD (создание, чтение, обновление, удаление), которое либо извлекает данные из исходного файла, либо из API где-то в сети, создает, считывает и обновляет какие-то постоянные данные и разрешает их удаление.

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

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

Выглядело вполне разумно. Наверняка существовало несколько хороших API-интерфейсов, содержащих такую ​​информацию, которую я нашел бы полезной в своем приложении.

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

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

Мои проблемы с расстановкой приоритетов начались вскоре после этого.

Примерно на двух третях отсеивания всех автомобилей, предлагаемых Honda (включая полноприводные, гибридные варианты и варианты кузова), я понял, что абсолютно невозможно отсеять все. У нас было четыре дня, чтобы поработать над этим проектом, и в любом случае все это должно было быть сделано в командной строке.

Поэтому мы перешли к созданию приложения для выбора прагматичного автомобиля. Никаких показных люксовых брендов для пользователя — мы будем предлагать вам лучший практичный выбор.

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

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

После того, как мы потратили еще больше времени на борьбу с Github (естественно, мы забыли перенести нашу работу туда до тех пор, пока мы не начали), узнав, что глобальные переменные — ужасный способ сохранить данные постоянными, и попытавшись создать методы, которые действительно использовали бы все атрибуты нашего класса Car, у нас действительно было некоторое подобие продукта ко дню презентации.

То есть, пока мы не вспомнили всю часть «Уничтожить» CRUD, над которой мы работали. Хотя требования этого первого проекта были довольно мягкими, мы все равно хотели завершить спецификации… даже если это было некрасиво.

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

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

Выбор одного из этих вариантов вместо другого привел к очень разным спискам 3 среди Пользователей, которые в остальном выбрали точно такие же желаемые характеристики автомобиля (компактный кроссовер стоимостью от 25 000 до 30 000 долларов с полным приводом).

Я все еще думаю, что это довольно круто.

Приоритеты.

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

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