Code grows and it grows quickly and ugly. Being able to recognize ugly patterns of code as soon as possible, is essential. This is what code smells are. Fancy named structures of code that we usually end up with and that might indicate a problem.

Bloaters

Code that is big and hard to work with.

Long Method

A method that has too many lines of code(more than 10), making it hard to work with.

Large Class

A Class that has too many lines of code, fields, methods and too many responsibilities, making it hard to work with.

Data Clumps

A group of variables which are passed around together.

Long Parameter List

More than three parameters on a method.

Primitive Obsession

Use of primitive types(string, numbers) instead of objects.

Object-Orientation Abusers

Misuse in Object Oriented Programming.

Switch Statements

Complex switch statements or a sequence of if statements.

Refused Bequest

Sub-classes use only some of the methods and data inheirted from parent classes, keeping unneeded methods unused or redefined to throw undefined exceptions.

Alternative Classes with Different Interfaces

Classes performing same functions but have different method names.

Temporary Field

Temporary properties that get their values under very specific circumstances, otherwise remains empty.

Change Preventers

Things that make code harder to change.

Divergent Change

Forces changes in many unrelated class methods when changes are made to a class.

Shotgun Surgery

Forces you to make many small changes to many different classes.

Parallel Inheritance Hierarchies

Forces you to make changes into parallel subclasses.

Dispensables

Things that are pointless and not needed.

Comments

Code filled with explanatory comments.

Lazy Class

A class that does nothing or too little and does not deserve to be separated.

Speculative Generality

Code that was written for a future requirement but never unused.

Data Class

A class that only contains fileds and simple methods to access them.

Duplicate Code

Same code in differrent places.

Dead Code

Unused code.

Couplers

Things that generate coupling between classes.

Feature Envy

A Class works with data of another class more than its own.

Inappropriate Intimacy

A class uses the internals of another class.

Message Chains

Consecutive method calls where each method returns another object and a method on that object gets called.

Middle Man

A Class that exits just to delegate work to other class.