views:

163

answers:

9

I hit a point in my programming life about a year ago where I could suddenly learn/do an astronomical amount of things more than I could when I first started programming. Since then I've picked up Ruby, Ruby on Rails, a tonne of other web technologies, Objective-C and iPhone development.

My question is how much is too much? I'm currently spending the summer doing Google Summer of Code working on a rails project and doing iPhone development in my free time. Still I find myself wanting to do more. I was told at one point to pick one thing and focus on just that; I just can't do that. Where do I draw the line?

+1  A: 

I wouldn't try to learn too many things at the same time (from scratch) - but there's nothing wrong with using something you're already familiar with (and gradually improving) while also learning something else.

I personally like knowing a few things very well, and lots of other things at a somewhat superficial level - enough to understand the ideas, even if I never learn the syntax/libraries well enough to program it without having to constantly refer to documentation etc.

Jon Skeet
I feel so empty - the Skeet disagrees with me. I don't know what to do anymore. My life is meaningless.But seriously, I feel like it's good to know several things with a high level of familiarity. Not necessarily having memorized the documentation and knowing every function name, but understanding it and being able to write it idiomatically. Which might be more or less what you're saying.
Chris Lutz
@Chris: If you've got the time to know lots of things really well, that's fabulous. I don't, unfortunately - and I'd rather know 2 things well and 6 things just in terms of their concepts than know just 3 things really well.
Jon Skeet
+2  A: 

All people learn differently.

Myself, I can learn pretty much an unlimited number of APIs or SDKs at the same time, so long as they are for different tasks.

What I tend to find with learning languages is, do one at a time if you can at all help it. I tend to find if I learn two languages at the same time, I muddy the concepts up over time. I improperly associate abilities or limits of one language, with the other language. I tried learning Python and Ruby at the same time, and that really didn't go well.

As to projects, you should learn to juggle multiple projects at once as this is something you will find often in "the real world". On the other hand, when learning, I think quality is much better than quantity. The most important thing here I would say is to actually complete a project.

Again, all people are different.

Serapth
+3  A: 

When you stop learning new things, it is easy to stagnate. You also tend to think of solutions to problems only in terms of things you know. Yes, you might become an expert at one particular framework and do something very convoluted to convince it to solve your problem but there might be a better tool for the job which gives you a cleaner, more simple application to support.

The more you learn, the better you get at learning and you become less 'emotionally attached' to various tools.

Neil Trodden
Totally agree, learning more technologies in depth definitely fights the disease of fanboy-ism.
Kekoa
+6  A: 

As long as you are enjoying it, keep it up. No harm in knowledge gained. I would be careful of burnout. Eventually you will find one or two technologies or languages that really speak to you, and you will settle in and dig deeper into their specifics.

Matthew Vines
A: 

To use: just enough to deal with the problem at hand.

For a little shell automation, this could well be a single tool (e.g. bash on *nix or PowerShell on Windows). For an enterprise web application this could be CSS, HTML, HTTP, JSP/ASP.NET/Rails, Java/.NET/Ruby, SQL, Rest/WS-, and MSMQ/WebSphereMQ (and possibly more).

Of course trying to learn that whole list at once is likely to lead to problems, but learning on anything but a small scale problem will likely just lead to failure to both slve the problem and to effectively learn the tool.

Richard
A: 

I use an approach I learned from software itself. I front-load.

That is, I learn enough about a lot of different languages and technologies to know what they're good for, what their vernacular is, and how they can complement what I'm already using. Then, I move on to something else.

The line of how many technologies you're actively using is how many make sense for the project(s) you're currently working on. Doing projects to learn languages is all right, but learning languages to do projects is preferable.

Jekke
+3  A: 

I think you've realised yourself that your capacity for learning is only increasing. There is no reason why you shouldn't look into whatever language/API/SDK/etc. piques your interest. In my experience, I've picked up a range of skills, but always end up specialising due to work commitments or a project that I've become involved in elsewhere.

Sure focusing in on some specific tools will allow you more future oportunity to specialise in using them (in employment for example), however, if you have the capacity for it; I'd always reccommend you keep exploring new avenues.

Kieran Hall
A: 

13 or till as long as you stay sane

Yogi
A: 

Learn and enjoy the right tool (language) for the job at hand.

Example: I write mostly c#, but recently learned (just enough) VBA to do some Word automation. Now I could have (and tried) to do that in c#, but it was so much easier, cleaner, and more sensible in VBA that I kind of even enjoyed it. Now... back to c# quick!

Seba Illingworth