This is gonna be a rather long and highly opinionated post on mastering programming so I advice you grab a cup of coffee and sip slowly as you read with an open mind. Like I said, the points aren't laboratory certified ways of mastering programming 1, because I'm not a master programmer yet (at least per the people I keep as mentors) and 2, because what worked for me may not work for you. Pass what you read here through your own filters, assimilate what resonates with your style and shove the remaining shit out of your brain.
Choosing A Programming Language
I'll urge you to love to be a polyglot (be able to program in multiple programming languages). Choose at least 1 mainstream programming language eg. Java or C# .NET or PHP and some other non-mainstream programming language eg Python, Ruby, R etc. Your location determines what's mainstream and non-mainstream. In Ghana, Java & C# are mainstream. Also, master different languages for the different paradigms especially OOP and functional programming. If the only tool you've is a hammer, every problem appears to you as a nail. It easier to find a not-so-well-paying job with your skills in the mainstream. Conversely, it's difficult to find a job with your skills in the non-mainstream but remember to say thanks to Pie when you hit that high paying job which needs your skills badly.
Master Syntax & Semantics
The best way to learn any programming language is to master the syntax and semantics of the language. Don't sit all night cramming crap you don't understand into your head. Until you learn to understand, you can't really build good stuff with your language of choice. Don't rush it. You aren't in any race. Slow it down, learn it well, understand it and use it well. Learn to share your knowledge freely once acquired. Don't fool yourself by thinking it's an advantage if only you can do it. You know why? Simply, you don't know shit. People know more than you do yet they are humble and love to share. The more you teach, the more you understand.
Learn & Apply Design Patterns
You don't know of design patterns? Meeehn, you're so not current. A simple Google search will land you on some awesome sites where you can learn and apply design patterns. It will help you avoid writing spaghetti codes and also shun voodoo programming. Don't spend hours wondering how to write some piece of code. Some older dude faced similar issues, fixed and documented the procedure just to make life easier for your lazy ass. Sorry, you ain't lazy, you wouldn't have read this far. lol!
Read & Write Lots of Codes
Until you read code written by others you may think you're the best programmer ever created. Code writing is easy, code reading isn't. Every developer thinks the other guy who wrote the code he's been called to maintain is an idiot. Why? Simply because you've bad code reading habit or maybe the guy was indeed an idiot, a typical text book example of an idiot. The pun and jokes not withstanding, take these points serious. You learnt how to write code, you've to learn how to read code as well. Join some open source projects, get insulted and intimidated by the experienced dudes. They won't forgive you for posting stupid code, you'll get hurt but you'll dare not repeat yourself.
Invest In Your Skillset & Toolset
Make learning a life-long process. Buy books if you've the means, watch video tutorials. Never enter tomorrow being the same person you are today. Wake up every morning knowing you're a better person. Buy good computers. Use your snail-paced PC for a doormat. Save and buy some fast computer, at least fast enough to launch your IDE before you blink 10 times. Know what you don't know and never be satisfied with what you know. If you don't know, and you don't know that you don't know then you're a fool.
Have A Mentor, Be A Mentor, Change Mentors & Don't Be Changed As A Mentor
Have A Mentor
Whether you like it or not, you aren't the best programmer. Every other programmer, even the greenhorns know something about programming that you don't know. That you've programmed for 20 years doesn't make you the best programmer around. Stop crowning yourself in your utopian world. Shove your pride up your ass, step down, get someone who's better than you, humble yourself and learn from this guy. Choose a mentor and learn from him.
Be A Mentor
The best way to learn is to teach. You'll hardly forget what you've taught over and over. Don't be stingy with your knowledge. The truth is, you don't know jack. Others know more than you do yet they freely share. If someone sat on this knowledge you wouldn't get to know of it. Count the number of books around you, the number of videos freely available, the write-ups, the blog post etc. How greedy and stingy can you be. Can you lock up the whole internet into your pocket? You see, there's no sense in holding onto some knowledge as though it's your personal property. Share! Share!! Share!!!
Once you're able to communicate with your mentors at par, you are colleagues. At this point, a wiser thing to do is to choose you mentor's mentor as your new mentor or choose someone better than your mentor as a mentor. Whether you like it or yes, there's always someone up the the ladder. Hating is diabolic and unhealthy. Humility and curiosity is key to the acquisition of knowledge. Acknowledge the fact that your aren't the best and you won't be the best but you can be among the best. Change your mentors frequently. It's a measure of how fast you're growing.
Don't Be Changed As A Mentor
If your mentee chooses another mentor it means he's got to your level and you aren't growing. Keep growing your knowledge. Learn as though you're gonna live forever on earth. Find great joy in increasing your technical know-how on a day-to-day basis.
Don't Be Complacent
In the land of blind men, the one-eyed man is the King. In Ghana, anything above a freaking HelloWorld is worthy of an award. That there are few techies around doesn't mean everything should be over hyped. A full grown hairy man creates a damn app which notifies you when you get a letter at the post office and it get featured in our contentless media. You build static websites and get carried on shoulders by incompetent people holding highly influential positions. Hey, village programmer, Ghana or African isn't the only place on earth. There are better programmers elsewhere who are worth looking up to. Truly, there are equally good local programmers who are worth mimicking. Have big dreams. It's not about an app which tells you how much damn calories you've burnt. Who cares if your burnt the hell out of yourself. It's only about solving the very simple problems in society. Guys, stop acting as though you're at silicon valley. Silicon valley ain't no joke. Here's silicon savannah, embrace it. Know where you are, know where you wanna go to and you'll know how to get there. Kill your pride because your pathetic degree isn't even a match for someone's primary education. You were taught Computer Science by some lecturers who haven't even written code to parse a file. Your final year project was a useless blah blah blah management system which is sitting in dust by now.
I'm telling you the hard truth you've never heard and you're probably thinking "who the hell does this Pie dude think he is". Sorry man, I'm an honest and proud African who wants Africans to be known for the good things we do and not the copy-cat wanna-bees we've been for decades.
Have big dreams, dream about working for intelligent tech companies across the world. Work with some of the smartest people around. Learn from them! It's not only about some half-assed software. It's not about engaging in mental masturbations. Thinking you're the best. Stop painting Africa black with your mediocre bullshit inventions.
I don't think of my self as the best programmer, I only aim to be among the best in the world and that's what I'm constantly working on becoming.