October 7, 2008 1:29 PM   Subscribe

What is the best way to get a programming job without a computer science degree?

I recently got a finance degree, but I am pretty decent at programming. How can I prove this to a company I want to work for? Get a certification? Write some programs as a kind of portfolio? Any suggestions/advice are appreciated.
posted by amsterdam63 to Computers & Internet (18 answers total) 10 users marked this as a favorite
Many universities turn out computer science and computer engineering graduates, some of whom are good programmers and some of whom are bad. The best two programmers I have ever worked with both lack degrees in the field, though, so go figure.

I would go with a portfolio sort of approach, preferably some small work-for-hire 'real' jobs you could do via rentacoder or such, and then expect to be tested in an interview.

Interviews are really key. Corporate programmers almost always work in teams, so they're valued more by their interpersonal skills and ability to communicate and document their work than by the quality or 'certifiability' of their code, anyway, and a I think that's a good thing: Passable code that's well documented from someone who keeps the entire machinery of the team running is better for most companies than amazing code from a cave-dwelling supergenius who doesn't work well with others and whose work nobody else can connect with or follow. And I mean 'cave dwelling' in the most flattering way possible, here.

I'd also be ready for interview questions like "Can you describe an unusual programming challenge you've faced and what approach you took to solving it?" by having a few stock answers from real-world work you did.

All that combined, and I'd give you a shot at a programming job over a CompSci graduate or Certified Whatever. Of course, then you'd still have to perform, or you'd be out in a couple weeks anyway.
posted by rokusan at 1:43 PM on October 7, 2008 [1 favorite]

Certification is nice only if the jobs you're targeting demand them. Otherwise it might be overkill.

Honestly, I think that finishing college in general is what appeals to employers, not finishing with a computer science degree specifically. Based on the gazillions of interviews I've been through, it's all about a) what languages you know, b) the evidence that you know them, and c) the evidence that you can learn the languages you don't know.

The vast majority of times, you won't be expected to show examples of your work. They will probably want to hear descriptions of projects, and will probably fire lowball programming questions at you.
posted by spamguy at 1:50 PM on October 7, 2008

rokusan +1. You need to be able to point to some stuff that you've done. Programming is kind of a cool career because it's a meritocracy. If you can say "Hey, look, I did that. I'm cool." you'll get the job even if you don't have a computer science degree. But if you didn't do it, or the guy can't see it (it's an intranet behind firewalls) or if it looks like crap and doesn't work when the guy who's reading your resume and coverletter tries it, then you won't get the job.

FWIW, I have a degree in business that focuses on purchasing and distribution, and I've been in IT for about eight years now. Seven of that was as a programmer and now I'm a systems administrator.
posted by SpecialK at 1:56 PM on October 7, 2008

There are a lot of people who think they're good at programming, and it turns out that what they've learned is how to hack code.

There's a difference between hack code and production quality code. The defining characteristic of the latter is that someone else can come back to the program later and fix it or augment it. That means that the problem was analyzed well, and the solution is straightforward. It means it was factored properly, with code segments that interact in ways that are easily understood. That means it's heavily commented. That means there is high level documentation external to the code which is complete and correct that explains how it works and explains why you chose the approach you did to solving it.

Those are the kinds of things that self-taught programmers never learn to do. And it's the difference between being hired and not being hired.

You don't have to have a degree in CS to learn that stuff, but one way or another you do need to learn it if you want a job writing code.
posted by Class Goat at 2:01 PM on October 7, 2008 [1 favorite]

You can get entry-level programming jobs without a CS degree, but you'll have to work harder to prove that you are really qualified to do the job. Specifically:

- Show that you are smart and motivated. Many of the people who hire outside of CS are looking for people who are very intelligent and knowledgeable in their chosen field, hoping that those talents will transfer over to programming. They are also looking for candidates who genuinely want to do the work necessary to become a good programmer, so just being smart but with no interest in technology or programming isn't enough.

- Prove that you can solve problems. A lot of entry-level programming interviews involve some puzzles or small programming exercises that you work through. Some of them are designed to make sure you know the basics of your favorite programming language, but mostly the interviewer wants to make sure that you're good at quickly breaking down a problem and coming up with solutions.

- Have some tangible programming experience. Certification can somewhat qualify for this, although I think they are mostly a waste of time/money. What really helps is real world experience, so that you can answer questions like "Describe a time when you fixed a tricky bug" or "What is the most technically advanced piece of code you've written?" with specific examples. You can get those kind of experiences as part of a CS education, but it's also relatively easy to work on open source projects or your own hobby projects instead. You'll also need to be able to answer basic trivia about any programming language you list on your resume (as in "What's does the term 'checked exceptions' mean?"

Overall, companies want to hire people who are good programmers, even if they don't have a degree in CS. A degree in CS does give a student a lot of the tools and experience to be a good programmer though, so as someone without that advantage you'll need to do extra work on your own to get up to speed.
posted by burnmp3s at 2:03 PM on October 7, 2008 [1 favorite]

Find open source projects you're interested in and start closing bugs.
posted by SemiSophos at 2:09 PM on October 7, 2008

If you have work experience in the finance field, you could try searching out consulting firms who do programming work in that industry. Emphasis your knowledge of and experience with finance-related business models. Someone with a deep knowledge of an industry and a basic ability to program might be more valuable than a junior programmer with no business knowledge.
posted by SuperSquirrel at 2:12 PM on October 7, 2008

Class Goat, just as anecdote, I've often seen far better documentation and real-world common-sense approaches from non-traditionally educated programmers, and some horrific documentation from those with masters degrees, who can be very insular and impractical.
    x = x++; increment x by one
I almost believe that programmers who come from more 'real world' experience, whether that's a degree in history or six years building houses in Kenya (real examples) are more likely to have the common sense to understand why the above is hilariously bad. They're also more able, in my small experience slice, to be able to communicate with others in real English, which is very very important and not taught as part of your basic CompSci degree.

Also, when comparing dozens of resumes... well, call me romantic but I will most certainly want to interview the person who, unlike the 26 indistinguishable CompEngineering grads, has published papers in paleoethnic research or built her own solar powered home. It doesn't mean they'll get hired, but they'll definitely get a look.

Programming is really clear thinking, problem solving, and strong communication with quite a bit of math and logic thrown in. I've worked with firms that tested for those skills using testing mechanisms of varying accuracy. While none have been perfect indicators, I do believe they do a better job of finding "potentially good programmer" than any degree program or certification. Nobody gets a degree in "learning new languages I've never known before", after all, or "figuring out a rats' nest of someone else's code", though those are two of the most important skills a programmer can have.
posted by rokusan at 2:17 PM on October 7, 2008 [1 favorite]

Find open source projects you're interested in and start closing bugs.

But only if they're projects you want to talk about to a prospective employer. Some of the more esoteric stuff won't help much. You need to pick ones that "sound good", here.

I also very much like SuperSquirrel's idea. Be a programmer plus domain expert, and that gives you a leg up over all the "mere" programmers under consideration. Brilliant.
posted by rokusan at 2:19 PM on October 7, 2008

A lot of it really depends on the type of work the company does - you'll probably have a harder time proving yourself to a company whose product is software, or some product that directly relies on software. A lot of those places live or die by their code as that is what they sell - so they tend to be filled with ubergeeks (who may or may not have CS degrees, but an informal poll will probably show that a majority of them have a cs/engineering/math/physics background). Some consulting companies will be similar.

Most companies demand much less of their software and are much more open to people with different backgrounds. They tend to have saner work hours, and require more "soft skills" and domain knowledge from their programmers. However, the process in which you'll be involved in is less traditional software development, but more along the lines of information services - you're there to support the business process (rather than being the raison d'etre as in the first case). There's less prestige in these jobs, at least amongst geeks, even if the jobs pay more (ie programming on wall street vs working for a midsize software firm). What you want to avoid is getting stuck in a place where software is an expense the company tolerates - that's probably some of the most uninteresting work you can do (Joel Spolsky has some words on this) - once you get your experience, move on and find one of those better shops. And don't neglect the hidden software houses inside companies not known for software - in the past at least AT&T had software for workforce management that they sold, some insurance companies sold customized versions of their claim processing systems, and at least one of the defense contractors has gobbled up numerous small software companies that continue to sell their wares. That may be a way to get in to the better projects without having to get into a traditional software house. In any case, good luck!
posted by Calloused_Foot at 2:44 PM on October 7, 2008 [1 favorite]

I agree pretty much unconditionally with SemiSophos' suggestion to work on some open source projects, whatever they may be. The reason is networking. Even if you're not on a sexy (big name) project, you get to meet people, and these people will throw work at you. I've been offered jobs by people, resume-unseen, just for being at the same hackathon as them.
posted by Hildago at 4:11 PM on October 7, 2008

Q: I have a degree in computer science, but I'm pretty good at balancing my checkbook. How can I get a job as a CPA without getting a degree?

A: You can't. Go get a degree.

I'm not sure what it is about programming that makes people decide they can skip the formalities. You can probably get a job doing it somewhere but there's a really good chance you'll be the guy writing horrible, unmaintainable, slow code that a pro will have to clean up later.

You can get a degree in CS. It will let you know if that's what you really want to do. Go get one. When you add on the finance degree you already have, that's a killer combo.
posted by chairface at 4:51 PM on October 7, 2008

I'm not sure what it is about programming that makes people decide they can skip the formalities. You can probably get a job doing it somewhere but there's a really good chance you'll be the guy writing horrible, unmaintainable, slow code that a pro will have to clean up later.

You can get a degree in CS.

I know many people with math or physics degrees working at at big-deal software houses who likely aren't writing crap code. I'm not convinced that one needs a full degree in CS, but at the very least one needs intro to CS, an algorithms course, and a good background in discrete math and logic. You can hack without having a decent quantitative background, but you can't develop good solutions without one.
posted by thisjax at 5:37 PM on October 7, 2008

As a data point: I work as a developer, but have a degree in history, and would probably have been in a library & information science graduate program had I not landed the programming job. About a year ago, I ran into someone I knew from high school (via facebook). In part of a long catching up conversation, I asked, "You were a CS student? I thought about doing a CS major myself, but have just tinkered with Linux/BSD and on some open source projects in my spare time over the you think what I know would be employable?" I had an interview a few days later. (I was very lucky: He was in charge of recruiting, and some of my skills were a good fit for their niche.)

* You should have a lot of verifiable experience (volunteer for interesting open source projects, at the very least)
* Networking, perseverance, and luck are really important. (So are supportive friend(s).) Getting your foot in the door without a degree will probably take time. Keep accumulating experience.
* Put your programming skills towards financial problems. It may be an asset for finding financial work, instead, but at the very least you could write something that will look good on your resume. Don't write those skills off.

Also, I'm not in any way refuting chairface: Expect to find that whatever personal programming experience you have will have some major gaps. You will probably have experience with many things the other employees don't, however, particularly if many of them came from the same university program. Figure out what your strengths are, try to sell yourself with those, and round your skills out as soon as possible.

Also, keep in mind that some CS grads have little to no real-world experience, and it will be painfully evident in interviews. If most of the recent grads around you have Java experience, proficiency in e.g. Python or Haskell may be impressive. (You may never use them, except as a way to understand things that may be very awkward to express in other languages, but it shows you're capable of teaching yourself. That's huge.)
posted by trouserbat at 5:46 PM on October 7, 2008

Also, strongly seconding what Class Goat said. Some programmers (particularly recent grads) write terrible documentation, have little experience maintaining existing projects, etc. If you can polish your skills in those areas, it will really work out in your favor. Writing clean code and people skills are more important in the long run than being able to bang out Java boilerplate.

Two quick book recommendations: _The Practice of Programming_ by Kernighan & Pike and _The Pragmatic Programmer_ by Hunt and Thomas. If the content of the latter sounds incredibly familiar to you, it's because many programming blogs have been recycling its content for years.
posted by trouserbat at 6:19 PM on October 7, 2008

I don't insist that someone has to have a degree in order to make a living as a programmer. (I did it for 25 years and I don't have any degree at all.) But there really is a discipline and a body of knowledge needed to do it well, and you have to acquire that mental tool set somehow if you mean to do it.

College is one way. Reading a lot of books is part of another way. Understudying someone who knows what they're doing can help. Internships are extremely valuable. But it isn't something you can just pick up on your own by writing utilities for your own use.

You shouldn't underestimate the importance of that body of knowledge, or assume that you can just slide by without it.

If I were interviewing you, I wouldn't consider hiring you unless you could tell me how to traverse a binary tree, and how to reverse the order of a singly-linked list. If you don't even know what those things mean, you're not ready to get a job in the field.

Here are some other things to get you going:

What is recursion? When is it useful? Why is it dangerous?
What is a hash table? What are they used for? Why are they good?
Why is a bubble-sort evil?
What is an insertion-sort? Is it evil?
posted by Class Goat at 7:17 PM on October 7, 2008 [3 favorites]

chairface: you are wrong.

I have a degree in physics. I now work as an embedded software programmer on satellite communications projects. I have taken a single programming class, and that was a math focused numerical analysis class. I've also done some recruiting at colleges.

What I did:
-Programmed. I worked on multiple research projects as the primary programmer and made sure to do an excellent job. This provided me with both the skill, job history and recommendations to land myself an excellent job.
-Study. There will be some things that you don't know that a guy with a CS degree well. Fill those gaps. Never stop reading. I read at work while I'm compiling, and at home when I'm relaxing. I -like- my job, so that helps.

If you don't have a degree or experience, you won't get a job. You really need one or the other.
posted by Loto at 7:25 PM on October 7, 2008

Work on opensource projects. I think its a good way to show you have an interest in programming, and an aptitude for it.
posted by chunking express at 9:16 PM on October 12, 2008

« Older How can friends call me in Switzerland from US...   |   Excel Filter: Copying graph from one workbook... Newer »
This thread is closed to new comments.