“Should I learn Ruby and Javascript at the same time, or focus on just one?”

You might not feel like you have a choice - especially if you want to create web applications. You’ll have to learn Javascript eventually, so why not just learn Javascript in parallel with Ruby? After a couple months of trying to learn them at the same time though, you’re still spinning your wheels.

How do you iterate over an array in Javascript vs Ruby? How does Ruby handle variables differently? How do you organize your code in the two languages? How do you load and use third-party libraries? What does idiomatic code look like, and what is just hacky BS?

What if you didn’t have to go around in circles, getting concepts from the two languages mixed up with one another? What if you could learn a second language faster, by building on the knowledge of your first language? What if you could write interesting programs right now, and then build on them later? What if you knew exactly when you should expand your horizons and begin learning a second language?

To explore these questions, we’ll revisit our good friend, the Theory of Constraints.

If you’re unfamiliar, the Theory of Constraints tells us that in any given system, there’s one bottleneck that constrains the throughput of the entire system. Increase capacity downstream, and you create waste. Increase capacity upstream, and you overload the system - potentially causing it to fail at the bottleneck. That’s one way to identify the bottleneck… but how can we identify it without causing systemic failure?

Deliberate Discovery helps us identify the things that we don’t know. In a nutshell, Deliberate Discovery addresses the fundamental truth that we begin projects at the peak of our ignorance, and we gain understanding as we work. Accept and embrace this principle, and you will uncover the hidden obstacles that will cause your project to fail. Ignore it, and you’ll constantly find yourself running headlong into obstacles, with no idea why.

Let’s return to the original question: Should you learn Javascript and Ruby at the same time, or focus on just one? While many people will give you their opinion, I can only turn it back to you as another question: Which approach will address your primary constraint?

If you’re thinking, “I need both to create web applications, so I should learn both!” then I urge you to take another look at the Theory of Constraints. Here’s a little experiment:

If you already know Javascript and Python, and you want to create web applications, what good does it do you to learn Ruby? None at all! Just create web applications! If you want to create web applications in Rails, that’s a different story… but that wasn’t the goal.

If you don’t know Javascript or Ruby, and you want to create web applications… what then? Remember, if you increase capacity upstream from the bottleneck, you’ll overload it and cause the entire system to fail. Try to learn both at once, and you’ll overload the most important system of all – your brain. You’ll spend months getting the two languages confused, all while wondering why you can’t even write basic applications in either one.

There’s no easy answer to the question - that’s why we apply tools like Theory of Constraints and Deliberate Discovery to figure it out. Here’s a heuristic you can use though: Can you consistently create computer programs using one language? If so, you might be ready to branch off and start learning a second. If not… you’re setting yourself up for failure by biting off more than you can chew. You simply don’t know what you don’t know, and it will bite you in the ass.

I could end things by giving you the classic consultant’s answer – it depends – but that doesn’t do you much good. If you knew what you needed to do, you wouldn’t have read this far. I’ll ask you one final question:

When you look at your GitHub, what do you see? Do you see a bunch of custom-built software that you know inside-and-out, or do you see a bunch of programs that you copied line-by-line from tutorials? Or do you see nothing at all…?

If you’ve already written lots of custom software, then you’ve addressed the primary constraint - you know how to program. If you don’t have any code you can call your own, then trying to learn multiple languages will only make things more difficult for you.