What Makes A Great Programmer? 10 Characteristics