Пиши простой код
- четверг, 24 апреля 2025 г. в 00:00:08
И это решит 95% проблем типичного стартапа. Как-то так повелось, что по всему СНГ и его окрестностям на работу набирают зумеров с колоссальным опытом в три года, и они начинают создавать идеальные архитектуры. Да, каждый из вас, как только получает возможность взять на себя хоть малейшую ответственность, сразу вспоминает все прочитанные и не прочитанные книги и пилит свою уникальную архитектуру, непохожую ни на что.
Да, именно — непохожую ни на что, с кучей ошибок, которые появляются из-за неправильной трактовки каких-то понятий или банальной нехватки опыта. Я не буду в этой статье приводить конкретные примеры — их уже обсуждали здесь не раз. Вместо этого я зайду с другой стороны.
Каждый раз, когда ты будешь искать решение для своей задачи, задай себе один вопрос: МОГУ ЛИ Я СДЕЛАТЬ ЭТО ПРОЩЕ, БЕЗ ПОТЕРИ НА ЭТО ВРЕМЕНИ И ПРОИЗВОДИТЕЛЬНОСТИ? Если твой ответ — "ДА", тогда пересмотри ещё раз, что ты накуралесил, и удали 90% своих ненужных фабрик классов, адаптеров, лишних сервисов и всю остальную шелуху.
ТЫ ПИШЕШЬ СЛОЖНЫЙ КОД. Не потому, что его никто не может понять (включая тебя самого), а потому, что этот код — просто несусветный overhead по ресурсам и времени разработки. В среднестатистическом стартапе, написанном зумерами, можно спокойно удалить 50% кода — и сервера выдохнут с облегчением, громко вздохнув кулерами. А половину команды можно будет уволить, потому что не придётся больше тратить время на поддержку хитрых умозаключений, которыми никто не пользуется.
МЕНЬШЕ КОДА — МЕНЬШЕ БАГОВ. Крупные проекты можно оценить даже просто прикинув среднее количество ошибок на тысячу строк кода. Если у тебя, скажем, 2 бага на 1000 строк, а в проекте 1 000 000 строк — вероятно, у тебя 2000 багов. Понимаешь? А теперь посмотри на свой код. У тебя, скорее всего, 10 ошибок на 100 строк. Твой усложнённый код только добавляет баги и делает отладку еще сложнее.
НЕ РЕШАЙ НЕСУЩЕСТВУЮЩИХ ПРОБЛЕМ! Не надо пилить заготовки полиморфизма "на всякий случай", "потом пригодится" и прочее в этом духе. Не нужно сходу встраивать микросервисную/сервисную/или какую там ещё модную архитектуру/ только потому что возможно когда-нибудь через пять лет у нас будет миллион пользователей онлайн. Ты вообще не знаешь, сколько твое приложение проживёт. Может, оно загнётся через три месяца — как раз из-за всей этой архитектуры. Потому что придётся нанимать целый батальон девопсов, чтобы это всё настроить, и банально не хватит денег. Или через месяц окажется, что сервисы ВНЕЗАПНО разделили неправильно.
Запомни: КОГДА ПРИДЕТ ВРЕМЯ - ПО-ДРУГОМУ СДЕЛАТЬ БУДЕТ НЕВОЗМОЖНО. Звучит, может, тупо, но так и есть. Кому действительно нужно будет усложнить твой код — тот и усложнит, может это даже будешь и ты, но пока твоя задача — написать свой кусок так, чтобы его можно было прочитать, понять и модифицировать за 5 минут. Если тебе не хватает 5 минут, чтобы внести простой фикс на 3 строки, — ты где-то явно свернул не туда.
Пообмазываетесь код-стайлерами, навесите кучу хуков — и потом целый день правите три строки. Должна же быть хоть какая-то разумная грань. За это время можно реально сделать что-то полезное. Вы вообще задумывались когда-нибудь:
- Приведёт ли ваш код-стайлер, 100500 вебхуков на GitHub, которые должны пройти, хоть одного нового пользователя в приложение? Или повысит его ценность?
- Нет.
Я ещё начал слышать такую фразу: "я не знаю". Это вообще что такое? Прод упал на два часа — "Я не знаю, чё там случилось, смотрел, ничего не нашёл...". Да, я согласен — бывают сложные баги. Утечки памяти, баги с воспроизведением в 100500 шагов, опечатки с глобальными переменными. Это плохо, но хотя бы понятно, почему их сложно искать. Но если ты сам написал полублог, полусоциальную сеть, свою любимую криптовалютную биржу или ещё бог знает что — и не можешь понять, какое именно место в коде может отключить половину твоего же приложения, то извини... садись в угол на гречку и думай о своём поведении. А знаешь почему так? Потому что опять: 100500 разных паттернов, 20 слоёв абстракции, DI поверх DI, фабрика фабрик, и ещё какой-нибудь менедежерМенеджеров. Это не помогает. Это как мерзкий фоновый высокочастотный гул — бесит, мешает и работать не даёт.
Это понятно, что все хотят быть экспериментаторами и сделать лучше, чем все остальные. Тем более — почему бы не стать, если за это никто не наказывает и деньги платятся как и раньше? Всё верно, так и есть. Можно бесконечно проверять различные "гипотезы", придумывать эти самые "идеальные архитектуры" в приложениях с парой страниц. Деньги на это найдутся. Это такая себе патовая ситуация. Винить людей, которые заказали разработку, сложно — они не компетентны в технических вопросах, поэтому выявить проблему не смогут, если им прямо не сказать о ней. Технических специалистов тоже нельзя, потому что они сами не знают, что делают, но хотят как лучше.
Но есть одно НО: уважение к себе самому. Ты же не хочешь прийти в клинику, и чтобы терапевт на тебе ставил эксперименты с разными препаратами? Или чтобы таксист тебя домой возил не по прямой дороге, а через лес какой-то — и брал в 10 раз дороже? Или, может, чтобы пилотам скучно не было, они начали бочки крутить на высоте — чисто ради прикола?
Пойми, брат, смысл не в твоей красивой архитектуре и в том, как правильно должно быть, а в том, приносит ли это СЕЙЧАС хоть какой-то профит. Много вещей в интернете написано для суперпроизводительных систем или от очень крупных компаний, у которых приложения запускаются в своих дата-центрах. Скорее всего, твоё приложение никогда даже на километр не подберётся к такому масштабу. Потому если ты не придумываешь новый алгоритм сжатия видео, не стримишь видео на целый мир или не создаешь новую ОС, не усложняй себе и другим жизнь.