Простота кода

Сад камней

Простота кода, пожалуй, одна из самых противоречивых метрик и чаще всего о ней говорят в контексте поспешного, аврального внесения изменений. Когда мы идем на сделки с совестью, принципом DRY и закрываем глаза на то, что расплатой за этот шаг является усложнение сопровождения, дальнейшего развития и многих других аспектов системы. Назвать такой код простым не поднимается язык. Определение ему — примитивность. Простота сродни формуле E=mc2 или периодической системе химических элементов Менделеева. Она зачастую требует немалых интеллектуальных усилий, но платит за них всепроникающим эффектом.

Возьмем в качестве примера концепцию MVC, которая существенно упростила разработку веб-приложений. Их стало легче писать, отлаживать, тестировать, обеспечивать параллельную работу и разработку. Но ее появление не было внезапным решением, прошел не один десяток лет от первых экспериментов в Smalltalk до появления Ruby on Rails, Django, ASP.NET MVC и других реализаций этой парадигмы.

Или еще один вариант — автоматизированные тесты. Многие адепты принципа KISS скажут, что можно бы и обойтись без них. Да, юнит-тест некоторого метода может занять лишнюю минуту. Но эта «сложность» сегодня оборачивается спокойствием на следующие сотни и тысячи релизов системы завтра. Вы можете безболезненно заниматься рефакторингом.

Простота кода — это мера потерянных в рамках жизненного цикла ПО нервных клеток. ретвит →

Попробуем положить на одну чашу весов простоту сиюминутную, в виде поблажки собственной лени, а на другую — простоту фундаментальную, которая пропитывает весь комплекс задач, связанных с кодом. Его становится проще читать, понимать, отлаживать, изменять, тестировать, сопровождать, масштабировать, развертывать, делиться им с другими. Разве уместно один термин использовать в обоих случаях? Фактически, они являются антиподами. Если их рассмотреть, как мерило затраченных на всем цикле разработки нервных клеток, то первая — с большим знаком минус, тогда как вторая — плюс.

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

Использование удачных практик

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

Автоматизация производственных процессов

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

«Разделяй и властвуй»

Этот принцип в том или ином виде проявляется во многих дисциплинах. Например, тайм-менеджеры советуют «разрезать слона на бифштексы», чтобы его съесть. Так и в нашем случае, непосильные задачи или сложные участки кода стоит разделить на парочку более простых. И так продолжать декомпозицию дальше, пока не придет решение.