Are you a carpenter, construction worker, electrician, or similar? If so, odds are you have a tool box. How many tools are in there, like 15-20? That sounds about right. Are they all the same tool? Hecks no! That would be crazy! Why the heck would anybody do that!

Wake up call! You do!

Yeah, I’m talking to you! The one who uses C++ for all of his problems. You! The one who wrote every single one of his apps in the last ten years with Java! You! The one who asks every single one of his questions on Stack Overflow, even though Programmers.SE would have gotten him better answers!

Now that we’ve gotten that all settled, let’s have a talk.

Jack of all trades…

OK, so we’ve figured out you have a problem. You only use one language for everything even though there are better tools for the job. Let’s take a C++ addict for example. I have no problem with C++, in fact I like it a lot. It’s useful for creating GUI applications on your desktop and games, and if you’re a C++ guru, it may be good for text processing and such. But once you start making web apps, please back away. Seriously, just drop the gun and back away, because that’s what it is, a gun.

Every language can be thought of as a gun. You can hit the target every single time for some projects, but for others, it will backfire, e.g.

Messy code

Low functionality

More work

More development time

Now think of C++ as a gun.

3D Game – Bullseye

Art application – Bullseye

Q&A Site – Hospital Bed

Now let me make sure I’m getting my point across. C++ can be awesome for web development, especially when considering speed and agility (Google is written in C++), but it is going to take longer and it is going to be a lot more code than needed.

That’s where my argument comes in.

You want to get things done. Right? Most people want there software to be as easy, clean, and fast as possible. C++ gives you the speed, and the clean, but it’s not easy to do, and takes a lot more work. So why not use another tool? Why not learn another language?

Do you see what I mean yet?

…master of all

You know how some people say you should be a “Jack of all trades, master of none”? That’s bull crap. You should master them all, or at least attempt to. Now, I’m a firm believer that you can’t completely master a language, unless you’ve been using it religiously for a really long time. What I mean by master them all though, is get good. Know what you can do with the language, when you should use it, and when you shouldn’t. And above all, be able write reusable code.

Don’t learn a bunch of similar languages though. Learn languages from different paradigms, different ways of thinking.

So what’s the point?

Stop using one language to do all of your jobs. There is a reason the “god-language” doesn’t exist yet: it can’t happen. There will always be downfalls to a language, and we have to be able to see which language will help us get a specific job done faster.

Be able to have the luxury of choosing which language to use by learning many languages and paradigms. It will help you think differently about programming, and make your code in any language much cleaner and readable.

Do what will help you. That’s probably the golden rule. Don’t learn a language because it is extremely popular. Learn it because it will help you get the job done.