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.

Friends

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.

Advertisements

3 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).

    Like

    • 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.

      Like

  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.]

    Like

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