If I work as a Developer in one language (e.g. Java) and work my way up to Senior Developer, would that qualify me to be a Senior Developer for a position using another language (e.g. Ruby)?
The best way to answer this is to look at what the difference between a Developer and a Senior Developer. Assuming that it's not just a time served thing, generally I'd expect both Developers and Senior Developers to be able to:
- Write code competently in the languages required by the role
- Diagnose and fix bugs
- Write unit tests
- Follow standards and reasonable best practice (version control, documentation)
- Have a broad basic technical competent
- Act in a professional manner
In addition I'd expect a Senior Developer to:
- Mentor other members of staff in best practice
- Be and acknowledge reference point for at least some of the languages being used by the team
- Actively research and champion new areas of best practice
- Take technical ownership of more complex issues / areas of code and provide solid solutions
So, the question then becomes do you fulfil the extended criteria for your second (or third or fourth) language? I'd suggest that so long as you're technically competent enough in the language you're moving to then yes as most of the Senior Developer stuff tends to be transferable.
I look for the following qualities when I've interviewed Sr. Developers.
- Has worked in multiple languages
- Expert in at least one, competent in at least one other, preferably in a different paradigm
- Aware of current technologies, state of the art, etc in chosen area
- Good CS basis ie (algorithms, algorithmic costing, data structures, etc)
- The ability to switch between the details of a specific problem and the big picture
- Express when things are moving in the wrong direction and why; and then be able to continue in that wrong direction (aka professionalism)
- Ability to Mentor
- Ability to work within and with a team
There are a myriad of other things I look for, but these are the main points.
While I have recommended hiring Sr. Developers who weren't experts in the language used at work, they were experts in similar languages.
You could apply, but at least if I was doing the hiring, I might or might not hire you.
Seniority relates to (at least) two areas. General development expertise and language/framework expertise. (I am purposefully leaving out business-space-knowledge) at present. Being a senior developer in my books would also include a level of design/architecture expertise. How to build good/testable system, etc.
Getting to this level in Java should stand you in good stead for other (similar/procedural) languages.
But in this era of expected immediate productivity, you are unlikely to know nearly as much about Ruby as Java. How to split up your system into Ruby-friendly constructs instead of Java-friendly constructs. You probably know some Java frameworks and not Rails or other Ruby-specific things.
If I were to ask you to do whiteboard coding in Ruby during the interview, could you do it?
All of these would go into my decision to hire you or not, at any level; but in particular for a senior role.
That's one of the big differences between our profession and other more 'formal' professions. If you've worked as a lawyer doing wills & estates for 20 years, then you are going to command a high rate because you have 20 years of knowledge built up in that domain.
If you've been doing C++/Win32/MFC for 15 years, that doesn't really qualify you for a senior spot as a Rails developer, even if you're still solving the same problems in the same domain... say medical billing, for example.
Even worse, most companies won't even consider you for a position that is roughly similar... For example, if you've done C++/MFC for 5-7 years, you ought to be able to get up to speed on C#/.NET very quickly, at least for the desktop. Unfortunately most companies don't see it that way.
Take "programming" out of it. Pretend instead that you are a professional translator.
Assume English is your first language, and you are also proficient in French. You are likely to learn Spanish fairly easily.
However, you are not as likely to quickly master the many dialects of Chinese. While your experience as a linguist will help you learn the language(s), giving you an advantage over somebody that has never studied a foreign language, it will still take you a much longer time to become an "expert" (i.e. "senior") translator in that language.
Yes and No.
If the languages are kind of similar, say C++, Java or Ruby sure you should be considered. Depending on how flexible the people sitting in those offices are, you have a fighting chance.
However if the languages are vastly different, and by that I mean you are a COBOL guy who's kicked up about Haskell, then notwithstanding your 10+ years of COBOL chances are rife that you may not be able to even as much like secure an interview.
COUPLE OF THINGS THAT WILL GO IN YOUR FAVOR IN SUCH SITUATIONS:
- If you already know multiple languages and have proven experience about the same. Say you are good at C++, but also know Perl, Tcl and some Ruby I'd be willing to consider you for Java. In fact I know people who have got Java jobs with C++ in their resume.
- If your experience is in a related domain then you have a good chance of making it. For e.g. if you are a C++ game programmer, I see no reason why you can't be hired for a C# job that needs a fair bit of multi-threading.
I've rarely seen a "senior" title based on language. I know a few senior systems programmers, a couple senior web programmers and one senior COBOL programmer.
Programming is multifaceted and has quite a few disciplines to offer. I would expect a senior web developer (in titles, programmer and developer seem to be interchangeable) to be proficient in several mainstream languages used in web development. Does that make a Python and PHP guru an instant expert in C#? No. On the other hand, not all C# gurus have mastered the fine art of project management and leadership.
I served the role of CTO in a company, in addition to being the senior systems programmer. Yet, I'd happily defer to a scheme or LISP expert if we encountered a project that necessitated either. Part of being a good leader is understanding your own limits and shortcomings first.
I'm not sure that I'd want to work in a company, or even a department that focused on one and only one language. That sounds like it would do what they always said smoking cigarettes would do: stunt your growth when the reality is actually far worse.
Don't chase after titles, chase after knowledge. But, to be fair, your role in a prior leadership position would probably give you an additional edge, provided that you demonstrated competency in the language at hand.
I think it kind of depends on what you perceive as a Senior developer? If it's more of an architect role, many of the design principles and design patterns will be at your disposal from your experience as a developer, regardless of language. So that's a plus ;-)
However, when looking at creating an application or code as productively and maintainable as possible (the rolling up your sleaves bit), I don't think you could enter at the same experience level when switching language, IDE and/or framework.
But as runrun said, this doesn't stop you from applying for anything
This is going to be highly dependent upon the company you interview at as it is typically the internal human resources procedures that drive how new employees are brought on board. Larger companies tend to be very rigid and if they say you must have n years experience in a given language to be considered a senior level then you might find that they will only bring you in a a mid-level developer.
That said though, this shouldn't prevent you from applying for the position and if they bring you in for an interview it is something that you should discuss.
I'd say that the more low-level or machine-friendly the language is, the more expert you are.
Java/C# expertise is less paid than ASM/C/C++ expertise.
Those latter languages do memory management and other things that actually MATTERS when programming.
But for other "easy" languages, you would need to make a quick comparison about the features that makes them "easier", but I find it useless. Experiences with easy languages is better measured with CMS/other made-code you used to do you work, such as code igniter or django or Apache or RoR.
For me, senior developpers are people who program Kernels, Systems, Embedded hardware, etc. Programmers using languages that are not machine friendly are not seniors to me. They just do the job, but that's all.