Я надеюсь, что эта публикация будет последней в моем “цикле” публикаций о собеседованиях. К сожалению, это снова публикация о чем-то болезненном. Меня достали одним конкретным вопросом в различных вариациях. “А вы знаете/следуете методологиям DRY/KISS/YAGNI?”. Вопрос вроде как полезный, но имеет один серьезный недостаток. Отрицательный ответ на данный вопрос не значит ничего. И я постараюсь пояснить почему я так считаю.
Оговорки. Существует такая методология как SOLID. Следование данной методологии - вещь крайне полезная. Однако я понимание черпал из книги Мартинов “Принципы, паттерны и методики гибкой разработки на языке C#”, которая критиковалась. Единого понимания о принципах следования SOLID нет. При этом эта методология имеет прямое влияние на архитектуру проекта. Однако 3 принципа о которых я хочу поразмышлять к архитектуре отношения не имеют. Это банальная культура.
Я не следую методологии DRY. Для понимания того, что я пишу банальную вещь, которая уже скорее всего есть в проекте - мне не нужна методология. Для понимания того, что копировать код из одного места в другое плохо, мне не нужна методология. Это как чистить зубы и менять белье. Для этого нужна не методология, а воспитание. Мне могут возразить, рассказав, что на самом деле данная методология гораздо глубже чем я ее вижу. Может быть, я не отрицаю. Но когда я слышу вопрос про следование данной методологии на собеседовании - мы не обсуждаем глубину понимания данной методологии, а просто исходим из предположения будто понимаем ее одинаково. Кстати, видя результат работ некоторых своих коллег - я делаю вывод что из обещания следовать методологии DRY (Don’t Repeat Yourself) не следует обещание следовать методологии DRAE (Don’t Repeat anybody else).
Я не следую методологии KISS. Я не работал на построчной оплате, я знаю зачем нужно писать unit-тесты, и у нас в компании есть code-review. Мне не нужна методология. Я не буду писать многострочный метод, так как я его потом буду покрывать тестами. Писать лишние тесты и постоянно переписывать моки - занятие не для слабонервных. Плюс делать ревью бесконечных портянок - тоже так себе развлечение. У нас действует правило - если метод не помещается в экран, то задача переоткрывается. Нет, поворот экрана на 90 градусов - не выход. Это удобно, но в данной ситуации только мешает. А еще я люблю выкидывать из проекта мусор. При этом человек, который следует данной методологии так же может придерживаться взглядов “старый код священен”, “работает - не трогай” и его не смутит что код может банально не использоваться.
Я не следую методологии YAGNI. А тут всё куда прозаичнее. Во-первых - я ленив, а во-вторых - я, как руководитель группы, согласовываю план работ на неделю и слежу за его выполнением. И перед включением задачи в план - постараюсь проесть плешь всем, если сомневаюсь в том, что это нужно делать. Правильно ли это? С моей стороны - может и да. А вот со стороны “бизнеса” - скорее всего нет. И я могу сколько угодно вставать в позу и рассказывать каким принципам противоречит реализация того или иного функционала, однако если руководство скажет “надо” — значит, будем реализовывать. Скажете, что “просто руководство не знает про YAGNI”? На хабре есть неплохая статья про все три принципа, но в случае YAGNI там, на мой взгляд, довольно сумбурный пример про абстракции. Я применяю абстракции, потому что следую принципу инверсии зависимостей и пишу unit-тесты. Зато разработчик, который последует YAGNI в описанном виде - может использовать репозиторий без абстракции и мы уже никогда не напишем unit-тест в этом коде, так как код будет напрямую зависеть от базы данных.
К чему я это всё написал? У меня складывается впечатление что сформировалась довольно большая группа людей, которая покланяется аббревиатурам как религиозным учениям. Следование или не следование описанным аббревиатурам о квалификации программиста не говорит ничего. Я могу вообще не представлять об их существовании, но при этом не особо осознанно следовать им. При этом на вопрос интервьюера отвечу отрицательно и видимо буду выглядеть неучем. При этом сам интервьюер видимо будет считать себя обладателем сакральных знаний. Я считаю, что здесь их нет. Совсем. А к вопросам о них можно еще добавить “Моете ли вы руки перед едой и после туалета” и “Как часто вы принимаете душ”