I have been learning and learning new languages every now and then. Yes, I have the basic knowledge of all these languages. My question is, am I slowly becoming a Jack of all trades but a master of none?
For further actions, you may consider blocking this person and/or reporting abuse
Latest comments (33)
I quite like the "Paint drip" analogy from Kent Beck: facebook.com/notes/kent-beck/paint...
Love the responses in this old thread.
I think that there are two diferent things here. If all you do when you code is learn how to create a hello world in
each language, then you are screwed. But if you as a developer put some effort in becoming a better programmer, and think in coding clearer and better, then those concepts Will follow you no matter what paradygm or language you use. I am a tech lead un nodejs and I can't remember if the length of a string is a method or a property. Stackoverflow is there for solving formal stuff. But when I make a code review, I analyze if things are named correctly. If the architectonic patterns are followed. If refactoring is needed and sutch. You must distinwish wich things of a language are just formal concepts and which concepts will make your code more readable and mantainable. After all, the most important role as a developer is create a piece of software that can be understood, replaced or modified by anyonoe. Because requirentes will change and programmers will change. Those are the only certenties
Everything is relative. I believe that starting on a new language It's the most difficult part. It's really great if you already achieved that part and with the basics you can continue to any path.
Complex programs requiere a base knowledge and complex algorithms are made of multiple basic algorithm.
I like to learn new things, I'm stuck on PHP because my work. Here sometimes you find experts that doenst know how to make a simple html form and others newbies that can do almost anything with a good guide.
Keep it simple.
I thought of this question when I came across this concept: en.wikipedia.org/wiki/Lazy_learning
If you applied it to humans, I'd think the moment you become a "jack of all trades" is when you've consistently lazy-learned to the point when you've experienced enough instances where you've learned just enough to solve the problem that the knowledge begins to overlap to form a sort of generalization.
It's great that you're asking yourself that question. From where I sit the answer is easy: Are you attaining mastery in any of them?
Or to be more specific, have you reached the point in any of them where coding in them becomes almost like second nature? Where the syntax just flows from your keyboard?
If not, consider doing what I did and putting a moratorium on learning new languages for a while. Doesn't have to be forever, I took a couple of years off and really dove into learning Python. Best career choice I ever made for myself.
I chanced to read this thread and it resonated deeply. This has been an issue that has dogged my entire technical life (well over a decade) in the software industry.
When I first started in the space, I definitely felt that depth was better than breadth. Better to be really really good at one thing than to know a lot of things. So I got a PhD (in distributed systems & reliability engineering) and my first job in that domain. I worked in it for all of 10 months - then got an opportunity to work on a new project in mobile. I knew nothing about anything in that space, but I was younger and more fearless I guess because I jumped in without worrying about it.
It changed my life and I never worked in the area of my PhD expertise again.
Instead I have since worked on multiple projects (large and small), in different domains, with different stacks, languages and devices. And had to pick up new ideas, tools and technologies along the way constantly. And my takeaway was this. It was not the topic of my PhD that helped me -- it was the capacity it gave me to look at a problem, explore it from different angles and try to innovate solutions by using a wide variety of tools from analogies to trial-and-error to multi-disciplinary collaborations.
So my answer to you is: It depends on YOU. On how you approach the whole idea of learning and applying what you learn. And what your GOAL is when you pick up a new language to learn.
Don't learn for the sake of learning. And don't simply chase after every cool language or technology. Definitely spend an hour reading and absorbing the details but after that ask yourself what your goal is. Then set aside the right amount of time and plan the effort out so that the task itself goes from "just something I did for fun" to "this is what I learnt from doing X and now I can apply it to doing Y later"
In my case, I try to do one of three things for every new language/technology I learn
I spend just an hour or two, understand it, then think about where I would apply it. Then file that away in my head and move on. It comes in handy when having discussions with others or in seeing patterns in other contexts.
Hope that helped :-)
Perfect! Thanks for sharing :)
If you have a deep understanding of a lower level language (like C) and a higher level one (like Java) plus maybe a functional language, then adding more languages should not make you a Jack of all trades.
Instead you get the pattern of a new language faster and you should have a gut feeling of what is going on when you use certain features of those languages.
I started (in that order) with C, Assembler, C++, Delphi, Java (functional language still missing). Knowing how to connect C functions with Assembler routines is not a thing I need for my day to day work, but it helped to understand the concept of by-reference and by-value parameters, stacks, scopes etc.
Knowing how to allocate and dispose memory by hand (and how to avoid leaks using certain patterns) helps me also in languages with a garbage collector to avoid leaking resources and to avoid wasting CPU time by producing a lot of short-term objects for instance.
Conclusion: The point is to have a deep understanding of maybe two languages. Otherwise you would be a master of none, and not even a Jack of all trades.
pbs.twimg.com/media/DAkJJG9XoAAak3... This sums it all up according to me. I think they are two sides of the same coin. Each has its advantages and disadvantages.
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).
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!