Characteristics of a good programmer

A good programmer should have the following characteristics.
(a) Technical skills.
He should have adequate knowledge of programming languages and practices.
(b) Communication skills.
He should have good communication skills as he has to interact with analysts, designers and users.
(c) Patience and self-discipline.
Program logic development follows a step-by-step approach to solution. The programmer should thoroughly check the program logic several times to find better ways of solving it.
(d) Balanced personality.
 A good programmer should acknowledge his weaknesses and deficiencies and should welcome constructive criticism from other analysts, designers, programmers and users.