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.