В начале осени я поставил себе небольшую задачу - изучить, как правильно работать с Cursor и собрать продакшен реди приложение для автоматизации своей рутины. МВ начале осени я поставил себе небольшую задачу - изучить, как правильно работать с Cursor и собрать продакшен реди приложение для автоматизации своей рутины. М

Опыт написания production-ready приложения с помощью ИИ

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

r9feojouen-wakd9ekeongc1ky4.jpeg

Что пишем: постановка приложения

Я решил собрать TO_DO органайзер с триггерной логикой по таймеру для MacOS на SwiftUI - т.е. десктоп приложение на нативном языке для Макоси. Работу я решил вести в двух IDE - cursor для написания кода и XCODE для отладки и дебаггинга приложения.

Вся логика приложения уместилась в 32 тест-кейсах того, как оно должно работать. Т.е. 3 основных экрана, контекстное меню с командами и хоткеями, страница об авторе и внутренние триггеры бизнес-логики по таймерам.

Создание скелетона приложения

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

В классической схеме вы можете:

  • Открыть на Youtube Fast Track видер на пару часов и повторяя его, построить базовый скелетон приложения.

  • Стянуть какой-то скелетон из гитхаба и запустить его, а потом вникать, что он делает и как оно работает.

  • Пройти какой-то туториал из документации фреймворка.

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

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

Как итог: тут экономия времени получилась какая-то колоссальная. Хотя я и потерял сильно много в понимании, того как работает этот фреймворк.

Натягивание дизайна на приложение

Я решил пойти максимально стартаперским путем, я сфотографировал кружку, которая стояла на столе и попросил cursor применить цвета с изображения для создания базового дизайна. И на мое удивление, получилось чертовски здорово. Вот это прямо какая-то магия.

И кружка превращается в стильное приложение!
И кружка превращается в стильное приложение!

Однако, уже при просьбе сделать приложение в стиле Liquid Glass, я столкнулся с тем, что оно нифига нормально не делает и тупит. В итоге, спустя 3 часа, я плюнул на попытке ИИ сделать, что мне нужно и уже в ручном режиме прописал все материалы и стили приложения.

Как итог: тут получилась интересная ситуация, что с одной стороны - оно сделала большую работу по созданию дизайн-системы и натягивании её на приложение, а вот уже точечные правки оно не вывезло и я перешел в ручной режим.

Бизнес логика приложения

Я описал механизм по которому задачи в зависимости от времени создания и времени обновления должны двигаться по флоу и таймерам. Все это сделал в стиле классических тест-кейсов по шагам.

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

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

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

Архитектура и линтеры

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

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

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

Как итог: с самого начала душите ИИшку правилами и заставляйте её прогонять линтеры самостоятельно, ибо потом оно может все поломать и вы потратите много времени, чтобы все исправить и восстановить оригинальное поведение.

Написание тестов

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

Условно проверялся текущий стейт, а ни бизнес-логика приложения с учетом ожидаемого поведения (flow-диаграмма). Но нужно отметить, что когда я стал закидывать тест-кейсы, оно по ним построило неплохо тесты.

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

Создание ассетов

Тут меня позабавило, что для того, чтобы подготовить папку с иконками разных форматов, ИИшка получив от меня оригинальное изображение, написала здоровенный скрипт на Python, а потом попросило меня исполнить этот скрипт локально на компе, а после чего удалила этот скрипт и временную папку, а результат положила в нужную мне папку. Результат меня устроил.

А вот с иконками контекстного меню ИИшка запуталась, начала подгружать различные пакеты, которые не подходили. В итоге спустя 10 запросов, я попросил Grok сказать, как надо, закинул этот ответ в cursor и ИИшка уже отдала мне работающий вариант.

Чек-лист и билды

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

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

И как итог, спустя 15 дней работы, я получил продакшен реди приложение под MacOS!


Остался ли я доволен процессом разработки с ИИ

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

2) Мне понравилось, как ИИшка справилась с базовым дизайном, вот при работе с точечными изменениями - оно входило в ступор, и не могло сделать то, что я хотел. И мне приходилось уже тыкать её носом.

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

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

5) С тестами система снимает ручную работу, но тест-дизайн и необходимость тех или иных тестов - все же остается на стороне разработчика. Тут оно само не вывозит.

6) Сопутствующая обвязка - я думаю, оно справилось.

7) Что мне не понравилось больше всего - я объективно хуже знаю проект и не так хорошо в нем ориентируюсь, а значит большая часть работы скатывается к такому manual QA по тест-кейсам, чтобы убедиться, что приложение работает.

8) Мне не понравилось, как ИИшка расфигачивает приложение, после любых каких-то существенных правок, что потом либо откатывать и двигаться маленькими шагами, либо потом его править.

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

Что касается экономии времени - спорный момент, и скорее нет, чем да. Поэтому расслабляем булки, программистов ИИ пока не заменит, но как инструмент - штука интересная.

Источник

Возможности рынка
Логотип READY
READY Курс (READY)
$0.012842
$0.012842$0.012842
+5.60%
USD
График цены READY (READY) в реальном времени
Отказ от ответственности: Статьи, размещенные на этом веб-сайте, взяты из общедоступных источников и предоставляются исключительно в информационных целях. Они не обязательно отражают точку зрения MEXC. Все права принадлежат первоисточникам. Если вы считаете, что какой-либо контент нарушает права третьих лиц, пожалуйста, обратитесь по адресу service@support.mexc.com для его удаления. MEXC не дает никаких гарантий в отношении точности, полноты или своевременности контента и не несет ответственности за любые действия, предпринятые на основе предоставленной информации. Контент не является финансовой, юридической или иной профессиональной консультацией и не должен рассматриваться как рекомендация или одобрение со стороны MEXC.