views:

559

answers:

13

'My friend' currently works an internal software job working on CRUD apps, but aspires to more. He has a degree in a non-computer science engineering discipline from a very good university, but no actual qualifications in computer science.

He is desperate to go and work for a really good software company where he might actually get to work with people who genuinely care about programming, rather than the endless WTFs he is used to. He aspires one day to perhaps working for the likes of google, microsoft, fog creek, [insert equivalent here].

This guy is working on an implementation of a C# compiler in a functional language as a personal project firstly to teach himself about what it's like to implement an industrial-strength language from ground up, not to mention the advantages of functional programming. On top of this, however, this guy thinks this might look good on his resume when trying to get aforementioned work.

This guy is teaching himself fundamentals in his spare time (algorithms, software engineering, compiler theory, etc.), so isn't afraid of theory.

The question is - how on earth can this guy get where he wants to go? He is very passionate about programming but feels incredible despair at the prospect of doing CRUD for the rest of his life.

Possibilities this person has considered are: contributing to open source, correspondence degree, masters top-up course on top of non-CS degree, crying himself to sleep every night.

Please provide any and all advice, 'my friend' would really appreciate it!

+8  A: 

Has he actually applied to any of the above listed companies ?

In my experience, most "good" companies understand that a degree in a specific discipline is useful, but a degree in any discipline, is evidence that the candidate had the stuff to make it through a university programme. (Or as altCognito pointed out in his comment: it demonstrates other positive traits; cooperativeness, ability to work within a team/political structure particularly if you are getting a ph.d)

They are also fully aware that alot of what gets learned in university, doesn't even compare to the experience garnered in real life situations and companies.

If your friend is really as motivated as you say (spending every waking moment of his spare time tried to educate himself) then he sounds like the kind of guy that these companies would at least give a shot at an interview.

It would probably do no harm though to complete a Masters/Distance Ed Cert/MCP of some description incase he needs to jump to through some HR hoops that demand he has some official qualification in the IT Field

Eoin Campbell
It's pretty well documented that the big companies have a lengthy interview process for exactly this reason: The interview is designed to filter out those who aren't necessary up to snuff, but also to catch those extraordinary individuals who have *have a passion*. As a sidenote, often, getting the degree can make sense as it demonstrates other positive traits. (cooperativeness, ability to work within a political structure (in particular if you are getting a ph.d))
altCognito
+5  A: 

There are several levels of answers possible here:

  1. Your friend could try to improve his current workplace - as in Joel's Getting Things Done When You're Only a Grunt.
  2. He could look for a job at a small but good software company - such as a start up. I know the economy does not support this that well right now.
  3. He could start a start-up himself - as in Paul Graham's Why to Not Not Start a Startup.

I have in the past tried 1 and 2, but did have the advantage of a CS degree. However, I have met and worked with good programmers who had no formal CS training.

Yuval F
+8  A: 

My advice would be to look for good software work at companies that may not be considered "good software companies."

The companies that you mention have lots of people applying for jobs there that, likely, have the same passion as you and have the degree, too. Go ahead and apply there -- since I would hope that they are looking for quality candidates, not degrees to line their office walls with. Recognize, though, that the pool of people you are competing against is large and the likelihood of getting an interview is thus smaller.

You should also look at companies that are not traditional software companies. Often, the work they are doing is at least as interesting or may be more varied since they are smaller than the work at traditional software companies. For example, I work at a university and my projects range all over the map in scope -- research to internal administration -- and I'm responsible for the entire project from requirements to installation. I also do a fair amount of CRUD work as the apps are mostly data-driven. In my particular situation I have a lot of control over my environment and the tools that I use so I can play with new technologies and am continually challenged in learning new things.

Look around a bit. I think you'll find that there are lots of places where you can put your skills and interests to work. I'd also encourage you to keep learning. I know that I learned a lot more about software development in my Master's program than I ever learned getting my BS in Computer Science. If you're interested in that route, by all means take it -- but don't take it to just get a better job. Take it because you're passionate about improving your skills and knowledge about your craft. You'll get more out of it AND will be a better candidate for whatever jobs you apply to.

tvanfosson
+1  A: 

I know better coders without formal training, or doing it now then some of those with formal training. While a degree helps, it certainly is not necessary to get into the industry.

Just get out there and try. Hey the worse that could happen is you have to try again.

ewanm89
A: 

I would suggest he should also think about contributing to some well-known open source project. Most good employers would value the open source work, even if it involves fixing lots of minor bugs, documentation etc. Contributing to open source project exhibits various characteristics like

  1. You are able to read and understand other people's code, as reading code is WAY HARDER than writing code
  2. You can follow project specific coding conventions
  3. Your code was reviewed by more experienced programmers, and obviously it was not awful as your patch got accepted
  4. Your written communication skills are not bad as you were able to successfully communicate with other programmers contributing to the project
  5. You are deeply interested in programming as you are doing this as a part your spare time

A good employer should care about all these values that you bring to the table when you are part of their team.

Amit
Except that http://www.codinghorror.com/blog/archives/001255.html
Benjol
Benjol, exactly what I was thinking.
Steve Rowe
+2  A: 

For what it's worth Bill Gates never got a degree, but he got to work at a software company (although not all would agree that Microsoft is "good").

The point is that when you want a traditional job in a large, well established firm you usually need traditional credentials (think doctor or lawyer). If on the other hand you want to go out on your own and start something new the only real question is "are you good enough?"

You say your friend is a graduate engineer, has he passed any exams like licensed professional engineer? Proven compentinces in a related engineering field will not go unnoticed on a resume.

Think also about "hybrid" fields, like robotics which combine programming with related engineering fields. Perhaps your friend can combine his proven engineering and programming experiences to become the ideal canidate for a position which requires both sets of skills.

JonnyBoats
+1  A: 

The sad truth is that many of the larger companies (and many others) just put a CS degree as an initial screening requirement. However, in many cases (at least in the US) they state "a BS degree in CS or related field". As long as you went to Uni, you should be able to at least satisfy the academic education clause even if it's not CS, and your experience might carry you over. If you didn't go to Uni at all, this could be a problem, and there may be a glass ceiling (quite unfair) in some companies.

In addition, if you can find ways to bypass the bazaar-style HR screening for independently submitted resume, you have more chances based on your experience. If a friend who works in a company you are interested submits your resume, he may get more attention, and because of that reference you might be able to show through your background. Some places would prefer a seasoned developer. Another option (at least in the US) is to work through a recruiter, which works similarly and often bypasses HR completely, going straight to the hiring manager.

Uri
+2  A: 

Tell your 'friend' that they might not be able to get in the door at Google.

Steve Yegge's got some advice that might help.

I have graduate degrees to my name, but not in computer science. I was not able to get past a phone interview with Google because I stumbled on a problem that I'm sure any MIT undergraduate who had successfully completed their algorithms course would have sailed through.

duffymo
+1  A: 

Related: Am I too young to be worrying right now?

To that I'll add that the more popular employers (eg Google, Microsoft) will get far more CVs than they have positions. I once heard Microsoft hires around 3% of the people that apply although I can't find any reference to that now so can't vouch for its accuracy. I can believe it though.

Anyway, you put yourself at a severe disadvantage at such places by not having a degree. Often one of the first cutdowns of a CV stack is degree vs non-degree (with the second being filed in the big circular file).

cletus
+1  A: 

Put your passion front and center. If you are creating a compiler as a fun/learning project, you are certainly headed in the right direction. As you get further along, post your code and blog about it as much as possible. Put it out there and let Google do some of the head-hunting for you. If you can let your work speak for itself, it's going to go a long way towards getting you over the initial resume and search engine results screening.

seanosteen
+2  A: 

I think your friend could profit from this book.

This book is about creating a remarkable career in software development. In most cases, remarkable careers don’t come by chance. They require thought, intention, action, and a willingness to change course when you’ve made mistakes.

(Recommendation based on the first edition; I haven't read the second.)

Darius Bacon
+2  A: 

First, you've (ahem, I mean, your friend has) started exactly right. He's got passion, and is actively learning in your spare time. Writing a C# compiler in F# is exactly the sort of thing the companies he aspires to work for want to see on a CV.

The first thing he should do though, is to apply to the companies he wants to work for. This won't hurt his long-term prospects at all if he doesn't get a job; Steve Yegge claimed to have applied to Google 5 times or something before he got accepted.

Assuming he doesn't get a job, he needs to work out what skills he's missing to get these jobs, and do what it takes to get them. This possibly means getting a CS degree, but it's unlikely; more likely is that given your question, he'd be better learning the skills on his own in his spare time as it'll save him a couple of years. He should focus on skills rather than on certification because at the companies he aspires to, the recruiters are much better than typical recruiters, and they're going to give an interesting CV a look even if (perhaps even especially if) the applicant has an unconventional background, but is self-taught.

Oh and good luck (to your friend)!

Paul Hankin
+2  A: 

As someone in the same boat, I can say learning about all the CS principles is the best way forward. Talk to people who have studied CS and work out what they know that you don't.

There's a lot of stuff that's useful, but I think the most useful things can be boiled down to:

  • Big-O notation (and how to work out where your own algorithms fit within that).
  • Data structures. what they look like and when to use them (ie, how does a list differ from an array and a map. What is a hash table, that kind of guff).
  • Algorithms (sorting, searching, etc) and when to use them.
  • Machine architecture.

Most of the rest of a CS course is the supporting work for these basics. There's usually introductory programming classes, some particular maths classes that help out and then more applied topics like database design, software engineering principles, etc. I've even seen CS coures teaching 3D graphics and requiring a few extra topics in linear algebra before the students were capable of understanding even the basics of 3D graphics.

Your friend may be pleasantly surprised, or he may find that the big companies want to bring him on in a junior or trial role to see if he can actually handle the work. Either way, if he's competent as a programmer he is probably useful to them.

Also, keep in mind that a CS degree isn't necessarily preparation for the real world. There's a lot of elective work in CS and you could easily choose a study program that was purely theoretical and gave you an immense understanding of something like formal mathematical proofs of software and algorithms without actually being able to build the algorithms yourself.

Adam Hawes