views:

1062

answers:

24

Do you prefer learning new languages or just working in your current language and increase your knowledge of it? Which one provides more real-world benefits, and why?

+3  A: 

I prefer being middle skilled in many languages, especially if their paradigm is different. Being open to new language brings a lot in imagination, and how to design algorithms.

However in compagnies usually like when you are top skilled in few languages..

Clement Herreman
Yes! Algorithms are very important for understanding potential solutions to a problem, so that you can select the best one (or at least a good one). TopCoder is a great site for honing those skills.
darron
+1  A: 

I would go one step further and say learn new techniques. I have found the study of patterns to be especially helpful.

William Edmondson
+1  A: 

Both are important.

I always think of Chad Fowler's book book , he talks about being an "expert" and also about being the guy who even when you worked on one thing for a long time has the skills to step over and do something else.

Both skills are very marketable and important to a company.

Maestro1024
+1  A: 

Both. There is no such thing as stop learning a language, as well there is no such thing as stop learning new languages.

Alberto Zaccagni
+5  A: 

It certainly depends.

Besides, the excitement of learning a new language and obviously adding it to your skill set make sense. But in the end you end up becoming a Generalist .

I would prefer to be a Specialist first, i.e.get better at a language i like and regularly use and then become a Generalist.

This is a probably a decision you always have to make as a Developer. :)

Rishav Rastogi
Specialist first is a mistake. Competence first is one thing, but not specializing. With a broad background, all the small gritty features of a language will not be understood in proper context and you'll just waste a lot of time learning rote facts instead of placing information in proper associative contexts as a relationship to things you already know. For instance, it would be hard to imagine learning all the tricked out syntactic things you can do in language X without knowing enough about language grammars to be able to read a grammar description and extrapolate.
darron
I actually agree, but I assumed that Competence is the key to becoming to a Specialist. Becoming a Generalist, doesn't mean you become competent either. Competence is not gained by knowing one or many languages
Rishav Rastogi
+1  A: 

It gets increasingly difficult to want to continue to learn more techniques in the same language. I'd have to say that learning a new language excites me a whole lot more, and I'm okay with that.

I rationalize learning a new language over learning deeper parts of a language I know by telling myself that if I ever had to use those advanced points of the language that I could easily pick it up because I know the language so well.

However, this does not have to be your strategy; perhaps it excites you to try to become one of the top language experts in one particular language.

AlbertoPL
+1  A: 

Both are good idea :
You need to choose between be a generalist or an expert ! As generalist, I guess you will find easier a job that as expert.
In the other hand, you will earn more money being an expert ! Moreover, if you expect to become an IT manager, so learn as many different languages as possible !

Matthieu
+1  A: 

it is a dillema between what you like to do and what you have to do obviously most geeks likes learning new but what you have to do is not that

+1  A: 

Learning new language and that too the one really differs from the current ones you know in semantics and structure will definitely broaden your spectrum of knowledge.

TheVillageIdiot
+1  A: 

There are two aspects to this question:

  1. Learning out of personal interest
  2. Your "Employability"

Point 1: Humans are made to learn. Thats why we play games and pursue new things. In this case, if you are interested in skills development for purely personal reasons, learn a new language over getting more involved in your current language. It will be more fulfilling to you.

Point 2: You programme to be economically active. The languages you know make you employable or not. So, if you know old/imminently outdated languages or a language that is a very minor player in the market, learn a new language asap to remain employable. If you know current languages, then you are lucky and have a choice: learn more about your language or pursue related technology options (e.g. you do C# web apps then look at PHP/Python and visa versa). This will really depend on your portfolio of skills, experience and future work intentions. But very important, whatever you do remain employable to others & yourself otherwise you are wasting your time.

:)

ForerMedia
+4  A: 

Why can't you do both? There is no reason that you can't improve you skills with the language you currently use AND pick up a second language. You don't have to stop programming and learning in your current language just because you are trying to pick up another one. One doesn't stop where another begins.

amischiefr
Yes but you certainly can't, at the same time, learning new languages (let's say LISP, python, C, Prolog, many VERY different languages), and specialize in C#, PHP, AJAX, etc.And we aren't even alking about mastering all the frameworks...It's just impossible. By the time you become a specialist in C#, JAVA and LISP, you forgot lots of thing on C, AJAX, etc etc..
Clement Herreman
I understand your argument, I just don't see this being the case. I don't feel that one has to be a one dog show until mastery. Sure, there will be times that you might confuse syntax, but you certainly aren't going to confuse (defun with #define with public static final String foo;
amischiefr
A: 

a little from column a

a little from column b

wefwfwefwe
and learning none of them , huh ?
answers like this don't help anyone.
ForerMedia
why the downvote? both is a perfectly valid answer.
wefwfwefwe
I gave the down vote cos the questions asked why. Thats the part we learn from. Otherwise it would just be an opinion.
ForerMedia
fair enough then ;)
wefwfwefwe
+1  A: 

I honestly think that learning other languages such as Python and SQL has altered fundamentally my ability to think in my core discipline of C++.

For instance, the Pythonic approach to minimalism, legibility, algorithmic focus can unlearn a lot of bad habits. The aspects of functional programming present in newer languages can communicate deeply and teach more about alternative approaches for structuring a technical solution. Not to be reckless, but it is good to have more than one approach to consider in doing a job.

If I had to choose either/or as your question puts it, I would say that learning other languages adds more, as other languages naturally cross-fertilise your mind in your primary language.

You should however seek to know very well your language of choice, you can't be a great programmer in any language without knowing the language well.

polyglot
+1  A: 

Jack of all trades, master of none?

I think there is benefit in studying other languages because they bring ideas. For instance looking at java and C++ helps understand the motivations for C#.

I've also found that functional languages have greatly influenced Linq which helps you understand how to use it properly and the things that it can do outside of database work.

Still I guess everyone's answer will be different because their circumstances are different.

Spence
+1  A: 

Personally, if it's a language of a similar type e.g. you know C# and want to learn Java, I would not be in a rush and instead polish what I already know in the language I know. If it is a completely different paradigm e.g. functional language, or dynamic, perhaps I would learn it

Conrad
+6  A: 

I think it is important to have 1 or 2 languages as the "main" languages you will use on a daily basis. This language will typically be something industry mainstream like Java or C# or C++.

Other languages can be used in your personal scripts or just keep them handy as the correct tool to use for certain problems.

I do suggest learning at least 1 functional programming language, as their idioms are used frequently in mainstream languages and also more frequently in Python and Ruby. I have found that they also tend to result in short code, which for me means less bugs :).

Darioush
+30  A: 

This is how I prioritize things:

  1. Choose one of the languages that you use at work and become ridiculously good at it. If at all possible, be The Person To Ask if someone has questions about it, and welcome questions. This will both increase your reputation at work and help you learn the language better because you learn a lot by answering strange questions. For me this language is Python.

  2. Keep abreast of the other languages you use at work. Keeping food on your table is the most important. For me these languages are Java and Bash.

  3. For me this is about equal in priority with #4. Learn the language that you think is the Next Big Language. Even if it turns out that it isn't as long as you didn't pick the language completely stupidly, it will be moderately marketable in the future. For me this language is C#.

  4. Learn a language with a novel paradigm that changes the way you think about programming. This will make you a better programmer in the other languages you use. For me, this language is Haskell (I'm nearly satisfied with my knowledge in Haskell, so I'll be moving to Clojure soon).

  5. For me this is about equal in priority with #6. Maintain the old languages you know (basically, languages that used to fit into 1-4 but don't any more). You don't have to do much here, just look over some old code and see if you can still figure it out. For me, these languages are C, C++, PHP, JavaScript and Perl.

  6. Grab a bit of knowledge in as many languages as possible. Think of this as "tryouts" for your next #3 or #4 language. I make it my goal to look at about one a week. Just like #5 don't spend a lot of time on this, just look over some code people have posted online. I've looked at too many languages for me to even remember, but some that I've recently looked at are Clean, Arc, Clojure, ActionScript, Snobol, OCaml, HLA, Prolog, Squirrel, Scala, F#, Factor, and many many more. I wouldn't claim to know much about any of these languages, but they give me interesting ideas sometimes.

Lastly, the best way to learn is by doing. I often get started in a language by writing a simple poker simulation or a problem from Project Euler. This is especially helpful for learning language gotchas, as you generally don't learn how the language tricks you until you've been bitten by it.

Imagist
To most people, this approach may seem like it wouldn't leave any time for anything else at all, such as side projects. But, instead do the side projects in these new languages. Kills 3 birds with 1 stone: you are still learning a new language, you are doing your side projects, and you're actually getting hands-on experiences in those languages by doing the projects (Yeah, make a Venn diagram if you want)!
Artem Russakovskii
Agreed; I should have added that. The best way to learn is by doing. I generally do a simplistic poker simulation rather than a side project, just to exercise the very basics of the language before diving in with a real project, but that's not really necessary.
Imagist
+1  A: 

From my prospective, learning a language is not difficult to do. You might gain some perspective of a Computer Science concept by looking at it in multiple languages, but for a general real world role, learning a language has only as much value as your circumstances give it.

As a rule of thumb, I think it is a good idea to have one language that you know well, as well as a framework used by that language. It gives you depth that is necessary for a professional developer. If you are a really good developer, you might have a good deep knowledge of two or three languages and frameworks.

Beyond your core knowledge, it is a good idea to have working knowledge of any supporting languages that you might use (SQL, BASH, Perl, etc).

I would also say it would be a good idea to learn new languages that could replace your core language, but only at a shallow level (unless a need arises that you have to use it) because this will keep you flexible and capable of adapting if need be.

Really, today is all about the frameworks.... the language (especially on VM/CLR systems) are simply your path to using those frameworks.

Jeremy Petzold
+1  A: 

I think learning new languages is a must. Not for the sake of using it - just for the sake of expanding ones knowledge.

Learning a new language widens your horizons and usually leads to better understanding the language you specialize in, thus better programs. You can import new approaches of the new language to your main language toolset.

P.S. Specialisation is for insects. ;-)

smoku
+1  A: 

I think it's always good to specialize since an employer would rather hire someone with 6 years of Java experience rather than someone with 3 years Java, 3 years .Net.

I have been programming in Java for years, but lately I am exploring Scala and Erlang. Not that they will be taking over Java in the future but it's interesting the explore something completely different (OOP vs FP) and try doing cool stuff with it. Who knows, the new knowledge might change the way you think when you are programming with your trusty language.

Blake
+1  A: 

Is it too much to ask for both?

Seriously, I've spent more three years (damn... that's it?) learning Java and I still havn't seen a quarter of it, and I'm sure 3 years from now I'll still be learning Java, actually let's extend that to 6 years. My point is even when you're a master at something I'm sure you'll still be learning it. (note: not talking from experience here, just pretty sure that's the way it'll be :P)

As for learning other languages, especially ones that use different paradigms, it IS like learning another language. With my java background when trying to go to c++ I feel like I'm just learning small syntax adjustments and new names for things I can already do (from a personal standpoint) much more efficiently in Java, whereas going to Python I see different uses where it can overcome limitations that Java has.

So learning different languages is like equipping a toolbelt. I'd say always learn new languages but keep learning what you're best at, that is, if it's something that is highly marketable. I know that mastering freeBasic is probably not the best language to master.

Victor
+6  A: 

Neither.

Don't think about software development in terms of which languages (or tools) you use. Learning to write another CRUD application in a new programming language (or with an unfamiliar set of tools) might expand your knowledge and perspective slightly, but in the end, you'll still have a very narrow view of programming defined by the CRUD problem-domain.

I think the better question to ask yourself is: Should I learn to solve unfamiliar problems (compilers! raytracers! speech recognition!) or should I delve deep into the current research & state of the art for some problem domain I already know pretty well?

Either choice is valid, and a great way to learn.

But I think the focus on languages and tools is not very interesting.

I can imagine a conversation with an architect friend (not a software architect, but the kind of architect who designs actual buildings). If he said to me, "I'm thinking of either learning AutoCAD really well, or branching into MicroStation", I'd be very surprised. Instead, I'd expect him to say "I'm studying the modernist architects and trying to figure out a good way to blend the steel-and-glass look with Gothic forms and shapes."

In other words, be focused on WHAT you build, rather than on the tools you use to build things.

benjismith
YES! I'd give you many more upvotes if I could. We are too focused on the tools and not the end results.
HLGEM
+2  A: 

As an employer I want to see a varied background - it shows to me an ability and willingness to learn, but you need to be able to be good enough in one/some so as to be able to jump the qualification hurdles.

So if there are too many, especially if it is at the expense of becoming too skilled in any one, then I will wonder about your motives. Are you doing them to pad out your skills or because you've genuinely found them to be useful. I want to employ someone who'll be doing the job, not always playing around with the shiniest new toys.

Unsliced
Excellent point. I'm more impressed with depth myself when hiring than breadth. Too many languages and no real accomplishments that require the hard stuff and I tend to think the person is a lightweight. Not that some breadth isn't important, but not at the expnse of depth.
HLGEM
+1  A: 

If you're someone who isn't an expert in a particular technology, I would encourage you to consider gaining expertise in a technology.

If you've already got that expertise under your belt, I would consider broadening your technical skills. Another option you could consider is developing your softer skills.

I once read an excellent book called the Trusted Advisor, I think its quite relevant to the topic at hand and I would recommend to the questioner. The key thing about becoming someone that people trust is that you need to demonstrate expertise and competence in a area important to your clients/boss/potential bosses.

Martin Clarke