[userpic]

Надо учить не "запахи кода", а метамодель 

meta_eugzol в посте Metapractice (оригинал в ЖЖ)

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