Персональный сайт Олега Барабанова

Принципы KISS, DRY и YAGNI в разработке ПО

Еще при написании дипломного проекта, я обратил внимание, что в академической среде есть стремление к чрезмерно раздутым проектам. Не спорю - студентам для дипломного проекта важен объем.

Тем не менее, не все учитывают то, что код, написанный "на будущее", также придется покрывать тестами, документацией, что выливается в дополнительные трудозатраты и соответственно влияет на финансовые затраты.

В IT существует множество устоявшихся принципов, которые помогают в разработке больших проектов. В этой статье я рассмотрю три принципа: KISS, DRY и YAGNI, которые прекрасно работают не только в IT сфере, но и во множестве других. Да и просто поймите правильно, усложнить простую систему можно легко и быстро, а вот сделать простой сложную систему (без потерь в качестве и функционале) - очень тяжелая работа, да и обычно времени на это нет.

KISS

KISS - (Keep it simple, stupid, в переводе - делай это проще, тупица) - принцип при котором решение проблемы достигается наипростейшим способом. Важно учитывать, что при применении KISS-принципа ни в коем случае не упрощается сама суть проблемы! Т.е. если вам за каким-то чертом понадобилось создать бамбуковый ракетный турбо-реактивный эко-двигатель, то просто смена типа двигателя на другой не является KISS-принципом. KISS-принцип ведет к тому, что вы один фиг должны сделать тупой бамбуковый ракетный реактивный турбо-реактивный эко-двигатель, просто наиболее тупым и простым способом.

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

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

DRY

DRY - (Don't Repeat Yourself, в переводе - не повторяйся) - суть этого принципа заключается в том, что рекомендуется избегать дублирования кода, который имеет одно назначение. В таком случае возможно стоит выделить данный код в отдельную функцию, класс, библиотеку и пр. в зависимости от ситуации. Такое разбиение кода повышает общую модульность системы, где каждые компоненты кода (функции, методы и пр.) можно отдельно отдокументировать и протестировать для дальнейшего переиспользования. Это простая "автоматизация", а как известно, любая автоматизация рутинной работы - это очень хорошо. 

Различные возможности кодогенерации как раз относятся к данному принципу, т.к. компьютер куда быстрее вас сгенерирует шаблонный код для дальнейшей работы и тем самым позволит вам избежать не нужных "копировать + вставить".

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

YAGNI

YAGNI - (You aren't gonna need it, в переводе - вам это не нужно) - принцип, суть которого сводится к тому, что нефиг разрабатывать нетребуемый функционал, аля "на будущее". Такой функционал в силу низкого приоритета может быть некачественно протестирован. И получится такая ситуация, что из-за функционала, который не нужен, может не работать основная часть программной системы.

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

Кстати, если рассматривать это принцип со стороны менежмента, то это будет звучать как "нефиг тратить деньги, время и прочие ресурсы на то, что НИКОГДА не потребуется". Звучит очень практично и универсально.

В заключении статьи, я хочу подчеркнуть, что здравый смысл должен преобладать над бездумным применением вышеперечисленных принципов. KISS, DRY, YAGNI это именно полезные принципы, а не строгие правила и соответственно рекомендуется их придерживаться, ибо фанатичное их применение может привести к злоупотреблению с печальным результатом.