Сложное - упрощайте, с усложнением - боритесь! PDF Печать E-mail

(В оригинале Simplify essential complexity; diminish accidental complexity)

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

Усложнение же, в отличие от сложности, часто является результатом того, что мы пытаемся построить систему, решающую сложную задачу. Архаичная система управления воздушным траффиком, до сих пор использующаяся, является таким примером усложнения. Эта система разрабатывалась для решения реально сложной задачи управления воздушным потоком из тысяч самолетов, однако и сама система дополнительно привнесла еще и своей собственной сложности. Фактически, используемая сегодня система столь сложна, что ее модернизация уже практически невозможна. В результате во всем мире управление воздушным трафиком основано на технологиях, которым уже более тридцати лет!

Большинство фреймворков и «решений» от вендоров являются симптомами болезни усложнения. Те фреймворки, которые решают конкретные проблемы, могут быть пригодными к использованию. Переусложненные же фреймворки привносят больше сложности, чем решают.

Сложность привлекает разработчиков как свечка мотыльков. Часто с теми же результатами. Решение головоломок увлекает, и разработчики тому не исключение. Кому же не понравится найти решение нереально сложной задачи? Однако в крупномасштабных проектах основной вызов для разработчиков – борьба с привнесением дополнительной сложности и удерживание фокуса на решении первоначальной задачи.

Как вам это делать? Отдавайте предпочтение фреймворкам, основанным на работающем коде, а не сошедшим с академических высот. Обращайте внимание на процент кода, относящегося непосредственно к вашей бизнес-задаче, по сравнению с процентом кода, относящемуся лишь к интерфейсу. С особой осторожностью относитесь к решениям от вендоров. Иногда они не такие уж и плохие, но часто излишне переусложнены. Убедитесь, что решение соответствует решаемой задаче.

Решение реально сложных задач без излишнего усложнения и является основной задачей проектировщика.

Автор оригинала: Neal Ford