Щас я тут всё перепишу
Как оно бывает
🔗Есть такой супер-простой способ определить, кто пришёл на проект: новичок или опытный разработчик. Суть в следующем.
Типичный проект, как правило, хренового качества - такова жизнь. Почему? Да много почему. Может, его писало три рукожопа. А может, писал нормальный парень, но требования постоянно менялись, и проект обрастал фичами и мутировал до состояния Франкенштейна. Может, горели дедлайны и писали чтоб хоть что-то работало, не глядя на чистоту кода. Какая разница? Факт остаётся фактом: обычно всё плохо.
Когда неопытный разработчик залетает на такой проект, первое, что он говорит, звучит так: "у вас тут всё хреново, щас я каааак всё перелопачу, и вы офигеете, как станет хорошо". Зачем, почему? Ну потому что некрасиво, неправильно, неэффективно - нужно исправить.
Я и сам таким был раньше. Помню, как-то попал на проект, а там у них были шаблоны на django. Позвольте пояснить... Шаблоны django - это ураганный понос в мире программирования. За 10 лет работы с django я так и не запомнил, как их нормально писать, в каждом проекте я проклинаю тех, кто их придумал, а на stackoverflow на вопросы о них постоянно отвечают "поставь jinja или продолжай страдать". Надеюсь, мысль донёс 😏
И вот я попадаю на проект, а там эти адские шаблоны, и я такой говорю: "ща я вам добавлю jinja, вы угорите, как удобно станет". Ну, добавил, стал их использовать в своей работе. При этом старый код и админка работали с шаблонами django, новый код - с jinja. Этакое биполярное расстройство. В итоге стало-то только хуже (для этого даже есть термин: refucktoring). А почему так получилось?
А потому что я не задал главный вопрос: А нахрена? Зачем?
Зачем нужно было что-то менять? Что это дало бизнесу, который меня нанял? В данном случае - ничего; скорее, мне стало чуточку лучше, только и всего. Кто-то за это заплатил деньги, кому-то потом стало сложнее работать, и всё ради какого-то моего эфемерного чувства. Это глупо.
Опытный разраб вопрос "зачем?" задаст в первую очередь, и после обдумывания ответа, скорей всего, переключится на что-то более полезное. И правильно сделает.
Так что, никогда ничего не переписывать?
🔗Скорее, делать это с умом. Если накопилась какая-то критическая масса проблемного кода, то да, возможно, нужно всё переделать. Бывало и такое.
Но чаще я и в жизни, и в программировании пользуюсь тактикой "оставь после себя так же или немного лучше". Пишу код, вижу рядом какую-то фигню - исправляю за компанию, если не сложно. Таким образом потихоньку, маленькими шажками кодовая база будет становиться лучше. Даже если вас уволят через неделю - ну что ж, вы хотя бы не убились, переписывая всё, зато внесли какой-то вклад.
Если любите учиться на ошибках (а в особенности на чужих), то есть замечательная статья от Фила Ранжина aka Короля Разработки о переписывании всего и последующем выгорании, рекомендую как экскурс по самым ужасным решениям при разработке ПО: Я в одиночку отрефакторил 15 тысяч строк легаси. Это были худшие две недели в жизни.
Кредит доверия
🔗Есть ещё такая штука - кредит доверия. Тут всё просто: сделали хорошо - клиент доверяет больше, сделали плохо - доверие теряется.
Низкое доверие чревато. После моей истории с шаблонами случилась другая история: я уронил staging, уж не помню как. И хотя staging для того и существует, чтобы его ронять, но заказчик почему-то не оценил моих способностей и довольно быстро меня уволил. Если бы я зарекомендовал себя хорошо - то можно было бы ронять всё со спокойной совестью 😏
Поэтому когда вы только приходите в проект, уровень доверия к вам в районе нуля, и для каких-то масштабных изменений нужно сначала заслужить trust points.
Реальная история из жизни: наша команда взялась за проект, а там классическое питоновское болото - всё написано странно, нелогично, с уязвимостями и нулевой расширяемостью. Наша компания сразу начала форсировать переписывание всего от фундамента до макушки. Я как Ванга стоял в сторонке, тыкал пальцем и говорил: "уволят же".
Ну чё, контракт с нами закрыли 😄
У меня были контракты, где я начинал с маленьких изменений, а через полгода я мог переписать вообще всё от начала и до конца без вопросов со стороны клиента.
А зачем вообще переписывать?
🔗Я вижу две причины:
- Проект действительно нравится, вам с ним ещё долго работать, и вы хотите, чтобы было уютно и красиво, как дома
- Проект стал критически сложным, вас с ним ещё долго работать, и без рефакторинга разработка становится очень медленной и ненадёжной
В обоих случаях, как видно, присутствует пункт "вам с ним долго работать", но вот какая проблема: это никто не может гарантировать. Я видел, как увольняли целый отдел разрабов YouTube music одним днём. Я как-то сдал проект, который закрылся на следующий день после запуска, т.к. нарушал T.o.S., а клиент дебил и запустил проект в разработку, ничего не проверив. Я до сих пор чувствую счастье оттого, что не стал рефакторить там ничего и сдал его в позорном состоянии.
Если вы работаете в банке и думаете, что ваш продукт будет разрабатываться вечно, то не вечным можете оказаться вы: например, попали под сокращение, и весь ваш труд уехал без вас.
В общем, нужно быть крайне осторожным и понимать, что всё может закончиться в одночасье. Осознание этого факта довольно сильно меняет подоход к разработке: приходится писать так, чтобы фичи появлялись и работали, но при этом не тратить силы на какие-то второстепенные вещи, а если и тратить, то в очень ограниченном количестве.
Мораль
🔗Нужно написать какое-нибудь заключение, вот что я придумал:
- Перед тем как что-то делать, полезно задавать себе вопрос "а нахрена?"
- Альтруизм в программировании должен быть в таком количестве, что если ваш вклад обесценят и выкинут на свалку истории, то вам не будет обидно.
Такие мысли.