views:

2617

answers:

19

Hi folks, I got my BS in Computer Science about seven years ago. I spent two years in neuroscience research and the next three providing what amounts to tech support.

But I love computer programming - and I have since written, as a freelancer, non-trivial commercial code in Haskell, Smalltalk, and Objective-C. I used these languages because I find them rewarding, they make me a better programmer and thus, I thought, more attractive to companies.

However the polar opposite has occured and I am now unhireable. The freelance market has bottomed out and I am looking for regular employment. But I am being repeatedly turned down, even for entry-level positions, because I don't specifically fit the requirements - eg. Java programmer with 2+ years with JUnit, JavaMail, Servlets etc. And none of the hiring managers, let alone the recruiters, have heard of either Haskell or Smalltalk and more disturbing is their thinly veiled contempt for my background.

My question is , how should I market myself to these positions? Is anyone here in a similar position? What should I be doing different professionally? More broadly is this contempt for non-mainstream experience occurring everywhere or just my town? And if there are any hiring managers reading this, I'd love to hear your side.

Please be brutally honest.

thanks, joe

+28  A: 

Learning non-mainstream languages is good. Learning only non-mainstream languages might not be so much, especially if you want to work in the corporate programming world. There's a huge class of jobs these days where your job is not to be so much a programmer as a Java technician, and that's what you're finding. They don't want somebody who can creatively solve hard computer science problems — they want somebody who can plug functionality X into their big enterprise app, like, yesterday. If you want to get one of these Java jobs, it would be very much in your best interest to learn Java and get some experience there.

However, with the iPhone platform really hot these days, your Objective-C experience could be useful if you try looking for companies either in that market or looking to get into that market.

Chuck
Thank you, this is really helpful!
Joe
+3  A: 

With the job market being what it is these days, employers can afford to be picky about whom they hire. They're looking to hire someone who needs no retraining and can hit the ground running. If you want to apply for a Java job, you'll need to learn Java.

That said, you're right that your experience with Haskell, et al, can make you a better long-term programmer. You'll probably need to cast your net farther to find employers willing to take risks with someone who has a broader background and might need some time to get up to speed with their specific needs. Or alter your resume to play up your strengths in program design and production code rather than narrow skills in technology X.

Barry Brown
+8  A: 

Putting together a resume is never an easy thing. One suggestion is to break your resume into "what you have done" and minimize the "how you did it". So if you have worked on commercial applications for the last two years say "Commercial application design - 2 years", if they ask how then you can tell them what you did and how you did it.

Haskell, for sure is a marketable language as its design and implementation principals are very similar to SQL (T-SQL, PL/SQL, etc) but it is not a common development language outside of structured needs like template design.

While your looking for a position start working on learning Java or .NET, PHP or ASP.NET, as well as some scripting languages like Powershell or Perl. Ruby and Python are good as well.

When listing your experience with these languages (after your feel comfortable with them) for at least as long as you were in college. Most languages are very similar in practice, just different in syntax.

Also, as a last point. If you havent already focus your resume on projects, not on languages. Talk about what the projects did and why they were cool, not the language and how it made it easy to do.

GrayWizardx
+4  A: 

Hi Joe

Hmmmm, tough one. I guess I have to say that I think that the ? in your question should be replaced by a . Yes, non-mainstream languages are bad for your hireability. And no, I don't think this is peculiar to you or your location, I think it's a feature of the profession or industry or trade or whatever. On the other hand:

-- You write that you have written non-trivial commercial code in your favoured languages so there is some demand for them. What have you done to get a permanent job with one of the outfits who have previously paid for your time as a freelancer ?

-- And, since you invite brutal honesty, take a long hard look at yourself from the perspective of a prospective employer. I hope you don't go to interviews and tell the good folks (not) hiring you that you like to work in Haskell (or whatever) and give the impression that writing Java is a demeaning task. That attitude won't get you hired.

When I'm hiring experienced programmers I look for 2 broad sets of skills:

-- programming experience as close to our toolset as possible; and

-- experience within our application domain.

I'd like always to hire people scoring 10/10 on both headings, but I'll usually settle for a total of 15 and am not too fussy about the balance.

Hope that's some help, though it looks pretty thin to me.

Regards

Mark

High Performance Mark
While it's good not to diminish the language of choice of any organization, there are points where a developer may not work well with certain languages and/or concepts. When asked a personal opinion on practices, toolsets...etc. I believe it best to be honest. That's the only way to provide a good fit for yourself and your prospective employer.
Jason D
Thanks for the comment, High-Performance Mark. Unfortunately, my time as a freelancer was paid for by individual people, not companies.Also I never viewed writing Java as a demeaning task, so I hope I am not giving that impression. But I am definitely getting negative vibes about my background from the other side of the table. In fact, I have offered to spend a week writing something non-trivial in whatever technology they use to show that I can be up and running quickly. So far no-one has taken me up on it.
Joe
Just a thought Joe: that kind of an offer could be a legal minefield, particularly if the company were to use what you'd built. You could try the inverse - find a job you want, write something in a week using the toolset asked for in the job description, and use it in a portfolio in the interview.
Grundlefleck
+1 @Grundlefleck: good suggestion.
Jason D
+3  A: 

I believe "High-Performance Mark" has probably provided you with the best advice for what to do in the near term. (i.e. seek employment within organizations that you previously worked for) If that's not possible, for whatever reason, getting training in and experience using the high-demand toolsets is your next best option.

The way to do this was made apparent to me in college -- volunteer to a local non-profit organization that is not yet very well technologically equipped. These are rarer and rarer in todays world, but they still exist. Yes you will be working for no pay. But you will be gaining invaluable experience using the in-demand tools. This, plus your current experiences, will give you a unique perspective on software development and how to leverage the newer, cooler features being introduced into C# and Java... ones you've already been using for years.

*As for your question: "Is this contempt for non-mainstream tools?"*

I may be mistaken as I've not seen what happens in your interviews and conversations, but I believe the odds are it's not contempt for your background so much as frustration with you not having the skill sets they're looking for, or not being able to discern that you do, from your resume. A poorly qualified candidate (if only so by perception) is someone a hiring manager wants little to do with.

As for the implied question of "Why do employers do have such stringent requirements targeting only popular languages and tools?"

It's a numbers game for the employer. By increasing the odds that any given candidate knows the tools they already use, they can be pickier about the other experiences that make for a good candidate. Lets face it, if development tools and languages of choice by a given employer required a PhD in mathematics to understand, the pool of viable candidates would be very small, making it very difficult to find anyone to fulfill the the most basic roles.

The best way to avoid this in the future is to keep some popular languages and tools in your portfolio, even if they're not your preferred languages and tools.

Jason D
Thanks for the feedback! It makes a lot of sense. I was aware of the "numbers-game" argument before I started with non-mainstream technologies and anticipated some resistance but vastly underestimated its degree. Oh well, LL (lesson learned).
Joe
I view it as pragmatism versus resistance. While you *might* be so smart as to learn any framework and language in two months, to a level that allows you to compete with the best, the hiring manager needs to consider the downside risk that you've potentially lied on your resume. So if he's to assume you're the average developer - not a bad assumption - he's also to assume your lack of experience will lead to being slow to implement and design properly due strictly to unfamiliarity. Why hire someone like that when there's another out there who won't have that slowdown?
Jason D
+27  A: 

Three-step résumé rehab...

  • Learn Java. If you are really so smart (I know that sounds snarky; really it seems like you are actually a smart guy) you will have no trouble learning more languages. Contribute your Java code to an open source project or do something useful and create an open-source project with it. The point here is that you can now put java on your résumé with a "place" you worked with it.
  • Learn Ruby and RoR. Ruby has Smalltalk's object model, so you will love it, but unlike Smalltalk and your other current languages, Ruby, combined with Rails, can actually get you a job. You win! You should do something with PHP too, just in case. Contribute to a Ruby project if possible so you can put something more than I know language X on your résumé.
  • Contact sophisticated employers directly. The best places I know of don't actually care what languages you know. They are looking for smart people. Still, do your best to learn their language and framework in the two days before your interview. If they give you a test it will help tremendously.
DigitalRoss
This is great advice. Especially your third point about contacting employers directly. Thank you.
Joe
@Ross, Two days to learn a language and framework? Surely you jest! Unless mean only the most rudimentary aspects. . . The employers that have given me tests were not interested in my knowledge of the rudimentary aspects of the language. They were however more interested in my capacity to reason and problems solve, as well as my knowledge of the more sophisticated parts of their languages of choice.
Jason D
@Jason, I agree with you, and your note about *"reason and problem-solve"* is certainly what I was *trying* to say. Yes, no one can develop expertise in two days but you could learn the basic terminology and easily be able to write fizbuzz, don't you think?
DigitalRoss
+1 for "Contact sophisticated employers directly."
Frank Shearar
I've had tests that were absolutely elementary and some that were more sophisticated. (I really wasn't mentally prepared for that SQL test, and asked "is that all?" more than once.)
David Thornley
+1 for the open source contribute == actual list-able experience!
cottsak
How to contact sophisticated employers directly?
RamyenHead
@RamyenHead Well, one place is to look on the right of your SO page, just above "Related". Otherwise, look for companies that interest you, that you've heard from your friends/blogs are good places, and apply directly.
Frank Shearar
+1  A: 

Wow, thats really impressing, - Haskell, Smalltalk, and Objective-C in non-trivial commercial code - and you have two years of experience in neuroscience research. I wish I had your skills!

Quickly learning Java or C++ or Perl will not help you out, because you cannot "fake" experience.

The free market IT world is mostly looking for good and experienced programmers (== "coders") in mainstream languages - and not for somebody who seems to be a computer scientist.

This is especially true for small or midsized companies. I believe that really big companies will give you better opportunities for a new job, but not as a "simple" programmer, and not in the entry level.

What about trying to get the position of a "software architect"?

Maybe you don't like this idea - but that is what I would recommend to you.

Are you sure about all that? Sure, recruiters and HR dept's do try to select developers by resume-keyword-search, but I think many sophisticated technical managers (you know, the ones who get to make the decision) knows that's like trying to find artists who "have worked with blue and green for 2-3 years".
DigitalRoss
Which unfortunately doesn't help if the technical manager lacks the time or authority to examine resumes, and instead only sees the ones that get forwarded along by organic implementations of grep.
camccann
@DigitalRoss, backing you up, my experience with AI and implementing OO systems in LISP actually made me quite hireable straight out of college. Of course having done an internship for the company (as evil as they were) and doing so in C++ and VB3 (eek!) are what sealed the deal with that employer. It's where I learned the value of having popular skills on my resume, not just research skills...
Jason D
camccann : "only sees the ones that get forwarded along by organic implementations of grep" > Hahaha, that's a good one! :)
Form
+2  A: 

Smalltalk and Objective-C are used in the industry. I once did a job interview for a company that used Smalltalk as their main programming language. I used Objective-C at my previous job. Also, if you know Obj-C then you have a basic grasp of C, which is definitely a mainstream language. Haskell is mostly unknown, I admit.

I also don't think you can get a CS degree without having done some project in Java or C++.

You should definitely be hirable in todays market. I think the problem is in how you present yourself and your skills.

Edit
I have to admit that it took me 4 months to get a new job. I'm a C++ developer specializing in cross-platform development. I'm not telling you that finding a good job is easy, just that it's realistically possible, with some patience.

StackedCrooked
While they are used in the industry, they aren't where the bulk of the hiring is occurring. I agree completely with your assessment that Java and C++ should have been used at some point during college and that presentation and patience are what the OP should work on.
Jason D
+7  A: 

I have two quick comments:

  • When I look at resumes, having non-mainstream languages in your resume is a Good Thing.
  • When I look at resumes, not having the language that I need is a deal-breaker.

Visit your favorite tech jobs site. Read the most recent one hundred job descriptions, and keep a tally of which languages are most sought-after. Then learn those languages.

Good luck.

Chip Uni
This seems pretty sensible. If you've literally never looked at the language that you will be spending 100% of your time writing at your new place of work then I'd say that falls under "not doing adequate interview preparation".
Mike McQuaid
I disagree with your second point. If someone knows assembly, C, C++, Python, Ruby, Perl, Haskell, Lisp, Scheme, Prolog, and Erlang, and you need a Java programmer, I doubt they'll have any trouble learning on the job.
Chris Lutz
Like Chris Lutz I disagree with the sentiment expressed in your second point. But I voted you up because this is what the questioner needs to hear.
Tom Smith
+28  A: 

Non-traditional skills are not a problem. A lack of skills that people want to hire can be a problem, although it can be a blessing in disguise.

My experience is that there are two types of companies: the ones that want to hire people who have exactly the skills they want, and the ones who want to hire the best people they can find. Any d*mn fool can look at a resume' and say "Oh, look, Billy/Susie knows exactly what we need - they've got 20 years of Snortnozzle.NET, know how to make Coffee in every flavor known to mankind, and are intimately familiar with Sapphire on the Skids! They're perfect!!!". Sight unseen, Billy/Susie the Resume' Padder now has a leg up, whether or not they actually can tell the difference between doo-doo and shoe polish. And our resume'-reading manager now gets what they deserve - YARP (Yet Another Resume' Padder).

On the other side you get someone who says, "D*mmit, Jim, I'm a manager, not a miracle worker!". They may do something like have you take an aptitude test to get a feel for where you fall compared to other people they've already hired. They may have you talk to a bunch of folks to see if you can communicate, see how rattled you get when someone questions you, etc. They may actually ask you to write some code. And they may have to "waste" some time and money getting their new hire familiar with Snortnozzle.NET, Coffee, or Sapphire on the Skids, but it's money and time well wasted because they've hired someone based on their abilities, not on their resume'.

How do you find these companies? Keep hunting. I don't think it matters where you're located, some (many...perhaps most?) companies are "resume' readers", durn few are "developer scouts". Spend some time working up some skills that people seem to want (get on an open-source Java project, for example, or contribute to something in Ruby or whatever). The broad base of experience you've already got will make learning new stuff easier - and eventually you will find an employer who recognizes that.

Good luck.

Bob Jarvis
+1 for Snortnozzle.NET
Chris Shouts
Is it opensource? Where can I get it!??
cwap
+1 for Classic Trek.
Nosredna
+2  A: 

Employment is an arrangement where employers trade money and benefits for skills they need and that you have. To get a job, either find the employer that needs your current skills, or get the skills that employers want.

Although you might detect some contempt for your experience, I'd chalk that up more to the wall between research and industry. They are different environments with different skill sets.

As for your résumé, you don't have to put everything on it. If you think that your Haskell experience turns people off, don't mention Haskell. Your résumé has to include the basics, but it doesn't have to be exactly same for every employer. Emphasize the skills you learned in each job that a prospective employer needs.

Despite all that, I recommend not focussing on the language. Find a problem you want to work on, and learn the language you need to get that job. You might have to tough it out in a mind-numbing job to get some cred, but finally landing a job working on an interesting problem is much more satisfying than working on a boring problem with the language you like.

brian d foy
+1  A: 

Companies do not only go after language but also framework skill. Most of us spend 10% in the language and 90% calling some API. This is why its usually a major deal breaker if people do not have the right technology on their CV. Sure you can learn basic Java within a month, but learning Spring, Hibernate, JSF, JAX-WS, Maven, JAXB, GWT.. can take years.

So my advice would be not only to take up a mainstream language (by the way do not hide the non-mainstream ones, these are definitely a plus) but also to learn a few of the most important frameworks. It might sound like alot of hardship but mastering the hot frameworks might actually put you in a better position than an experienced programmer (who might have spend the last 5 years programming in outdated technology)

Lars Tackmann
A: 

Don't list mainstream or non-mainstream languages that wouldn't apply for the job. This isn't an obituary of your past jobs or a place to list each and every one of your skills. You are applying for a specific job with specific needs. They do not care about you or your interesting knowledge base. They care about what you can do to solve their needs.

Dinah
+4  A: 

If you're in Seattle/Redmond, San Francisco, Boston or New York, serious experience in non-mainstream languages is an advantage, at least at any company that I'd want to work for. I suspect that things might be different if you're outside of the technology hubs, or if you're mostly looking at corporate gigs. (I'm now a "corporate" developer, but in a team that has some appreciation for experience with less mainstream languages, and I have big-company and small-company experience at well known software companies).

But there's one stigma that you may have to overcome even at interesting software companies: A lot of the candidates I've interviewed who had a research background fail miserably on basic coding questions, and frequently fail the "gets things done" expectation, often because they are unable to articulate their past contributions effectively. If neither of these apply to you, consider making your resume more clearly highlight what you've done, instead of just what you worked on. Teams I worked on often passed over otherwise impressive resumes because the candidates seemed too likely to fit that unfortunate pattern.

I once watched one Master's Degree candidate struggle with a simple linked list question when he decided to re-implement linked lists in Scheme, which contributed to my own temporary misperception early on that people who felt most comfortable in languages outside of the C++/Pascal/C#/Java realm were less likely to be able to figure out simple stuff because they lived in a world of abstractions.

I now find it hard to believe that someone would be successful with functional languages and not be reasonably productive with ordinary imperative ones.

New York seems to be emerging as a good spot for Haskell and OCAML hackers, at least in some investment bank development roles, even after the subprime fiasco. Seattle company job listings are at least acknowledging that Ruby, Python, Haskell and F# programmers bring something to the table even if they do most production work in C# or Java.

As a C# developer with experience in Ruby and Java, my forays into hacking Boo and F# have served me reasonably well. If you're finding otherwise, I suspect at least one of these things are true:

  1. You don't strike people as a "get things done" type in interviews, or phone screens.
  2. Your resume doesn't emphasize accomplishments clearly enough
  3. You are looking for jobs in a technology wasteland
  4. You are talking to the wrong types of companies or the wrong teams in those companies
  5. You aren't as good in non-mainstream languages as you think you are

Presuming your problems are not related to skill, you probably need to get better at selling yourself, or get out of the area where you currently live.

Edited to add: The economy may be a small factor now if you live in an area with a fair amount of unemployed talent. But good companies are usually good companies even during a downturn, and most will respect your not-exactly-matching skills; a Java shop would likely hire a Java veteran first if one is available, though.

JasonTrue
+2  A: 

My question is , how should I market myself to these positions? Is anyone here in a similar position?

I get that deer-in-headlights look every time I talk about my OCaml and Erlang experience during an interview.

What should I be doing different professionally? More broadly is this contempt for non-mainstream experience occurring everywhere or just my town?

One of the hardest things is making the decision between doing something completely awesome vs trying to make a living.

Oddball languages put you in the running to work on completely awesome projects: writing a compiler, a database engine, facial recognition software, AI, game engine design, driver verification software, automated proof assistants, protein folding simulations, massively concurrent telecom systems, Google Maps, etc. Unfortunately, those jobs are pretty few and far between. Count your lucky stars if you ever find another neuroscience research job writing Haskell all day.

Alright, so now you're in the same boat as everyone, just trying to make a living. I read somewhere that 85% of all software development in the US, UK, and Aussieland is tied to line-of-business development. This includes writing data-entry apps, making reports for your accounting dept, CRUD apps and websites, and other boring tedium.

What kind of skills do employers want? At least here in the midwest, there are roughly equal numbers of Java and C# jobs at any given moment, followed by around 1/3 as many C++ jobs. Once in a blue moon, a Perl or Coldfusion opening pops up. If you just need a safety net to keep yourself marketable, I'd say learn one of C#, Java, or C++.

It looks like Objective-C has the most markerability on your resume, as it opens you up to a whole world of Cocoa, iPhone, and Apple development. Additionally, since you know Objective-C, you can also rightfully claim to know C as well.

And for what its worth, Credit Suisse and Jane Street Capital actually hire a lot of OCaml and Haskell programmers.

Juliet
+1  A: 

I've never been involved in hiring before, but one thing I have learned is never to underestimate the points you get just for showing passion. Typically, people who go out and learn more "hardcore" languages are either in the passionate category or are masochists.

My advice: learn the languages you really want to learn. If you don't really want to learn Java, chances are you won't want a job working with Java.

Jason Baker
+5  A: 

You have Objective-C experience, and folks aren't beating down your door? If you haven't produced an iPhone app and offered it for sale on the app store yet, you ought to do that. $99 and a couple weeks of your time will put you into one of the hottest categories currently.

Mark Bessey
It takes a lot longer than a couple of weeks to write a _quality_ iPhone app.
Jonathan Sterling
Yes, obviously. But you could write *an app* in a week or two, get it on the store, and have the "I'm an iPhone developer" line-item on your resume.
Mark Bessey
+16  A: 
Norman Ramsey
A: 

It's quite possible that it isn't your experience that is getting you rejected. It may be your attitude. I don't say that to be snarky. It is a reality of the hiring process that if the hirer sees you as not a get-things-done type of person, or perceives you as socially a bad fit for the team, they are unlikely to hire you.

At our company where I work, they'd love to hire anyone who can program well, and has a good attitude.

Alex Baranosky