В процессе разработки пет-проекта возникла необходимость слабать простенькую web-морду для железки на базе микро-контроллера. Причем «простенькую» – это не фигура речи, задача реально элементарная, для школьника (см. ниже).
А так как на вебню у меня стойкая аллергия с риском летального исхода, то решил поручить я это дело искусственному идиоту от гитхаба. Выбрал его потому что по логике он должен быть максимально натренирован именно под задачи кодинга, а не, скажем, психоанализа (как некоторые другие).
Так вот, задача. Сделать html-страницу с двумя выпадающими полями выбора даты/времени (начало и окончание временного отрезка, только прошедшее время, минимальная разница – одна минута); кнопками «вперед» и «назад», которые синхронно изменяют содержимое полей даты/времени на заданное константой смещение; чекбокс, который блокирует обе кнопки и второе поле выбора даты, предварительно записав в него текущее время. По возможности без внешних фреймворков.
ИИ бодро выкатил мне первый вариант кода, в котором поля ввода даты/времени были браузерозависимыми, страшными, и крайне неудобными. Разрешил взять каку-нибудь легкую либу для пикеров. Он решил использовать flatpickr, я не возражал, т.к. в сортах джаваскриптовых фекалий все равно не разбираюсь.
Второй вариант кода внешне был презентабельнее, но скриптовые действия не работали вообще: можно было выбрать будущее, минимальный интервал не соблюдался, чекбокс ничего не отключал и т.д.
Указал ему на ошибки. ИИ с неуместной радостью в стиле «как хорошо что ты подметил недочеты», выкатывает мне третий вариант кода, где почти ничего не меняется. Кнопки и второй пикер по-прежнему не блокируются, с ограничениями по датам творится вообще полная фигня (поведение пикеров совершенно неадекватное).
Снова указываю на ошибки, четвертый вариант. Неадекватность пикеров вроде починил, кнопки и второй пикер по-прежнему не блокируются при установке чекбокса. Снова указываю на проблемы.
Пятый вариант. Кнопки блокируются, пикер все еще нет. И сломал ограничения на прошедшее время (снова можно выбрать что угодно). Пытаюсь объяснять ему уже не как человеку, а перехожу на псевдокод, что-то среднее между человеческими предложениями и языком программирования. Начинаю понимать, что уже по факту сам пишу логику, пусть пока и на птичьем языке.
Шестой вариант. Ограничания по датам починил, кнопки блокируются, второй пикер, мать его за ногу, не блокируется! Указываю на это. Долго думает. Очень долго. Так долго, что появляется желтая плашка с текстом «something wrong, try again». Засылаю запрос еще трижды. Наконец выдает мне ответ, что все должно работать, смотри внимательнее.
На этой ноте я решил вдуматься, что же там написано, и очень быстро нашел причину.
Этот долбень пытался отключить свой flatpickr путем вызова метода .set(«disable», true), который вообще не для этого. Он предназначен для блокировки интервала дат в выпадающем окне, и вторым вариантом ожидает массив дат для блокировки, а от true при выполнении этого вызова он бросает исключение и последующие строки за этим .set() тоже не выполняются.
Кроме того, в ходе анализа кода обнаружил, что кнопка «вперед» игнорирует ограничение на будущее время и весело инкрементит даты хоть на год вперед.
Сам код крайне корявый, много копипасты. Например, формат даты «Y.m.d H:i» в коде встречается десяток раз, но в константу так и не вынесен. Работа с датами – дикая лапша, но тут скорее вина ущербного жаба-скрипта, не имеющего в своем составе даже самых элементарных методов обработки даты и времени.
Итого. Он сам выбрал библиотеку, сработать с которой корректно не смог. Плюс игнор ТЗ на начальных этапах. Плюс регулярные регрессии в процессе доработки. Плюс не обработал граничные случаи.
Все это сильно напоминает новичка-раздолбая, с которым объяснять/проверять/тыкать_носом приходится дольше, чем сделать самому.
В итоге почти весь код все равно пришлось переписать, оставив от ИИ только шаблон html/css и инициализирующий код. Однако надо отдать должное, страница выглядит нормально, и, вероятно, в html/css он не натворил такого ада как в скриптах, хотя в этом деле для объективной оценки моей квалификации явно не достаточно.
Вот такие пироги. Ладно, он про антенны и волны нихрена не знает, это меня не удивило в свое время, все-таки нишевая область знаний. Но чтобы в самом попсовом ИТ-направлении так лажать, я, честно говоря, не ожидал. Так что пока сабж.