As a self-taught junior developer, there's a never ending stream of things to learn.
In work we use Ruby, Java and Javascript, so there's three languages with huge ecosystems. (At some point I'd also like to learn Python and C better, and there's enormous hype around the new generation of concurrency-friendly languages like Elixir or Go.) Developers are increasingly taking ownership of DevOps. Not having a computer science degree, I need to explore some of the fundamentals of that discipline more than the barest basics I presently know to get by. There's the craft of good programming- writing truly object-oriented code, design patterns, the new trend of functional programming.
So I'm curious to hear: how do other developers navigate all this? How many hours a week do you invest in learning new stuff, in or out of working hours? How do you prioritise your time amongst these many orthogonal directions in which you could strike outwards?
I have to say that I haven't been good with this but am planning on developing this going forward. The majority of my learning initiatives have been on the job during working hours through tasks that I have been assigned. The best way tot learn is by doing, throwing yourself into a task and solving the problem of completing said task.
I would say that I am lucky to have a computer science degree under my belt as it meant that I was taught from first principles. Key things that you should spend time on if you don't have a computer science degree:
Data Structures and Algorithms: Core module that can and will develop proficiency as a developer. There are great books on this like the Addison-Wesley book available on Amazon. This subject is language agnostic and I would call it hard computer science in that it involves the design and creation of algorithms and understanding of data structures that underpin the fundamentals of programming. I can't express how important this subject is, even-though today many algorithms are encapsulated within programming languages and frameworks a strong and good grasp of data structures and algorithms is crucial in regards to being a good developer/programmer. Subjects like algorithmic time complexity are a must learn.
I have started using Plural Sight for my learning and development goals. I am also taking it in bite size steps(1/2 hours a few days a week) and am planning on developing a number of my own personal projects. A good place to start is focus your learning and development initiatives on the fundamentals and to technologies that are relevant to you and what you are currently doing.
You should consider starting personal projects and hosting these on something like Git Hub. Employers are impressed by physical evidence and examples of the way you are passionate about the industry. Collaborating in communities and using Git Hub to host projects is an excellent way to do this.
In my experience I have been given advice that becoming an expert in all languages and frameworks is unrealistic. You are better off starting with exposure to a particular language or technology then building from that foundation. Exposure and experience in different technologies is better than trying and failing to be an expert in one. Its about being pragmatic and focused because the field is vast.
I was also told when I started working that SQL and database skills are critical to ALL Technical professionals especially developers.