views:

461

answers:

18

Possible Duplicate:
Should developers be specialists or generalists?

I recently graduated and I am now a web developer. During my personal projects and past professional experiences I got to learn a lot of web languages and frameworks, from PHP to ASP, from Rails to Java.

Still, I do know that I don't have a perfect understanding of any of these languages and I figure that if I focused on only one I would be better at it. For instance people working for the same company with the same language for ages will have a great knowledge of this particular language and can be really impressive. Of course the problem is that once you're focused on one language/framework, it's hard to evolve, learn the latest technology or go to another company using language.

So do you think that it's better to be really good in one language and have a vague understanding of other languages, or be fairly good in a lot of languages but not be outstanding in any?

Will a recruiter be more impressed by someone who has worked with the technology Y for 10 years or someone who worked with a different technology each year?

Obviously the best is to be really good in all languages or be totally language-agnostic and know all frameworks, but I'm talking about human beings here ^^

+5  A: 

So do you think that it's better to be really good in one language and have a vague understanding of other languages, or be fairly good in a lot of languages but not be outstanding in any?

It's better to be more well-rounded than exclusively focused on a single language, for a number of reasons.

  • Better adaptability. If you only know how to do one thing, it may be harder for you to learn new languages and draw inferences based on existing experience. I can't tell you how many times things have clicked because I was able to draw analogies to something I'd already learned.

  • Better job security. What Ruby is today, COBOL was 20 years ago. Don't lock yourself into one technology. The landscape of software development is an ever-shifting kaleidoscope; what appears stable and timeless one moment is routinely trumped by new and better ways of doing things.

  • Better exposure to alternative viewpoints. Language features vary widely in their flavor and syntax; attributes in Java work differently than they do in .NET, for example. You'll be able to have more well-informed opinions if you have wider exposure to different implementation strategies.

  • Better understanding of new features. The cool stuff that ASP.NET MVC is doing now, for example, synthesizes many existing features from Rails and other web frameworks. It's great that this technology has finally come to the .NET space, but it's hard to appreciate it fully without seeing the contexts that it came from.

John Feminella
+2  A: 

A recruiter IMO would be interested in the first derivative of learning - that is, to which rate a person can learn and adapt to newer environments and languages.

Otávio Décio
s/would/should/g
Javier
@Javier - I hear you.
Otávio Décio
That's a very uncommon recruiter.
dwc
You'd think so, but you'd be wrong. I'd say that if anything, they shy away from too many languages listed because it distracts the focus from what the client really is after.
Bill K
@Bill - what I tried to say is that one would be interested in seeing that the candidate was capable of choosing and learning the best tool for the problem and time. For example, if Powerbuilder was learned and used in 1997, VB was learned and used in 1999 and C# was learned and used in 2003. Now if Powerbuilder was used in 2009 that's a red flag.
Otávio Décio
+10  A: 

I personally like having a mixture. There are a couple of languages I'm very comfortable with (Java and C#) but I like knowing plenty of others to some extent, mostly so I can grok the ideas behind them.

Learning a different language often opens up new ways of approaching problems, and that's always a good thing. Knowing a language well means not having to fight against it, which is also a good thing.

Try to have a good grasp of the language you use professionally, and learn other languages to broaden your horizons.

As for recruiters... it will vary by the recruiter. Some will look just for buzzwords; others will be more discerning. Personally when I'm hiring I'm more interested in raw talent and passion than current knowledge.

Jon Skeet
Or to put it another way... There are two extremes: know only one language but know it really well; dabble in dozens of languages but never get past tutorials. Seek a middle ground.
Daniel Straight
Raw talent and passion, ftw! I wish more people in the hiring process knew this.
dwc
If you are just starting out in your career you may want to develop some diversity to identify languages and platforms that you _enjoy_ developing on. This will help you decide what kind of future employment opportunities to pursue.
LBushkin
+2  A: 

You should strive to be a jack of all trades, and master of one or two.

Learn a couple of languages well (preferrably fairly different languages, like Java and Python or PHP), and have a grasp of a few others (it's good to be able to grok functional programming, and the best way to do so is to learn a functional language such as Haskell or Scheme; you should probably have a reasonable knowledge of SQL, too). Whenever you see something that seems interesting, or like it could be important in the future, play around with it. You don't have to become an expert at it, or even competent in using it; just get to know it well enough that you will remember that it exists, and what it might be good for.

This also applies to other things related to specific domains. Most developers deal with databases at some point, so they should have knowledge of stuff like ACID, E-R diagrams, database normalization, etc. Anyone who is going to be doing web stuff should be knowledgeable about web usability guidelines, and have at least a little competence in graphic design and UI. All developers should know how to use their computer very well; they're likely to need a lot of admin privileges to do their job, and should know what they are doing well enough to not make that a huge liability.

Adam Jaskiewicz
exactly what i tried to say, but much more readable
Javier
(....when it was a single line)
Javier
Yeah, I probably should have left it short and pithy in retrospect. I don't want to take too much credit, though, because I'm pretty sure I've seen someone else post something with almost the same wording as my first line.
Adam Jaskiewicz
+2  A: 

i think every developer should have a very wide and deep understanding of at least two very different languages, and be comfortable in a dozen more.

i'm serious. every language has something to teach you, no matter if you use it or not. also, there are lots of opportunities to use most of them.

those you mention: PHP, Java, Ruby. aren't so far off. I'd add at least one low-level language (C/C++ are my pick) and at least one non-practical language (Scheme or Haskell are great)

right now, my current mix of heavy use is: C++, Python, JavaScript and Lua; with lots of Scheme, C, Bash, TeX and PHP on the side.

Javier
A: 

I think if you "typecast" yourself into one language and that language fades away so could your skill set. Keep on top of changes and learn when you can and you should be very marketable.

northpole
A: 

I would err on the side of being well rounded. I have found that languages and frameworks have certain strengths that make particular tasks easier or more straightforward and clear than other languages/frameworks. When you get to the point in your career where you can choose or at least influence the implementation language for a project, you will be able to better make that decision.

It is good to have one language that you are most comfortable using, and are fairly well versed in its intricacies, but having a broad based knowledge of the language scene will actually help you learn your primary language. Sometimes you have features of your primary language that you never think about until you see them somewhere else. Expanding your horizons will help you even if you primarily use one language or set of libraries.

A. Levy
+1  A: 

You should have one language that you are supremely excellent at. Sometimes you just want to do something quick and dirty and this is the language you will frequently fall back on. For a lot of people, even though they don't use Perl professionally, they find that they are more productive with some projects using it.

You should have a handful of languages that you are professionally proficient at, and are completely comfortable using.

Then on the periphery, you should have a bunch of languages that you have used a little, yet probably not enough to be as productive as your other languages. The idea here is to learn as much about other languages to enrich your understanding of the languages you use on a regular basis.

An example is that although you may not use a lot of functional languages professionally, understanding them and their techniques can help to expand your skill set in the languages that you need to be great at.

Kekoa
+1  A: 

To me it depends on what the recruiter is looking for. If its a position for a C# project and you know one single language perfectly php, then this can come in no benefit to the recruiter unless the position has a high, main focus on php. But if you know several languages pretty well then that shows the thrive for knowledge you have which IMO would impress the recruiter and give them the idea that you will have no problem adapting to new requirements as they come up for the position. So try to broaden your horizon as much as possible

TStamper
+1  A: 

At one time I knew one language about as perfectly as it was possible for me. I knew every nuance of syntax, and even had knowledge of what assembly would be produced from looking at source code. Now I no longer use that language. Times changed, and they will change again.

Most important is learning good skills that apply to software design. Next is learning important concepts related to various language types (OOP vs. functional programming vs. procedural languages).

As you do your daily work you should strive to learn the language(s) you are using. The more you use a language, the more time you should devote just to learning it well. This is a no-lose situation. But it's also nice to use other languages from time to time. It keeps you from getting too rigid in your thinking, and it's good for your skillset and resume.

dwc
just curious, what language are you talking about?
marcgg
Turbo Pascal / Borland Pascal / Delphi, fyi. I knew the DOS products extremely well; the Windows products less so.
dwc
A: 

Don't let yourself get pigeon holed into begin a Language XYZ developer. If you are passionate about programming, then learn the concepts of programming. Data Structures, algorithms, protocols, patterns, that kind of stuff. If you have the concepts mastered then picking up a different language becomes almost trivial.

Al W
A: 

This is a false dichotomy, because it's impossible to become "really good" in a single language without becoming familiar with other languages. Language exposure is necessary so that you can discover the underlying concepts of computation and programming which are language-independent, and begin to think in those terms about how to solve problems.

If you learn only one language, you'll have a Sapir-Whorf kind of problem on your hands where you only feel really comfortable with the concepts that your language is particularly suited to express. Even in that language, you'll be crippled in your ability to quickly come to grips with unusual problems.

mquander
+1  A: 

Marc I think the goal isn't to impress some recruiter, really. The goal is to be highly competent and able to pickup a new technology or programming language as the requirements dictate. Recruiters are all over the map as far as their real ability to assess your talents. In a hiring situation, I'm less concerned if you have N years of a programming language and more concerned with whether you'll fit with the corporate culture and be able to contribute and help make my shop a success. If you're sharp and interested in learning and growing, you'll be very desirable to companies that are worth working for.

Be willing to survey the languages and technologies and learn a bit about them. It's good if you've had experience with this or that but ultimately if you are a solid developer, you'll be able to pick up whatever you need. I knew nothing about C# when I started doing my current work. I hadn't any DB experience and did precious little Windows work. My background was C++ on *nix. It didn't keep me from getting the position and now I do almost exclusively C# development for Windows and do a lot of DB work.

Learn as much as you can. It'll position you well but don't stress about knowing everything. Few do.

Just my two cents.

itsmatt
A: 

Generally I find understanding programming foundations and fundamentals just as important as just understanding a language. If you understand the way things work really well, then learning a new language shouldnt be greatly difficult.

All languages have a syntax that will be used to implement applications but they are all bound by general principals, variables, functions, loops and so on. If you understand object orientated programming for example and you are a master at C++, then writing a program in Java wouldnt be impossible. If you wanted to implement a stack style data structure doing it in PHP or C# wouldnt make much difference other than syntax wise.

That being said its good to see what different languages and frameworks have on offer. Variety is the spice of life after all... :)

Chalkey
A: 

I learned perl mostly so that I didn't have to fire up C++ or Java to do data-manipulation tasks that tended to be more complex than I could do with shell scripts. But I found myself trying to shift more of that to BSH/javascript over time. I use a lot less Perl now, and far more javascript-based tools. Maybe I never became enough of a perl expert, but I find it offers me nothing (not including CPAN), that BSH doesn't also.

Chris Kaminski
+1  A: 

I think there's one thing missing in the answers so far.

I do believe you should have a "home language". This is the one you know best, you like it and when you're doing a program/project at home, this is the language you use.

In addition, you should know how to read other languages. I can't count the number of times that I've looked something up online to solve a particular problem and found a solution in some other language. In my case, VB.NET is my 'home language' but I can read C#, C++ and my history is littered with other languages that were period specific (I'm looking at you COBOL, FORTRAN, DEC BASIC, etc).

But the most important 'thing' to know isn't a language - it's the "meta-language". The concepts. The ideas.

When you look at a problem or are given a task to solve, you shouldn't be thinking of the code you're going to write. You should think more of how to break up the problem so that you can implement a solution as opposed to exactly what kind of code you'll be typing into the editor.

I started coding professionally in the 1970s. Everything I've encountered has built my 'list of experiences' to help me decide what to do next. And most importantly, if I don't know how to attack something, I know where to look to find information from someone who encountered something similar.

In a way, you'll always be a carpenter and they're always asking you to build a house. It doesn't matter what kind of hammer or drill they give you. You're still building a house.

You absolutely should learn more than one language. But when you learn them, remember the 'meta-concepts'. That way, it's always a case of implementation. I'm writing things now for an ASP.NET 3.5 website with VB.NET codebehind pages that have ideas and practices that I remember from the days when I was programming DEC COBOL on VMS machines back in the 1980s. The idea is the same - just the language is different.

Express this to the recruiter if they're looking for a language you're not as strong in. Tell them you know how to solve "Problem X" - but you might have to look up the particular syntax. Telling them you've solved similar problems in different scenarios demonstrates your skills.

Unfortunately some are absolutely stuck on syntactical specifics.

David
+1  A: 

I've been at this programming stuff to some degree or another since I graduated Jr. High (1978). I've noticed something lately that might be of interest to you.

When I was younger (mostly teens) I could eat up languages like M&M's. Learning a new language was ALWAYS fun, and I got to learn interesting constructs and different ways to do things. I played with APL (Bizarre language), got to appreciate named parameters from ADA, Learned to do Fortran on punch-cards (obsolete even then), learned assembly from a spec-book with no outside help, etc. When my company needed a TSR (old version of a device driver), I learned 8088 assembly and hand-coded it on the fly.

Now flash forward a bit--I've used Java for the last however-many years (10?) and it's killing me just to learn Objective-C. I hate it and have to force myself every time I sit down to it, even though I'm already "Get" C at pretty much 100% (Used it to program a few really big GUI-based systems in Windows 3.0 days--that was trial by fire.

I can still use C, and can often provide pretty advanced C advice to people actively coding C. If I need to I can slip into most of my old languages, but picking up new ones is just irritating at this point.

If you enjoy learning now, take advantage of the youthful exuberance and learn all you can. You shouldn't have to pick knowing one well or knowing 10, learn 3 well and give yourself exposure to 10 others. Pick up a functional language, understand EVERY ASPECT of Scala, trace through your C code in assembly.

If you DON'T enjoy learning now, pick a new career, you're never really going to be happy doing this.

Also, don't call yourself a "web programmer"--seeing yourself that way seriously limits your potential. Be a programmer, accept any challenge they throw at you and never say you can't do something because it's not in your field. Don't restrict yourself.

I'm not saying that EVERYONE going on 50 is like me, but I am meeting more and more like me these days.

It's not that they hate programming now or anything, it's just that sitting every night in front of the computer until 3 am learning a new language as you code up some neat game isn't as fun as it used to be--and without the fun, you might as well give it up.

Bill K
I know that calling myself a web programmer limits me, but other kind of programming don't really interest me right now. Usually I actually prefer calling myself software engineer, but most of people don't get it or don't like the name. I know C, C++ and other weird languages, but I'm really enjoying myself doing web stuff so that's why I'd rather be a web developer than a developer ^^ Don't know if that makes sense. Good advices and experiences thought.
marcgg
+1  A: 

In my case, 2 completely different languages (although similar in so many ways), C# and Scheme.

I have been using C# almost exclusively for the last 7 odd years (with Scheme the last 18 months), and that being the length of my software development career. This is my 4th career :)

I previously made the mistake of diversifying too much, and learnt that leads nowhere.

To sum it up, go where you can with a given language, learn to think in the language, exploit it, learn how it compiles, and only then when there is nothing more, move to the next adventure.

In my time, I have discovered all languages are pretty much created equal. If you know 1 extremely well (and no bs'ng yourself here), you catch onto others very quickly.

leppie