It's a great idea to educate yourself further as a programmer.
I fully subscribe to the idea of lifetime learning–and you should too.
But, in the software development field, sometimes there are so many new technologies, so many things to learn, that we can start to feel overwhelmed and like all we ever do is learn.
You can start to feel like you are always playing catch-up, but never actually getting ahead–not even keeping up. The treadmill is going just a few paces faster than you can run, and you are slowly losing ground, threatening to drop off the end at any time.
Trying to learn too much
The problem is trying to learn too much. There are 100 different technologies you have to work with or want to work with at your job. You might feel that in order to be competent, in order to be the best you can be, you need to learn and master all of them. The problem though, is that you feel like you haven't even mastered one of them.
It can be a pretty disparaging feeling. To counter that feeling–which sometimes demonstrates itself as impostor syndrome–you grab books, video courses, and all kinds of resources on all the technologies you feel that you need to master.
You spend your nights and weekends reading books, going through online training, and reading blog posts.
But. is it really effective, or does it just stress you out more?
Do you even remember half of what you read?
Will you actually ever use it, or are you storing it away for a someday-I-might-need-this-bucket?
My point isn't that you shouldn't be learning, it's just that perhaps you are placing too much pressure on yourself and trying to learn too much.
I'm only saying this, because I've been there. I've done that. I know how it feels.
I also know that this forced pace of learning isn't very effective. I don't remember much of the majority of books I read about technologies I didn't end up using or barely ended up working with.
I know that the technologies I learned the best were the technologies that I actually put into practice. In fact, some of my most useful, and retained learning, came from learning I did on the spot, right when I was working on a problem I couldn't solve and had to go find an answer.
It may seem strange that someone like me who makes a decent portion of their living creating learning materials for software developers would tell you to not try and learn too much.
It probably would make much more sense for me to preach that you should absorb all the information that you can; that you should be continuously watching my Pluralsight courses while you eat, sleep and commute to work.
But, the truth is, I don't think that is the most effective way to learn. I don't think you'll get much out of one of my courses, or anyone else's, if you just repeatedly watch them.
Instead, I think the best way to improve your skills and to learn what you need to do is to do the learning as close to the time you need the information as possible–just-in-time learning.
Now, this doesn't mean that you should just start working with a technology before you know anything about it. You'll waste a lot of time flopping around trying to get started if you just dive right in without any prior knowledge. But, I've found you only need to learn three things before you can dive in and start working with a technology:
- How to get started
- What you can do with the technology–how big it is.
- The basics–the most common things you'll do 90% of the time.
It is no coincidence that I structure most of my online courses in that way. I try to tell you how to get started, show you what is possible and then give you the very basics. I try to avoid going into details about every little aspect of a technology, because you are better off learning that information when you need it. As long as you know what you can do, you can always find out how later.
Often the hardest part of learning a new technology is learning what is possible.
I've found that the faster you start actually using a technology and trying to solve real problems with it the better. Once you've covered the three bases I've mentioned above, your time is much better spent actually working with the technology rather than learning about it further.
It's difficult to break away and jump in though. Our instincts tell us that we need to keep reading, keep watching videos and continue to learn, before we get started.
You might feel compelled to master a technology before you start using it, but you have to learn to resist the urge. You have to be willing to fail and learn your way by making mistakes and hitting roadblocks. Real learning takes place when you use information for a purpose, not by trying to acquire it ahead of time.
If you know what can be done in a technology and you know enough of the basics, it won't be difficult to figure out what search term you'll need to come up with in order to answer any questions you have along the way. This just-in-time learning will be more effective in the long run and save you many wasted hours consuming information that you won't fully digest.
You can't know everything
Even if you had all the time in the world to learn, and even if you apply just-in-time learning techniques, you still won't ever learn a fraction of what there is to learn in the software development field. New technologies are popping up every day and the depth of existing ones increases at an alarming rate.
It is important to face the reality that you just can't know it all. Not only can you not know it all, but what you can know is just a tiny fraction of what there is to know.
This is one of the main reasons why I talk about specializing so much. You are much better off picking a single technology that you can focus on learning in-depth than spreading yourself too thin trying to be a master at everything.
That doesn't mean you shouldn't expand your skills in many different directions; you should definitely try to have a broad base. Just don't expect to be an expert in more than one or two main areas of focus. Try to focus your learning on two main areas:
- A single specialty that you will master
- General software development skills that will apply to more than one technology. (For example, a book like Code Complete falls in this category.)
Don't try and spread yourself too thin. Rely on your ability to learn things as you need them. If you have a solid base, with time and experience, you'll find that you can learn whatever you need to know when you need to know it. Trust yourself.
Sometimes it can seem like there are super-programmers out there who seem to know everything and can do everything, but it is only an illusion. Those super-programmers are usually programmers that have one or two areas of expertise and a large amount of general knowledge that they apply to a variety of different domains.