Should you learn Angular 1? Did you know Angular 2 is out? They actually recently released Angular 4 recently too.
What about Ember? They had a big rewrite. And Ember 2? Isn’t that better than ever?
What about React? What should you learn? How do you stay up to date?
And what about WebPack?
Everything in the programming ecosystem is changing so fast.
Take a deep breath…
You’ve got this.
In 1975, Frederick Brooks wrote a book called the Mythical Man Month. In the book, Brooks discusses situations where programmers work together. Believe it or not, pretty much everything he talked about still rings true today.
This is despite the fact that Brooks was working with the ALGOL programming language and OS/360 while writing it. These are two technologies that are distant relics of a prior generation of programming.
The good news is… in programming, some stuff simply doesn’t change that much.
Most new programming languages and frameworks adopt core programming ideas and use them in different ways.
To put it another way, a lot of programming ideas are like episodes of the hit 1980’s show The A-Team. In my opinion, this is arguably one of the best shows ever created.
If you’re tuning into a new episode of The A-Team, you can be pretty sure that a few things are going to happen:
- Mr. T is going to refuse to go on a plane.
- A member of the crew will give him some milk, which has sedatives that will cause Mr. T to pass out.
- HM Murdock will fly the crew out.
- The bad guys will get what’s coming to them.
The specific details of each episode might change a little bit, but you really only need to watch one or two episodes of the show to get a feel for what to expect.
The same is true for programming. Different programming languages might have slightly different syntaxes and nuances, but overall they are pretty similar.
Big picture concepts work in different languages.
For example, to understand Ruby, you need to understand how to break problems down using object-oriented principles. If you look at other programming languages like Java, C++, C#, and Swift…they all are object-oriented too! Python? You guessed right! It’s also an object-oriented programming language.
The same can be said about inheritance.
The underlying skills of programming aren’t necessarily flashy. And they don’t change around a lot. This is good news!
This means programming skills like…
- Learning how to break large complex problems into smaller, more manageable problems, using individual function calls.
- Breaking apart classes into multiple classes with a single responsibility.
- Researching programming problems to find out if other people have found the solutions for them.
And even more specific things like…
- How Ruby on Rails uses a Model/View/Controller patterns to separate the responsibilities of a web application.
…can apply to other languages and frameworks too! ExpressJS, for example, is another popular web framework. You can break apart those applications using the exact same patterns that you follow in Ruby on Rails (if you want).
Focus your efforts on the below things:
- Learning how to break apart problems
- Working on an agile team
- Mastering the big picture concepts
If you do all of that, you’ll be able to build real projects in any programming language.
Don’t fall into the trap of endlessly chasing the next shiny new thing.
It can be tempting to try to learn it all…only understanding things at a surface level. Don’t.
You can go wide or you can go deep, but you can’t go both.
If you choose to focus your energy on deeply learning a specific tool or framework, you’ll find it easier to draw on your experience to help you learn an additional language or framework.
The flashiest aspects of a particular skill aren’t necessarily the most important.
If you go on Hacker News, you’ll find a variety of cutting edge technologies.
If you’re looking to break into the field of web development, should you go all-in on a cutting edge technology like Elixir or Rust?
It’s just not practical to go all-in on something that might not have a big community. You’re losing out on a wealth of people with practical experience to learn from just in case something may or may not take off.
Instead, it’s much more practical to pick a proven technology with a wealth of information and learn the fundamentals of programming in that language.
Think about this:
What do you think Jason Mraz, Lady Gaga, Bob Marley and Elton John have in common? Probably more than you might imagine.
If you listen to Axis of Awesome’s Four-Chord Song, you’ll realize that all modern pop songs follow similar formulas…even from pretty radically different bands. In the case of the specific song, if you use a pretty standard four-chord progression, pretty much every pop song ever can fit into it.
The same is true for programming languages and frameworks.
Once you learn one or two languages, picking up another isn’t terribly difficult. Different languages have different features, and when you get experience working in a couple of them, you’ll appreciate the benefits and drawbacks of the different languages.
It’s important to really master fundamentals early in your career.
If you’re just f to becoming a professional developer, focus on the stuff that won’t change first.
I’ve recently written about how I got hired as a web developer with virtually no experience in web development. I got hired because my fundamentals of programming were really strong, even if I didn’t have a wealth of experience with the specific language or framework.
If you take this mentality and focus on breaking apart complex problems into easier to manage ones, you’ll learn the skills you need to stay relevant as a programmer…even while everything is changing around you.
So if you’re terrified of making the wrong decision, take a deep breath.
The fundamentals of programming will apply to any programming language, framework, or mentality.
Pick a language, learn it, then really master it. In the process, you’ll master the fundamentals of programming and be able to apply them to any other language or framework later down the line.