
A hacker's guide to college - davidbalbert
http://dave.is/college.html
======
alexgartrell
I work at Facebook on Cache infrastructure doing super low level C stuff that
gets deployed to lots and lots of machines in a massive distributed system. At
best, half of the knowledge I needed could have been gained hacking around on
my own in my free time. The other half came directly from Systems courses at
Carnegie Mellon and research I did there as an undergrad.

This is also true of my close friends from school (housemates my junior and
senior year) who work at Apple on the jscore Javascript engine, at Pure
Storage[1] on hardcore storage stuff, and at SpaceX on control systems.

Maybe the average coder doesn't _really_ need a college degree, but if you
want to be a badass and get there as quickly as possible, four years at a top
CS University is about the quickest shortcut you can take[2].

[1]
[http://www.storagereview.com/pure_storage_comes_out_allflash...](http://www.storagereview.com/pure_storage_comes_out_allflash_storage_array)

[2] You still have to go WAY above and beyond, but the exposure to people in
that realm is invaluable, and it's hard to get that exposure outside of these
places.

~~~
davidsiems
As a reference point:

I have an nontraditional CS degree (DigiPen). I learned a lot of math in
school, and programmed a ton. There was emphasis on data structures /
algorithms, but not as much as you'd find in a traditional CS degree.

Part of my job is to hack around on JSCore in a Webkit port. I do this without
much problem. I wouldn't say I understand the whole thing, but if I needed to
I could.

In my experience, you learn as you go. As long as you're good at problem
solving and using Google/Reading/Asking People Who Know, you'll figure it out.
With or without a traditional CS degree.

There's nothing magical about JSCore, or hardcore storage, or spaceship
control systems. It's just domain specific knowledge that you pick up if you
spend time solving those kinds of problems.

~~~
sliverstorm
I'm not a CS person, but I have learned that eventually Google can't help you
anymore, and People Who Know become your most important resource.

The trouble is once Google is no longer helpful, finding People Who Know can
get tough.

------
shazow
\- "College is expensive": Pretty US-centric point. It's very affordable in
Canada and most other countries.

\- "I know many great programmers who didn’t study Computer Science and some
who didn’t go to college at all": I know far more great programmers who did
study Computer Science. :)

I'd say undergrad is more about learning how to learn and the discipline
required. "Take only classes you're interested in" may be very
counterproductive to that, depending on your interests.

In the end, it depends on what kind of "hacker" you want to be. If "hacking"
together WordPress blogs with a bunch of plugins is your cup of tea, you're
probably better off not even having a Highschool diploma. If you want to build
a graphics engine, a hugely scaleable system, or the next generation JIT
programming language, you'll probably need a solid Computer Science education
(whether you acquire it self-taught or otherwise).

~~~
kilovoltaire
Even in the US college isn't necessarily expensive if your parents can't
afford it. I received extremely generous financial aid at MIT, so it was
essentially free.

~~~
iends
Yep, I'm sure every school is like MIT.

~~~
ericd
Many of the really good ones have the same policy - I know Harvard definitely
does.

~~~
keiferski
The fact that one can even get into Harvard or MIT puts said individual leaps
and bounds above the average student.

Saying that some 1% of kids can get an affordable education at top schools is
really quite irrelevant.

~~~
EvanKelly
Among the top-tier CS schools, there's a mix of private and public. Several of
those private schools (MIT, Harvard, Princeton, Stanford, etc.) have extremely
large endowments that help make college affordable for those that get in.

If you fall in the dreaded "middle-ground" for financial aid, your options for
an affordable education are somewhat more limited, but nonetheless existent.

A rough estimate for the United States could be that ~30 states have good to
excellent public universities.

The group that seems to be in the toughest spot are the students from states
without excellent public universities and in a bad financial position for aid
or grant money.

------
timsally
Most of the broad strokes in this post are reasonable, but the idea that you
should only take a class because you want to is misguided. It seems like solid
advice on its face, but there is not a always a direct mapping between
enjoyment and benefit. Indeed, thinking back on my own time as an
undergraduate (CS@UIUC 2011), several of the most beneficial classes for my
career were ones that I did not enjoy at the time. Degree requirements are
designed to capture these high pain/high reward classes. Of course that is
only if you decide to go the college route. I'm all for people who want to
enter industries like programming or security forgoing it. But if you are
going to front the time and money, I think you should stick relatively close
to the curriculum. Not only is an 18 year old freshman is unlikely to get
curriculum right, but if you're going to design it all yourself you shouldn't
be paying for it.

~~~
danielhfrank
Forgive the nitpicking, but I think you misread him slightly. He wrote "Take
only classes you're interested in", not classes you enjoy. I did many of the
things that Dave suggested (BA in Math, very few required classes for that
one), and definitely lived by that policy. A prime example was that I never
took a class just because it was a pre-req for another class that I wanted to
take. There were some really hard classes that I did not enjoy doing the work
for, but I had signed up because they covered interesting topics, and for the
most part I was glad to have completed them.

As I said, I pretty much followed Dave's advice on course selection, not
because I didn't think CS was necessary, but because I didn't yet know I
wanted to do development. There are some things I feel I missed (like learning
how a computer actually works), but on the whole the most useful programming
skills I've gained are ones I've learned on the job or hacking on my own
projects in the middle of the night.

~~~
davidbalbert
This was exactly what I was getting at. I found that I didn't learn a lot in
the classes that I wasn't interested in.

~~~
timsally
Ah, fair enough! Sorry for the misread.

------
bitsweet
I regret that I did not complete college and jumped early into programming
nearly a decade ago. Financially, I'm as well off as my college grad
counterparts but I feel like I'm always playing catchup in my general
education (e.g. philosophy, biology, general arts, etc).

College is not solely about the raw skills used in your trade. It is also
about exposure to several topics intended to round out the character of an
individual.

If your good at hacking, maybe you could skip college entirely. But your also
increasing your chances of being profoundly naive in life.

~~~
ericd
Khan academy? Not sure if they're up to college level material yet, though.
MIT OCW is also generally quite good, if there's something you're interested
in exploring.

~~~
jowiar
The issue also is that, while technical skills are often a checklist of things
which can be acquired through various methods (lectures? books? websites?),
much of the value of classes in liberal arts/humanities/etc. comes from the
other students in the class, and discussion/interactions between them.

Learning to perform a technical skill is far more achievable on ones own than
discussion, communication, and analysis of, say, history or philosophy, which
is most easily practiced in the company of others performing the same task.

~~~
ericd
You might be right. Most of the ancillary subjects that I've been interested
in have been science (psychology, sociology, some physics), and I haven't gone
into the depth I would with them if I was still in school. It might not even
be very feasible to get as solid an understanding without having my classmates
there to bounce around ideas with. For my purposes, though, I'm looking to get
a broad base of knowledge in a lot of fields and see what's worth exploring
further, so it works pretty well.

------
nyrulez
Dangerous advice IMO. I interview folks regularly at a top tier firm and a
good school/track record is perceived as a strong indicator of future
performance. We can debate if that's really true till eternity but that's what
lot of folks do today and I don't see that changing for quite a while. I
interned at Google long time back (+ had an offer from them) and school
performance factored in pretty strongly (along with my transcript).

We do coding tests of course but that would be too limited on its own.

Personally, I would be not where I am without college and ton of courses in
CS. Topics like Database normalization, query optimization, ton of OS
concepts, discrete math, algorithms/data structures are important for any CS
career and could be read on their own but why not just take courses and study
them in college instead of trying to rely one's self discipline to cover all
of that.

If you are starting your own company, maybe it matters less but even there I
am not sure.

~~~
danking00
What about the value of actual projects? I have a high GPA, but I'd be pretty
disappointed if a company didn't stop to look at any of my github projects
before they considered me. Those repos show off my creativity and my desire to
build interesting projects with interesting techniques.

My high GPA comes from doing what I'm asked, not from being innovative,
interesting, or overachieving. I like to think of it as GPA hacking, maximum
results for minimum work.

~~~
nyrulez
Unfortunately a lot of the decision making comes from the interviewing part of
it. I agree companies should look more at actual past projects (and I had
plenty to boot), but I didn't find folks looking at that too much as I would
have liked.

But if the projects have significant value and are well known, that's a
different thing altogether, that comes off as a big plus IMO. They just need
to presented well - just a code repository somewhere is less likely to get
attention than working stuff people are using actively.

But apart from that, projects make you a better CS/hacker and it shows - it
shouldn't be done for getting a job but just because you are passionate and
want to contribute - and trust me it will show if you do try to leverage that
for getting hired later.

------
kingkilr
In this thread: people take their personal experiences and try to extrapolate
to all programmers everywhere.

------
pdubs
>You might want to consider a BA rather than a BS because BAs generally have
less requirements.

A BA is worth far less than a BS in the technical world for precisely this
reason. I honestly can't believe they even offer BAs in Computer Science.

~~~
lazerwalker
I'm convinced a BA in CS is the perfect balance between what the article is
espousing and those in favor of a more rigorous technical background, at least
for those who veer towards the programmer side of the computer scientist
<\-----> programmer scale. Getting a BA gave me a solid foundation in comp sci
while also letting me get a true liberal arts education. Studying music,
literature, philosophy, etc helped me become a much more well-rounded person
than had I gotten a BS, but still gave me what I felt to be proper exposure to
CS as a field within a formal academic context.

~~~
pdubs
See I never got this argument. I studied history, music, and political science
on the way to a BS; most schools have liberal arts requirements for all
students. The main difference between BS and BA programs in most cases (in
addition to a few more required math/science generals) is the number of
required upper-level electives in the CS department, 3 vs 8 courses in my
case. For me, I learned significantly more in the last 6 or so CS courses I
took, things that give me a competitive edge in the industry. It takes you
past the basics without sacrificing a well-rounded education.

~~~
timtadh
I would say your university is non-normative in this respect. There is usually
no difference in the _CS_ education. The difference is whether the full
engineering core is required. If you don't intend to "be a engineer" the
engineering core is of questionable benefit. If you intend to work on embedded
systems it can be helpful.

To re-iterate. I have yet to meet anyone who cared that I have a BA. That list
included employers, recruiters, and the admissions department for my graduate
school (I am a PhD. student). It doesn't matter. Ever.

------
craigmc
Just as youth is wasted on the young, uni/college is wasted on (most)
undergrads. I include myself in that group, although I did make the mistake of
going to law school (available at undergrad level in the UK) which is
something I've been trying to make up for ever since...

------
JEBailey
I'm a self taught programmer with no degree who came to it late in life(past
30.) I love programming and I like to think that I'm fairly good at it and I
think I can justify that belief with the 6 figure income I earn and architect
title I have.

And after 10 years of doing this, I am going back to school to get my CS
degree. I believe you can be successful without a degree but there's a wall
that you will eventually hit where you're natural talent can't take you
farther without some assistance. Unfortunately all the classes I would like to
take to satisfy my craving for knowledge are graduate level courses. So I'm
going back to school so I can get my degree so I can finally learn the stuff
that I want to, and need to know.

~~~
warwick
I took an awful lot of graduate level courses as an undergrad. Most of the
time there was some sort of additional vetting where the prof had to sign off
on your involvement in advance.

You don't have to get very far in the undergrad before they'll start letting
you take the interesting stuff, especially if it looks like you know what
you're doing.

------
danenania
In my experience, you could make a similar argument about going to college for
business vs. actually understanding anything about business. A lot of recent
grads I've encountered don't know much beyond buzzwords and overly abstract
theory. College also seems to frequently have the unfortunate effect of
instilling overconfidence and a sense of entitlement. That said, if the goal
is simply to get a job, college is clearly the path of least resistance.

Personally, I'm glad I didn't get a degree, or at least that I didn't follow
the common path of high school-college-entry level job, even though it has
made life more difficult at times. It cut me off from the easy route of
getting some comfortable, dull job at a big company and becoming stagnant.
Instead I've had to carve out my own path and I think the experience and
confidence I've gained from that are worth a lot more than a degree. Frankly,
not one of the clients I've worked with has even asked me about a degree. When
you have solid work you can point to and enthusiastic references,
whether/where you went to college becomes completely irrelevant. If a company
won't hire me for a job I'm qualified for because I don't have a piece of
paper, it seems to follow that they _are_ likely to hire unqualified people
who do have that piece of paper, so it turns out that their filter actually
works out a lot better for me than it does for them, and I'm happy to be
filtered.

I also don't buy the notion that without college you won't be 'well-rounded'
or 'generally educated'. When I was in school, I always felt like I had a lot
_less_ time to devote to reading and really learning because my days were
filled by tedious work and usually dull classes. Going to college isn't what
makes you well-rounded and educated, it's a thirst for knowledge and the time
to fulfill it.

~~~
csomar
It's about demand. There is a high demand for skilled workers who are lacking.
The employer has to take unskilled workers, and thus a college degree is a
good base to start with.

------
jneal
I believe that the people who succeed most at becoming great programmers are
practically pre-programmed to be programmers. People like "hackers" that are
interested in learning how things tick from young ages, who are constantly
trying to learn new things, who have that thirst for knowledge. I've met
people throughout my short career who have asked how they can do what I do.
The easiest answer is you can't, if you don't have the inherent ability to
search out the answer to that question on your own, and figure it out on your
own, you aren't fit to be a programmer, or..a hacker...

Also this may be off topic but colleges are businesses, and a business has one
goal - to make money. I do not believe in the higher education system that the
U.S. has. I believe that higher education should be a not-for-profit industry
and that our current system is highly corrupt and is quickly becoming
unnecessary. The amount of $$$ that will be spent to go to college is rising
while the amount of $$$ you will make after college is going down. The end
result will be college costs too much to be a viable option.

------
godfetish
A hacker will be great for organizations looking for a pool of employees to
exploit. You will rarely become management, you will rarely be assigned new
tasks outside of your skill set, and you will eventually get frustrated and
angry. Frustration and anger will lead to you screwing around or even getting
into legal trouble.

Hackers are like programmers with ADHD and autism. They are superior at what
they can do, they are probably some of the hardest "work hard, play hard"
employees, but if it does not interest them, they aren't always effective.

One thing a degree will do, is teach you a rounded set of skill and how to
focus on problems that may currently be outside your box. Advanced math and
statistics, literal and verbal comprehension and grammar, let alone the social
aspects that many hacker types can lack - plus, while you are taking the
general education courses, you are expanding your mind to new concepts and may
even find something to specialize in - ie social statistics, informatics,
bioNLP...maybe even philosophy like myself.

If it comes to getting a degree or certificates, get the degree, if it comes
to getting certificates or nothing, get the certificates...but having no
formal education just makes a person look lazy on a resume, and if your resume
actually does get looked at with no formal training, you are either
exceptional or lucky. I was turned down for very high paying jobs and Network
Admin and VP of Technology at corporations that everyone knows world-wide. I
had exceptional references, proven track record, and when it came down to two
people...I was not chosen because of no degree. In BOTH positions, the person
who was hired was fired after one year because they did not have the skills
necessary. So, getting a degree will not let you keep the job, but the
education is enough to get you in the door and prove you are worth that six
figures.

------
ncmore
Interesting topic! I am just now completing a college degree at 39. I've been
a software & database developer for 16 years with very little formal
education. I did three correspondence workbooks through NRI (paper) that
showed me a do/while, if/then, etc. Nowdays, you can get that sort of
information by googling. There were only bulletin boards back then.

I exited the Military after 5 years of service as an MP (did NOT want to
continue in that career) so did construction work. Asked around about which
language I should learn, bought FoxPro 2.6 and read the book about three times
before it sunk in. I poked around looking for interesting projects at
businesses for free, not asking for money. Six months later I was hired. I
explored some fascinating concepts in linked lists, or hierarchies if you
prefer, while at my first job... working with bills of materials, assemblies
and subassemblies. I did a lot of interesting things. From there I moved
again, and have since learned Delphi, VB, .net, html, javascript and SQL. I
write software for offices in the US, UK and NZ. I started getting BORED &
frustrated. Instead of divorcing my wife and family of 20+ years (we got
married and dropped out of high school), I sought fulfillment through the
sense of self-worth you get when you reach out and help other people. The
world seems a lot brighter.

Whadya know... I'm now finishing an absolutely fascinating pursuit of a
bachelor of science in human resource development with a 4.0. I'm doing an
intervention at Kiwanis, plan on becoming a MCT to help teach at the local
community college, and will even be doing some ESL instructing next year. Yes,
I already make as much money as my professors, but it's been an unusual ride.
Instead of worrying about being able to provide for my family, I have a lot
more flexibility, choices, and a brighter outlook. Now... do I want my kids to
finish college? Of course!

------
snow_mac
I call bull on this shit // pardon my french.

But CS teaches you fundamentally what is going on with a computer, good CS
programs will teach you 1's and 0's, levels of abstraction, all sorts of stuff
from the very low level to the very high level. As an engineer you need to
understand the low level stuff, you need to know about garbage collection, you
need to know how to manage memory, you need all this low level stuff; it's not
un-important shit or magic in a box.

It leads to better efficiencies in your code such as (PHP) var len =
array.length(); for(int = i; i < len; i++) {} vs for(int i; i <
array.length(); i++) {}

To be fair, all programmers are computer scientists. Some are really decent
and some are really bad. CS people solve problems with algorithms (Def.:
Finite set of instructions or steps), guess what programmers do? CS is the
study of the science behind computers, everything from data structures to:
algorithms, program correctness, math induction, recursion, OOP, Agile
Techniques etc...

------
kawfee
You may not need an education to write code. Sure, you can get something to
work. I wrote code when I was 5 years old.

Just because I wrote code doesn't mean a thing. Also, just because it worked
doesn't mean a thing. The point is that anyone can write code and maybe they
can do it bug free.

Let's assume you are targeting one specific type of machine.

What will seperate you from the others is your understanding of the machine
you are targeting. You need to understand many many things about this machine
when your code becomes very involved. You will need to understand the cache
structure, L1, L2, etc. You need to understand how those caches are designed.
You need to know about paging and TLB. You probably wont learn these by
'haacking' code together. Grant it, there are some indivuduals who want to
know everything and will go out and learn it all.

Asside from the architecture, you also need to understand applied mathematics
which is where Computer Science came from. You need to understand logic and
electrical engineering, at least the basics. You should understand how
registers work and how bits get added, subtracted, multiplied, divided, etc.
This is all very important.

Once you learn all these fundamental things you will see things in code
entirely different.

Remember, a high level language is just a syntax for you to apply your
knowledge. It really is nothing more. Programmers should be able to switch
languages very easily and still know what they are doing.

Let me tell you a short story about my first job after college. I ended up
getting hired to a group where maybe half the people there had degrees. There
were a few, lead, people who had taught themselves with VB. They asked me to
write a script for them. In all their glory they wanted to tell me about this
neat system they came up with. Two hours later when they finished I just
replied, "You recreated a finite state machine". The two hours they spent
explaining themselves to me really was a waste of time. All they really needed
to tell me was, "Here is our finite state machine and here is the drawing
showing the states. This is what we have implemented. Use this for your
script."

Now, in college I wondered why I was being taught about finite state machines
and whether I would ever use it. Well, my first job I did. I continue to use
my education every day. It is very helpful to figure out what is going on. It
isn't just about memorizing things but learning how to think and applying what
you know.

------
gettingOnaBit
I've been the CTO of a couple of software companies and am a hacker myself. I
find it very hard to recruit good staff, as the article says, having a degree
doesn't mean you're a good programmer. I expect any developer to have a
degree, ideally a technical one. (I've taken a chance on self motivated people
without this and have usually regretted it.) So that gets you in the door.
What then drives my decision is your attitude. If you clearly love coding,
learning how things work, can solve problems, aren't dogmatic over languages /
OSs, etc. then you're down to the short list. If you can talk with enthusiasm
about something you've done, be it professionally or as a hobby then you're
likely to get an offer.

------
chaq686
I think college is place to see opportunities and learn how take them. I
really didn't enjoy college because was kind of lame (lame on learning some
new languages and technology). But on basic programming, algorithms, math,
physics, software design and logic were pretty good, sometimes boring as hell.
But the thing is that you need to be patient. Languages comes and go but the
principals are still the same. Also college is a great place to go to
internships, student exchange, job/research, new ideas,innovation
opportunities. Why? Because all those things are right in front of you. I
wasted all that when I was in college and I'm working porting games (that is
cool but I'd rather be creating them).

------
doodlejot
I'd have to say I agree entirely with dave.is. The only point I would add is;
college is for those who know what they are using it for. Most people are just
funneled in for whatever reason and really have no solid understanding of why
they are there let alone which classes are the best for absorbing knowledge.

People funneled in could be the definition of a slacker.. they don't know why
they're there - so why care or try?

Studying on your own is definitely the answer if you have the passion and
drive to stick with one thing. If you find yourself competing with a lot of
random "passions" (like me) understand every aspect of how college will
benefit you (career, socially, etc.) before jumping blind into the stream.

------
timhobert
Consider going to college to get an undergraduate business degree, which will
be valuable throughout your career. Perhaps study computer science as
electives or find a good business school that also offers a computer science
minor.

I left college in the U.S. owing $24,000 (I then paid $150 per month for 12
years and just recently paid off the remainder of the loan with a $5,000
check). And I really would pay that amount for the rest of my life... College
was a blast. It changed my life completely. I really can't overstate that.

------
synnik
College graduation is also a good indicator that you can choose a path for
yourself, stick to it for multiple years, and complete a goal.

------
shadoz
I like this article. You've confirmed an idea I've had for quite some time now
and that is you don't need to go to college to become a great programmer. I
was introduced to programming in university and this sparked my interest so
I'm grateful for that. I'm glad that I read your article because it has
inspired me to work even harder at programming on my own.

------
guapo42
It's true you can learn to code on your own but a good college education is
about more than career training. It can give you an introduction to things
you'd never come across otherwise, teach you critical thinking, the scientific
method, academic discourse, writing skills and life skills. It also teaches
you to jump through hoops, which is no fun but an essential part of life these
days, and gives you a safe environment to experiment, fail and try again.

I took the author's tack and took classes I was interested in and hacked in my
free time. It worked out wonderfully for me as now I have a job at one of the
top game development studios in the country. College + hacking broadened my
horizons and gave me the career skills I needed. I've been surprised many
times how things I've learned in completely unrelated classes have been come
back to help me.

It's been especially fruitful when coworkers who are much better programmers
than me want to write good code on top of poor decisions based on a lack of
inter-disciplinary knowledge. Being able to adjust the course upfront has
saved many hours and resources.

If you can go to college, but like the author said, if you're not engaged in
your learning you're doing it wrong.

------
lukejduncan
While all of this is true, if you're looking to get a job somewhere then just
look at where they are recruiting. The big guys in the valley recruit from top
tier schools. It is possible to stand out from the crowd as a degreeless
hacker, but its much harder to be "discovered."

------
dmerfield
If you're purely interested in the pursuit of understanding for
understanding's sake, college is not a cost-effective use of 4 years of a
hacker's life.

~~~
mechanical_fish
It depends crucially on what you're trying to study.

Universities haven't had a monopoly on books for centuries. Their monopoly on
good lecturers is getting smaller by the second, thanks to e.g. Open
Courseware.

They're still the place to run into professors, grad students, etc. outside of
class. That can be very important. Serendipity is a nice thing.

They still offer a critical mass of fellow students. That's often a big deal
for your education, and it's certainly most of the fun. Plus, as many have
pointed out on HN over the years, there are precious few places in the world
where you can literally live next door to a bunch of fellow hackers, all of
whom are young and nearly unemployed and used to living cheaply and ready to
embark on a project with you on a whim. (Trust me: After you turn thirty,
_this never happens again._ Everyone has these tedious families and jobs and
lives that intrude on their hacking time, and they're all _out of sync_ , such
that when you are free they are always busy. ;)

Finally, universities have infrastructure. Laboratories. Lots of laboratories.
Those you really _won't_ ever get your hands on again. College, and even much
of grad school for that matter, were worth it for me just for the labs and
shops alone. I built _hundreds of tiny lasers_!

------
chromedude
I just started a question on Quora about this: <http://qr.ae/7sZUS>

------
SpearHead
I am a B.Tech 2011 passout Graduate with less marks and High Technical
skills...

