Practice makes perfect, but it won't bring you from good to "Great" as a programmer.
No sir. If you want to be "Great", you will have to hone your judgment and sense for purpose. Good programmers can code circles around each other with clever algorithms. But great programmers know the difference between clever algorithms and elegant solutions that address both the specific problem AND the 'big picture'.
Good programmers get the job done. Great programmers make the job obsolete.
Good programmers are content with being the smartest people on their teams or among their peers. Great programmers strive to surround themselves with smarter people than themselves.
Good programmers accomplish feats by coding all night long. Great programmers accomplish feats by mastering the art of approximation.
Good programmers are served hand and foot by IT personnel. Great programmers swap out their own power supplies.
Good programmers know their programming technology backwards and forwards. Great programmers know multiple programming technologies backwards and forwards.
Good programmers write clear, concise, and informative code. Great programmers also write clear, concise, and informative English.