I talk to a lot of junior developers. I talk to a lot of hiring managers. The former feels a lot of pressure from the latter to come into the job market armed with skills in specific framework. React, Rails, Angular, whatever. First of all, good hiring managers should not be exerting this pressure because good developers can learn and good managers can encourage them. It’s unrealistic to expect junior developers to know frameworks that solve problems they’ve never experienced. They’ll struggle every step of the way and never really get it.

If you are that junior developer and you know you need to learn React, or MEAN stack, or whatever, I suggest you take a step back. It’s unrealistic for you to expect yourself to learn a framework that solves a problem you’ve never experienced.

Instead, start by looking at the value proposition of the framework. In the case of React: a JavaScript library for building complex user interfaces with a virtual DOM and one-way data flow. Does that appeal to you as an easier way to do something you’ve tried to do? Look at the examples on the home page. Is your reaction “wow, this solves a problem I’ve had”? If not, you’re going to struggle to learn it. The examples are especially instructive: does building a to-do list app on the front end sound hard? Have you done it? Try. Try it using the technology you already know. Try to make it good enough that you’d use it. It will get hard. Push through it, then look at React again. It will probably make more sense. Then try building the same app in React, comparing as you go.

If you know you need to learn Rails, do you know what Rails does? It’s a web application framework. Does that sound useful to you? Have you tried to build a web application before? It’s hard. Try it. See if you can put together a simple web server with Ruby, or whatever other language you know. Can you respond to a GET request? What about a POST request? Can you store the contents of that request in a database? If you find this doable but tedious, try using a simple framework like Sinatra to do some of the repetitive stuff for you. Keep going until that sucks, then look at Rails again. It should make a lot more sense. If not, keep going until it really sucks.

I never really got JS frameworks (Backbone being the dominant one at the time) until I had struggled with the limitations of building a fairly complex AJAX-based UI with only jQuery. I was never very useful with Rails until I had walked away from it, leaned to build a web server with only node, and felt the pain of trying to scale that web server into a web app.

Frameworks don’t exist to impress people or make your life harder. They exist to solve problems. People use them because they have those problems. If you want to know the framework, it helps to know the problem.

If you’re looking at “learn Rails” or “learn Angular” as the problem, then you’re going to have a hard time knowing where to start, and it will be hard to know if you’re progressing. If you can reframe the problem as “learn how to build complex, interactive UIs” or “learn how to build web applications” then the framework becomes a tool for solving the problem, and learning it won’t be a chore, it will be a discovery.

PS. The aforementioned hiring managers would be disappointed if I didn’t mention that Shopify is looking for developers to help us solve problems, so take a look at our job postings if you’re into that sort of thing.