Sorry but the answer is "The whole of computer science and years of practical experience".
Its too big a subject for ordinary mortals and eclipse, intellij, netbeans and Visual... have the subject pretty well covered.
Look at something smaller and more achievable like an eclipse plugin for something that interests you.