Это случилось однажды вечером, когда жена уложила спать младшего и сама уже почти уснула. А у меня, как дети идут спать, открывается второе дыхание. Я аккуратно, чтобы не разбудить ребенка, прилег к ней, и тихонько прошептал на ушко:
— А ты могла бы мне… сделать дизайн… календарика.
— Могла бы, но почему календарика?
Она дизайнер, но в декрете, и поэтому давненько не практиковала. А тут маленькая задачка. Чего бы, думаю, не подсунуть её ей.
— Ну как, почему, - говорю я, - мне для проектов часто нужен календарик. Одно дело, когда нужно просто дату выбрать. Таких много удобных. А вот когда нужен календарик с выбором времени, то тут начинается тоска. Я перебрал десятки проектов, и везде неудобно выбирать время. Где-то надо скроллить, где-то длиннющие селекты выпадают, где-то ползунки. Где-то стрелочки как на механических часах. Не нашел я такого календарика, чтобы просто кликами, без скроллов и прочей прокрастинации выбрать нужное время. Надо придумать нормальный дизайн.
— А… Ну да, интересно, я подумаю - сказала она и продолжила думать уже в хорошем сладком сне.
Так я и остался на этот вечер без общества жены.
Коллега недавно мне советовал присмотреться к Claude. Мол, для кодинга хорошо помогает. А почему бы и нет, - подумал я и обратился к собеседнику, который никогда не спит, то есть к ИИ. Я попросил Claude в чатике нарисовать мне такой календарик. Бездушная машина на минуту задумалась и выдала мне не просто картинку, а работающий прототип календарика.



Неплохо. Пара кликов и время выбрано. Эту идею можно дальше немного развить. Этим я и занялся. Я не люблю (умею, но не люблю) ни JS ни CSS. А тут все вместе. К счастью, у Claude есть консольный интерфейс (Anthropic), с ним очень удобно работать, когда надо делать много итераций и совместно с ИИ править код. Зарегался, пополнил баланс и начал пробовать.

Тут я уточню, что работал с моделью Claude 3.7 Sonnet.
Меня удивило, как ИИ хорошо понимает задания, которые я ему формулировал на простом крестьянском языке. Я бы сказал, что он понимает лучше, чем человек. Делает то, что просишь его, и добавляет полезные детали сразу, не ждет пока его отдельно попросишь об этом. Это создает вау эффект.
ИИ лихо набрасывает код, который сразу оказывается рабочим. Ловко. Предлагает мне проверить изменения. Я не особо люблю JS и проверять за ИИ особенно не хотелось. Поэтому аппрувнул не глядя.
Так я сделал штук 10-20 итераций, прося добавить новые фичи и подправить баги.
Мы начали душа в душу, но ближе к финалу я осознал что случилось, когда увидел 2000+ строк кода. Часть кода солидно дублировалась. Часть не использовалась. Часть была написана безнадежно неверно. Баги, которые я просил поправить, ИИ подправлял, но допускал новые баги. Ну прям как веселый джун. Порой у него случалось просветление и он сообщал мне, что решил переписать несколько функций. Но результат переписывания получался снова неважным. Я тут понял, что мы подошли к пределу, который ему становится не по плечу.
Началось то, чего меньше всего хотелось, но для эксперимента надо. Я начал править сгенеренный код, чтобы убрать те куски кода, которые были явно лишние или странные. В итоге я подправил те баги, которые не осилил ИИ.
После этого стало чуть легче работать и ИИ. Попросил добавить поддержку мультиязычности - пожалуйста. Добавить темную тему - без проблем. На эти эксперименты я истратил в итоге три вечера.
Что получилось в итоге. Вот такой вариант я показал жене прежде, чем она нарисовала прототип. Тут время выбирается в 2 клика и при этом интерфейс не особо перегружен.


Но если нужно выбрать минуты с точностью не до 5 минут, а до 1 минуты, то показывать 60 кнопок для минут, это многовато, поэтому в таком случае меняем число кнопок на число кликов, то есть даем выбрать время не в 2, а в 3 клика.

Для особо пунктуальных мы с ИИ предусмотрели вариант и с выбором секунд.
Но это не всё. Не каждому хочется накликивать. Поэтому тут пришлось заморочиться с удобным вводом с клавиатуры.
Еще важный момент. В разных странах привычны разные форматы дат. Пришлось добавить поддержку разнообразных форматов дат. А помимо них и поддержку разных временных зон.
Результат можно посмотреть и покликать, вот, пожалуйста. Сам код календарика я выложил на Github. На мой взгляд, вполне достойный результат получился, особенно учитывая, что 90% кода тут от ИИ.
А что насчет финансовых затрат? На все запросы к Anthropic ушло около $50.
Куда я встроил этот календарик. Пока в 2 проекта. Первый я тоже сделал с помощью ИИ. Это страничка, которой я пользуюсь часто для перевода UNIX таймстемпов в человеческое время и обратно. Например, запросил в браузере ответ от API, а там UNIX timestamp. Сходу не понятно, что это за время. Преобразую на этой страничке в человеческое время в своей или в другой таймзоне. А чтобы понять, какой таймстемп надо передать в апи для фильтрации данных, делаю обратное преобразование.

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

Какие возникли мысли в процессе.
Мне понравилось работать через консольный интерфейс Anthropic. Помощь от ИИ в таком виде получается гораздо более значимая, чем в варианте плагинов к IDE, которые в основном помогают с автодополнением и небольшими кусочками кода.
Код за ИИ надо проверять на каждом шаге. И коммитить каждый успешный шаг. Если понимаешь, что код не так хорош, то лучше сразу с этим разобраться. Если код получился непонятным, то вероятно, он и делает не совсем то, что ты ожидаешь. С этим лучше сразу разобраться прежде, чем двинуться дальше.
ИИ уже сейчас хорошо помогает в написании кода. А что будет дальше…
Программисты все еще нужны. И будут нужны. И квалификация программистов должна быть еще выше. ИИ это как толковый джун. А чтобы получать от него то, что требуется, нужно четко формулировать задачи, и четко понимать, что он напрограммировал.
ИИ тяжело работать с большими кусками кода. Поэтому надо думать как декомпозировать код для ИИ. Наверное, лучше раскладывать логику по папкам и ставить ИИ задачи по доработке кода в конкретных папках. И в целом назревает потребность в создании концепции ИИ ориентированного программирования.
/') |,\__/|
( ( _| o o|._ Мяу
--------)))---)))--------