Неправильные абстракции

Достаточно избитая тема, конечно, но периодически хочется напоминать себе и людям, что неправильные абстракции это абсолютное зло.

Один из ключевых моментов в развитии тебя как разработчика - это тот, когда ты понимаешь что что-то захардкодить гораздо дешевле и приносит меньше вреда в будущем, чем не совсем удачная попытка что-то переиспользовать. А в командной работе у тебя рано или поздно приходит и понимание, что все разработчики (внезапно) думают не также как ты, и они твою великолепную абстракцию превратят в ещё большую лапшу и неконтролируемый хаос, чем если бы её не было. И это даже не с тем связано что все дураки кроме тебя, а с тем что задачи у вас могут быть совсем разные.

Пытаясь что-то переиспользовать мы множим связность и поддерживать это становится сложнее. Осознание приходит, когда ты на кодревью с наслаждением апрувишь МР, который лежит где-то в сторонке от остального кода и с каким большущим трудом ты пытаешься разобраться, что поменялось в какой-то общей штуковине, которая переиспользуется на всех экранах. 😷

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

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

Если ты пока не настолько преисполнился, то у тебя прям мания завернуть своё местечковое решение и вынести его куда-нибудь с таким видом типа ща будем это всё переиспользовать. Паттернов ещё каких нибудь начитался, и понеслась. Написал какую-нибудь кнопочку, ну значит эта кнопочка теперь будет везде, положим её в базовый модуль. Потом сталкиваемся с тем, что в другой фиче эта кнопочка выглядит чуть иначе, у этой кнопочки разрастается количество параметров, да до тех пор пока это всё не будет проще забыть и написать что-то новое простое. И этот цикл повторяется. С кнопочкой утрирую, подставьте в текст любой класс, суть не изменится.

В общем это я к чему, невероятно сложно делать абстракции и в целом API, которые удовлетворяли бы всем текущим требованиям и тем более всем будущим. Это можно сделать только если ваш компонент простой как дверь. Чем меньше абстракции и чем меньше они домысливают то, как их будут использовать - тем лучше. Хороший код это не тот к которому нечего добавить, а тот из которого ничего удалить уже нельзя. Вот так и надо писать. А если уверенности нет что получилось просто, то лучше захардкодьте, серьёзно.