Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

If I was working for a programming language X and want to switch to Y (from Java to C++, or from Java to Objective-c), does this cause my years of experience in the previous languages to be lost (from point of view for companies)?

For example, if I was a Senior in X, and want to move to Y, will I start Junior at Y or Senior?

I believe that languages are just tools, and the experience is in problem solving and way of thinking, but do companies concern?

share|improve this question

closed as primarily opinion-based by gnat, GlenH7, Glenn Nelson, MichaelT, Dynamic Dec 17 '13 at 1:30

Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise.If this question can be reworded to fit the rules in the help center, please edit the question.

14  
Your view of programming is far too bound to the language you are using. In order to be considered a "senior" programmer (in my mind), you must be very comfortable with a wide array of programming paradigms. Based on the tone of your question, I would say that learning a new language can only help. –  Stargazer712 Oct 28 '11 at 19:17
5  
@Stargazer712: The final line of the question indicates he knows that, but is wondering how companies (HR, Management, people who aren't programmers, etc) would view it. –  Izkata Oct 28 '11 at 20:43
1  
Yet another excuse for not learning a new language? But you don't need to tell management that you did and pretend to be a monocultural programmer. (BTW, If I were manager, I'd never hire someone who shys away from learning something new.) –  Ingo Oct 29 '11 at 7:46
add comment

13 Answers

A senior developer's job is to guide and to mentor. A junior developer is someone in need of guidance and mentoring, and who won't get much done without.

Becoming a senior developer is not necessarily the right job for everyone. You can simply be a very good developer, or even the team's principal architect, while not taking on mentoring roles. It's considered a natural progression to become a senior and then maybe move on to managerial roles. But it's not for everyone.

Now if you change from Java to Objective-C for example, you will not only switch languages, but you will switch from the Java Platform to Cocoa. That's a big change. It will take you quite some time to get a thorough overview of such an ecosystem. It's not only the language, but also a lot of APIs and methodologies that you will have to absorb. Simple things like just getting to know the quirks and idiosyncrasies of the predominant GUI, persistence or remoting frameworks. And so on. Software development is a craft in many ways and craft requires intimate knowledge of the material you're working with.

So when completely switching platforms, you will hardly have the platform specific experience to become a senior, let alone a technical lead. But it doesn't mean you would start as a junior, at the same level as somebody who just has got his degree and never wrote a line of production code in his life.

You should understand, that if you apply for a position in a highly specialized company, your future colleagues and a good part of the applicants will also be highly specialized. It is by them, that you will be measured. And most companies hire as late as possible, i.e. if they have an opening for a senior, then they are in bad need of one and can't really afford to hire someone who'll take up to a year to getting a firm grip of the platform on top of getting up to speed with the companies codebase.

Still I think switching can be a good idea, because the answer to

Does switching from one programming language to another cause a loss in experience?

is no. It just means there will be a huge need to gather new and different experience. And that will make you a better and more experienced developer. And coming from a different world, you will bring a fresh outside perspective. Some companies like that. In fact some companies, like Joel's FogCreek, prefer hiring apt generalist instead of focused specialists. In contrast to that, your chances are slim to land a senior C# job on a team of 20 devs, if you have little to no C# and .NET experience. So it really depends on the specific company's needs.

share|improve this answer
add comment

Why would lose your previous experience? This would only happen if you immediately forget everything you knew about language X as soon as you switch to language Y, and I do not think that is possible. :)

On the contrary, you gain more experience. Learning and using a new language gives you a different perspective on solving problems, which makes you a better programmer.

As far as getting jobs, it depends. If you have not programmed in language X for 10 years, and you are trying to get a job that requires X, that may be a cause for concern. Ideally, you should keep your skills up to date by reading books and doing side projects in X, so that you can demonstrate at an interview that you are still proficient in it.

As far as I can tell having the right language listed on your resume usually gets you past the initial screen, since resumes typically do not directly indicate when was the last time you used the language. It is probably possible to figure that out from the job descriptions, but I doubt that the initial screen goes into such depth. Then if you get a phone interview or an in-person interview it would be your job to show that you still know language X.

share|improve this answer
1  
The final sentence in the question indicates he knows that and is wondering how companies (Management/HR/Non-programmers) would view it –  Izkata Oct 28 '11 at 20:44
1  
@Izkata, good point, but that sentence wasn't there when I was typing the answer. :) –  Dima Oct 28 '11 at 21:32
add comment

Experience cannot be lost. Actual short-term skills may become a bit rusty, and you'll need a week or two before you're back to full productivity, but the true value of experience stays. Also, if you keep moving and learn new things every day, instead of doing the exact same thing for 10 years straight, you'll be much more valuable to any employer. If you learn a new programming language every year, you'll become better at your primary language, and picking up new ones will become easier every time. You'll see patterns emerge, you'll be able to look at any programming language from different angles, and you will incorporate wisdoms gathered in other languages into your primary one.

Unfortunately, this is not how recruiting / HR typically works; recruiters and HR people are not programmers, they have no idea what all those fancy acronyms and cryptic symbols on your resume mean, but they still need a way to tell whether you're a fit for a certain position or not. So they make checklists and tick boxes. 5+ years of experience with C#? Check. Recently employed in a .NET position? Check. Knows Visual Studio? Check. And so on.

Fortunately, not all companies recruit like this, and more often than not, those that don't coincide with those where passionate developers would most likely want to work. They know that languages are easy, but programming is hard, and they pick their developers accordingly.

So your choice is, basically, between optimizing for a recruiter-readable resume, or optimizing for actual personal skills.

share|improve this answer
add comment

There are two major components to programming skills which are relevant when switching languages/environments:

Efficient reuse of existing patterns

For the vast majority of programming work, and many consider it to be the only important component - and you will be significantly crippled in this department. When you switch to a new language and/or environment, you may find many/most of your known patterns and meta-patterns of coding are no longer relevant, or, often times, may even become hindrances. For the larger jumps, what once felt comfortable may all of a sudden become anathema, and you may find yourself with a slower and longer learning curve for some components than even a novice will. Many companies/work-places will leverage this, and push you to take a less senior or less well paid position to start with. Some will not even consider/hire you, no matter your experience. As you learn the new patterns, and, to some extent, unlearn/forget the old, you'll get back to your accustomed skill level. Depending on how flexible you are and how fast you pick up ideas, this can happen rather quickly, especially since you've already had to do it at least once.

Creative code writing

The ability to creatively apply your skills and knowledge to produce quality code is largely not going to take a hit. Paradoxically, the more languages and environments you are familiar with in depth, the more creative you are likely to be with your code. At first, your lack of familiarity with your tools will prevent this portion of your skills/experience from truly coming to the fore. As you progress in your ability to become experienced with the new languages/environment, you will find that your solutions become significantly more creative and original than they were before you started. This is where your experience will truly shine, especially when compared with others of your experience who do not have the same breadth. You will occasionally really shine through, and come up with solutions which they would never have been capable of thinking of, and may have trouble understanding at first, but which you can unequivocally show are superior.

share|improve this answer
add comment

People often overestimate the value of tool or language-specific experience in hindsight. 10 years ago, literally no one had C# experience. Back then, people migrated to C# because they thought it would be easier or help them be more productive, in spite of the short learning curve. It stands to reason that someone who makes that same transition now will reap the same benefits, but it's harder to see from the other side of the fence. Whether an employer recognizes that or not depends on how open minded they are.

share|improve this answer
add comment

You don't lose experience when switching languages. The degree to which your experience applies will depend on the degree of difference/similarity between the two languages though.

All programming comes in (at least) two parts: one is a language-independent ability to analyze and solve problems in ways that can be implemented with a computer.

The other is turning a method that's suitable for implementation on a computer into actual code that will run and do what the customer wants.

The first obviously isn't affected by moving from one language to another. To some degree or other, the second is -- and even if you continue to use the same language, changing things like libraries or application frameworks has at least some of the same effect.

Unfortunately, when it comes to real-life experience, it's difficult (if even possible) to separate the two that cleanly though. Your ability to solve problems in influenced (to at least some degree) by your ability to visualize a solution, which (in turn) requires thinking in terms of at least some abstraction of a target language (i.e., not necessarily in a specific language, but at least with a fairly decent idea of what sorts of things can be expressed/done in a programming language).

There's also the fact that different projects require differing amounts of the two skill sets. Some (e.g., a lot of web sites) require almost no analysis or problem solving, and are nearly pure coding. Others may require extremely intricate problem solving, but at the end of it all, relatively little code -- and just about anything in between.

You'd at least hope the employers would base their evaluation of your skills on the types of problems they solve, but I suspect that few have ever even tried to analyze their market in these terms, so most don't even have a basis for doing so, not to mention the desire or HR people who'd be able to even if they wanted.

Edit: Looking at a few other answers, I have to dispute the general implication many of them carry. Yes, solving problems is part of the job, but making good use of a target language, framework, etc., is a lot more than just syntax or anything like that. The target affects not only the syntax, but the "shape" of the solution as well.

share|improve this answer
add comment

From the perspective of a hiring manager, a lack of recent experience in the core development platform I'm looking for is definitely a drawback, but it isn't the only factor. I'd prefer to see at least a year experience with the language we're using. But switching languages doesn't change you from a senior developer to a junior developer. If I'm looking to hire a C# developer and I have an applicant with five years Java and one year C# I'm definitely interested.

share|improve this answer
add comment

In my experience working with programmers that crossed fields can be painful. An experienced VB guy may come into a C# position and apply their past skills to this new language. Suddenly, I'm looking at their code going...hm what is this for or why did he do it like that? Being an experienced developer in the language at hand, I may need to communicate "no no's" to them.

That's when they might say "but I've done it this way for X years". This kind of attitude can lead to tension. Certain practices that work well in Language X can have terrible consequences in Language Y.

E.G. JavaScript's functional scoping of variables can cause serious headaches when a C# developer writing JS declares variables only at the point they are needed rather than at the beginning of a function. Or, SQL's treating of NULL (unknown) vs the .NET definition of a NULL (unassigned).

For this reason, if you switch languages at a new company please make a great effort to go in with a learner's attitude. Yes, companies will hire you, but I strongly believe success is dependent upon your own attitude.

share|improve this answer
add comment

Depending on how closely languages X and Y are related, you might not be able to qualify as a senior developer using language Y immediately. Different languages/programming environments will almost certainly cause a drop in development efficiency, as you progress up the learning curve. Depending on the availability of experienced programmers in language Y, companies might not be willing to pay for your learning period if your experience in language X isn't useful for their projects.

However, you will be able to leverage the your previous programming paradigms and general coding techniques. Your skills in your old language X might erode a bit over time if not used, but as other posters have mentioned, it will be easier to refresh your knowledge than to start from scratch.

share|improve this answer
add comment

You will probably get a little rusty in the syntax if you spend time away and come back, but programming is programming. If you get the logic, the rest is syntax.

share|improve this answer
    
I don't ask about this! thanks –  Muhammad Hewedy Oct 28 '11 at 18:48
    
Don't agree its just the syntax. But I agree with the basic gist. If you know a language well you don;t forget it you just become rusty in its idioms. –  Loki Astari Oct 28 '11 at 21:51
2  
@Yatrix, try learning Haskell if you think the difference between all programming languages is just syntax. –  dan_waterworth Oct 29 '11 at 7:12
    
There's a huge variety of programming approaches, each of which is supported to a varying degree by a range of languages. You would solve things entirely differently in C# that you would in LISP or Io for example. Or Haskell, as dan pointed out. –  back2dos Oct 29 '11 at 9:45
add comment

Generally yes.

Programming in a specific language depends a lot about the base class library / features and tools you use. Most of those are not portable at all even when you change the application type say from ASP.NET to WPF even when you use the same programming language.

Your productivity will suffer and you will have to find common code that you will need to build real application and you will also have to be familiar with the short comings of the new language. Let alone that you have to get comfortable with the new syntax, error messages, third party tools, lingo etc....

No one is usually eager to pay you for all this effort.

share|improve this answer
add comment

No, and then yes. No you do not lose experience, because experience and knowledge are two different things. The problem is that ofcourse you will not be as proficient in the new language, because you don't know it as well as you previous one.

So the question is this, does the company need someone with experience on a language or experience as a software engineer? Some companies will value more your experience as a whole, rather than just the language you developed in, others will value more being a "ninja" in a particular language. It really depends on the situation.

Like you said there is more to programming than knowing a language. However knowing a language well through experience is not easy to get, so for your particular example, Yes, you lose your ADVANTAGE when moving to a different language. Then again, you also learn something new and become experienced on that as well.

share|improve this answer
add comment

Do you mean will you forget the things you knew about the previous language? Absolutely, (over time).

Or do you mean that you will not be as effective in the new language? Also absolutely.

share|improve this answer
    
no, I mean what does the new job preserve the previous experience for me? –  Muhammad Hewedy Oct 28 '11 at 18:15
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.