У каждого разработчика есть тот самый проект. Который начинается в 2 часа ночи с мысли "а что если...", продолжается энергетиком и тремя пакетами чипсов, а заканчивается в 6 утра осознанием, что ты только что потратил ночь на что-то абсолютно бесполезное. Но при этом невероятно весёлое.
Это история именно такого проекта.
Идея
Всё началось с очередного мучительного код-ревью на работе. Знаете этот момент: открываешь PR, а там 47 файлов, 2000 строк изменений, и ты должен всё это внимательно прочитать и оставить полезные комментарии?
Я сидел, листал этот PR, и подумал: "А что если бы код-ревью работало как Tinder? Свайп вправо, код нравится. Свайп влево, код не нравится. Никаких длинных комментариев. Никаких часовых ревью. Просто быстрая оценка."
Нормальный человек посмеялся бы и продолжил работать. Я открыл Xcode.
Прототип за ночь
Вот что я собрал за одну ночь на SwiftUI (спойлер: получилось кривое, но рабочее).
Концепт простой:
- Приложение показывает случайный сниппет кода
- Ты свайпаешь вправо (хороший код) или влево (плохой код)
- Если свайп влево, можно быстро выбрать причину из списка (нейминг, производительность, читаемость, "что вообще происходит?")
- Статистика собирается в реальном времени
Звучит глупо? Возможно. Но подождите до результатов.
Для MVP я взял несколько реальных сниппетов из открытых GitHub репозиториев. Потом добавил специально плохой код, который я сам когда-то писал (да, у меня есть архив стыда). И несколько примеров из StackOverflow.
Интерфейс был максимально простой. Карточка с кодом в центре экрана. Свайп в стороны. Анимация сердечка при свайпе вправо и черепа при свайпе влево.
К 5 утра у меня был рабочий прототип. Кривой, с хардкодом вместо данных, но рабочий.
Тестирование на живых людях
Утром я скинул приложение трём друзьям-разработчикам. "Попробуйте эту штуку, только не спрашивайте зачем."
Реакция была... неожиданной.
Друг 1 (бэкенд на Python): "Я потратил 40 минут, свайпая код. Зачем ты это сделал? Я ненавижу тебя. Когда будет обновление?"
Друг 2 (фронтенд на React): "Это самый тупой и самый залипательный проект, который я видел. Я нашёл 3 бага в примерах кода, пока свайпал. Это считается как код-ревью?"
Друг 3 (iOS на Swift): "Добавь мультиплеер. Я хочу соревноваться, кто быстрее найдёт плохой код."
Вот это последнее предложение зажгло новый огонь.
Мультиплеер и режим "Баттл"
За следующие выходные я добавил режим, который назвал "Code Battle":
- Два игрока видят один и тот же сниппет
- Оба свайпают
- Если оба свайпнули одинаково, оба получают очки
- Если по-разному, начинается дискуссия
- Быстрый свайп даёт больше очков (но и больше шанс ошибиться)
И вот тут случилось интересное.
Я показал это ещё нескольким людям, и они начали спорить о коде. По-настоящему. Жарко. Со страстью.
"Этот switch нормальный, зачем ты свайпнул влево?!"
"Потому что тут нет default кейса, ты что, хочешь крэш в продакшне?!"
Люди, которые обычно молча аппрувят PR и пишут максимум "LGTM", вдруг начали обсуждать качество кода. Геймификация делала своё дело.
Что я реально узнал
Помимо того, что делать тупые проекты в 2 часа ночи это весело, я вытащил из этого эксперимента несколько серьёзных выводов.
Вывод 1: Люди не любят длинные ревью
Когда код-ревью это "прочитай 2000 строк и напиши комментарии", люди или делают это формально, или откладывают до последнего. Когда это "свайпни 50 сниппетов за 10 минут", люди делают это добровольно. В метро. На обеде. Перед сном.
Формат имеет значение. Тот же контент, поданный по-другому, вызывает совершенно другую реакцию.
Вывод 2: Геймификация работает даже на программистах
Мы, программисты, любим думать, что мы рациональные существа, которые не ведутся на дофаминовые ловушки. Это неправда. Дайте нам таблицу лидеров и счётчик стрика, и мы будем свайпать код до 3 часов ночи.
Вывод 3: Контекст это всё
Один из самых частых споров был: "Этот код плохой? Зависит от контекста." И это правда. Сниппет из прототипа оценивается иначе, чем сниппет из банковского приложения.
Я добавил метки контекста (прототип / продакшн / обучение), и это сильно изменило результаты свайпов.
Вывод 4: Побочные проекты не обязаны быть полезными
Это, наверное, самый важный вывод. Я начал этот проект как шутку. Он не приносит денег. Он не впечатлит работодателя (хотя, может, и впечатлит, кто знает). Он не решает глобальную проблему.
Но он научил меня:
- Работать с SwiftUI анимациями и жестами
- Делать мультиплеер через WebSocket
- Проектировать геймификацию
- Собирать и анализировать данные о поведении пользователей
- Запускать MVP за сутки
Всё это применимо в реальных проектах. Технические навыки, полученные на дурацком проекте, ничем не хуже навыков, полученных на серьёзном.
Статистика после двух недель
За две недели "тестирования" (читай: мои друзья и их друзья):
- 23 человека попробовали приложение
- 12,400+ свайпов в сумме
- Средняя сессия: 14 минут (!!!)
- Самый спорный сниппет: вложенные тернарные операторы. 60% свайпнули влево, 40% вправо. Война в комментариях.
- Самый однозначный сниппет: функция на 200 строк без единого комментария. 97% влево.
- Среднее время на один свайп: 4.2 секунды
Для контекста: среднее время обычного код-ревью одного PR в нашей команде было 45 минут. При этом качество комментариев после "Тиндера" было не хуже, потому что люди привыкли быстро оценивать код и замечать паттерны.
Почему я это не довёл до продукта
Честный ответ: потому что мне стало интересно что-то другое.
И это нормально. Не каждый проект должен превращаться в стартап. Не каждая идея должна приносить деньги. Иногда проект существует для того, чтобы ты научился чему-то новому, повеселился, и двинулся дальше.
У меня 47 незаконченных проектов. "Тиндер для код-ревью" один из немногих, которые я не стыжусь показать. Потому что у него была ясная цель (повеселиться), и эта цель была достигнута.
Мораль истории
Если у вас есть тупая идея для проекта, сделайте её. Прямо сейчас. Не думайте о монетизации, масштабировании, PMF, или что там ещё любят обсуждать на стартап-митапах.
Откройте редактор и начните кодить. Самые интересные вещи происходят, когда вы делаете что-то не потому что "надо", а потому что "а прикольно было бы если...".
Худший сценарий: вы потратите ночь и выучите что-то новое. Лучший сценарий: вы создадите что-то, о чём будете рассказывать годами.
В любом случае вы провели время лучше, чем если бы смотрели очередной туториал на YouTube.
Бонус: идеи для ваших тупых проектов
Раз уж мы тут, вот ещё несколько концептов, которые живут в моём списке "сделать когда-нибудь":
- StackOverflow RPG. Отвечаешь на вопросы и прокачиваешь персонажа. Правильный ответ = опыт. Неправильный = урон.
- Git Blame Roulette. Случайный выбор строки из проекта. Угадай, кто её написал.
- Daily Code Roast. Каждый день присылает тебе один сниппет плохого кода. Твоя задача: найти все проблемы.
- PR Review Speed Run. Таймер + реальные PR. Как быстро ты можешь найти все баги?
Если кто-то из вас реально сделает что-то из этого списка, напишите мне. Я хочу попробовать.
Если вам заходят такие истории, у меня есть ещё:
Telegram: t.me/SwiftUIDaily - истории, код, карьера, и всё что между
Boosty: boosty.to/swiftuidev - наборы для разработчиков, шаблоны, и инструменты
Какой ваш самый тупой проект? Тот, за который вам немного стыдно, но который вы втайне любите? Делитесь в комментариях, мне правда интересно.
Top comments (0)