Красота кода
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.06.14 11:42
Оценка: 5 (1)
Есть в разработке софта очень удобное слово — дизайн. Почему то большей частью люди понимают это слово как синоним личного комфорта, красоты. На мой взгляд это, мягко говоря, преступное заблуждение. Более того, лично я считаю, что красота в инженерном деле просто неуместна.

Красота вообще очень интересное слово. Как правило, люди понимают под ним каждый своё собственное. Как известно, в ИТ всё изобретается заново. Потому, что бы поговорить за красоту, нужно посмотреть чего же под ней понимают в других областях. Можно например, посмотреть что думают про красоту человеческого тела. Как ни странно, понятие красоты отражает точку зрения носителей некоторой общности. То есть, красота примерно как мода, везде разная, меняется со временем.

Хотя красота это непрактическая категория, тем не менее для практичности место есть. Например ассиметричность почти никогда не являлась признаком красоты человеческого тела. Практический смысл довольно очевиден — ассиметричность у человека всегда появляется при различных травмах, опухолях и иных проблемах со здоровьем. С другими признаками не так просто. Если общество озабочено проблемами деторождения, признаком красоты почти наверняка будет являться широкий женский таз. Если общество ударилось в педофилию, то эталоном красоты будет скорее всего подросток. В обществе, где сильные воинственные настроениея, скорее всего эталоном будет атлетическое телосложение.

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

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

На самом деле в такой формулировке нет ничего про красоту. Меня интересует именно практический смысл, а эта часть в понятии красота имеет сильно второстепенный смысл. Если посмотреть в толковый словарь, то окажется, что практический смысл имеет непосредтсвенное отношение к понятию дизайн. Более того, слово качество и дизайн сильно связаны. Я бы сказал это две стороны одной монеты.

Например, для меня практический смысл имеют
1. корректность и работоспособность
2. эффективность решения в пересчете на ресурсы (включая время)
3. эффективность создания решения в пересчете на ресурсы (включая время)
4. понятность (начиная с читабельности)
5. грамотность (xml парсить не регэкспами, а специальными инструментами — xml dom parser, xml sax parse)
6. сложность сопровождения
7. сложность багфикса

Соответсвенно хороший дизайн обеспечивает все эти требования. Более того, цель дизайна это именно обеспечение выполнимости всех условий согласно требованиям выше.

Пример

Необходимо написать UI слой для веб-приложения. "Красивость" может подсказать решение в одну строчку. Но вот вопрос — например, время обновления данных с сервера слишком велико, а специфика приложения требует это обновление постоянно. Внезапно, "красовость" перестала работать и в бой вступает тот самый дизайн. Решением является, например, переход на Ajax с целью удешевить обновления в терминах ресурсов(и времени). Что характерно, эта часть влияет и на серверную часть. С точки зрения дизайна здесь нет никакой крамолы.

Еще пример

Есть некоторый визуальный компонент, навроде редактора UML-диаграм, с одной лишь разнией, что квадраты и связи обновляются системой мониторинга, которая шлет данные каждые 100мс. Важно обеспечить быстрое время отклика и успевать обновлять-рисовать все квадраты и связи, да еще и накапливать данные.
В бой снова вступает тот самый дизайн. В зависимости от того, какие требования к возможностям, обновление всей картины может занять не менее 100мс.
Здесь много самых разных решений. Например, человек сильно вряд ли сможет различить картинки через 100мс. Если данных много, то и нескольких секунд недостаточно.
Отсюда решение — отделить прием данных от всего процессинга, а визуализация будет рисовать скажем 2 раза в секунду или даже раз в секунду. При этом сами данные можно накапливать как угодно. Если сам квадрат-связь обновились, то нет нужды сразу все перерисововать. Достаточно вызвать например метод Invalidate, и нужный кусочек данных перерисуется в следующем кадре.

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

В понятие дизайн ничего этого не входит и входить не может. Дизайн — сугубо прикладное, практическое решение актуальных проблем, включая как функциональные требования(фича1,2...N), так и нефункциональные (производительность, энергосбережение, загрузка процессора и тд)

Что же такое качество, снова в следующий раз.

P.S. Берегитесь людей, кто под словом дизайн понимает "красота". С большой вероятностью они будут работать по принципу "дизайн-красота это хорошо, но это когда время появится, а пока что и говнокода хватит". Или так "давай код писать, а думать потом будем". На самом деле это просто одно из оправданий для ухода от решения проблем.

P.P.S. Очень внимательно нужно следить за теми, кто уделяет много внимания эстетической стороне кода, а именно стили, скобочки и тд. Есть мнение, красота для них имеет бОльший приоритет, нежели решение проблем.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.