Есть такая замечательная практика Экстремального программирования под названием YAGNI.
Я очень, очень большой фанат этой практики, и мне кажется это то, чего должен придерживаться каждый разработчик.
Данная практика утверждает:

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

Даже если вы абсолютно, абсолютно, абсолютно уверены, что вам это понадобится позже, не реализуйте это сейчас.
Обычно это сведется к следующему:
а) это вам не понадобится вообще;
б) то, что вам действительно будет необходимо – абсолютно другое, нежели вы предвидели раньше.

Это не значит, что вы должны избегать написания гибкого кода. Это значит, что вы не должны что-то разрабатывать сверх, основываясь на том, что это может понадобиться позже.
Две основные причины:

  • Вы сохраняете время, потому что вы избегаете написания кода, который может быть выкинут за ненадобностью.
  • Ваш код лучше, потому что вы избегаете загрязнения его “догадками”, а следовательно более понятен.

Ну и наконец сценарий, который как мне кажется просто идеально описывает ситуацию с которой приходится встречаться не скажу каждый день, но часто.

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

– Хорошо, Сэм, почему ты хочешь добавить ее сейчас?
– Ну, Рон, это сохранит время позже.

Ваша ”вселенная” сильно отличается от моей. Вы не можете “сохранить” время делая работу сейчас, пока это не будет занимать больше времени позже. Итак вы говорите:

– Мы сможем делать меньше работы в целом, делая больше работы сейчас.

Но пока ваш проект сильно отличается от моего. У вас уже есть достаточно много задач, которые вы должны сделать прямо сейчас. Делая больше сейчас – очень плохая вещь, когда у вас и так уйма текущих задач.

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

– Но, Рон, я знаю как это сделать прямо сейчас, а позже возможно нет.
– Итак, Сэм, ты говоришь мне, что этот класс, который ты пишешь на столько сложен, что даже ты не сможешь его поддерживать?

Есть еще один замечательный принцип – KISS (Keep It Simple Stupid).

Если вам что-то необходимо, вы можете это добавить позже. Если вам это не надо, вам не надо это будет делать вообще.

Более детально можно почитать здесь.

Advertisements