How should I pursue a career in software development?
February 28, 2012 9:37 AM   Subscribe

I’m interested in a career in software development. How should I pursue this?

I graduated from a pretty well-regarded college several years ago with a degree in the natural sciences, and went into an unrelated field. I quit my job about six months ago and went traveling with the intention of figuring out what I really want to do or at least something that I won’t hate.

So, I’ve been considering different things, and I’m interested in software development. I’ve done some programming on my own – pretty basic stuff, using C and Python - but I like it. I’m very good at math and like solving problems. I like the mix of structured, logical thinking and creativity required of a good software developer. Problem is, I don’t have any formal training in computer science, programming, or advanced math. I’ve taken college level Calculus I and II and Statistics – all actually completed in high school (AP credit), and also Physics I and II taken in college. That is the extent of my computer science-related background. I have some savings and am willing to invest in more education provided there will be a ROI.

I’ve done a bit of research, and as I see it there are three options:

1. Go back and get a second undergraduate degree in Computer Science. I’ve looked at the requirements for my alma mater’s program and it looks like I could get through the requirements for a BS (14 courses that I haven’t previously completed) in three semesters or a BA (8 courses) in two semesters. If this is my best option, a few follow up questions:

- How important is pedigree in CS? My alma mater is ranked about 20 in US News in CS. Are the opportunities (higher salary or better placements) coming from a top 10 program like CMU or UM markedly different than those from a 20ish program like UNC? I don’t really care about working at one of the super-sexy tech firms, I’m just wondering if the average salary differences are going to be large, in which case it might make more sense to go to a higher ranked program even if tuition is higher. I’m coming from an industry where pedigree is very important, so perhaps I’m a little paranoid, but I don’t know how things work in tech.

- How about BA vs BS, for software development? Is it worth the extra semester to get the BS?

2. Master’s programs. Most CS programs won’t accept students without an undergrad CS or related degree, which I don’t have. Here are three that I have found:

Masters in Computer Science at UChicago
MCIT at UPenn
MSIT at Carnegie Mellon

Only the first seems to be a “pure” CS degree; the last seems more geared towards IT, although it has great placement stats. I’m not sure whether anyone will be familiar with these programs, but if so, how would this compare to getting a second BS?

Another option would be to complete the prerequisites for a Master’s as an extension student at my undergraduate college, then apply for admissions to a Master’s program. I’m not sure if a Master’s degree is preferable to a bachelors for an entry-level software development job, though.

3. Finally, option three: Self-teach myself programming, get involved in some open-source projects, then apply for jobs on that basis. Inspired by this post . Frankly, I don’t know how to compare this option with the others. While it makes sense to build relevant, applicable skills, I feel like I would be missing some of the formal structure that a CS program would provide. I don’t really know, though, whether the stuff you learn at school is stuff you really need to know in the real world, or just part of the program. From a monetary perspective, I'd also guess that starting salary would be substantially higher for someone with a degree in computer science and thus worth the investment...but I don't really know.

Any advice is greatly appreciated.
posted by anonymous to Education (22 answers total) 17 users marked this as a favorite
I've heard that MS programs are most concerned about applicants' background in mathematics, but I guess that only pertains to those which do not require an undergrad CS degree. How much math did you take for your science degree?
posted by thelonius at 9:50 AM on February 28, 2012

I can't advise on what you should do without knowing more about your situation. In terms of some of the other questions...

Having the degree makes your job searching life easier but isn't required if you have the experience, chops, or just earnestness to contribute. Once you have work experience, finding a second development job is much easier even if you don't have a CS degree.

Pedigree is important for employers who care about pedigree. How's that for circular logic? :) I have worked with many developers who had no college-level education in computer science and some of them were outstanding. I have also worked with many developers who did degree in computer science and weren't that great. As a anecdotal general rule of thumb though, the developers who did degree in CS were, on average, better than those who did not. I don't think that's particularly shocking from a probability and statistics perspective though. Unless you are specialized, you will rarely have to use advanced math. If you take a course or learn online, you should learn more about discrete mathematics (logic, set theory, graph theory) as you will use this daily whether you are a recreational or professional developer.

Most employers won't even notice the BA vs. the BS on the resume. They'll see the Computer Science degree though. The employers who do probably would put more weight for candidates with a BS as it is the more traditional educational path.

Having a Master's degree will open a few more doors initially for development jobs which aren't just about being a code monkey. A Master's degree will also net you a higher starting salary on average. That being said, there is no need for a Master's degree to get a job in the software industry unless you are looking to specialize in a particular area or industry market.
posted by seppyk at 10:02 AM on February 28, 2012

Food for thought.

Do not fall into the trap of thinking that you can start out as a tester then move into development. In my (too) many years in the field I've seen it done three times. Three.

One of the above took a particularly bright approach. He was working full-time (as a tester) so rather than return to school, he put himself through the CS program at the UW, only he did it on his own. One course at a time, he bought the books and went through them cover-to-cover.

The good news is that software development is one of those fields where it truly only matters what you can do. (There are high-end R&D areas where credentials are required, tho)

Regardless of your approach, start doing more programming. Build your own stuff. Don't wait for a class or teacher. Show your interest and initiative.
posted by trinity8-director at 10:05 AM on February 28, 2012 [2 favorites]

A surprising number of the people I work with (C#, ASP, T-SQL Project Manager) do not have relevant degrees, but sort of 'fell into' the work as a result of having a knack for development and an understanding of the process being developed for.

I really, really hate statements that begin with "There's two types of..." However, my experience is there are general purpose developers that are outsourced to, and there are developers that work in a shop with a specific mission, whether that be insurance (Blue Cross, Aetna, etc.), logistics (CSX, TNT), or some other line of business. The latter group is easier to get into, if you have a basic understanding of their business.

All that said, I would go with option three. You already have a degree. If you can answer questions about the development tool you're applying to use and can speak intelligently about what you'd be developing for, you're going to be head and shoulders above 90% of the rest of the crowd.
posted by Mooski at 10:05 AM on February 28, 2012 [2 favorites]

I am living proof that #3 is possible, and I am exactly you, only 15 years into the software career. I have an M.S. in Ecology and a B.S. in Zoology. I was about 9 months into a Ph.D. program in the late 1990s when I had the epiphany that, while I liked the idea of working in my chosen field at a Master's level, that opportunity wasn't out there. That is NOT a good reason to be in a Ph.D. program. Along the course of all of that schooling though, I discovered that I both really enjoyed the computer tech side of my college degrees, I was really good at it too.

Here's what I did: First I quit grad school with no safety net. Scary, but certainly motivated me for the next steps. Next, I talked to a lot of people already employed in IT/CS fields, starting with the head of IT in the department I just quit. He gave me a book on TCP/IP networking, which I read over the course of the next few weeks, and I was hired a few weeks after that for an entry level software quality assurance job. That got my foot in the door, and I learned on the job and my career ascended very smoothly from there.

A couple big caveats to that trajectory: late 90s were crazy boom time for this industry, and that environment is no longer (nor should it be, my god was it not based in reality). Also, to follow this self-taught path you really need to be motivated and interested in the work. It helps to have an entry-level job in the industry rather than just banging away and some github project you dreamed up one day (though both can be valuable).

I think if you go with option #3, you should consider trying to land a software quality assurance job as an entry point for a tech-minded person with no CS degree. Keep in mind a few things though-- not all software QA jobs are created equal. You want a job where the technology lends itself to craptons of automation scripts, because that's where your on-the-job learning will come from. If possible, find a newer company that's doing things with interesting technologies, like Ruby or Node or modern web programming tech like CSS3 and Javascript/AJAX/JQuery/etc. Wherever you go, automate the living hell out of the tasks you are assigned. This will do both the job of getting you noticed for your accomplishments (or rather, the computer's accomplishments that you programmed to do your job) and allow you to learn in a hurry. Automation environments often utilize a range of glue languages to get the job done (Perl, Python, Ruby, Rspec, etc.), and that's valuable. Unix/Linux is much better than Windows for this type of thing too, so if you can find a company comfortable on that side of the OS fence, that's a big plus.

The world is a much different place in 2012 than it was in 1997, but I still think this is possible. Don't buy into the "in this economy" crap you hear as a reason not to give this option a try. The economy woes have hit unskilled labor markets in a massively disproportionate fashion. The tech industry from everything I see is alive and well and hiring domestically like gangbusters.

Good luck.
posted by mcstayinskool at 10:05 AM on February 28, 2012

There are quite a few Masters level "conversion" courses for people whose first degree is not Computing and want to get into the field.


MSc Computer Science, UCL
MSc Financial Computing, UCL
MSc Computer Science, Stanford

Lots of people get into programming careers without any degree of any kind, let alone a CS Masters from Stanford, but these will certainly help.

Also be aware that many programming jobs are not that high on creative problem-solving, esp if your idea of that is based on university level mathematics.

If you do want to exercise those muscles it's probably a good idea to either do an MSc or start out with a math related job and then sidle over into programming in that field.

My guess is that the better the "brand name" of the school, the better your chances of landing a job that will be interesting long-term, and the better your lifetime salary prospects.
posted by philipy at 10:37 AM on February 28, 2012

I would go back at get the undergrad in BSCS. We don't hire BAs for application development. They are hired for QA automation and script writing though. I agree with a previous reply about not falling into the "move up from QA" trap -- I have seen TWO people move up from QA into the application development in my career.

I don't know that pedigree matters too much. My company looks at the University mostly as a "as long as it isn't an online degree" sort of way. We do mostly hire from "preferred" programs, but that is mostly because we take in HUGE numbers of interns from those programs -- so it is easier and less risky to pillage their graduates. However there is no real preference between state Universities, as long as it is an accredited program.

As far as pay is concerned, your location will be the most applicable parameter. I wouldn't spend more on a degree in hopes that it would get your more money out of the gate. Most new grads makes in the same range, but those with intern/coop experience will make more money since they have provable worth.

We have one programmer who is a college dropout/self taught kind of guy -- and he is very bright and continues to learn. However he was hired into the company when software companies were hiring anyone that had a pulse (before the 2000 bubble). We barely hire much anymore and a degree is required.
posted by LeanGreen at 10:39 AM on February 28, 2012

Have you looked at the requirements for earning a second bachelor's degree, or just the courses involved in a normal undergrad CS degree? I am not sure if you are saying you did go to UNC-Chapel Hill, but they say specifically
Can I earn a second bachelor’s degree from UNC-Chapel Hill?
No, except in certain health-related fields.

Other colleges I've seen have a requirement for a minimum number of credits earned on top of the first degree (e.g. at UW you must earn 45 credits after graduating to get a second degree).

I interview college candidates for software engineering positions, and I don't think top 10 v. top 20 is a big deal. What I have noticed is that students from the larger/more well known colleges are more likely to have a good grounding in CS theory (algorithms, data structures, etc) - basically, go to a college that has at least an intro and advanced algos/data structures course and take all of them that you can find, you can always do application programming in your spare time. It sounds elitist and ivory tower and etc etc, but I interviewed a kid recently who said the only way he really knew to store his data was in an array - instant no hire.

I think if you can get an undergrad degree that will serve you better than the Masters, because when hiring a Masters student we expect more from them. I don't think we hire people without a degree unless they have 'equivalent experience' which probably means being in the industry for several years.
posted by jacalata at 11:46 AM on February 28, 2012

"How important is pedigree in CS? My alma mater is ranked about 20 in US News in CS. Are the opportunities (higher salary or better placements) coming from a top 10 program like CMU or UM markedly different than those from a 20ish program like UNC?"

I can't speak to the education you'd actually get, but the difference between a degree from a top-10 and top-20 institution doesn't matter at all in the real world. The "impact" of your degree drops off pretty quickly unless it came from an Ivy-League school, or a program that is internationally recognized within its field (ie. CMU and MIT).

This seems to have generally been true among my peers for most careers and industries, and is especially true in the CS/IT world, where very few people have a degree relevant to their job, and you can still manage to climb surprisingly far up without a degree at all. It's not the 90s any more, but companies still do routinely lament about being unable to attract talented developers.

Also consider how these rankings are computed. Note that the scores are exclusively based on surveys from career academics, and includes no input from employers and members of the industry, as to the employability and quality of the graduates being produced by those programs. These rankings are only relevant if you want to pursue a PhD and enter academia.

The academic rat race that our generation was sold has by and large turned out to have been a scam. Don't get a degree from a competitive program for the sake of getting a degree from a competitive program. It won't do you much good in the long-run.

If you can teach yourself, and build up a portfolio of successful projects (bonus points if they're open-source), you'll be lightyears ahead of the guy with the specialized degree.

Yes, an impressive degree opens up some doors for you. However, if you've got the skills and brain to back up that impressive degree, you can probably open those doors for yourself.

My experience has been somewhat similar to mcstayinskool (eponysterical?), although I'm only a few years out of school (also with an irrelevant degree in the sciences; don't underestimate how valuable this can be).

Also: If you go the grad school route, you probably want a degree in computer engineering, and not CS. Some will argue that it's less "pure," but it's going to be far more useful and relevant to your specific career goals (development). HR departments like it too. A good developer should be well-versed in CS, but doesn't need a masters degree in the subject.
posted by schmod at 11:49 AM on February 28, 2012 [1 favorite]

From what I have heard, if you know how to code well, frankly you dont need bunch of high flying degrees. Here is an interesting site I came across around coding
posted by pakora1 at 12:05 PM on February 28, 2012

Point of reference: 'Pedigree' of school doesn't matter so much for finding a job (this is just ANY job...maybe not your ideal job). I went to a school that isn't even ranked at all, and was paid ~60k for my first job IN THIS ECONOMY. What matters to companies hiring software developers is just how good you are. A degree from a top 10 school might open doors, but you can easily have a good life with a degree from a school ranked in the 20s, 30s, or even 10000000s. Don't get too caught up on rankings.
posted by 200burritos at 12:13 PM on February 28, 2012 [1 favorite]

A computer science degree is not that important. There is so much overlap with a physics degree you'd feel deja vu. CS is pretty much mathematics + coding skill. I know a number of people who went straight from a math degree to a web development career. You have the math already if you studied physics; prove you can code and you're set. Graduate computer science can be a very abstract study, which may not be what you need to satisfy that second constraint.

As for how to do that...well, as one person said, don't try and sneak in through the testing door. Testing is its own realm, with certifications, trade shows, and in-crowds. Unfortunately, teaching yourself code isn't enough to get a job: most job interviews I've ever been to either ask you to implement a boneheadedly simple program or none at all. Here's the key point though: the job interviews I've bombed at (and I've bombed quite a few) ask questions about programming principles. What is class inheritance? Why would you use an outer join? From whatever source you pick up your next programming language, do not discount the terminology. And more importantly, have someone -- a teacher, a friend, a peer -- give you code reviews! My greatest weakness is my code quality because between high school and my first job, no one bothered to stop me and comment, 'You know, you code like a hamster.'
posted by spamguy at 12:36 PM on February 28, 2012

One more thing.

However you go about your transition to dev work, please, please, please learn how to write good code.

Learning to do that is almost worth a degree in itself. There's learning the syntax of a language, then there's learning how to use the language. Then there's writing well.

So frightfully many software developers generate really crappy code with the attitude that if it works, who cares?

I care. I have to spend much of my work time being a code janitor, cleaning up the mess left behind by the previous guy before I can get to the work I'm supposed to do.

Writing solid, readable, maintainable, testable code is like what my father said about good manners. They are a gift you give yourself while those around you enjoy the benefits as well.
posted by trinity8-director at 1:00 PM on February 28, 2012 [2 favorites]

I have a BA in psychology and recently got a software engineering job. In fact, I got the first and only one I applied for (which made me glad that I'd tried my hand at the job market prior to getting an expensive degree).

Here's what I did:
1) Learned to write scripts for automating tasks at my previous (technical but non-programmer) job - shell scripts, matlab, a bit of python.
2) Took a few CS classes on a non-degree-seeking basis at my local college (data structures and an advanced C++ course were the most useful) and got As. I was able to skip the basic "intro to programming"-type prerequisites just by talking to the professors and telling them I had independent experience. YMMV.
3) Wrote a lot of C code by the seat of my pants to drive LEDs for a microcontroller-powered Burning Man project
4) Applied for a job with a small company that makes a niche software product I already knew inside and out
5) Moving to the bay area to accept the job

I've been told by people with CS degrees that many of the skills needed to write good code in the real world weren't well-covered in their coursework and had to be learned on the job anyway.
posted by introcosm at 1:14 PM on February 28, 2012 [1 favorite]

I've been told by people with CS degrees that many of the skills needed to write good code in the real world weren't well-covered in their coursework and had to be learned on the job anyway.

Right. CS is a theoretical discipline, and a lot of faculty seem to look down on anything that they see as appropriate to a "trade school". I took an undergrad course a few years ago, and, when it came time for a big group project, I found that the students had no idea how to use, for example, source control repositories.
posted by thelonius at 1:21 PM on February 28, 2012 [1 favorite]

I agree with trinity8-director 100% and thelonius 100%. I graduated with a BSEE many years ago. As I look back on my career, I realize how much I learned from my colleagues my first several years on the job -- how to write good code, how to make sure it works, the importance of process, the danger of too much process, etc...

I suggest you check out Code Complete 2.

With regards to the comp sci degree, I prefer hiring people with a BS in computer science or computer engineering, but I have known some really good developers with degrees in other disciplines. One of the best guys I worked with had a PhD in biology. I think you need to look at not only this first job, but your whole career. Having a strong network, working with good people, and doing challenging work will help your career as well.
posted by elmay at 4:23 PM on February 28, 2012

Have you talked with faculty at your alma matter? You have taken no CS at all haven't taken calc in 6-7 years? Yet you think you can complete 14 CS classes in 3 semesters? I suggest you confirm the schedule and pre-reqs that will thwart your plans. Three years minimum is my guess, and more likely 3.5 years.
posted by about_time at 6:44 PM on February 28, 2012

Sounds like you're more interested in software engineering more than computer science, if that helps things click a bit.
posted by mendel at 8:37 PM on February 28, 2012 [1 favorite]

Quite a few people have made some good points here, and mendel really hit the nail on the head. (Aside: Hey Rich! How's it going? Been a while.)

CS is a wide field that's poorly catered to in most schools I've heard of. Many people go into it because they like programming, or because they think that becoming a programmer is a good career choice. Software engineering is one branch of the subset of applied computer science (as opposed to theoretical computer science, we'll get back to that). You want to develop software, so give school a miss and start developing software. If you get as far as software engineering part, you will make me very happy. Or more likely it will have no effect on me, but it will make anyone who deals with your code very happy, and that's good enough.

To give you an idea of where I'm coming from, I'm a self-employed consultant/independent contractor who sometimes speaks at conferences. I'm also a college dropout. Such is life. I've been programming since I was 10, and I went to school for CS because I thought a) college was important, and b) a CS degree would be helpful. Most classes focused on the theory, and I was only partially interested. I wanted to get things done. Algorithms and data structures are helpful, but if you're motivated you can learn this sort of thing on your own. And frankly, if you're not motivated, the classes aren't going to help you out. More integral to the craft is a way of thinking about problems and solving them, and you're unlikely to get that with a CS degree.

tl;dr option #3
posted by cardioid at 1:28 AM on February 29, 2012

There is a surprising amount of degree bashing in this thread. Computer Science has a theoretical basis, yes. But people with CS degrees are not theoreticians. They understand principles that allow them to pick up new programming languages or techniques very quickly. They understand how to wield these principles deftly for rock solid design, deployment, and analysis of computational solutions. These are deep principles. Some students in CS degrees pick them up, some don't. But that's what a CS degree is designed to do. Yes of course, you can pick them up outside of college. Books are available, bosses and companies can train you. But those non-college sources have other interests in mind and are not focused on only your education and growth of knowledge.

The reason most people pick up a lot of skills after a CS degree is that they are picking up specific languages (Csharp) or tools (hadoop/hive) that are needed for some job. CS majors, as a group, pick up these tools quickly. It's not that anyone can't pick up these tools. Also many studnets entered college as high school seniors that didn't turn into professionals until they had a real job, rather than taking college seriously. And at that point they start taking in skills like a sponge.

Many skills that allow you to succeed in the real world aren't part of any degree program: show up for work on time, think deeply about what you've been assigned, etc. Yes, the best students pick this up, but so do the best employees. Let's separate succeeding as a professional from having a good brain for thinking in this domain.

CS is not about programming. It's about solving problems computationally. Programming is just a tool to express a design. CS degrees will teach you how to design and work with computational problems. If you don't have a CS degree, you can pick up good design principles over time outside of college, but most people who don't have the degree just learn how to program.

Further, compare anyone with a good MS degree (not some shitty online or nighttime, course-only program) in CS to someone who just has a good BS in CS. There is a world of difference. MS CmpSci degree holders are really effing good. Now compare someone with an MS to no degree at all but 6 years of experience teaching themselves. Not even in the same league. But you know, it's the BS degree in CS that allows the MS person to blow you out of the water. There is something to a BS degree that sets you up to succeed in computational design. Whether that additional training comes from two more years of school (for a masters) or 4-5 more years on the job, I credit the BS degree.
posted by about_time at 4:58 AM on February 29, 2012 [3 favorites]

I work for a large company with an enormous number of software engineers, where the interviews focus strongly on theory and coding, because we need both.

Quite a few of my coworkers have bachelors degrees in other-than-CS... but pick up the theory themselves. You (mostly) need a bachelor's to get hired, but the actual skills are more important.

One way to do this would be Udacity, or any of the online universities. At a minimum, you need knowledge of Data Structures, and of Algorithms. Some places have this as one course, some as three; there's a bunch there. If you want to go far in CS, you *need* the knowledge from these two courses; no amount of hands-on experience will fully cover the lack.

That said, you could simply buy an algorithms text to supplement Udacity, read up, and get to it.
posted by talldean at 8:53 AM on June 22, 2012 [1 favorite]

Also, MSIT and CS are entirely, enormously different fields.
posted by talldean at 8:54 AM on June 22, 2012

« Older Give me your "rectum, damn near killed 'em" jokes!   |   I'm too young for this shit Newer »
This thread is closed to new comments.