Juggling Multiple Languages Simultaneously

・1 min read

I've been coding Javascript, Ruby and Go almost everyday for the past few months and I'm just wondering if in the long run it hurts my chances of learning expertise in either of them. I clearly feel the "switches" I have to make daily.
Plus, is the "jack of all trades, master of none" problem a real and significant one?

DISCUSSION (28)
 

I think it will help more than hurt. Sometimes when you’re too caught up in one language you sometimes mistake that language’s best practices for programming best practices.

Too much context switching could hurt your productivity but I wouldn’t worry about long term problems.

 

Do you think in this day and age absolute expertise in one language or stack is something we should all strive for? Or can that be substituted with this cafeteria style approach altogether?

 

Neither.

Just like with human languages -- learning other languages just about only benefits you. Even 30 minutes of trying a new language can be beneficial -- you don't have to be an expert or become one.

Do you think in this day and age absolute expertise in one language or stack

I don't think it's possible or even if were that it would be useful. Going deep into something, sure, striving to learn as much as you can, absolutely -- but I think that as soon as You Know It All, you've failed.

 

I've been writing code in FASM, Emacs Lisp, C#, Java, C, C++, JavaScript, PHP, Common Lisp and Racket in the past six months and I feel nothing. :-)

You will probably never reach perfection in any language, unless you designed it yourself and it is well-matured and does not get new language standards every few months (like C#, Rust and Go do). Knowing this, you'll have it easier to find your way through the various languages to find the one that gets the particular job done.

Never limit yourself, be free and ready to renew yourself with every new project. It will help you.

 

not get new language standards every few months (like C#, Rust and Go do

Go gets new releases every 6 months but has a backwards compatibility guarantee so anything you learned 5 years ago is still correct today. There may be slightly better ways of doing things now but it wont be big.

The changes in Go the past few years in terms of the language have been very minimal. The main changes have been around new libraries in the standard lib, performance and tooling.

 

Interesting. That's a good mix of strongly-typed and relatively higher-level languages.

 
 

I think you could compare it to being polyglot. You can speak other languages but you have your native language (your main skill).
So, I think problem solving in different languages is actually a really good thing. Some times you will find solutions to problems that were struggling you in other languages. You can make more confortable those "switches" adapting your dev environment to your needs.

Also don't forget that, at the end of the day, programming languages are just tools for problem solving, you can apply every design pattern to almost every language, any data structure concept, etc. You want to improve your problem solving skills, syntax and docs can be learned/read more fast and easy.

 

Looks like I found someone else who is like me.
Like you, I have been juggling 3 languages, C#, Java and Python. About getting in depth knowledge in one language, I will agree with you and say that if competing against smart people who are working on it continuosly for years, we may lose. But far more important, I believe, is having am idea of what we are actually doing when we write something. For example my colleagues with similar experience as mine but experienced only in C#, think in terms of only that language. When I think of a solution, what I see in generic terms, my colleagues see as frameworks and methods. On top of that, working in multiple languages and encountering problems, helps us gain universal knowledge about computer systems, the way programming languages work and a wholistic picture which people who have worked in a single language for long, are more likely to lack.
Besides, after getting old, when you or me go for the position of a technology architect, I am optimistic that the generic idea I am gaining today is going to help me do my job better then.

 

I know how you feel, but I also agree with Ben. I switch between Ruby, JS, and PHP all day long. The switch is tough, and takes a few minutes to get back up to speed. But overall, I've learned more about programming and about each language because I switch between them. Long term, it's a good thing.

 

One thing I've done when I am having issues with literal codeswitching is change highlighting schemes and/or editors based on language -- often it can be just enough of a shift to help the rest of your brain follow suit.

 

That's an excellent tip. I'm going to try that this week!

 

Which of the three you mentioned is the most difficult to switch back to?

 

I'm most familiar with Ruby, followed by JS, so PHP is the worst for me. But I think if I had the same experience with all 3, I'd find Ruby the most jarring to switch to, because JS and PHP are pretty similar in syntax and style. How about you?

JS to Go and back. But basically anything to JS.

 

I liked doing this for a long time, beside juggling between back-end I also did Unity,Desktop, Mobile ..

There are definitely benefits for doing this, one of them is speed of assimilating a new language, after 5-6 languages I learned Core Java in 10 days or so.

But I reached a threshold in my career where I'm starting to see the downsides. The two major areas affected by this, in my experience and fields are:

  • salary/high expertise positions (you will do more and get payed less)
  • my brain (as in I have to throw away a lot of cognitive load to be better in X languages instead of 1), and keep me up to date.
 

Newer programming languages are all converging and becoming so similar that in a few years it probably won't matter anyway x,D

Seriously though, knowing more than one programming language is extremely valuable. Many people come out of college only really knowing one programming language, but in the world of software development it's normal for professionals to know more than just one language.

I like learning new languages in my free time because it helps keep my mind sharp while also expanding my skillset.

 

I agree with what some people are saying here. I originally started with Java and at the time couldn't understand some of its concepts. I loved the Front-end and transitioned into doing more JavaScript and gaining a deeper understanding in that. I think what I learned in JS allowed me to see the patterns in both Python & Java. Right now I'm doing JavaScript & Java (Android) and it seems easier than when I was learning only one language.

 

I agree with Ben on the best practices thing. Also, as somebody who wrote C, C++, and C# at the same time (and sometimes compiled into the same binary), I can say programming like that really forces you to understand how the languages work and how it all ties into how computers work. It may not be useful for most high level programmers, but it's good insight nonetheless.

 

It is good insight. I guess it also depends on how far apart the languages are syntactically and otherwise.

 

The "too many languages" thing is really more a problem if you haven't created very solid programming skills in one language. It's a lot easier to language-bounce when you know that a given thing should be doable in a language (because you're able to do it in another language) ...At which point, Google becomes your best buddy because you know the capability has to be there and you've enough background to know how to run a query to find it.

Knowing a specific language inside-and-out also helps you better analyze "which one of these other languages make achieving 'X' task-set easier" (since you know that a given language ought to do something and you have more solid baseline against which to measure "easier"). If you're not solid somewhere, though, you risk floundering in each of the languages you're bouncing across.

All that aside, it's a near lock that your style-conformance will suffer. But there's enough CI plugins out there to help with that problem.

 

I love working with different languages (Javascript, PHP and Perl), but from my recent job search I noticed that it doesn't help at all. People expect you to be expert in the language they use and don't really value your other experience that much.

 

I've always compared it to being multilingual, especially if you use and learn them in tandem. It's somewhat similar to what research has shown about bilingual children:

"Despite the differences in age of acquisition, bilinguals who use both languages on a regular basis at work and at home were very proficient in both languages. (MacLeod, 2010, p.400) This illustrates that if the child can utilize both languages evenly as they mature, they may still be able to contrast between the two and continue to be fluent in both languages." - "Language Development in Bilingual Children" by Charlyne Gauthier, Southern Illinois University Carbondale

I'm not only proficient in multiple programming languages, but I'm currently learning multiple languages at once, while working in those I already know. This means that, in any given week, I'm using all of C++, Python, C, Java, SQL, BASH, and FORTRAN. What I'm finding is, although I sometimes feel the "switch," I am acquiring them more quickly than when I learned one language at a time (VB.NET, Python). I would go so far as to say that the paradigm shifts and differences in pattern are keeping me from ever building "the box" that we always have to think outside of. I can cook up a dozen possible solutions to a problem in my mind, and then select the best one based on the language and tools I have.

Also, remember that speed is a side-effect of proficiency. If you keep switching between languages often enough, regularly using as many of them as you reasonably can, the "switches" will become less pronounced, and the high-level problem solving skills more instinctual. Keep at it!

P.S. I'm a Pluralsight-verified expert in C++, and approaching the same in Python. I'm quite literally "Jack-of-all-trades, master of some."

 

I really don't see how can it hurt. Maybe there's a risk of not gaining enough depth in either but that's really up to you.

 

As a fellow jack of all trades, try to have some time between switching languages. Can be days, lunch, meetings. You should be fine

 

It's great! because if you have a concept down in one language and can implement it in another it's another level of mastery. Great work.

 
 

More like you're on the fast track to learning truths and patterns instead of syntax.
Just add some higher quality languages into there, like Rust and F#

Classic DEV Post from Nov 2 '18

From homelessness to making six figures: On learning how to code.

A reflection of my life post High School.

I'm a multilingual developer and architect who's trying to build impactful software everyday.

👋 Hey dev.to reader.

Do you prefer sans serif over serif?

You can change your font preferences in the "misc" section of your settings. ❤️