Note that there's no "... and why you should too". This post is decidedly not doing a bunch of things:
- It's not arguing for or against going to / finishing university
- It's not calling for arguments on either side to help me make a decision (it's all done and in the past)
- It's also not a general statement about anything at all.
This post is instead the story of my very specific case. These are true for me, they may not be true for you. I share all details openly, recognizing that some of you don't agree with my decision. My goal is also not to convince you about anything; I'm explaining my thinking and feelings so you may better understand, and if needed, more easily accept my decision.
Warning: it's a really, really, really long post. It gives all the exposition needed to understand me (in this regard). I don't mind if you don't read it, but if you want to understand, then please do. These are the arguments I considered, how I weighed them, and how I came to the final conclusion.
From 2009 up to the end of the first semester of 2013/2014 I studied at ELTE, one of the most acknowledged universities in Hungary. I studied to be a "programtervező informatikus", translated word for word as maybe "program-planning" or "application-designing person-who-deals-with-informatics". The predecessor of this curriculum was "program-planning mathematician" with a very heavy emphasis on maths: 6 required courses of functional analysis in as many semesters, with a few courses from pretty much each major branch of mathematics. By the time I got here the math was seriously toned down (only about 3 courses of functional analysis), but the standards were still pretty high.
I started working as a web developer (front-end, back-end, servers, the whole deal) about half a year before I started my studies at ELTE, and I never considered stopping working - I just love it way too much. In the first two years I had a part-time job. Then I took two passive semesters, started working full time. After that I tried evening classes for two more semesters. And now here we are.
On a personal note...
I was always the good little boy. University life took a bit of the edge off that, but even now finishing what I start and completing any duties as close to perfect as possible are very very strong defaults. Until a few (read: less than four) years ago it wasn't even just a default: doing bad at school, not going to university, not finishing university were things that didn't really even seem like a real possibility.
A big number of things needed to happen, and I had to make a few realizations, to make me choose to drop out. 'Cause that's what's happened, no need to wrap it in nicer phrases.
Education and learning - before ELTE
During primary school I got my initial intro to programming from my dad (big thanks). Some time towards its end I realized that I was the local geek who knew everything about computers, I even thought of myself as such, but I still didn't have a single useful application I wrote myself. That was really a turning point: I started teaching myself everything I could find on the internet (and the internet is really great for learning programming).
There were two, maybe three times when I learned "something interesting" instead of what I should've been learning for school in the years before ELTE. That tells you something about how serious this "dutifulness" condition was. Even so, I managed to get my first contract about half a year before graduating from high school.
One of the cases when I learned something interesting instead of the required material was the night before my CS graduation exam. I kind of had enough, and decided to read the Gimp manual instead. The next day the topic I had to talk about was how computers represent images. A few surprised teachers and an aced exam later I was on my way to ELTE - what I've been looking forward to for years.
Literally for years I've been telling myself: I just need to learn some more of this history and geography and biology I don't really care about at all. Then it'll be all great, because I'll get to learn useful and intresting and exciting stuff. Studying CS really was my goal and dream for about 3-4 years.
The first "con"
I quickly realized that the reality of CS education (in this specific country, at this specific university, at this specific time) is not really what I imagined at all. Yes, some algorithms can be difficult to grasp. Functional programming takes serious effort to understand. We need a special kind of abstraction to build maintainable, clean codebases. But the vast majority of these were problems I've already conquered by the time we got to them at university - and often in much more depth than required at the courses. I was trying to understand monads by the time we first heard about partial application at a class.
I often felt that programming classes were there just because they had to be, and no-one really cared about them. Often I saw solutions accepted with a 4 (the second best grade in Hungary) that wouldn't even compile, but most of it looked correct. I mean... Come on. If it doesn't compile, it's not a program.
Contrast that to the rigor used in math courses: a normal exam consists of first correctly stating 5-10 definitions (chosen at random out of ~150), then accurately proving one or two theorems (chosen at random out of ~30). Note that neither of these require any abstraction, creativity, problem solving - or, really, thought. It requires basic text recognition (which theorem is this?), ok memory and a lot of time.
Of course there's a counter-argument: I could take the time to deeply understand all ~150 definitions and ~30 proofs. Deeply enough that I'm able to reconstruct them on the spot. I like math, so that doesn't sound terrible. Even if you add that there is more than one such course each semester. However, understanding that deeply takes even more time than just storing the text until the time of the exam. Time that I, in the end, decided is better spent learning "something interesting".
"Just for the paper"
A phrase one often hears around here is "I'm just at the university for the paper", paper meaning the diploma. After some time I adopted this mentality, because otherwise I had no motivation at all to finish. Well, that's not strictly true: there was still the dutifulness, the not-leaving-things-unfinished.
I do have a piece of paper proving that I'm an "internet application developer" by the way - it's below university level, but still.
But "just for the paper" is a pretty strong argument for finishing university, in fact. Consider: how often do you see a diploma as a requirement for a job? Not as often for programmers as for lawyers, true, but it's still not rare either. There's a huge uncertainity here: what would my diploma be worth by the time it counts? It can go either way. It may be a hard requirement at any job I'd ever want, or it may become obsolete in the face of rapidly changing technology. I just don't have any data here. Therefore it's logical to play it safe, go for the BSc.
There's often an alternative: N years of relevant work experience. It's getting to the point where I can say I have work experience for reasonably big values of N. Another interesting thought: if a company will refuse an applicant based purely on the fact that they don't have a BSc, is it a place you want to work at? I'm almost positive I don't want to. It's reasonable to require more from someone without a BSc - but I'm doing my damnedest anyway. This is my main (often only) hobby and my profession.
Of course this argument works only because I don't want to (a) go into academia or (b) work on spacecraft-critical stuff. (Maybe one with the right reputation can get to programming spacecraft without a BSc, but forget about academia.)
But the status!
Yeah. About that... I just honestly don't care that much. Sure, being able to say "I've a BSc" gives a certain amount of respect. But that's it; it doesn't give any insight on the knowledge, the skills, the quickness of mind, the experience one has.
To be fair, it pretty well indicates at least this one thing: if you have a diploma, you have grit. You went up to seemingly useless and very hard work and did it anyway, because it was required. That can be a useful certificate in some kinds of environments. I'd prefer to work in environments where instead you're expected to see the big picture, the strategic goals, and can make sacrifices to meet those goals - but not because someone said so.
But surely there's useful stuff to learn at the university
Yes, there is. Some. For me, around 5% of the material covered was useful. If I learn on my own, I can make that approach 90%. Again, this argument only works because I have a very strong internal urge to learn, to know, to build. Otherwise I'd just be losing even that 5%.
Aren't you just lazy and giving up?
There's a little of that too. University is very hard work that takes a lot of time. But this in itself wouldn't be enough to make me stop. It wasn't enough when I learned Linux and vim from blog posts (pretty hard to do the first few hours when your network card driver isn't working yet). It wasn't enough when I learned the N+1-th language, framework, paradigm. It sure as hell wasn't enough when I've been debugging the same damn stupid bug for the fourth hour straight.
What is enough for me to give up then? It's four years of futility, of learning interesting things in boring ways. Of making functional analysis (the infinite? way cool) mean only abusing the brain as text storage. All that time wasted that could've been used to learn, or then to build the next Haskell, the next SocketStream, the next Chef.
Moving abroad is harder without a BSc
Yes. And I'm planning, vaguely, in the next 5-15 years to move abroad. No counter-arguments here. I'm taking the risk of maybe not being able to move because of dropping out.
That's an awful lot of rationalization!
I needed to understand why I had the strong need to run away from ELTE. If it was just lazyness, I'd have stayed with it. I hope I managed to show the angles I considered while investigating this whole issue. I gave a lot of context so you can understand why I assigned the weights to each argument that I did.
So what do you do instead?
I work on hobby projects to learn new technologies. Write blog posts to help others learn the same. Improve tools. Learn to play the piano. Organize Haskell meetups and coding dojos. Work. Go to conferences. Present at meetups. Hope to present at conferences. Think about when and how to get a university degree without those cons.