Существует мнение, будто программирование — это искусство написания хитроумных алгоритмов. Чем более навороченный (хитроумный) алгоритм человек может написать, следовательно тем ближе он к представлению об "идеальном программисте". В некоторых конторах даже проверяют в лучшем случае — умение составить хитроумный алгоритм, в худшем — знание некоторых алгоритмов, которые почему-то называют "базовыми". Например, "пузырьковую" сортировку.
Между тем, постепенно становится ясно, что важно не само по себе умение написать алгоритм (код), а умение написать его именно так, чтобы он был простой и короткий. Ибо так легче сопровождать. А для того, чтобы код получился простой и короткий, нужно разные сущности, которых в реальных задачах полным-полно, правильно сгруппировать. Поэтому в настоящее время выплывает наружу другое умение программиста — это искусство правильных группировок.
К сожалению, очень много программистов знают только один способ борьбы со сложностью — полиморфизм. И применяют его как к месту, так и не к месту. Но есть и другие способы группировки, есть критерии для объединения сущностей в группу, есть и типичные ошибки группирования.
Собственно, об этом рассказывается в этой статье:
http://www.triz-ri.ru/themes/method/creative/creative57.asp