
The limited value of a computer science education - dekayed
http://nathanmarz.com/blog/the-limited-value-of-a-computer-science-education.html
======
capote
Post number 7,819,394 talking about how useful or not useful a CS degree is to
a programming job.

Here are some lessons I learned by going to school that I find incredibly
useful:

1\. How to shut up and get some work done, even if I don't see the point to
it.

2\. How to shut up and get some work done, even if it isn't directly
applicable or valuable to a job or something I want in the future.

3\. How to take feedback and criticism from people who know better than me.

4\. How to deal with someone I don't like but who has power over me.

5\. Lots of other fascinating things that have nothing to do with my job but
that learning about made me happy and appreciative of life.

6\. A handful of things that _are_ pertinent to my job, but I see this as
added extras because I didn't go to school for the sole purpose of getting a
job.

7\. That a lot of people seem to think that the only things in life worth
learning or paying for are those that will be useful at a job. This is a sad
one.

~~~
elliotec
These are about going to _school_ , though, not getting a CS degree. And 100%
of these things could, and probably should, be learned in the real world and
not through paying tens of thousands of dollars under the guise of education.

I did not go to school for a CS degree, and that has not hampered me in any
way when searching for a job in software.

All I learned in college was how to game the system of the institution itself,
and that institutions like that are a societal racket and waste of time and
money.

~~~
capote
> that institutions like that are a societal racket and waste of time and
> money.

This is completely wrong. Universities are tremendously useful and do many
great things for society and humanity. I'm not going to provide evidence
because I think that any reasonable person will agree with me.

~~~
wyqydsyq
While it's clear many university institutes and projects have benefited the
wider public, I think he was specifically referring to the value of university
to an individual, for most people (excepting those who are studying sciences
to enter a specific niche field where they wouldn't be able to pick up the
necessary skills anywhere else) university is indeed a waste of time and
money. I'm a 22 year old developer based in Australia, I've been working in
the web industry full time since I was 18 and been earning money all along.
Yet I have multiple friends who did CS etc. at uni and despite having the
formal qualifications I lack, they're earning less than me and have a good 10
years of paying off their education debt before they can actually use their
earnings beyond getting by.

~~~
capote
Once again, you've completely missed the point. I am trying to say that the
value of university has nothing to do with your ability to get a job. I'm
trying to plead with people to stop trying to compare university with a job or
measure the value of a university in terms of a job.

If you can't see the value in university, good for you; nobody's forcing you
to go.

~~~
personjerry
> Once again, you've completely missed the point.

But, you didn't make an argument for your point in your last statement, and
instead made a vague, mysterious assertion:

> Universities are tremendously useful and do many great things for society
> and humanity.

You even explicitly pointed out this fact:

> I'm not going to provide evidence because I think that any reasonable person
> will agree with me.

------
_delirium
I may have been lucky, but I don't recognize this statement when I think of my
own CS curriculum:

 _The vast majority of what a programmer does, forming good abstractions and
avoiding complexity, is almost completely untouched by computer science
curriculums._

That's the _majority_ of what my CS degree covered, in several different
programming paradigms. Even the idea that there are "programming paradigms" is
something I learned at university, from a great course called Comparative
Programming Languages. Granted, it's one thing to study it and another thing
to gain years of experience doing it, but it was certainly a big focus. I took
a whole course on design and structure of OO programs, which mainly at the
time focused on C++, but also covered some alternative OO models and what
pros/cons various people have claimed for this style of abstraction. And
another one on design and structure of functional programs, which in the case
of the one I took was mainly from the ML family perspective. These had some
more "theoretical" content as well, especially the functional-programming one
had quite a bit on type systems, but the overarching goal of the courses was
abstraction and structuring (and even the type-theory stuff was introduced as
a means to the end of useful programming abstractions).

When I read these kinds of summaries of computer-science degrees, I get the
impression people went to some kind of program that was 100% algorithms
courses, proving big-O running times and termination properties and that kind
of thing. I thought I went to a pretty theoretical one (vs. one with more of a
software-engineering bent), but it was _maybe_ 20-25% algorithms. Where are
people going where they are taking nothing but Algorithms 101 through
Algorithms 1601 for four years?

I do agree that the standard tech company interview process seems to mainly
test the algorithms part of the CS curriculum for some reason. I think tech
interviewers love big-O notation tests more than actual CS academics do.

~~~
douche
I went to an Ivy League college with a notable connection to Basic, and I
didn't write a line of code for my algorithms and data structures classes, or
for my AI class, for that matter. I wrote a metric shit-ton of proofs, though,
and I can say with 100% confidence, that that was a complete waste of time.

~~~
colanderman
I also wrote a metric shit-ton of proofs in my CS graduate education, and have
that to thank for a greatly increased capability for logical thought over my
undergraduate self.

~~~
douche
I really view that algorithms class as a massive, massive wasted opportunity.
There are really two aspects to that kind of a subject - the theoretical
underpinnings, and the practical applications. We beat the ever-living piss
out of the theory, but I doubt anyone who didn't already know how to do it
came out of that class knowing how you would actually code a linked list or a
graph, and what the trade-offs of various implementations were. That kind of a
subject would be such a rich field for a course in low level C or Rust or
[insert manual-memory-management language]

------
laichzeit0
So I did a 4 year computer science degree about 10 years ago. It's really hard
to understand why anyone would bash a degree. What I still find "relevant to
practice" from then is:

\- Any good CS curriculum is basically a calculus, statistics, linear algebra,
real analysis, combinatorics, discrete mathematics course with a bunch of CS
modules thrown in on the side

\- All the computational intelligence stuff we did (particle swarm optimizers,
neural networks, classification algorithms, data mining, ant colony
optimization, genetic algorithms, etc.) these things were all cool but not
really mainstream back then. It's all the rage right now. I'm really glad I
have a good theoretical background in all of that now, it makes it so much
easier to jump back into machine learning and analytics. The math I did makes
it even easier still.

\- I use a lot of "full-stack theoretical understanding" of operating systems,
networking, compilers and distributed systems courses to reason about why
things could possibly go wrong in production performance problems on large
distributed enterprise applications, and how to isolate where the problem is.
I do this on a daily basis and am amazed how many professional programmers
don't understand what's going on "under the hood". It's almost a Dunning-
Kruger effect situation where people don't even know what they don't know.

Then this doesn't even begin to mention things like formal methods, software
architecture, computer graphics, database theory, etc. Oh, and the philosophy
courses, which really went into logic and critical thinking.

A CS degree is completely mind-expanding if you get it from a good
institution.

~~~
neutrin0
Huh. I'm a 2nd year undergrad atm, and came across an instance of the nurse
scheduling problem at my on-campus job. I did some research and delved into
evolutionary computation, eventually deciding on genetic algorithms to solve
my schedule problem. (I'm using a self-adapted version of NSGA II)

Anyways, all my research has gotten me very interested in all the topics you
mentioned, also neuroevolution. I actually brought up neuroevolution and
optimization problems to my professor to get his insight, but he wasn't able
to help me out much.

I keep finding that people state computational intelligence was all the rage
about 10 years ago, and can't find much work on what is going on with it now.
Can you provide me with some more info in the field?

~~~
laichzeit0
I can only point you to the book we used at the time: Computational
Intelligence: An Introduction
[http://jasss.soc.surrey.ac.uk/7/1/reviews/ramanath.html](http://jasss.soc.surrey.ac.uk/7/1/reviews/ramanath.html)
Although there were many class handouts and journal papers we had to read too.

~~~
neutrin0
Thanks - at this point I have looked through as much material on the subject
since my project really only involves genetic evolution and multi objective
optimization. Time to dive in!

------
mercurysmessage
People don't understand what computer science is. Don't claim you did CS and
it didn't teach you to become a developer, that's not what CS is, and I'm
surprised that after a bachelor's and master's the author doesn't acknowledge
that.

~~~
rickycook
well, computer science should be MUCH more maths heavy than it is, and
software development should be taught as a trade.

~~~
treehau5
> well, computer science should be MUCH more maths heavy than it is, and
> software development should be taught as a trade.

Up until recently, the vast majority of Computer Science programs were under
the Mathematics department. For most colleges even to this day they are still
under the Electrical Engineering department.

------
wfo
Interestingly enough, I think the misguided constant push to move CS degrees
towards industry relevance more and more makes them more and more worthless --
we have academics going to industry conferences and asking what kind of
developers would be preferable to churn out, students whining that they aren't
100% ready to drop in at a company when they graduate. So schools are pushing
teaching how to write CRUD apps in java or "a class on the newest hottest
mobile app development platform" or "version control" \-- all stuff that
should be fairly easy to pick up in a day or on the job for someone who knows
theory (version control), or has no place in a University (the rest) when they
should really focus on the hard stuff, like CS theory (PL, theory of
computation, distributed, compilers, algo, concurrency, mathematics), which is
MUCH more difficult to learn outside of an academic environment, is universal,
and translates to every language and development paradigm whether it's now or
50 years from now.

~~~
imtringued
>students whining that they aren't 100% ready to drop in at a company when
they graduate.

I think the problem is not with the students. The problem is that the
companies expect you to be 100% ready to drop in and the only education you
can put on your resume comes from a CS degree or previously having a job in
the industry.

------
kendallpark
As someone that had a highly theoretical computer science education, worked in
the industry for three years, then returned to academic CS for summer
research, I have a few thoughts on this.

1\. A highly theoretical CS foundation is still very useful. One of the
hardest classes I've ever taken in all my studies was an upper-level proof-
based algorithms course. Nowadays I can glance at an algorithm and give you
it's runtime complexity. This is actually an important skill because it
influences how you construct your own methods and such. There were quite a few
times at my old employer where I'd be like, "If we just switched this out to a
hashmap, we'd have a constant time solution instead of this polynomial one,"
or something of the sort. Furthermore, that algorithms course changed how I
thought about computing (and life) forever. Computational complexity theory is
simply wonderous. I'm in med school now, and I will tell you, learning about
human biology through the lens of a computer scientist is a truly enriching
experience. Computation is everywhere!

2\. Your everyday programming jobs probably don't require that deep-cut CS
coursework BUT there are plenty of specialized jobs that do. I can think of
many sectors where you need to be fluent in something like graph theory and
ways to traverse graphs, or statistical methods + machine learning. Not all
jobs are full-stack dev jobs. Undergraduate CS is supposed to lay a solid
foundation that you can build your career on. It's not vocational training.
You have no idea where you'll end up! And honestly, I think there's plenty of
hindsight bias going on here.

3\. Man, oh, man, people in academia suck at software engineering (and not to
mention, product design). This isn't their fault! They haven't worked on a
large codebase before. They don't understand git-flow or continuous
integration or test-driven development. Their products need to get A's, not
sell to a consumer. I will say, coming from the industry into back an academic
environment it has been a bit of culture shock. Tools used, architecture, even
ways of speaking _about_ the software are often completely outmoded.

All in all, I'd say both are very desirable. I'd recommend self-taught
programmers take some classes on the more theoretical/mathy side of computer
science. And I'd recommend that the academically-minded CS seniors FOR THE
LOVE OF ALL THINGS GOOD take a year off and work in the industry before
pursuing grad school.

~~~
bjz_
I wonder if part of the problem is some universities watering down core,
foundational, beautiful CS to try and make it 'practical'. They end up with a
course labelled 'CS', but is actually a poorly implemented, behind-the times,
irrelevant software engineering course that is the worst of both worlds...

~~~
kendallpark
Oh, I agree. My school tried very hard to NOT do this. I remember I was
concerned about the lack of "practical" CS education, but alumni reassured me
that whatever I needed to know after graduation would be picked up very
easily. They were right.

------
justinhj
A degree in literature doesn't teach you how to be a best selling author or a
get a job writing tv scripts. On the other hand becoming a good a programmer
is much more difficult when you don't understand the fundamental inventions
upon which everything else is built. You're limited by what you see in front
of you in stack overflow answers and blog posts, with no insight into the
why's, only the how's. Self taught programmers that progress beyond simple web
pages and crud applications will undoubtedly come across a lot of computer
science on their journey. Maybe you don't have to study Milton to be the next
Stephen King, but your life will be a lot richer for having done so.

------
gigq
"I hope to see the industry improve in this respect, but in the meantime I'm
happy to exploit this imbalance as a competitive advantage."

I wonder how much of requiring a computer science degree is simply because the
people hiring have computer science degrees. Seems like a self perpetuating
insiders club.

~~~
crikli
Conversely I don't have a CS degree and I take a rather cynical view of
candidates who have do. Perhaps I've created a self perpetuating outsiders
club at my company. :)

In all seriousness, though, it's because the CS majors I've interviewed have
(generally) been great at theory, crap at application. I once had a guy hold
forth for 10 minutes about cardinality and then flop sweat when I asked him to
explain the difference between "GROUP BY" and an "ORDER BY".

~~~
maxxxxx
I am also not impressed by a lot of CS majors I interview. I often ask them to
come up with a simple sort algorithm where performance doesn't matter or to
reverse an array. A lot of them have problems with that. I am very tempted to
try fizz-buzz...

------
Johnny555
_" However, I also have to acknowledge that the scale and difficulty of the
problems I've worked on is unusual compared to the vast majority of
programmers"_

It's likely that the vast majority of programmers _wish_ they were working on
these interesting and difficult problems, but instead they are writing another
yet another ETL transform for an ERP system (not that there's no value in
that, but that _was_ my job, and it _was_ repetitive and dull)

So even if a Computer Science degree isn't necessary for the vast majority of
programming jobs, without that degree, you can only do one of those vast
majority of programming jobs, leaving the really interesting problems to those
with advanced degrees (or special domain knowledge)

~~~
vvanders
I'll take domain knowledge over any degree every day of the week. In quite a
few cases, we're still figuring out what the domains are or they're domains
that academia doesn't care about.

More than that it's all about how much of a self-learner someone is. This
industry is so new and changes so rapidly that if you aren't feeling that itch
to understand some new aspect of programming you're going to be left behind.
The _really_ good programmers I've seen have all been full-stack, not in
frameworks, but in a complete understanding of how a system functions top to
bottom.

Also quite a few CS people would do well to examine EE or a proper engineering
track. I've always laughed at the title "Software Engineer". Very few are,
most of what we do is just throwing something against a wall to see what
sticks.

~~~
tnecniv
What domain does academia not care about?

------
Swizec
I did 5 years of heavy CS. Never graduated.

The most important things I got were: state machines, appreciation for high
level math.

Oh and an intuitive understanding of modeling and translating fuzzy things
into easily modelable things. That part is super important.

And an intuitive understanding of how tiny spec changes turn problems from
computationally unsolvable to trivial.

But what have the Romans ever done for us?

------
chirau
The value of a computer science degree does not lie in the number of direct
applications you will encounter but rather in the school of thought and way of
thinking it molds in you.

Often, people take for granted how differently you approach problem solving
coming from a CS perspective. If anything, I have gained mostly in the ability
to break down problems into the smallest pieces possible that work together
thus reducing complexity and shaping the problem case. I can isolate core
problems and through algorithm design implementation evaluate best solutions.
I therefore wholeheartedly disagree with the notion that CS does not teach how
to reduce complexity. It does.

Above all, I have rid my decisions of emotion and solely focus on the problem
at hand. It's brutal, rough and inconsiderate at times, but it produces the
desired results.

~~~
mfalcon
I agree. The problem is the intangibility and the difficulty to estimate the
value (by an economic metric) of the degree.

Several careers have a more direct and tangible link degree-value, no one can
be a cardiologist or a civil engineer without the degree.

I've a Software Engineering degree but I don't really know if it was worth it,
I learned some valuable things but how can I say that I made a good choice
with some degree of certainty?

------
mrleinad
Can we all agree that college is about getting a knowledge foundation, a nice
degree that says you can get things done, and interpersonal relationships, and
move on already?

------
quonn
This topic comes up regularly. Yes, a CS education is not enough. You also
need to learn programming. You also need to build systems and learn to think
about how to build others even more. But for me it has been very useful almost
daily and it can make the difference between being on solid ground vs. being
out of your depth and sometimes not even knowing it.

------
tnecniv
>I highly doubt most programmers need to know how to do formal proofs of
algorithms, determine asymptotic complexity of algorithms, or even know that
much about data structures.

Indeed, but I believe that having a solid foundation in theory is important.
People have spent a lot of time coming up with ways to reason about common
problems, and you don't need to reinvent the wheel.

Additionally, while many programmers can get by with skimping on theory, your
mathematical knowledge tends to limit problems you can tackle. While you might
be able to get away with making some CRUD application without applying any
complicated math, you will have a hard time trying to write code to localize
your robot with SLAM. Knowing theory only opens more doors to more interesting
problems.

~~~
rickycook
sure, but the maths involved with building a robot is not the same as doing
user analytics etc. better to assume no knowledge when entering those fields,
and learn on the job otherwise you learn a whole load of stuff you'll never
need. you can't be a senior in a field you know nothing about, so these jobs
will always have someone that knows that stuff and can pass on their
knowledge.

i can say for fairly certain that 90% of the engineering maths i did at uni
will not be applicable to me in my career, and there's plenty of maths that
would be applicable that i wasn't taught. considering that was a 6mo unit (and
ignoring the fact that it was easily the one that burned me out fastest),
that's a lot of wasted time.

~~~
tnecniv
The engineering math curriculum has issues, yes, I agree. I thought a lot of
topics were taught in the wrong order and their usefulness was often not made
clear until much later. At this point, though, I think I've used techniques
from pretty much every class (even ones I thought were irrelevant when I took
them) I took.

But really, the engineering math curriculum has (or at least should have)
three purposes. The first is to teach you logical reasoning and problem
solving -- critical skills. The next is to provide you with a toolbox of
techniques you can call upon to solve common problems in your field. Finally,
the curriculum should provide you with the mathematical maturity to acquire
the new mathematical tools that you need.

The last point directly relates to your second paragraph. I don't know very
much about data analytics. If I (somehow) got hired into a big data role, the
senior engineers will lack both the time and the desire to sit me down and
give me the background on statistics, machine learning, etc. that I would
need. However, because I have spent a lot of time studying other mathematical
topics and have a background in linear algebra, probability, etc., they can
point me at good sources and I can learn myself. If I came in just knowing
single variable calculus from high school I would have a rough time.

------
nikdaheratik
I have very mixed feelings about this article. For one thing, there are a
couple of different kinds of CS programs. The basic division is, or used to
be, whether it was more Math or Engineering heavy. In fact, some schools
attach the program to a BS in the Math department and others in the
engineering with more exposure to EE and Computer Engineering. Neither of
these are necessarily helpful for becoming a programmer in today's market, but
they do generate very different experiences.

The biggest benefit for me was the complete understanding and model you get of
the entire computer. How it works, what theories it is based on, why things
are the way they are (in terms of the Turing model, the way microprocessors
work, etc).

I don't believe this knowledge is helpful from a software engineering point,
and I may have been a better programmer if I had spent those years learning
more about how to work as a team and how to solve real-world problems.
However, I do feel that it has allowed me to switch between different fields
of programming without completely being thrown for a loop. It has allowed me
to understand the issues that crop up when something goes wrong on a much
deeper level, or why problems crop up on one part of "the stack" that I may
not have understood had I focused merely on learning how to program. These are
personally valuable to me, whether or not they may have been more valuable to
my career.

~~~
kctess5
Despite those benefits you list, you still don't think that knowledge makes
you a better software engineer?

I definitely think that understanding the lower levels helps me write better
software, largely for the reasons you list.

~~~
nikdaheratik
I do think it makes you a better engineer, but I also think that the first
year or two of working in a group with other developers taught me alot more
about becoming a good software developer than alot of what I learned in
college. You learn more about how computers work in Uni, but you learn more
about how software development groups work by doing software development.

------
wolframhempel
Isn't the tricky bit that a computer science education is in fact an education
in the science of computers (no surprises here), yet what most people study it
for is an education in their usage?

Maybe what we actually need is a separate field, e.g. "practical computing". -
which, I accept, would lend itself less well to University education which we
have come to expect as a prerequisite for better paying jobs.

~~~
p4wnc6
'software engineering' is a degree program in itself in many universities, and
it is a curriculum more focused on pragmatic, often even specifically
business-focused, project delivery, from coding in a wide range of business-
heavy languages to theories of software lifecycles and team management.

That said, anytime I've met one of the hard-working students who opted for a
more math and theory heavy CS program instead of an SE program, that person
has been able to software engineer and project manage circles around the
people who specifically studied software engineering and project management.

------
euske
As for testing a prospective programmer, what I consider an ideal test would
be something like this:

1\. Pick the three most important lines out of this 100 lines of code.

2\. Explain why they're important to those who're not familiar with the
problem at all.

3\. Rename its functions and variables to achieve maximum consistency to you.

4\. Optimize the code for maximum efficiency.

5\. Optimize the same code for maximum maintainability. (assuming the code
will be used for 30 years)

~~~
mdpopescu
You start with a subjective criteria? Ouch. It reminds me of the time I had to
do some work for a factory... _every_ department was telling me how theirs was
the most important work - with arguments.

I can make an argument for even a "write to log" line as being extremely
important when something goes wrong; I have no idea how I would pick three
lines out of a hundred.

~~~
tnecniv
If I were giving the interview (not OP), I wouldn't care which lines you
picked, just how you justified it.

------
aradhya97
"Whether someone can or cannot solve some cute algorithm problem in a high-
pressure situation tells you nothing about that person's ability to write
solid, clean, well-structured programs in normal working conditions."

It sure tells SOMETHING.Ofcourse there are better ways to evaluate a person as
a programmer but I hate it when people claim something without basis.

------
InclinedPlane
Annoyingly, there isn't much in the way of change on the horizon for this
problem, people seem to like things the way they are.

The problem is that there is no good formalized educational standard for
software development training. So instead Computer Science gets shoehorned in
as a substitute. This leads both to sub-standard Computer Science degree
programs from a pure CS perspective (because they are primarily just trade
school educations in disguise) which are even worse as regards to training for
Software Engineering. CS is very algorithm and data structure focused, which
is good in moderation for dev training, but they usually delve into realms
that are not useful even in the "well it's good to have a broad knowledge
base" sense. Moreover, CS doesn't typically touch at all on the many practical
skills, and their fundamentals, needed to be a good dev, ranging from
development cycles and styles to QA and testing fundamentals to source control
use and management to proper composition and componentization of software to
refactoring and dealing with legacy code to deployment strategies and
techniques and then on to familiarity with actual operational systems related
to all of these things. Each of those topics has sufficient depth to be an
entire course or series of courses, yet they are frequently only barely
touched on in CS programs, and sometimes they are ignored entirely.

I've been in hiring loops numerous times, and one of the quickest things I
learned about hiring in tech is that a CS degree on a resume means basically
nothing, there is almost no correlation between having studied CS in college
and being able to code at even the most basic level. Unfortunately, I don't
foresee much change in the future on this problem. CS is still a prestige
degree (a 4-year degree in one of the coveted STEM fields) and I have a hard
time seeing a legitimate Software Development education fitting in the mold of
either an arts or sciences degree program at a liberal arts college.

~~~
bjz_
One interpretation of CS (that I personally subscribe to) is as a subject
about the theoretical and mathematical understanding of process and
abstraction. Computers and software are just the medium. Taken that way, it's
an important subject that should be supported and protected. But but students
and employers seem to be expecting CS courses to be an industry training
program about specific technologies and practical programming. This leads to a
confused mess where nobody is speaking the same language, and limited
satisfaction for all parties.

------
meow_mix
I think the author has accidentally replaced the word "useful" with "being a
good programmer".

Sure, most computer scientists become programmers, and CS degrees don't
necessarily translate into programming skills. However, getting a "computer
science" degree is not the same as getting a "programming" degree and I don't
think that its "usefulness" should be determined by the skill someone has as a
programmer after getting the degree.

The reason getting a CS degree does not make someone a good programmer is
simple: * A large percentage of the courses you will take will be general
education (about 20% in my colleges case) * Another large chunk will be in
mathematics (say another 20%) * One more sizable chunk will be "lost" to CS
theory and "row-based" information (remember writing round-robin schedules by
hand, or verbally explaining parts of TCP in class)?

Leaving us with maybe 40% of classes having some sort of programming lab. And
if your like me you'll specialize in machine learning, will will allow for
even less exposure to things like the gang of 4 patterns.

However, the flexibility of a CS education is much much greater than if I had
just been programming for those 4 years. If I decide I'm more interested in a
career in IT security or data science, my courses will have useful. I think
that someone who had instead just been programming Java and Rails web apps for
4 years (like I do now) would have a much harder time transitioning into those
(potentially higher paying) fields as the market evolves.

Also it's important not to discredit general education. Being a strong writer,
speaker will always help you. Knowing some history and geography will keep you
from sounding like an idiot when you talk to people from other countries.

A college education is not the same thing as a trade school and shouldn't be
compared to one.

------
googleir
Ater working with Storm and reading Nathan Marz's Master thesis, I got to say,
he really is one hella of a developer. He was also very responsive on the
questions I asked him on Storm's forum. I take Nathan's advice at its face
value cause he is the most well-rounded computer scientist you can ever find.

~~~
ontoillogical
What's his thesis about? I can't find it.

------
tn13
If any young person is reading this I would caution them not to take such
advises blindly. A "good computer science" education beats "no formal
education" any day for an average person for the simple reasons.

1\. Success in tech industry depends as much on your peers as much it would
depend on your IQ. Knowing bright, well established people in tech industry is
invaluable. Such connections are often built when you go to schools like
Stanford, MIT etc. or even a reasonably good college.

2\. Having a good college name on your resume is going to open many doors for
you. You will realize that as a MIT grad when you talk to investors about
cutting edge research in a specific field would be far more credible.

3\. CS degree will not teach you a lot about how to code, build great
products. Not more than a passionate coder writing code in his basement. I
admit that.

------
personjerry
> The vast majority of what a programmer does, forming good abstractions and
> avoiding complexity, is almost completely untouched by computer science
> curriculums.

I feel like in the course of working on large projects such as a parsing,
lexing, compiling program, a student inevitably touches on these topics. And
certainly when working with template code (such as in an Intro to CS class),
they can see how nicely it was structured for them.

However, I agree with the sentiment that it seems like these topics are not
directly addressed by most curriculums. At the same time, from my experience
it seems like these ideas are applied very differently in different contexts
(such as different platforms and languages), so a college class would be more
abstract in teaching them. Perhaps it would be effective if they did some
examples while teaching these ideas.

------
guylepage3
Some very valid points made in this post. Is CS valuable? I believe it is.
I've witnessed the difference first hand in our startup but then again it's
"hard tech."

The part I question is, the percentage of programmers that will work at a
"hard tech" company is so small that, unless the company you're working at is
a hard tech company, then there is no relevance to onboarding someone with CS
skills. It does not diversify the team. Diversification in a team is of high
value. Most engineers want to hire others engineers so that they have
something to talk about. But that's a comfort thing.

Long story short, soft tech companies should only have one or two hard tech
engineers on their team especially in the early days and only test at the
skill level required when onboarding.

------
nikdaheratik
Another thing that bothered me about the article, although it did make some
good points, is that it just assumes that the choice is either four years of
employment as a programmer at some level or four years of uni. If you're
trying to get a job as a developer as an 18-year-old with a fresh H.S. diploma
and maybe some tech school credits, your competition isn't _other_ H.S.
diploma carrying developers, it's a 22 year old graduate with a CS degree.

If you live somewhere that you can get a job in the field directly out of High
School, that's all well and good, but it's alot harder for a variety of
reasons than someone who has finished a degree. Which is one reason why so
many people go that route.

~~~
lsc
>If you live somewhere that you can get a job in the field directly out of
High School, that's all well and good, but it's alot harder for a variety of
reasons than someone who has finished a degree. Which is one reason why so
many people go that route.

that is key; there is a strong argument in favor of jumping right to a
programming job if you have the opportunity... it's what I did. but I got
lucky on a bunch of fronts. (parents in the industry, timing, etc) - I mean,
if you have a programming job _right there_ it's hard to argue that you should
go to school instead. And in my case, the job was available in large part due
to timing; it would have been way harder to get a job in 2001 than it was in
1997, even if I had gotten a degree meanwhile.

I guess the other thing to consider is how hard it is for you to go to school
later. I mean, if the parents are willing to foot the bill for your education
now and won't be willing a few years from now? that's a pretty big thing. I'm
slowly working on getting myself into college now, and it's harder in some
ways, because the typical application process was not designed for me, but
easier in others, because things like money aren't a huge problem anymore, and
I am so much more self-disciplined.

I'm too early in the process to tell you if it's easier or not (I've got
either 9 credits, or 0, depending on how you count) - but it's certainly
different. It is... difficult to pay people to

But, in general, if you have the opportunity to get a coding job right out of
high school, and nobody is paying for your college, take the job. If someone
is paying for your college and you don't have the opportunity to get a coding
job out of high school, go to college. The optimal course of action gets foggy
if you have both opportunities or neither.

------
Spooky23
I didn't see university as a occupational training facility, and I was torn
between majoring in CS or history.

What I got out of my CS program was... discovering that figuring out how
systems and things worked was interesting to me. I also found the prospect of
something closer to engineering was a better path to me than academia,
teaching, law or some other path.

In terms of the relevance of specific coursework, I can't say that I spend a
lot of time with advanced math or some of the other topics, but I learned my
way around a UNIX system, got my first taste of large scale networking, and a
bunch of other things.

What I learned most about in school was me.

------
umanwizard
Doing well in a STEM degree like CS or Math is valuable for two reasons:

(1) it usually, but not always, implies that the candidate has at least some
coding knowledge; and,

(2) [most important] it is a good proxy for logical/mathematical intelligence.

As long as IQ tests for employment remain a legal grey area, employers will
continue using STEM degrees as a filter.

The claim that (2) is the most important is anecdotal, being based on my own
experience: I have a degree in mathematics, which doesn't really imply (1) to
nearly the same extent as CS, and I have never felt it made it more difficult
to get job interviews.

~~~
qudat
That sounds like a round-about way to train, prepare someone for a profession.
The CS program is an artifact of how slow universities are to adapt to the
needs of a growing industry. I would much rather see software development slip
into an apprenticeship program rather than rigged up to a program that was
never intended to train engineers.

~~~
umanwizard
Well, the CS program at most "normal" (non-elite) schools is already pretty
practical and engineering-focused, AFAICT.

------
napperjabber
It's always fun being on a project and having the CTO say he's disappointed in
you because you cannot 'back-sort a double linked list.'

Fun times trying to distract them from their own arrogance.

------
spraak
This analogy is really good:

> Whether someone can or cannot solve some cute algorithm problem in a high-
> pressure situation tells you nothing about that person's ability to write
> solid, clean, well-structured programs in normal working conditions. This
> practice is akin to hiring pilots based on how they do on an aeronautical
> engineering exam. That knowledge is relevant and useful but tells you little
> about the skill that person has for the job.

There's a lot of talk and debate about whiteboard interviews and this, for me,
succinctly sums it up

~~~
shasta
Is the analogy really that good? A pilot will never be called upon to engineer
a plane. Lots of good "hackers" will get stuck if they have to design an
algorithm.

------
stepvhen
I value my CS degree, but I also agree with the author. I don't think
recruiters should ask for a CS degree, or focus on applicants having a formal
CS education. There needs to be an simultaneous shift in the industry and in
academia that allows for software engineering and computer science to be
distinct diciplines with distinct goals: SE gets you into the industry, CS
gets you into research. Most other sciences have their envineering partners,
and technology should be no different.

------
cageface
_The vast majority of what a programmer does, forming good abstractions and
avoiding complexity, is almost completely untouched by computer science
curriculums._

It's also almost completely ignored in the typical programming job interview.
Which is why when I interview people now I'm most interested in looking at
code they've already written, and asking them to break down an application
description into a set of data & interface abstractions.

~~~
dmoy
How do you look at code written if it's all confidential and owned by their
previous employer?

~~~
cageface
If the candidate can't produce any code samples at all then I give them an
example app spec to decompose into abstractions.

------
peterkshultz
The students you really want working for you are those who went through the
rigor of a theoretical CS curriculum while also indulging a more practical
skill set. Such a skill set can be honed at hackathons, for example.

It mustn't be forgotten that a theoretical curriculum teaches discipline to
learn just about anything--if you can learn complexity theory and algorithmic
proofs, chances are you can learn to create a CRUD API.

------
adwhit
I was just thinking about this today, after I ran out of time in an online
interview where I had to write code to correct the formatting of various
strings (add spaces, capitalize etc). I was given 20 minutes.

I thought, I would have nailed this problem when I was looking for my first
developer role, when I knew precisely how python regexps worked. Now of course
I just look them up when I need them, which is never.

------
caseymarquis
Seems silly to pay thousands of dollars to read through some books at a slow
pace.

My employer wants to pay me to get a bachelors in ee or cs (have half of one,
but dropped out when it was clear I couldn't afford to finish), followed by a
masters/phd, but it's only tangentially about the 'education'. It's all about
networking and being able to wave around credentials.

------
anupshinde
CS education is not useless, but less used. And it is also used-less by the
same people who teach it. There are exceptions - but that number is way too
small than it should be.

If someone wants to learn coding or programming - screw the CS degree, there
are better options. I know CS degree holders who can't code more than a few
lines or can't debug a large program. And there are better programmers who
don't have a CS degree. YouTube will teach better programming than a CS degree
class.

Apart from programming, if one "also" wants to learn the mathematical aspect
of CS and want to work on core-stuff, go for a CS degree. And those skills do
not come easy from some tutorials - a academic rigor is probably the best way
to earn it. But if you use the O-notation at some jobs - you could become an
outcast in the team.

When I got into a top college for a CS degree, I had high hopes from it. For
the first 1.5 years, I wanted to quit, quit and just quit. It was hopeless -
they were teaching few subjects that I was way better at. But for some reason
they would not allow me to just give exams and get promoted. I already knew
programming, patterns, electronics and even dealt with basic robotics before I
joined college. For one example - when they started teaching operating-
systems, my expectation was that they will at least give a hands-on on writing
a pretty basic OS. No - they were just doing theories. Ultimately, I ended up
writing a pretty simple version of a custom OS without any mentoring (and used
Google) - because the professors had never even written a boot-loader to start
with. I also ended up helping weaker students get upto the mark. In one of the
semester assignment evaluations, I was told by a senior professor " you copied
programs from the internet - how come they are so well written". I lost trust
in them.

I did learn some stuff in the later years and came to peace. While I knew
programming, I did not have a strong math background - stuff like
probabilities, numerical methods, theoretical computer science and bit of
advanced algorithms were the things I learnt and explored further. The most
important thing was getting introduced to AI which turned out to be a huge
area of interest for me.

However, all of that bad experience has turned me sour towards academia in
general and I do not recommend spending a lot of money and more-important-time
learning "used-less" things - unless you are expecting more than programming
in CS. And when it comes to CS, the learning never stops.

------
doggydogs94
In my years working in the computing field, I have found that individuals with
a Computer Science (or related) degree to be much more adaptable to emerging
technologies. Individuals without a degree have proved to be excellent at
yesterday's problems, but they have a difficult time moving past their initial
expertise.

------
stillworks
So basically the guy is saying there IS value, but limited. And in a fairly
neutral stance about a rather sensitive topic, he gets to advertise his book
as well.I guess with degree from Stanford, he may have written a program to
generate that article with a target sentiment and then insert the plug ?

------
Ologn
If you are not a DBA and did not get a BSCS, ask yourself this question - when
people speak of relational databases - what is a relation? Then look up the
answer, which is rather simple (don't reply with it here, unless you rot13 it
or something). Maybe ask engineers with a few years experience. Were they
right?

Where does the concept of regular expressions come from? Can you explain why
you can't use regular expressions as an all-purpose HTML parser?

I took 1 1/2 semesters on critical sections, race conditions and such. I deal
with these problems all the time, and have seen much code where people either
never learned about it, or didn't learn it properly.

I had the idea once to hash a short list of small numbers as a Goedel number.
Looking around I see the idea was not original (in other places I use
triangular numbers etc.) I would never have known about those without CS.

Yes you have to keep learning more. It is a good foundation to start from
though.

------
xivzgrev
Ive heard the value of comp science being exposed to various algorithms but im
surprised that knowlege isnt an advantageous starting point? I think in long
run it wouldnt matter since if you dont have exposure you will eventually pick
up

------
smegel
> and avoiding complexity

God it's refreshing to see someone actually put that as one of the primary,
principal activities of software development.

Figuring out how to do a hard thing in a simple way is not simple, it's
actually really hard!

