DEV Community

Discussion on: When do you become a Jack of all trades but a master of none?

Collapse
 
joshcheek profile image
Josh Cheek

Hi, Hannah! My opinion is that it is worth becoming a master of at least one (probably, ideally, two), and that these phases of learning lots of new things and learning a lot about a specific area should come in alternating waves.

It is worth mastering at least one because it will give you a very in-depth competence that you can rely on when you want to play with an idea. You can rely on your knowledge of that language to remove the language as a hurdle when you want to try building an HTTP server or a tool to get something done that you're interested in / find useful. One thing to keep in mind is that when you're learning something new, you're paying a lot to get past the learning hump. For example, I've found that really new things require somewhere between 5 and 25 failures (like real solid attempts and just thoroughly failing) before I can use them to accomplish a real goal.

It is worth alternating these phases because it will open your eyes to new possibilities. Consider the 80/20 "rule", which says 20% of your time is spent getting 80% of the value, and 80% of your time is spent getting the next 20% of the value. So if you only spend your time learning new things, you're constantly in that high-effort for low-payoff area. But if you only spend your time in an area you're already competent in, then you might have mastered the tool in your toolbox, but that tool is a hammer and is a very poor fit when you need a screw or a saw. So by alternating, you allow yourself to build a competence (that honestly translates generally), and also a breadth of familiarity.

Since you're asking about languages, I'll recommend you try to get the depth of familiarity in something to address the browser, the server, and something lower-level like a systems language. Paradigm-wise, I'll advocate you use one "object-oriented" language and one "functional" language. Sort of trying to pick a set of languages that is fairly small, but gives you an ability to address a lot of domains and experience a lot of ideas. I could talk a bit about what probably fits well here, but I don't know your goals and experience well enough.

I'll also point out that you can gain a massive amount of knowledge in a short time by implementing your own mediocre versions of tools you use. In this case, that means writing a language. Based on what you're saying, I'll recommend "The Elements of Computing Systems" aka "NAND to Tetris", which will have you write something like 5 languages, each building atop the one before it. The only one that is really difficult to build was the very last one (because that language was sophisticated enough to require nontrivial parsing).

Collapse
 
joshcheek profile image
Josh Cheek • Edited

Oh, just looked at your profile and I see it says "A die hard software developer. I do Ruby, Javascript, DevOps and currently learning Golang" That seems like a really good set of core languages to me. JavaScript gives you access to a ton of domains, it's the most popular language right now, and will only continue to grow. Ruby is a wonderful language, its the best scripting language that exists IMO, and has a nice ability to be refactored towards the level of abstraction that you need (ie it scales from "script" to "program" very nicely). Go gives you systems access, it's super fast, it does concurrency better than either of the other two, and exposes you to a type system. So investing further in each of these languages will set you up very well!