Before we continue, it's important to know the difference between a h.a.cker and a programmer, because I'm sure many people don't understand that one does not equal the other. A h.a.cker, while keeping in mind that the term itself is fairly ambiguous, is by definition "A person who uses computers to gain unauthorized access to data", or someone who (usually professionally) finds and exploits security flaws in systems and networks. Becoming a h.a.cker takes years of experience and a deep understanding of computer networks and systems, including programming and coding.
All h.a.ckers are programmers, but not all programmers are h.a.ckers. Script kiddies and public-domain exploiters are not h.a.ckers.
A programmer on the other hand is, by...