Skip

Am I okay in applying to jobs in completely new languages and frameworks?
January 10, 2011 6:56 PM   Subscribe

I "fell into" a programming job right out of college. It is mainly C#, quite a bit of Javascript, all within the .Net environment. I noticed a lot of jobs are very specific on technologies used (such as Struts/Java). Would it be okay to apply for these jobs? How do I represent myself?

I might be wrong, but it appears that as long as you understand data structures and algorithms, the languages don't really matter. I've played around with Java and different environments. They are different enough that I can't imagine being at 100% productivity on day one, it seems similar enough to C# as to not throw me for a loop. I would even say that C#/Java are simple languages and the libraries around them are what really propels them.

I've been working at my company for 4 years, mainly on internal enterprise software. The opportunities I'm looking at are the same. My degree is not in CS, which is why I'm sort of a stranger on how to position myself and how to advance.

I've spent quite a bit of time trying to more formally train myself, like going through the classic "Introduction to Algorithms." I've already gone through the Gang of Four and other classic OOP books through my job, but have recently been back tracking to teach myself at a more fundamental level. For whatever reason having a non-CS degree concerns me, I assume that 4 years of experience shows I'm not a complete lutz.

Any other advice would be appreciated!
posted by anonymous to Work & Money (14 answers total) 10 users marked this as a favorite
 
Honestly, I would be unlikely to hire you unless you could demonstrate skills in the technologies that I needed. C# is almost java, but the struts and windows MVC frameworks are light years apart. While you have a great baseline, I'd prefer a candidate who I didn't need to substantially train up.

This is if you are going for a line coding job. If you are trying for architect / project engineer / tech lead, I might be more likely to consider you if you could demonstrate strong management skills.
posted by jenkinsEar at 7:08 PM on January 10, 2011


Agreed with jenkinsEar. Company I work for hires for roles that require either .Net or Java (depending on client and position), and we wouldn't look at someone applying for a job needing one set of technologies who only had experience with the other.

Fair? Probably not. Safe? Sure.

To wit: I'm mostly Java (with Ruby and Objective C and other random things) with well over a decade's professional experience, and I wouldn't dream of applying for a .Net-based job, just because I know the workflow and such are completely different. Parallel universes.
posted by clicking the 'Post Comment' button at 7:14 PM on January 10, 2011


You are right to think that C# and Java are very similar language wise (although the bleeding edge of C# is starting to add more divergent features). The key differences are the libraries, the tooling and the communities around these technology stacks and they can be big huge differences. Just as asp.net or .net mvc are giant subsystems, so are the equivalents in Java (or even Python or Ruby). Sure the theory is similar but it takes time to under the nuance and the nuance is what makes you a powerful, productive developer.

As for applying for Java or Struts jobs, I'd say it would be a stretch as you currently have stated your skills. Now if you were doing an internal job transfer where you could talk to the hiring manager and talk about it being a broadening assignment then you might have a case.

As for your degree, outside some specialized domain areas your 4 years experience will trump a non-CS degree. As for education, it never hurts to know OOP patterns and algorithms but I find that a lot of the stuff that I learned in my CS coursework is already baked in the core libraries of the language stack that I am working on. An often overlooked area for programmers is educating themselves about designing and testing their systems, effectively using source code control as well as how to automate development and deployment tasks. You also might find some classic essays (and new classics) on software engineering to help broaden your perspective. Examples might be Code Complete, The Mythical Man Month and The Pragmatic Programmer.
posted by mmascolino at 7:25 PM on January 10, 2011 [3 favorites]


Five years ago, when I was last interviewing, I got offers from companies who worked primarily in C/C++, Java, and C#. At that point, I only had significant experience in C/C++. In each case, I explained that I knew C/C++, and then the interview was conducted in C/C++.

Most larger software groups are going to be interested in:
1. your data structures & algorithms knowledge
2. that you can code in some reasonably well-known language. You will get badass points for picking Lisp, but I wouldn't recommend VB unless it is a VB shop.
3. your communication skills
4. your problem solving ability

Small shops, and at-risk projects are more likely to want very specific language skills.

They are different enough that I can't imagine being at 100% productivity on day one, it seems similar enough to C# as to not throw me for a loop.

A rule of thumb is that an average software engineer will take two years to become fully productive on a new project. At the top of the industry, coming up to speed in 2-3 months is impressive. 100% productivity on the first day is neither observed nor expected.
posted by b1tr0t at 7:38 PM on January 10, 2011


two years to become fully productive on a new project

Two YEARS?! I haven't seen even mediocre new hires take that long, and I'm not at a Google-level picky company.

Anyway, I would hire you to work in Java if I thought you had true strong potential and background in the fundamentals (and that is more than algorithms, it includes things like testing skills, technical leadership and design). But I work for a big company that can often afford to hire people that aren't a perfect match for what I need RIGHT NOW.

Listings like that are, to me, kind of a red flag in the first place. Hiring people for skills they already have often means they aren't a) selecting for actual coding ability, just "skill set checklist", and b) possibly not great places to go if you want to actually grow your skill set beyond the "checklist" you already have. But a lot of times they're written by clueless recruiting managers and in fact, the department might have a preference for struts and Java but they'll take OO-aware good coder also. So don't feel shy splashing your resume around, the worst they can do is not call you.
posted by ch1x0r at 7:58 PM on January 10, 2011


This is a slightly confusing question because there's actually two things going on here: language and framework differences, but also windows culture vs linux culture*. The former is not that big a deal at the places I've worked -- there's an expected ramp-up time on the company's specific software and setup that is going to overshadow the difficulty of switching languages. The cultural difference is a substantially bigger deal at some places, since it's got tribal allegiance stuff in addition to the mindset difference.

*Assuming these java things are on linux, which is usually but not always the case. You still get a bunch of linux cultural stuff for java shops on windows, but it's not quite as extreme.

However, there is a solution here, namely, teach yourself some java. Install linux on your home computer, set up apache and mysql, write some java apps. Interviewers love it when you say "I haven't used this software professionally, but I've been playing around with it at home and I've done X and Y with it."
posted by inkyz at 8:11 PM on January 10, 2011


I'm going to give you a different view than b1tr0t or ch1x0r. I run a shop of about 35 developers that supports a large portfolio of simple to medium complexity web apps. There is always new development going on, but a lot of the work is break/fix maintenance. The stuff that my boss and our CFO pay attention to is that we don't have big outages and that utilization of staff is high. They have no idea what Java is, but they certainly know their way around a P&L spreadsheet. When I hire a new developer, a minimum requirement in our shop is a working knowledge of the language and at least some of the 3rd party libraries and tools that we are currently using (which in our case happens to be Java, Hibernate, Struts, Subversion, Maven, Log4J, Eclipse). It is icing on the cake if they have a CompSci background, can quote GoF patterns chapter and verse, or have worked through SICP. But we aren't going to even have that conversation if you don't have the prereqs.

Early on in our interview process, a developer in our shop would do a tech screen and ask you some fairly specific questions on these technologies to verify that you've got hands on experience. The thinking here is that you would have enough of a learning curve on the tools you don't have, coding and testing conventions, our app server and RDBMS, and our current codebase without also picking up that other stuff. Knowing the language syntax and core APIs is like 20% of the job and we don't have the luxury of investing the on-the-job-training to get someone the rest of what they need. I find that in my metro area, there are plenty of candidates that can show up on day one with 70 or 80% of what they need to be productive.

Having said all of that: ch1x0r makes a good point that there is no harm in splashing your resume around. Some shops can afford to make a bigger investment in you to get you up to speed. Also, we would probably consider taking a .NET developer with no production experience in Java as long as they had enough experience with the tools and libraries to pass our tech screen.
posted by kovacs at 8:28 PM on January 10, 2011


Slightly different perspective here: a theory as to why so many of the job ads you see require such specific skills/languages/technologies. (This is only relevant if you are an American citizen working in the United States.)

I am a paralegal at an immigration law firm whose main business is helping computer programmers from other countries gain legal permanent residence in the United States, based on their specialized programming skills.

As the first step in this process, we must prove to the government that there aren't enough qualified U.S. workers to fill the job that is currently being performed by the foreign worker -- this is called "labor certification." The legally mandated way to do this is to run ads for the job, being sure to list every skill/language/technology required to perform this job. This is advantageous for our client. If we ran ads that were very generically worded ("Wanted: computer programmers with experience in C#"), there would probably be a qualified U.S. worker to fill the job, and our client wouldn't be allowed to apply for permanent residence. But, if we run ads that are very specific ("Wanted: programmers with a minimum of 2 years designing and developing software using C#, plus experience in Struts, Mysql, and .NET"), there is a higher chance that there aren't enough Americans who are qualified with those skills. The job ads we run also tend to specify that applicants must have a degree in something like CS or mathematics -- which would rule you out, with your non-CS degree.

Thus, I wonder how many job ads you're seeing are for actual, available computer programming positions, and how many job ads have been written by lawyers and printed/posted in order to fulfill the requirements of labor certification. And if you do try responding to a "labor certification" job ad where you lack one or more of the required skills, you will NOT get interviewed or hired. It's not like responding to a "regular" job ad, where you might find some other way of convincing the hiring manager to take a chance on you. (And of course, the "labor certification" job ads are worded to sound as much like "regular" job ads as possible...)

So: this is good for foreign workers, and for my law firm; not so good for you. As I do not work in your field, I don't have any suggestions for next steps you can take, but it is always good to know how the system is set up and what you're working against.
posted by clair-de-lune at 8:42 PM on January 10, 2011 [4 favorites]


In my experience it really depends on the hiring manager. Demonstrated ability with multiple languages, data structures and algorithms, and generally just a natural aptitude for the craft can outweigh formal education. Things like coding in your spare time, freeware or open source contributions, and so forth, are good.

It's your ability to learn quickly, and keep up to date on the rapidly progressing field that's most important. It's all too easy to become an expert, then find yourself a dinosaur several years later when everybody is hiring for the currently hot languages and frameworks.
posted by hungrysquirrels at 8:48 PM on January 10, 2011


I'll second the above who are saying it can't hurt, but I'm not sure it would do you any good. And it would be taking time away from applying with more detail to jobs that you have a much better chance of actually getting.

Frankly what I'd do is just sit down and learn the language(s) in your spare time. I've been paid to program in over a dozen languages, and while yes, the bedrock is the same on all of them, the gotchas are in the details. You should be able to get yourself up to "Reasonably confident that I'm not just BS-ing" level in a few months if you know a close relative of the language. And to echo kovcacs get passing familiarity with as many libraries and frameworks as possible. All other things being equal, familiarity with those thigns will pay off.

Otherwise the size of the company will determine success. Smaller companies and freelance/temp hires don't have the time or money for training. Larger companies have more patience and resources to bring you up to speed.

It also depends where you're located. If you're within 100 miles of Silicon Valley, don't bother, they're picking qualified programmers out of their teeth right now.

If, on the off chance you get called in for an interview emphasize you're a fast, self-motivated learner and looking for a long-term, stable position to make it seem less like you're a training risk.
posted by Ookseer at 8:58 PM on January 10, 2011


Right now there's an easy and potentially lucrative way to teach yourself enough Java to be dangerous: write an Android app. You get some experience in Java, you get to work on a self-directed project, and most importantly, you can throw it onto your resume and anyone interested in checking out something you've worked on can go download it.
posted by little light-giver at 10:25 PM on January 10, 2011 [1 favorite]


I don't have coding experience on the job, but plenty of software experience, especially with job searching and 'tech buzzwords'.

My advice: Throw your resume at any job that looks even remotely interesting or doable. Some people may be looking for a very specific language. Some people may be looking for a broad group of languages, but only listed the one they were most familiar with. And some people have no idea what they're even asking for (like the job listing I saw back in 2000 that wanted 15+ years experience in HTML. Yeah.) The worst is that you don't get hired. But you have a job anyways. The best is that...you do get hired!

(My recent story. I was unemployed for the past 6 months, and was applying for Software Test Engineering gigs. I used to be conservative with the jobs I applied to, but eventually just sent them to every listing that I was remotely qualified for. 98% of the resumes seemed to fall into a black hole, and I heard nothing back. 2% elicited at least a phone screen. A couple of those went beyond the phone screen stage, and one company hired me. And that job? If I was being cautious, I wouldn't have even applied, as I didn't have any Electrical Engineering experience, nor extensive SQL. Nor can I lift 30 lbs. But, they talked to me, liked me, and hired me.)
posted by spinifex23 at 11:23 PM on January 10, 2011


I might be wrong, but it appears that as long as you understand data structures and algorithms, the languages don't really matter.

This is only true to the extent that your new employer is willing to give you time to learn the new technologies. It's easy to write fibonacci(n) in $ARBITRARY_LANGUAGE, but it is not easy to figure out the exact call chain that a request to a Tomcat instance running Struts will make, until you've been doing it for a while. Some employers are willing to give you a few months to get yourself up to speed, some are not. My company will hire someone without the specific background they're after, but only if they look like they have a higher ceiling than candidates who are able to hit the ground running.
posted by Mayor West at 5:10 AM on January 11, 2011


Huh, I'd disagree with many of the previous posters. I suppose it depends on how good you are overall, how well you do in interviews, etc. My last 2 jobs I went into without knowing the appropriate language and had no issues. But these are large companies where they are hiring for long-term talent and can afford potential ramp-up (Microsoft and Google in my case). The interviews tend to be language-neutral, in both jobs when I interviewed someone I let them pick their language. Hell, I used C# for my interview at Google (where I now mostly use Python)!

For a small / startup type company, though, they may not be willing to lose any potential work time (_if_ they can meet their hiring goals being more strict). Ditto with non-tech companies (in other words, companies where you're a programmer but their main business isn't software) where they tend to be buzzword-driven.

As someone who interviews and gives hire recommendations, though, I consider language irrelevant. Assuming you know at _least_ one object-oriented language, and are good at algorithm / design / etc questions as well.
posted by wildcrdj at 12:19 PM on January 11, 2011 [1 favorite]


« Older PS3filter: is fixing the disc ...   |  Prenatal vitamins - aside from... Newer »
This thread is closed to new comments.


Post