As a software developer, having the ability to learn and adapt is probably the most crucial skill to have. Coming at a problem with no prior knowledge, sitting down and figuring it out is what you're paid to do. But how do you get better at learning? And how do you make sure that time isn't wasted?

It's All About You

A usual bit of Junior Dev Diaries advice is introspection and self-awareness. Take a good look inside yourself and figure out what works for you on learning. If you're reading this, you've probably already done some some high school, maybe even some tertiary education such as college, university, tech/tafe or a bootcamp. By now you should know what works and doesn't work for you. If you haven't, consider this - what do you know the best right now? What do you know the least? (Choose things you feel you put equal effort into). Now, try reverse engineer what you did while you were learning that? Did you stick to videos? Written tutorials? A fun project? Were you at work? Side project? Did you stand to get some sort of financial gain?

Taking a look at these factors can tell you a lot about how your own brain works, and then you and your brain can work together on the next piece of new tech that comes along. 

It's Meant To Be Learnable

A lot of the tech you'll be learning probably is designed to be learnable. It'll have docs, tutorials, example code, etc. Someone has spent their time writing that with the hope that you'll understand it. If you're struggling, just keep this in mind and try again. Also, if you find the documentation lacking, you can always fix that with a pull request. Also do a search on YouTube, for every technology there's at least one video tutorial out there for it. Thank you, YouTubers! 

Mental Models

One of the more common traps when learning new stuff is going into a new technology with a faulty mental model of how something should work. Your brain starts to skim the content looking for matches to expected components of the technology, and they just don't ever show up, and you get no where. If that's the case, stop, breath, and drop all your assumptions and try again. This may well be completely new to you - and really, a little bit of knowledge can sometimes be worse than none at all. 

Document Your Learning

When you're learning a lot or doing a bunch of research all at once. Start a running doc (or something) and copy in urls, terminal commands, observations etc. It's really easy to get lost when you're hacking together something so it's good to have your history noted down. And, once you've done that, you can document (not create) your learning as a blog post, as per my earlier post. Once you have this, others can see the path you took and software developers find these experiences valuable for improving developer experience and documentation. 

Augment Your Learning

Augment your learning by attending meetups. Get out there and socialise with others learning about the same tech, and hear from thought leaders and experts in the topic. Rightly or wrongly, a lot of people in this industry love to explain tech to newbies, so it's of great advantage to you to listen and learn! In addition to meetups, there are often Slack Groups and tech newsletters to subscribe to on the topic. Not to mention Twitter and it's use of hashtags, such as #swiftlang or #golang.

Share What You Learn

Another theme readers will know from me is paying it forward, and sharing what you've learned is a great way to do that. (Heck, it's what I'm doing right now!). For new things learned, my personal favourite is presenting in the office at our weekly "Tech Awesome", which is a chance to share what you've learned. A simple blog post with a decent dash of humility thrown in also works well. Don't try to act too authoritative on the topic, you're just new.


Choose What To Learn Carefully

Finally, don't spread yourself too thin. There's no way you can learn everything but a little bit of a lot of things will be helpful. Try to find something you like (or 2-3 things) and go deep on those - this will be what you introduce yourself as (for example, I introduce myself as a ruby and iOS developer... but am familiar with EmberJS, Elixir, Python, and even some Go and Scala and DevOps techniques). Pick what you want to learn and go with that. I've written more about this in one of my earlier posts about choosing a direction as a junior developer.

As you set out to improve your pace and skills in learning, I wish you the best of luck. Its about knowing yourself, getting stuck in and understanding it well enough to teach another and bring your team forward. Have fun!