Most of this is just me restating what is probably common sense to most people but I struggle with this and it’s my blog so I’m going to write it anyway.
Trying to launch my own product using a tech stack that I’m not super familiar with (Rails) has led me to the following conclusion:
- The best way to learn a new technology is use it to solve a simple problem or a problem you already know how to solve
- The best way to solve a complex problem is to use technology you’re already familiar with
Again……common sense to some but I think it needs to be restated because some people struggle with it. This is strictly from an efficiency point of view, it’s a LOT more efficient to focus on learning one thing at a time instead of multiple.
I’m not saying it’s not possible to learn both at the same time it’s just not very efficient. In developing my own site I find myself thrashing about with some Rails aspect I’m not familiar with, and a couple hours later asking myself what I’ve accomplished (hint: it’s not getting my site done). My goal is to launch my site but instead at times I’m learning Rails.
Some technologies though are worth the double learning curve (complex problem and new tech) because as you get better you’ll outpace where you would have been without it. This is how I feel about Rails. For now I’m sticking with it, but it’s painful to get a couple hours of work done and really have nothing (UI-wise) to show for it.
If Your Goal is to Learn A New Tech (Efficiently)
|Simple Problem and You Know How to Solve||Simple Problem||Complex Problem but You Know How To Solve||Complex Problem|
This is why Katas are so important (IMO). Our local Clean Coders user groups Cincy Clean Coders and Dayton Clean Coders do a good job picking simple problems (Katas) and providing an environment where people can experiment and pick up a skill (TDD, a new language, new framework, not using the mouse, etc). They do a good job because they’re focused!
If Your Goal is to Solve a Problem (Efficiently)
|Tech You Know||Tech You Don’t Know But Is Built For the Problem||Tech You Don’t Know|
If you’re trying to solve a really complex multi-threaded problem then it’s probably not a good time to pick up a new technology stack unless that new stack is specifically designed to solve the problem (Erlang, etc.). If you have to constantly break your train of thought to google how to do xyz you’ll be a LOT less efficient at solving the problem at hand. When you’re familiar with a language/framework and can “think in it” solutions tend to flow a lot faster and there’s a lot less friction between your brain and your fingers.