First of all, let's start with this - you probably won't become a very good software developer in 5 years and that's OK! If you are very lucky and depending on your background you might become a semi-decent one. Of course that's a bold statement, highly opinionated and insanely subjective but bare with me here. This article does not aim to tell you what you can and cannot achieve, rather inspire and highlight a few topics that maybe don't get mentioned as often when people are talking about taking up a career in software engineering. I believe these topics just as important if not even more so that the programming language course you are taking right now. There are many articles on the topic of what path to take, what books to read and courses to participate in. This article takes a fundamentally different approach to the subject. You will only find here topics I wish someone had pointed out to me when I was starting out.
These topics are in no particular order, because at the end of the day you might want to do some of these things and others not. Chances are each topic has a different level of meaning for each and every one of us. I like to think of this list as ingredients in a recipe where the end result always ends well, however the seasoning amounts vary depending on your taste. I hope you find here something useful.
Github. You definitely need a Github account. That's where open source and a lot of cool projects happen. You also probably want to have your repositories mostly public as that is a good starting point to collaborate with others, to receive feedback, issues and pull requests. This is easily one of the most important accounts to have. More and more recruiters would rather take a look at your Github account than even a portfolio page. It is easy for your future managers and collegues to get an idea of how you write code. You should also do a lot of reading on Github whenever you can. Reading quality code and really help you grasp how things are built efficiently.
LinkedIn. Definitely a must have. I'm not LinkedIn's biggest fan and I never managed to get a really useful feed in that professional social network, however many companies and recruiters are lurking there and monitoring for worthy job candidates. Could potentially help boost your visibility.
Twitter. I absolutely suggest you make a Twitter account if you don't have one yet and work on your feed. Following the right people and organizations and creating custom lists could help you to organize the content and at least in my experience Twitter has been an amazing platform. Many very useful discussions happen there first before they even become a project on Github and so on.
Reading, listening and watching
Reading. Most people will recommend reading a bunch of books and that's great. If you have the time and find it that this works for you go for it. I'm not saying books are redundant, actually I have read a few myself and I am absolutely sure I will read if anything even more books the deeper I get into the field. I'm more of a practical learner and so I focus on that but we will touch base on that in a bit. I do however recommend reading source code on Github. Projects you are interested in, go there, check them out, see how people build stuff. Especially if you know it's a decent quality codebase - it can give you ideas on how to implement things.
Listening. On the listening side of things, if you have a longer commute to work look for some podcasts. There are plenty of lists our there that recommend good quality podcasts. The thing about podcasts (at least for me) is I love the discussions and sometimes learn things not even connected with the main topic. Small interesting bits here and there. The two podcasts I started with are The Modern Web and The Web Platform.
Watching. I have watched a lot of tutorials primarily on Youtube and there is a lot of quality material out there. As I have stated in the beginning, I'm leaving this part up to you. In my case, videos help me get started many times, but the ultimate way of getting used to a technology is trying it out. Also the amount of time I spend reading code in Github versus watching Youtube tutorials has shifted drastically in the past 2 years. What works for you?
Power user & their tools
I use Trello heavily to organise my projects into boards and lists. You can use Trello as a Kanban board or in any other way to suits you. For me it was important to introduce structure to my ideas and projects. I also use a list that I archive monthly in which I move the completed tasks from different projects. This also provides a motivating sense of accomplishment.
Learn to use your editor or IDE. Like, really! For the past 6 months I have been deeply in love with VS Code which is an amazing open source editor, I strongly recommend it. There are plenty of other viable options but to highlight a couple - I loved using Atom for about 1.5 years and I have also used Sublime Text. Take the time and invest into learning some key combinations for tasks you repeat hundreds of times daily. For example, deleting a line, duplicating a line, navigating the document. It may be funny to you, but those could amass to some real time savers in the long run and make you VERY efficient. You don't have to learn it all in one day, give it time, but I promise you it's worth it!
Communities, conferences and hackathons
Hackathons. I find all three of those enjoyable but your experience may vary. Hackathons are always interesting to go to and challenge yourself and your team mates to deliver something useful in usually 24 - 48 hours. Great oppurtunity to get thrown into a technology you have no clue about and grasp its (basics) in a few hours, especially if you mentor each other with your team members.
Conferences. As far as dev conferences go Google I/O, Microsoft Build, Apple's WWDC, Facebook F8 and maybe worth watching / attending. I usually also follow Chrome Dev Summit, Polymer Summit and a bunch of other ones. There is a lot of choice out there and many of the videos make it to Youtube. Borderline evangelism, however many times very inspirational material.
Community involvement is a good opportunity to meet like minded people at a React, Vue or Angular event, for example. Many projects have also a Slack, Discord or Gitter channel where you could ask questions and discuss topics with the community. Spectrum also just launched a couple of months back and is definitely worth checking out.
Work and open source contributions
Get a job as soon as you can. Learning from a real production environment and understanding development pipelines is very beneficial. On the other hand, getting into open source projects is also very much worth looking into. Maybe you could even do both for a while, just don't burn out and stay healthy!
Getting into open source could be easy or hard, depending on your current skills, projects out there and free time. But there always is a way if you really want to get involved (which I highly recommend). This is also something I'm working on and looking forward to being even more active in OSS in 2018.
If all else fails - start your own open source project. If you are passionate about something and have fun coding it, you will learn a ton and might even attract other people. Work on projects to solve problems, provide value and learn. It is trully the best thing for your career. And if you excuse my poor paraphrasing:
"Never forget that every good programmer is only there because they once did work they were unqualified for".
Good luck and have fun building things 🚀