Help me pick a second degree.
June 25, 2008 10:55 AM   Subscribe

Considering a career change to Coding/Programming. Advice wanted.

Background: I'm 26 with a bachelor's degree in History. For the last four years I have been running a book store with my father. We're closing the store down at the end of August.

I'm considering going back to school part time and getting a different degree. Basically I'd want something that would give me the option of doing freelance work from home, so would coding be a viable option for that? What type of degree would I want for that?

My wife does a lot of traveling for her job, so ideally I'd like a career where I could just take a laptop along and go with her.

I know this is kind of vague, but I'll respond to any questions for clarification.
posted by highfidelity to Technology (20 answers total) 8 users marked this as a favorite
Degrees don't help with freelancing nearly as much as work experience or better, public work. I'd hire a freelancer with a few examples of good work I could see/use online long before one with a PhD in computer whatever. (A lot of academics can't ship, but they can "optimize" until the cows come home.)

So I'd recommend short courses, like tech school courses, and then practice practice, starting with simple work (paid or not) and working your way up.

And read. A lot.
posted by rokusan at 11:04 AM on June 25, 2008

In the programming world, experience matters more than a degree. What matters most of all is clarity of thought and ability to break problems into smaller problems, but those are orthogonal to both degreefulness and experience.
posted by cmiller at 11:11 AM on June 25, 2008

rokusan, yes, but a Bachelor's in CS should be a pre-requisite for any developer. There's a lot of essential, fundamental theory that most self-taught developers can't/don't learn on their own, and is best acquired in a structured learning environment (a.k.a. "school").
posted by randomstriker at 11:16 AM on June 25, 2008

there was a post a while back, that i can't seem to find regarding one's options for free-lance work. one of the responses included the difference in quality of work and cost between a 'random' freelancer and a professional for hire.

you could argue that somebody could learn how to 'program' pretty quickly and do small projects and earn some money and hopefully learn along the way.

however, if you want to become that professional for hire that produces high quality large projects, you'll probably have to do things like work as part of a team and learn about the implementation of technologies you use. those things might be easier to do in a classroom environment rather than your own.

either way, i'd hold off on the degree unless you know you want to be doing this kind of stuff and exactly which parts of it are interesting.
posted by maulik at 11:16 AM on June 25, 2008

It wouldn't pay as well, but you could look into various writing/editing gigs or graphic design. Whatever you do (programming or otherwise), you'll probably want to do time learning the trade working it as a day job. This will also help you build a network that will help you get gigs.
posted by Good Brain at 11:27 AM on June 25, 2008

Well I would love to just teach myself and not have to go back to school for another degree, I'm just kind of clueless as to how to get started learning the basics.
posted by highfidelity at 11:34 AM on June 25, 2008

Although I think a degree in Computer Science does show a knowledge of important fundamentals, and that nearly all professional programmers would benefit from CS coursework, I agree with the people who have said a degree isn't particularly helpful in landing freelance gigs.

Have you done any coding at all yet? If not, I would suggest picking a language and working through a book or set of online tutorials and see if you like programming. Some people love programming and some people hate it, and it has very little to do with how smart or motivated you are. It's possible to go to college for CS without ever having written a line of code, but it's kind of like going to bartending school without actually stepping foot inside a bar beforehand.

In my opinion it doesn't really matter which language you pick and what book or tutorial you use, as long as you're writing code. Just browse bookstores for "Teach Yourself Java" type books or do some Google searches for "Python Tutorial", and pick whichever one you like the style of. It's not easy to learn everything you need to become a professional programmer right away, but the best way to get started is to just learn some of the basics and start trying to use them to make stuff. Think of it like learning to play the guitar, you don't need to worry about buying the greatest guitar in the world or finding the world's greatest guitar teacher right away, you just need to pick up a guitar and start getting a feel for it.
posted by burnmp3s at 11:50 AM on June 25, 2008

I'm 27 with a bachelor's degree in History. After college I spent time being a frisbee bum, teaching, and doing several kinds of menial labor and office work. I've been a full-time coder for about 8 months now and did a range of freelance stuff for about a year before that.

My immediate advice is to seriously consider whether you want the day-to-day experience of a career in software. For me, right now, it is acceptable because it pays the bills, I like the people I'm working with/for, I lucked into a low-pressure environment, and I'm emphatically not planning on doing it for the rest of my life. In general, I think you need to be prepared (especially as a freelancer) to face all of the following:
  • Truly staggering amounts of time with your computer, and all the attendant physical and mental side-effects. Also the need for a constant awareness of how this might affect your marriage (especially if you're freelancing - think long and hard before you dissolve the boundaries between your work and home life).
  • Ill-defined and shifting project requirements, unrealistic deadlines, blown budgets.
  • Lying or self-deluded clients/supervisors.
  • Incompetent, lazy, or malicious co-workers. Methodological psychosis.
  • The need for constant humility and vigilance about the state of your own skills.
  • Really boring projects.
  • The ways that organizational dysfunction is manifested, reflected, and perpetuated by software. Responsibility incommensurate with ability to affect change.
  • The genuine ugliness of most existing systems and codebases, and all the other frustrations of legacy code.
You deal with some of these by learning to avoid them and others by developing the right social skills. It's been a steep enough learning curve for me, above and beyond any specifically technical problems or skillsets, that I feel like people thinking about getting into the field need to be given a better understanding of its human dimensions (and occasional lack thereof).

If you do want to get into it, "read a lot" is pretty great advice. So is getting involved in existing open source projects and/or starting one of your own - you'll learn a lot and you'll have publicly visible work to show off. As to the degree, I think a sufficiently rigorous CS program would have exposed me to about a gazillion things I wish I knew now, and if I were planning to make this my life's work, I might still consider pursuing a degree. As it stands, I'm more likely to quit everything and go live in a van down by the river, but I recognize the idiosyncrasy of that stance...
posted by brennen at 11:52 AM on June 25, 2008 [5 favorites]

Yes to everything in brennen's list.

You don't mention where you live, but I will assume you're in the US. If that is true, keep in mind that you will need to pay self employment tax while freelancing, and that you will need to find insurance (health, life, etc.) and fund retirement for yourself.

FWIW, here's some advice on freelancing I posted in other Ask Me thread.
posted by geeky at 12:10 PM on June 25, 2008

Randomstriker, I hear you, and logically that makes sense, but in my experience (working with 100+ different programmers over the last 20 years, as well as working as an advisor to graduate programs) I have found that the CompSci graduates without serious real-world experience have consistently done the least good work and been the least knowledgeable about programming practices. They may rock at theory, maybe, but it doesn't help much until they also have a great deal of real-world experience and "unlearn" a lot of the theoretical but impractical underpinnings.

CompEngineering graduates have been better, on average, maybe because their study is more project based or problem-solution driven. I'm just guessing on that.

And the best have been cross-disciplinarians (for example, a programmer with a maths degree, a law degree, a history degree, or a linguistics degree) who were mainly self-taught in programming. I believe the education simply taught them how to think, study, research and problem-solve.

I think higher education is valuable, but it seems to not matter much what field that higher education comes from. All programming starts from learning new languages/libraries/systems anyway, so for a programmer, being a good learner (ESPECIALLY a self-directed one) is much more valuable skill than simply being learned.

A long series of coincidences in my own small universe, perhaps. But based on it, I no longer view a CS degree (especially a bachelor's) as indicative of any practical value. When someone with a CS bachelor's degree is a good programmer, I just don't believe it's causal.
posted by rokusan at 12:10 PM on June 25, 2008 [1 favorite]

Also, Brennan is right. Programming is very soul-draining and lonely work, even in "teams". (Heck, maybe especially in "teams.")

Be sure you're ready to become a surly, monitor-tanned shut-in before going down this path. Most programmers I know, if they were computerless, would be writing manifestos in some shack in the woods.

And I say that with all possible love and tenderness! :)
posted by rokusan at 12:12 PM on June 25, 2008

I have been coding professionally for a number of years now (currently a "senior creative developer"). When hiring I consider a degree to be the equivalent of about 6 months to a year of real work experience.

The "basics" that supposedly get taught at school are not worth much. If anything, a lot of schools teach bad habits and need serious work to correct in the real world.
posted by Riemann at 12:46 PM on June 25, 2008 [1 favorite]

Every now and then I think about retiring to a shack in the woods to write manifestos, but I'm not prepared to make any definitive statements about the causal direction of that tendency's relationship to my line of work...
posted by brennen at 12:51 PM on June 25, 2008

Brennan! Brennan! Brennan!
But I did want to say that if a degree is needed, the CS is not your only option. I got into coding with an MIS degree, which has a healthy dose of business included. This degree can also be handy if you decided coding is not for you, because you can get into the world of systems development/business analysis as well. That also can translate to consulting pretty easily, once you get some experience in your given field.

Since you already have a degree, you might be able to do some certification programs instead. Here is a 12 credit program I considered back in the day, as an example: Computer Programming Certification. Great way to see if this type of work is up your alley before committing to the full program.
posted by smalls at 1:13 PM on June 25, 2008

Seconding the soul-draining/lonely/manifesto-writing aspect of programming as a career. I'd add that as a freelancer, you'll have to deal with saving receipts for everything, the hassle of invoicing, learning how to read contracts in order to keep yourself from getting screwed, and learning how not to overbook yourself.

I'd say don't aim for the work at home freelance life at first anyway. Go get a 9-5 programming job, leearn things for a few years, then try to strike out on your own. Freelancing has enough of a learning curve that you want to take that as a separate step.
posted by fnerg at 1:40 PM on June 25, 2008

Has anyone tried the O'Reilly/University of Illinois program for this sort of thing?
posted by drezdn at 1:54 PM on June 25, 2008

I am a freelance programmer, who has a software engineering degree.

Most IT degrees are worthless. Especially american ones, from what I've been able to see from across the Pacific. The degree I did was worthwhile, simply because of the people I met and was able to learn from, as well as the actual material learned as part of the formal study. But it was the only degree I considered that contained actually useful material and structure available in my city at the time I was doing study. Whilst some of the errors and problems with other degrees have been ameliorated (which was work I did as part of my thesis), they rae not yet fixed to the point where I would recommend an IT degree over an engineering degree.

Computer Science is another matter entirely. Some of the best programmers I know are computer scientists who spent their elective courses doing maths - and not calculus or statistics, either, but useful stuff, like cryptography and graph theory and symbolic logic.

I have noticed that of those I know in IT, the ones who went to university have a lot more choice - they've been exposed to more languages, to more operating systems, to more disciplines within IT, and can make an informed choice between them based on what they know they prefer. Others who have done more on-the-job learning have really painted themselves into a corner by comparison - they can only do Java, or Microsoft DBA administration, or programming (when they really want to do systems administration). I've worked in a number of contexts - academia (mostly mathematics, physics and psychology), government (QA, automation) and startup (financial services). Most of those jobs would have been out of my reach without a degree, simply because I would not have otherwise gotten the broad-based learning I required to be able to function effectively in those environments.

Which brings me up another point - IT isn't one, monolithic discipline. There are many different flavours of IT you can do - programming is the most-cited one, of course - but that may not suit you or your strengths. Personally, I hate systems administration and database administration bores me silly. I am not sufficiently visually oriented for frontend or graphic design work either. I just don't gel with those things. I much prefer to do backend and logic programming, and glue programming. I love writing compilers, although network programming frustrates me sometimes. I find large-scale computing fascinating. I prefer dynamic, strongly-typed languages above other types of languages to program in.

Another way to get similar exposure is to dive into the open-source scene. There are a myriad of opportunities there to learn and contribute and get your hands dirty. Find yourself a project, learn the language it uses, dive in and get yourself wet. Do some tutorials (python's easy to pick up, relatively speaking; ruby is too, but less widely used). Look at projects such as the Google Summer of Code and Ubuntu.

Best of luck.
posted by ysabet at 2:13 PM on June 25, 2008

While you're thinking about what to do, start reading the python version of How to Think Like a Computer Scientist. It's a good, free starting point.

I've been programming professionally for ten years, throughout most of my career the basics of computer science haven't been necessary. Recently I've been on a bit of a self-reeducation mission to relearn some of what I've forgotten since graduating, and what is sticking out the most is that yes, they're not absolutely necessary to get the work out the door, but they are fundamentals for a reason.

Here's a poor analogy: You don't necessarily need to understand why you'd double-up the 2x4 on top of a door frame, but understanding the principles of weight distribution and shearing and all that other stuff I personally don't know about construction means that if you suddenly had to invent a door frame you would do it properly, rather than copying what someone did on the house next door, or on tv, or wherever it is I saw someone putting two 2x4s at the top of the frame.

The majority of development is copying the house next door. You can figure it out for yourself, and build something that probably won't fall down. But it's actual faster and way better to understand the many conditions in place that make different solutions best.
posted by cCranium at 3:55 PM on June 25, 2008

A Bachelor in CS would be good to have but not necessary to work as a programmer, so I don't think there's a need for you to take a second degree. Some unis offer graduate diploma programmes for people who have a first degree and wish to switch to another field. You might want to consider that instead.

There would be fundamental stuffs that you'd have to know before you can function well as a programmer, but you pretty much can learn them by yourself (logic, discrete math, algorithm, etc.). The whole point of your first bachelor's degree is to teach you how to learn, so that you can pick up stuffs on your own.

To quote the almighty Dijkstra: "Computer science is no more about computers than astronomy is about telescopes"
posted by joewandy at 10:46 PM on June 25, 2008

I've got one song for everyone promoting MIS and computer engineering.

More seriously, I recommend trying to learn on your own for a while before thinking about coursework. I've done systems administration and web programming work part time for the past 3 years. At each job, I was hired based on experience and practical knowledge (demonstrable though past projects, involvement on mailings lists, etc). From 2003 to 2007 I took enough CS course to get a minor in the area, but I don't think this impacted my job prospects. The coursework is most useful if you've been around IT enough to know what kind of work you want to do and what classes are relevant.
posted by PueExMachina at 10:22 PM on June 26, 2008

« Older 1980s preppy/punker short film   |   What can I give to a new touring musician? Newer »
This thread is closed to new comments.