Good Code, Bad Code: Think like a software engineer - Long (IEEE, 2003)