Щас я тут всё перепишу


Как оно бывает

🔗

Есть такой супер-простой способ определить, кто пришёл на проект: новичок или опытный разработчик. Суть в следующем.

Типичный проект, как правило, хренового качества - такова жизнь. Почему? Да много почему. Может, его писало три рукожопа. А может, писал нормальный парень, но требования постоянно менялись, и проект обрастал фичами и мутировал до состояния Франкенштейна. Может, горели дедлайны и писали чтоб хоть что-то работало, не глядя на чистоту кода. Какая разница? Факт остаётся фактом: обычно всё плохо.

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

Я и сам таким был раньше. Помню, как-то попал на проект, а там у них были шаблоны на django. Позвольте пояснить... Шаблоны django - это ураганный понос в мире программирования. За 10 лет работы с django я так и не запомнил, как их нормально писать, в каждом проекте я проклинаю тех, кто их придумал, а на stackoverflow на вопросы о них постоянно отвечают "поставь jinja или продолжай страдать". Надеюсь, мысль донёс 😏

И вот я попадаю на проект, а там эти адские шаблоны, и я такой говорю: "ща я вам добавлю jinja, вы угорите, как удобно станет". Ну, добавил, стал их использовать в своей работе. При этом старый код и админка работали с шаблонами django, новый код - с jinja. Этакое биполярное расстройство. В итоге стало-то только хуже (для этого даже есть термин: refucktoring). А почему так получилось?

А потому что я не задал главный вопрос: А нахрена? Зачем?

Зачем нужно было что-то менять? Что это дало бизнесу, который меня нанял? В данном случае - ничего; скорее, мне стало чуточку лучше, только и всего. Кто-то за это заплатил деньги, кому-то потом стало сложнее работать, и всё ради какого-то моего эфемерного чувства. Это глупо.

Опытный разраб вопрос "зачем?" задаст в первую очередь, и после обдумывания ответа, скорей всего, переключится на что-то более полезное. И правильно сделает.

Так что, никогда ничего не переписывать?

🔗

Скорее, делать это с умом. Если накопилась какая-то критическая масса проблемного кода, то да, возможно, нужно всё переделать. Бывало и такое.

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

Если любите учиться на ошибках (а в особенности на чужих), то есть замечательная статья от Фила Ранжина aka Короля Разработки о переписывании всего и последующем выгорании, рекомендую как экскурс по самым ужасным решениям при разработке ПО: Я в одиночку отрефакторил 15 тысяч строк легаси. Это были худшие две недели в жизни.

Кредит доверия

🔗

Есть ещё такая штука - кредит доверия. Тут всё просто: сделали хорошо - клиент доверяет больше, сделали плохо - доверие теряется.

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

Поэтому когда вы только приходите в проект, уровень доверия к вам в районе нуля, и для каких-то масштабных изменений нужно сначала заслужить trust points.

Реальная история из жизни: наша команда взялась за проект, а там классическое питоновское болото - всё написано странно, нелогично, с уязвимостями и нулевой расширяемостью. Наша компания сразу начала форсировать переписывание всего от фундамента до макушки. Я как Ванга стоял в сторонке, тыкал пальцем и говорил: "уволят же".

Ну чё, контракт с нами закрыли 😄

У меня были контракты, где я начинал с маленьких изменений, а через полгода я мог переписать вообще всё от начала и до конца без вопросов со стороны клиента.

А зачем вообще переписывать?

🔗

Я вижу две причины:

  • Проект действительно нравится, вам с ним ещё долго работать, и вы хотите, чтобы было уютно и красиво, как дома
  • Проект стал критически сложным, вас с ним ещё долго работать, и без рефакторинга разработка становится очень медленной и ненадёжной

В обоих случаях, как видно, присутствует пункт "вам с ним долго работать", но вот какая проблема: это никто не может гарантировать. Я видел, как увольняли целый отдел разрабов YouTube music одним днём. Я как-то сдал проект, который закрылся на следующий день после запуска, т.к. нарушал T.o.S., а клиент дебил и запустил проект в разработку, ничего не проверив. Я до сих пор чувствую счастье оттого, что не стал рефакторить там ничего и сдал его в позорном состоянии.

Если вы работаете в банке и думаете, что ваш продукт будет разрабатываться вечно, то не вечным можете оказаться вы: например, попали под сокращение, и весь ваш труд уехал без вас.

В общем, нужно быть крайне осторожным и понимать, что всё может закончиться в одночасье. Осознание этого факта довольно сильно меняет подоход к разработке: приходится писать так, чтобы фичи появлялись и работали, но при этом не тратить силы на какие-то второстепенные вещи, а если и тратить, то в очень ограниченном количестве.

Мораль

🔗

Нужно написать какое-нибудь заключение, вот что я придумал:

  • Перед тем как что-то делать, полезно задавать себе вопрос "а нахрена?"
  • Альтруизм в программировании должен быть в таком количестве, что если ваш вклад обесценят и выкинут на свалку истории, то вам не будет обидно.

Такие мысли.