My answer would be more relevant to those who are in college or are at the very most 1 - 2 years out of college. Further, this answer would be primarily from the job perspective - how to learn programming so that you can get a great job?
- Prepare for interviews. Almost all your skills would be useless unless you are able to crack the interviews. Each company has a well-defined interview procedure to hire Software Engineers. By-and-large it is the same for all the companies - 1 screening round (resume shortlisting), 1 coding test, 1 - 3 rounds of technical interviews. All of the interviews are generally focused on Data Structures and Algorithms, or rather, problem-solving capabilities. Some companies also focus on specific skills for which they are hiring. As an example, if the company is looking to hire a Web Developer, expect questions from your projects on Web Development. Similarly for other skills. I have seen people who complain - why do companies ask Data Structures and Algorithms while I would be working on Mobile App Development? Well, if you want a great job, stop crying, start preparing.
- Diversify your skill set. At the college fresher level, it is recommended that you should try and be a jack of all trades, master of none. This way, you will throw a wider net when you try and reach out to companies. For instance, an ideal resume would have 1 - 2 Web Development related projects, 1 Mobile App Development project, 1 project around Machine Learning, 1 - 2 projects around Operating Systems/Databases and obviously an internship experience. I have seen some students who try and specialize in a specific domain - most commonly Machine Learning. I am not saying it is bad but remember, companies would generally not value your specialization too much, certainly not at the fresher level. Unfortunately, that’s how it is and you’ll have to live with it.
- Build a network. Yes, programming skills are important. However, networking skills are equally important. You should have friends/colleagues who should be willing to help you connect with HR from their company in case you want to shift.
- Create an online presence (build a personal brand). Try contributing back without the expectation of getting anything in return. You would be amazed to see how much you’ll get back, without even asking. Today, due to my online presence on Quora, LinkedIn and Facebook, I get an opportunity to connect with so many smart people from all over the world. A recruiter from Google contacted me seeing my Quora profile. Of course, I never started writing Quora answers with the expectation of being noticed by Google recruiters.