On college degrees

Just some thoughts I’d like to get out of my head. I’ve thought a lot about this (of course) without writing it down. I’ve mentioned before that I don’t intend to finish my bachelor’s degree, but I haven’t really explained why in detail, even though it’s the sort of thing I post about here. So here it is: why formal credentials in general, and college degrees in particular, are not the end-all-be-all of having a stable and successful career in technology.

Hiring hackers

Technology is one field where college is kind of an awkward proposition. Take these classes and you get a piece of paper that will get you a job. Okay.

The main problem is that it’s hard to gauge whether someone knows their stuff without working with them on something, or at least seeing something else they’ve worked on and trying to judge its quality. This makes it really hard to hire good programmers.

But HR departments don’t like either of those options: the point of interviewing is to weed out hopefully all the posers BEFORE they get into your company, and keep the ones who know what they’re doing (that means tricks with at-will employment may be out if they have problems retaining people). And they’re not technical enough to judge whether a portfolio is good quality or not.

The latter situation is why there are more technical people doing interviews for tech positions these days, rather than HR. But HR doesn’t like that either. They want to have standards about who they hire: new employees have to have such-and-such a degree, or certification, or at least they need x years of experience in the field.

The thing is, they’re fighting a losing battle. HR isn’t necessarily evil, but it is ineffective, at least for this purpose. Someone can have more letters after their name than a game of Scrabble, and a whole handful of certifications, and still not know what they’re doing. And a candidate can gain x years of experience at any company–whether they did good work there, or whether that company even knows whether or not they did good work, is still a big question mark. But a technical interviewer looking through someone’s GitHub account can see empirical evidence of whether that person can code, and perhaps even how well they work with other programmers.

(Besides, people with letters after their name are extra expensive, because they’re paying off student loans.)

Whether universities like it or not, the job market is a big part of people’s decision to go to college. Will their degree pay for itself or not? And if it won’t, are they really willing to pay that much for it?

Learning to program ≠ college classes

It’s really hard to teach programming, too. Aside from the fact that programming is just something you have to learn by doing, and programming students are de facto going to be teaching themselves to some degree (no pun intended), it’s hard to keep the classes current. By the time a book on foo is written and then the curriculum is developed, foo might be on its way out of date.

Most universities get around this by saying that they only teach theory, which is an important component of what a programmer needs to know. But it isn’t everything, and teaching theory without teaching its applications means that you might not understand the theory as well. It also means that by the time you get into the workforce, you don’t know half the stuff you need to know unless you’ve been rigorously self-teaching along the way. But the actual degree hasn’t taught you how to do stuff. It’s taught you how to learn how to do stuff, and a lot of degreed people are fooled into thinking that they know everything just by having the degree. Similarly still fooled are a lot of HR departments.

But it doesn’t work that way. And sometimes when you get down the the brass tacks of things, people realize that while they’ve got the theory down pat, they don’t… actually… like coding. Or they have no design sense, and aren’t artistic enough to pick it up; they thought computer science was actually science. Or they’ve become frustrated that after four years and $150,000, they still have a long way to go.

These are not the people you want to hire. These are not people who should be in this career. Programming is not for everyone–it takes a certain kind of personality–and just because there are a lot of programming jobs that are stable and pay well does not mean you should go into it.

A degree will teach you a lot. But it won’t teach you how to program–it’ll teach you how to learn to program–and it may not teach you whether you like it.

(That goes in both directions. Some people who do have the inclinations for programming [patience, ability to focus, love of learning and making things] may find college classes intolerably boring after a while, for much the same reason I haven’t read the last fifty pages of any of my coding books: you usually have something you want to build by then.)

There are other things to do

For the price of a university’s tuition–let’s say 30K a year for four years, which is a rather conservative guess for this–you could bootstrap a startup. 120K would probably last some startups all the way until the stage they needed a Series A round from investors, and for many others it would be all the funding they needed.

If you’re not fond of startups, you could put the money towards rent and food, and become a freelancer. Say you want to be a web designer/web programmer. Spend a year learning what you need to learn on your own (you would have at university anyway) and making friends. Then, if you have the right contacts, or at least the guts to look for companies with outdated websites and call them up with an offer, you can get yourself a pretty stable income not only as designer but as maintainer.

Or you could go to a coding bootcamp rather than a university. They’re becoming more and more of a legitimate option these days, and they’re generally cheaper and more practical than normal schooling.

Or you could spend the time learning and contributing to open source. There are increasingly more companies that would rather see a packed GitHub portfolio than a degree.


There are reasons to go to university, of course; a degree still carries quite a bit of weight, but there are also reasons to go for just a year or two. The major reason, at least for me, to just attend and take classes you like is the other students.


That means people who will build stuff with you.

I don’t know if that means as much to other people as it does to me, but I think it’s really important. I want to work with other ambitious nerds who want to make stuff and tinker with the world as we know it. I think two or three can do a lot more than one, and a lot more than they’d do individually.

Also, the theory is important, as are some classes that are maybe better taught by walking through them with a class. I want to know about data structures. I also want to learn Lisp, but I’m a little intimidated by it; the college-class habit of going through all the tutorials and explaining everything, which I find somewhat tedious in a lot of cases, might really help in the case of learning Lisp. (Or whatever functional language they teach.)

Professors are pretty important to me too, because the right professor can be really interesting to listen to–particularly when you get them talking about something that isn’t strictly what they’re supposed to be teaching. I know a lot of what I know from listening to older programmers. In fact, the opinions I’m talking about in this essay are something I discussed with one of my favorite teachers last night, and he was agreeing with me on all points that I can remember (it was a long discussion).

The price tag

I don’t want to be in debt all the way through my thirties for something that won’t really teach me what I need, particularly when I can learn through books that are 1% of the price, and by the time I need a serious job the piece of paper will mean less than my GitHub account if I’m not lazy.

GitHub is free. Books are cheap. University is neither.

I’ll attend college if that’s how you find people who become collaborators and testers and cofounders. But I won’t pay a fortune to finish it.

If I haven’t made it clear, my plan is to go to university for maybe two years–and probably not the same university or even the same city–take what classes I want while I hold down a part time job or internship, and then just leave. Probably by then I’ll be entrenched in a startup or, if not, can find an employer pretty easily. My skill set is pretty well-rounded right now, even if I don’t have a ton of experience, and I’ll have an Associate’s degree anyway.

These are opinions I’ve held for months, but it’s really easy to get confused about this sort of thing when everyone else has a different opinion about what you should be doing and what’s important. My teacher last night said maybe their advice just reflects what works for them, and the different paths are all valid, at least to some degree. That’s probably true. I, in turn, don’t intend to say that my plan is what everyone should do. Y’all can do whatever you like as long as it works for you, but I’m warning you now that a college education is not going to teach you everything you need to know to build things, whether for yourself or for an employer.

And maybe I’m wrong and my plans to skip the piece of paper will blow up in my face. (In which case I’d just go back and get it… I’m not sure why people are talking about my plan like it’s a permanent, life-ruining mistake.) But if I make a choice about this and I’m wrong, I’d rather have that be because it was my own choice that was wrong, not something someone else convinced me to do. I would rather trust myself and make my own mistakes than end up bitter about someone else’s.


6 thoughts on “On college degrees

  1. I don’t know much about US education system, but where I live in any normal university or college you are required to complete a couple of projects, one of them in industry, so you do not finish your degree completely incapable of building things and if you count only those you get already a year of experience “coding”. Besides projects, students are usually to required to program in other courses they do, so those who can not or do not like to program, find that out soon enough.

    I do not know what they teach at the place/s you’ve attended or want to attend, but most of stuff taught in normal cs curriculum are things that a programmer should know. (data structures, algorithms, computer organization, network programming, os etc… )
    Even math taught there is not completely useless.
    Without some discrete math, calculus, linear algebra and probability, it will be very hard (I am not saying impossible) to get deeper understanding of data structures and algorithms, (for example analysis / correctness will be sort of black box… ). Besides, they develop your capability to think abstractly.

    I agree that in theory you can learn almost everything taught in colleges from books, but being surrounded by other students and having an instructor you can ask questions when you fail to understand something, helps. Besides, having deadlines forces you to stay focused even when you lose some motivation.

    It is not easy to finish a descent CS degree with reasonably high grade without having / developing good problem solving skills and learning to program. Besides, it gives you good grounding to learn new things…
    For example, an average person who went through college will be able to learn things outside of his domain of expertise much faster than someone who spent those years writing Ruby on Rails code.

    (Sorry for grammar mistakes, English is not my native language).


    • There’s a big difference between what you write in classes and making something from scratch. You can be okay with syntax and building stuff from a specific, narrow, little design for a class project, but not okay with designing something yourself (which is what you need to know) or working with a big codebase. College classes, at least in my experience, also don’t teach you much of how to read documentation for things like APIs, which can be confusing if you’re not used to them.

      Whether you have to build projects or not depends largely on your school. At community college, we barely build anything for class that isn’t right out of the textbook… there’s a capstone project you have to build on your own, but that’s it. I imagine that universities would be better about this, but it runs into the same problem as before: whatever you build will have to be finished in a few months, most likely in the time between your other classes. In other words, you’ll be spending a quarter of your “work time” on it for four months (a semester). So it can’t be anything bigger or more complex than what you’d build in about a month, and if you haven’t been taught enough tools to build things, you’ll be spending half your time learning how to use your tools.

      In community college, you learn to code but not design, and the tools taught are often out of date. In university, you learn design *theory* but not code, and you don’t spend a lot of time applying the theory.

      A programmer should know design theory, yeah. And classes on tools are okay, for what they are. But my point is that they aren’t all you need to know, and sometimes college isn’t worth that incomplete knowledge–or maybe they’re just spending too much time covering things in depth.

      Part of the reason schools are inefficient right now is that we don’t understand the industry very well yet. Later on, we’ll know exactly what most people will need, and be able to encapsulate the difference through different tracks/classes/whatnot. A programmer who isn’t working on games or simulations or that kind of thing doesn’t need to know physics.

      Some people like to learn for its own sake. That’s fine. I like to learn enough to do stuff, and don’t need to know more until I need it to keep moving on my project.

      Of course, if you spend all your time on one tool or one project, your skill set is going to be really limited. That’s not what I’m talking about. I’m talking about someone who replaces school with autodidactic methods: building a variety of things, learning what they require, swapping programs with other hackers, contributing to open source, until they can see empirically that they know what they need to know. The reason that works is the existence of a peer community of other programmers that lives on the Internet. Without that, we’d just have a bunch of awful self-taught coders. But open source makes this a real possibility.

      I think you also have to have a certain amount of self-awareness to recognize when there’s something you don’t know, and figure out what it is and how to learn it, though. But that’s a skill programmers are eventually going to have to learn anyway.

      Also, I didn’t say this was for everyone. The fact is that if you go to school and get really good grades and do nothing else, you’re going to have some holes in your knowledge left that can only be patched by designing stuff yourself. Believe me, I wish college was comprehensive, but I’ve wasted too much time waiting for it to be so to have any remaining patience with it. (I know this is kind of rich coming from an 18 year old, but I’ve actually been in college for a while.) Maybe university is different from my little college. I have my doubts though. I really think the holes are still there, just in different areas.

      I can see my thoughts in this essay are kind of disorganized. I may make a nicer edit later. I threw this out in an hour or two, and if it seems kind of discombobulated, it’s because I’m drowning in schoolwork and just had to get this out of my head.

      Needless to say, if you have more criticisms of the essay, speaking up here will improve version 2.


  2. One thing I have heard from managers, including a couple who I respect as being decent developers, is that finishing a degree is a sign that you can take on and finish a drawn-out project, which may not necessarily be to your exact tastes. That’s particularly true here in the UK where some fairly full-on coursework is required to complete most degrees.

    Working on your own hobby projects is awesome (and encouraged) but I do think there’s something to be said for learning how to work your way around the tricky bits of a 6-month task that might not be what you’d choose to do for fun, and that you can’t just choose to stop doing the way you might with a cool idea you had. Software companies want people who like coding, but they don’t want people who get bored and drop a project two months in.

    [Sidenote – I’ve not been commenting, but I really enjoy your blog – your essays are always thought-provoking and I’ve made use of a couple of your how-tos! Hope you keep writing, it’s pretty great.]


  3. I got my Econ degree from UC Berkeley. I’m 27 and can confidently say that the paper is meaningless. At the end of the day, skills pay the bills. Learning for me wasn’t a priority, so I graduated with no skills and 5 figures poorer. I’ve had many boring office jobs (think Office Space – every day was the worst day of my life). I would’ve been better off not going to college.


  4. I think this is definitely a topic that is not discussed sufficiently, so here’s a wall of text. 😉

    Some degrees are effectively a waste of money, while others are valuable but perhaps not worth $150k. I think degrees in math, physics, chemistry, and engineering are probably the most valuable. Computer science is more valuable as an adjunct to a subject area. People who like to work with their hands also tend to get sidelined and looked down upon, though arguably with where things are these days (HVAC, auto mechanics, etc.), they probably know at least as much of the basic college degree requirements as anyone with a BA, have no student debts and get paid more to boot.

    You certainly don’t need a degree (I didn’t even have an AS) to make a good living writing code, but it’s likely that unless you have at least a bachelor’s degree you won’t get team lead or management positions (unless you own the company or knew the owner/management very well before you went there)…and they’ll never tell you that’s why because lawsuits. It also makes it more difficult to design and build new things, even in a small company. Also, company policies can make it difficult to contribute to open source projects, though most places aren’t against it as long as you’re not giving away their intellectual property, or they specifically want to give something away, e.g. as a standard implementation. Networking is also very important without a degree, if you want to be able to move between companies, or are going to work as a freelancer.

    For all the focus on “STEM” and getting more women into the field, I think they miss the point: for so many of those fields, while education is important, actually working in the field depends on a combination of what is taught, how it’s taught, the (perceived) future value, and (the point everyone seems to harp on the most) gender discrimination. There is one more aspect that I don’t see being discussed, usually ignored as being part of gender discrimination, which is that there is a “Can you take constructive criticism?” requirement for any technical field, and, frankly, most women seem to take it as a personal insult when you criticize something they’ve produced, while men usually see it as a challenge to improve quality (now or in the future). There’s also a related aspect which is that some people can’t criticize without making it personal…but I’m not sure how to fix that one: men seem to have a higher tolerance for dealing with that, and there’s also a “It’s rude to point out others’ failings unless you’re their boss” attitude that keeps the issue from being raised, unless there’s an obvious discriminatory component that results in a lawsuit.

    I think the other part of it is that very intelligent people tend to have trouble with dogmatic requirements, which are very common in the educational system; I know I’ve had trouble with that, and it sounds like you do as well. This is probably part of why software development is more open to self-educated people: there are no accreditation requirements, except for specific fields (yet, anyway).

    I’m not sure that there’s a good solution to dogmatic requirements, but competency-based education is probably the most appropriate. Simulation-driven “here’s a problem and the resources to solve it, have at it”-types of things are probably the way things will go (perhaps with challenges such as “using Language X for at least half of your solution”), but designing a way to test for such things is not easy. Perhaps that’s one of the places where VR and AR technology will be widely applied in the future, particularly outside of the CS, software development, and IT fields.

    Regarding your response to mathisuseless, I agree wholeheartedly: the university system does not really teach you how to read API documentation, etc. (and, generally, how to solve problems without direct personal access to an “authority”). That’s definitely a failing, and one that’s more obvious to me with several years of real work experience (not just internships).

    On the other hand, some degrees do actually save you a couple of years along the way, for example if you want to be an engineer, as a PE requires substantial experience, but an accredited engineering degree can be substituted for a good chunk of it (I think 8 of the 12 years required). This is pretty much my case: my degree (once the school gets done with the administrative stuff) will be in electrical engineering, and I’ll probably pursue a PE (in Software Engineering) if I’m in a good position to do so.

    I did come across a school that offers BS and MS programs in IT-related fields that is based around competency testing; that’s what I’d like to do for my MS (probably Cybersecurity), unless I decide to continue with EE. It’s intended to be something that can be done part-time since it’s a mostly self-directed process, and it doesn’t cost an arm and a leg. I probably would’ve gone with them for a BS if I wasn’t so close to finishing my degree. From what you’ve said, and what I’ve seen of their marketing material, you would probably be a good fit: check out Western Governor’s University (http://www.wgu.edu/). (And please let me know what you think.)


    • Thanks for your comment! I have to admit, whenever I get notifications about comments on posts like this one, I brace myself for people trying to defend universities, and frankly, I don’t much like confrontation.

      Perhaps it’s because I’m a woman and we read into criticism more than men do, I think. We feel like we have to be watchful of political moves to discredit us, even (especially?) if the criticism is from another woman. But in the case of what you’re talking about, you have to keep in mind that we’re also contending with stereotype threat (if a guy is bad at math, he’s just bad at it; if a girl is bad at math, she’s an example of how all girls are bad at math) and the fact that often criticism aimed at us IS personal and not about the work at all (e.g., “You don’t seem friendly enough and we need you to be a team player, you should smile more”).

      Eventually we get a little jaded about that sort of thing. You may not have experienced this kind of political jab because it’s easy to miss, but I had a professor who did it to me on a daily basis. Oh, and the boss who decided my nickname was “missy.” I had just little enough contact with him not to bother telling him to cut it the hell out with the diminutives.

      But yeah. I think being a programmer is more like being a graphic designer (another field I’m very fond of, and lately I’ve been thinking I’ll make web design and development my specialty). There are people with degrees who are still… not so great at it, and there are fantastic self-taught professionals out there.

      Right now I’ve just started this online program that’ll get me a general degree with a handful of specialties, CS being one of them. It’s self paced and a lot more flexible, because it’s designed to be fit around the schedule of someone who’s holding down a job at the same time. I figure that if I can code/design, no one is going to care much, and doubly so if I have a piece of paper declaring me as a graduated General Studies major.

      But yeah. An engineer will find classes way more useful… they can actually teach most of what engineering is. Of course it’s hard to teach people creative thinking, but there are a lot more tangible things to discuss and there’s less of the kind of weird conceptual stuff we haven’t really managed to define in software dev yet.

      I’m not an engineer though, never have been. I’m an artist. I know that sounds extremely pretentious, but I mean it in a commonplace kind of way. My dad would love it if I were an engineer–he is–but it’s way too rigid for me.

      I write speculative fiction novels, I used to do it really avidly, and I think that’s closer to programming than something like electrical engineering is. I can draw and paint, and I have a good sense of design, and that’s like the cousin to web and UI design. Making your product look good and feel good to use is important. I’ve seen programmers who can code binary trees from scratch but have 0 sense of taste in design, and while I have my own opinion on which is more useful, I think I’ll leave it unstated as not to seem too overly arrogant. 😉

      Honestly I’m pretty terrible at remembering all that algebraic theory stuff. I passed the class (just) and promptly forgot how the data structures are implemented. Like, I vaguely kinda remember most of how they work, but I couldn’t code them on a whiteboard.

      Also, OO design has always confused me, at least the way it’s been taught. I nearly always run into this wall trying to get objects to talk to each other or pass objects, variables, whatever, even when they theoretically should be able to. (I feel like I’m missing something really stupid here…) I keep meaning to learn Clojure and see if functional programming is any better about this kind of thing, but right now I’m actually pretty invested in learning the new web standards because last time I learned them I was 13 and they were a fair bit different, as you might imagine.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s