The task of learning how to program is a daunting one. There are also several myths associated with who a programmer is. For example "programmers are born not made", this is misleading and wrong because anyone ready to the pay the price could become a great programmer. The right mindset needs to be developed. Programming is a complex discipline involving science and art intricately woven together.
Just like in learning other crafts, the 10,000 hour by Maxwell Gladwell is applicable here. This rule suggests that it takes approximately 10,000 hours of dedicated and focused practice to become an expert in absolutely anything! Applying this rule to programming means you can become an exceptional programmer in the next 5 years if you can begin to practice for 5½ hours per day starting from tomorrow.
If you are still enthusiastic about becoming a programmer, then the seed of becoming a great programmer is in you. Nurture it till you become an expert one day and always remember that "Rome wasn't built in a day". Consider the following, clues that can guide you in the becoming of an exceptional programmer.
Read up on some elementary computer science
Now don't get scared because you saw computer science. The sad news is a major difference between great programmers and good programmers is their knowledge of computer science. The good news is that just the knowledge of rudimentary computer science can get you by for a very long time. Conventionally computer science is taught within 'four walls' and by boring lecturers but with the proliferation of educational materials provided by the world-class university on the Internet, anybody with reliable Internet access can access these materials and learn what is necessary. Here are some of the things you should read up on algorithms and data structures, different programming paradigms, logic and a little knowledge about how hardware works would also be beneficial. If Internet access is a problem for you and you are low on cash then you can always borrow relevant books from your computer science major friends or better still sit them down over a couple of beer bottles.
Learn relevant programming languages
Pick and master the right tools
Here is a simple analogy. A farmer using the most modern machinery (tractors) with the right set of skills has the potential of producing multiples of what a farmer using archaic tools (cutlasses, hoes) will produce given the same environmental conditions. As a programmer, you have access to a plethora of software tools. For example, a programmer who wants to develop Mac and iOS native apps should rather invest in a Mac PC, an iPad and/or an iPhone than investing in a Linux-based PC and an Andriod tab or phone. This also applies to your choice of software tools. These set of tools include your workstation (Integrated Development Environment - IDE as they call it), browser plug-ins (for web developers) and even your graphics editing tool. Also when choosing your tools, note that most IDEs do not support more than one languages or platforms. For example, Microsoft Visual Studio supports the development of all types of Windows-based apps (PC and mobile) but useless if you want to develop non-Windows-based apps like Andriod, iOS or Linux apps. A simple way around this is to have a wide range of software tools in your arsenal. Ultimately use tools that you are most comfortable with.
Most good programmers only live in their heads; this often shuts them off to the beautiful world of collaboration. A great programmer is usually one that collaborates with other programs with the aim of sharing knowledge and collaboration on projects. Also even though. A forum could also be a place to ask technical questions relating to a project you are currently embarking on. Note that a forum doesn't have to be formal or official; it could be you and four of your fellow geek friends. It can also exist on the Internet or at a physical location.