
Let's Not Call It "Computer Science" If We Really Mean "Computer Programming" - vetler
http://codemanship.co.uk/parlezuml/blog/?postid=1109
======
tseabrooks
So, I agree with this article in spirit. Lots of programmers could've
benefitted from a more programming centric approach rather than a CS approach.
However, this bit gave me pause.

" I cannot tell the difference by watching them develop software."

I can't disagree with this more. While this may be true of students who were
middle of the road students in CS programs. I can't definitely tell the
difference between people with a formal cS background and those without in my
daily work. I work with a handful of extremely talented self taught
programmers but there is definitely a difference between the way they attack
problems and think about coding versus the CS folks. Not to even mention the
programmers I've worked with who have EE degrees. Those guys think about
things and code in an entirely different third way.

All of these people / approaches are necessary... and none of them are better
than the others... but pretending like they don't do things different because
you want to feel like you don't need a CS degree is disingenuous.

~~~
irahul
Add me to the list of people who are curious and don't agree at all with your
claim that people with CS background approach regular problems in a
fundamentally different way. The only times when the CS folks' approach differ
is when they can reduce the unknown to a known - finding the least wasteful
way to cut raw materials(knapsack); modelling problems as graphs/trees and
then applying well known, efficient algorithms etc.

From what I have seen, the ratio of non-clever to clever code in a typical
software is 80:20(I am being conservative. It's more like 95:5). The 80%
doesn't need cleverness - it needs a lot of discipline and proper
abstractions. CS doesn't teach you discipline or proper abstractions. Most of
the projects in a CS curriculum are small, done in small teams or solo and are
thrown away as soon as the course requirements are met. The higher level CS
projects exist just to prove a point(research), or doesn't exist at all except
in theory.

~~~
SomeCallMeTim
Something that no one is acknowledging here is that a "CS" program isn't a
uniform thing, and that people who come out of a "CS" program have not
uniformly learned what it did have to teach.

I never took the full CS program, but I hit most of the core classes while
studying Cognitive Science. By far the most valuable class sequence I took was
compiler design; learning HOW a compiler takes code and turns it into assembly
language was a revelation to me, and I was able to "see" the relative
optimization of algorithms much better after taking that course.

Will I ever need to write a compiler? Probably not, though I have written
several small interpreted scripting languages/DSLs. But taking the class
expanded my mind in a way that grants me insights a LOT of self-taught
programmers I've worked with never seem to have.

Does everyone who takes a compiler design class gain those insights? No,
certainly not. It's possible to muddle through just about any class without
REALLY understanding it and pass -- some more easily than others.

The weeder classes in CS at my college were tougher than many, though,
including one that actually required each student to write non-trivial
programs in assembly language.

But back to your comment: It's not that all code needs to be "clever." A
friend of mine once CRITICIZED a piece of code for being "too clever," and he
was right. "Clever" isn't a goal. But sometimes the straightforward approach
made by someone who is good, but self-taught, isn't as good as the equally
straightforward approach by the self-taught AND CS-educated programmer.

>The higher level CS projects exist just to prove a point(research), or
doesn't exist at all except in theory.

Real higher-level CS projects frequently involve interesting graphics
research, which (also frequently) ends up working its way into commercial game
development.

I don't have any clue what you mean by "doesn't exist at all except in
theory," since even if you're building advanced data structures that you could
otherwise pull from a library, you're building something "real" that could
actually be used.

~~~
irahul
I think you are arguing against a claim I didn't make. Your first half of the
post about compiler classes and other tougher courses are giving me the
perception that I somewhere claimed CS education isn't useful. I didn't make
that claim. I was responding to the claim about CS and non-CS people taking
different approaches to problem solving.

> But back to your comment: It's not that all code needs to be "clever."

By clever, I meant code that isn't routine. My definition of clever will
include dynamic programming, reducing NP complete problems to known
algorithms, writing a parser which takes xml as input and produces python
dicts("writing a parser is simple" you say. But compared to the rest of the
code in a typical project, it does count as clever)

> But sometimes the straightforward approach made by someone who is good, but
> self-taught, isn't as good as the equally straightforward approach by the
> self-taught AND CS-educated programmer.

It's not me who was making general claims. In my post, I did point out that
about 20% of the time, CS background is very useful. The OP made the claim
that CS and non-CS approach differs in general, which I don't think holds
true.

> Real higher-level CS projects frequently involve interesting graphics
> research, which (also frequently) ends up working its way into commercial
> game development.

"Real higher level CS" -> <http://en.wikipedia.org/wiki/No_true_Scotsman>

You don't get to choose what real CS research is.

CS researchers have a lot of commendable qualities, but that requires a
different set of qualities than a regular software development project, and CS
research doesn't hone their skills as far as regular software dev is
concerned.

Look at the code from the academia. More often than not, either there is no
code(hence the comment "doesn't exist") or it's spaghetti. I don't see how
that helps you write code for the regular projects where you work with teams,
code isn't thrown away and you are expected to maintain it. Now, I am not
saying CS researchers can't work that way - I am saying what they do for
research doesn't help.

------
vbtemp
#1 (My Ad-Hominem Attack) Who is this guy? Why does he go on to trash comp sci
if he never studied it?

#2 "Of all the mathematical sciences, computer science is unquestionably the
dullest. If I had my time again, despite discovering just how much I love
writing software, I still wouldn't study computer science."

I stopped reading after this point. Why does he state as a matter-of-fact that
computer science is unquestionably the dullest? It's actually quite
captivating and quite profound. Cryptography, machine learning, computability
theory - all leading ultimately to the question of what, exactly, is knowledge
and what can we know.

I can't stand the broader attitude of this, which essentially boils down to
"I'm a hotshot programmer therefore anything academic or computer-sciencey is
stupid". A lot of people in general could be a little more humble and
recognize the fact there's a lot of things that they don't know they don't
know.

~~~
SoftwareMaven
Starting with your ad hominem, I think you took exactly the wrong things away
from this article. Regardless of his writing style, his points are dead-on:

1\. Computer science doesn't teach programming (with the corollary that
computer scientists specifically don't want to teach programming).

2\. Most people going into computer science want to learn programming.

3\. Many people get fed up with the rigors of _computer science_ (because they
recognize it isn't teaching them programming) and move on to other pastures
instead.

I've always believed that there should be a "Software Engineering" curriculum
in the engineering department and a "Computer Science" curriculum in the math
department. That we blur the lines hurts both fields, as programming students
demand more programming in CS, at the expense of the underlying theory; and
math students demand more theory, at the expense of being able to actually
code up a solution.

At the end of it all, though, there is a strong value for _some_ computer
science in all programmers. It is amazing how often solutions get re-invented,
though it happens far less now with the combination of open source and Google.

~~~
cantankerous
I agree with the sentiment that software engineering isn't computer science,
but I disagree with the sentiment that software engineering is a discipline
worthy of note on the same scale that we afford to, say, electrical
engineering, civil engineering, or mechanical engineering. To date, software
engineering is still largely a collection of (fairly subjective and
contextually-sensitive) best practices.

Software Engineering is better off if it's treated as a trade like being an
electrician or a carpenter (which it largely is through on the job,
experiential training being as emphasized as it is). Take what you absolutely
need from the theory, and learn from those in the know to become a respected
practitioner.

Software engineering is a trade without a guild.

~~~
beersigns
2 years after I graduated with a BS in Computer Science from the LAS College
the Engineering College introduced the Software Engineering program. It was a
joint effort between the ComS & CompE departments. Becoming increasingly
common.

~~~
cantankerous
My institution has introduced similar programs. I question their utility in
the face of the cost of college and the shelf-life of what you can learn in a
4-year classroom setting (not to mention general ed requirements).

------
alan_cx
Here in the UK, when I did my Computer Science degree, about a third to a half
was programming. The rest of it was basically hardware and mathematical type
theory. There was more but the point is, it covered computing in the whole.
How CPU's actually work, how data is organised on a disk, what is actually
going in in CAT5 between cards, etc. AI, Databases, servers, etc.

The was another course, CS Software Engineering, or "programming" for the rest
of us. They did our programming stuff, and then some. The two courses sort of
forked. Programmers did more programming, we did electronics, hardware etc.

Funny thing was, the CS students became better programmers than the CS-SE
people did. I think it was because they understood computers, and not just
programming. Next odd thing was that the CS guys often become programmers, and
the CS-SE guys ended up in support roles. Even when the CS-SE guy were
programmers, they worked in herd like environments, where as the CS
programmers ended up on some very interesting projects, like avionics.

Later on, when I did some support roles, I found that the programmers knew
less about computers than secretaries. Web designers/coders were worse.

Not saying this is any sort of trend, and I did do my degree 15 odd years ago.
But I found it interesting.

~~~
antoko
Would be interested to know the course requirements for the CS vs. CS-SE

If they had more relaxed A-level grades for the CS-SE students (or it was
under-subscribed and filled through clearing) then the students on the course
were just a lower standard of student rather than the course itself being
deficient.

------
portmanteaufu
I follow the author's point, but I feel as though he's as guilty of dismissing
valuable knowledge as the academics he condemns. I recently completed a
graduate degree at a university that offered both a "Computer Science" program
as well as a "Software Engineering" program. This is only my opinion, of
course, but the difference in depth of understanding between the students in
each field was very stark. The SoftE students dedicated several semesters to
development best-practice-type classes: generating JavaDocs, curating JUnit
tests, writing and revising good requirements, and UML modeling. They would
essentially walk away from their program as expert Java users with little to
no idea how Java itself (let alone the machine underneath) functioned. The CS
students knew the inner workings of a computer program from code to compiler
to stack, but would have to learn the bookkeeping side of development on the
job. Both paths have their strengths and weaknesses and you've got to learn
some degree of each to be a meaningful contributor.

------
tomstuart
I agree that a lot of people only need to learn how to program, but I find
computer science genuinely fascinating and mind-expanding, so it's a shame
that more programmers don't feel like they're able to access it, either
because of unfamiliarity with formal mathematics or a justifiable aversion to
the "category theory or GTFO" attitude.

<plug> Which is why I'm writing <http://experthuman.com/computation-book>.
</plug>

~~~
zerostar07
I have always considered computer science to be information science and be a
part of mathematics and not a separate science. But then again, as a physicist
i might be wrong. It's not meant to be diminutive at all (i am after all a
programmer) but i consider programming to be a tool, like maths (and consider
the two to be inseparable).

~~~
duaneb
I have always considered mathematics to be a part of philosophy and not a
separate science.

~~~
eru
It's all down to definitions.

You could argue that mathematics is philosophy done right: With rigour.

~~~
duaneb
Well, if you take attitude, then you'd have to reject all science because it
relies on induction.

~~~
eru
Oh, nothing wrong with induction. Just with waffling around.

~~~
duaneb
I think Hume would disagree.

------
dxbydt
fwiw, an opposite take, from a decade ago.

at my cs pgm, the assistant professors were supposed to make a presentation on
day 1 so the grad students could make an informed decision which prof to work
with, which subjects to sign up for.

the software engg prof was a glib, entreprenurial hotshot who said "my
students have been placed at netscape, sun, microsoft, oracle". he talked
about industry partnerships, internships, 1000s of lines of production code,
maintenance, unit tests, refactoring...

the db prof said "i have personally placed all my students in oracle". he
talked about rdbms, schemas, superkeys, boyce codd normal forms, how
"everything was ultimately data, so you'll never be jobless if you became a
dba".

the algorithms prof was a shy lanky dude who went straight to the blackboard
and wrote "computers are to computing what telescopes are to astronomy". at
that point none of us knew who dijkstra was, so we just looked at each other
like "huh?". he then turned to us and said "99% of cs is about searching and
sorting. sort algorithms. search algorithms." then he drew a table which
listed performance of quicksort, shellsort, heapsort, insertion sort, and two
algorithms of his own invention. he talked about Big O notation, theorems,
discrete math, taocp. our heads were spinning, and when he left there was a
huge collective sigh of relief.

at the end, the student breakup was like 49-49-2. So only 2% of the class
signed up for algos. Like most indians, I come from a poor household & my main
concern was coin. So I signed up for Software engg. After 1 month, I dropped
the course and went crawling back on my knees to the Algo prof, and begged him
to take me on. That single decision changed my whole life. In that 1 month, I
had found out something about myself - that I was a royal prick. I was
personally not cut out to do scut work.I had zero interest and respect for
maintenance, unit tests, requirements & specs, UML modelling, refactoring,
waterfall method, agile, kanban...I found that whole discipline filled with
unproven subjective airheaded garbage, essentially a fad. To this day when a
recruiter mentions the word "unit tests" on the phone, I just hang up. Just
pure instinctual reflex.

It takes all kinds...

~~~
jsprinkles
> I was personally not cut out to do scut work. I had zero interest and
> respect for maintenance, unit tests, requirements & specs, UML modelling,
> refactoring, waterfall method, agile, kanban...

The world in which this is "scut work" is not the world I want to live in.

Let's be honest. You don't want to do practical, you'd rather do theoretical,
and that's fine. However, don't disrespect practical just because it isn't
your bag of chips, particularly to an audience that is _full_ of practical
engineers. I could spend all day disrespecting theoretical -- mainly because
most of those passionate about theoretical at the expense of practical make
comments like these -- but I do not, because I see theoretical as necessary
for our craft.

~~~
ashishgandhi
Are you saying people who do theoretical work don't don't it in practical
ways?

As an example, take Google's self-driving cars. Would you say the meat of
their body of work theoretical? But would say the code they (Sebastian Thrun
himself, and others involved in the project) write code that's not very
practical, readable, maintainable or without tests? I would say what they do
is theoretical work. And they write practical code for their theoretical work.

If you look at Udacity classes - I've watched Peter Norvig not Thrun's so I'll
use that as a reference - Norvig places a lot of importance for tests,
maintainability, readability and other practical things throughout his class.
I would assume the code he writes (however little now, however much in the
past) is very practical. Yet what he writes code for has a huge theoretical
aspect to it. I'm saying one can have their body of work being theoretical by
nature but that doesn't mean they don't write practical code.

~~~
jsprinkles
> As an example, take Google's self-driving cars. Would you say the meat of
> their body of work theoretical?

No.

~~~
snikolov
Would you care to elaborate? Surely most of the lines of code are not directly
implementing theoretical things, but I would say the meat of the work is
without a doubt theoretical.

~~~
arethuza
I don't know about self driving cars, but I have known people who did PhD
level research in control engineering and then went into industry (real, heavy
metal industry, like offshore oil installations in the North Sea) implementing
advanced control systems.

The estimate they gave me of the contribution of their control algorithms (the
"theoretical" part of the project) to the over amount of effort getting the
thing working was less than 1%.

------
zeteo
This is practically a high brow version of "math is hard, let's go shopping":
hash tables are hard, let's use java.utils. Yes, you can write a lot of
programs with a few primitives you've learnt in high school and some random
bits of practical wisdom you've picked from co-workers. But you're horribly
limited as well. (To pick a simple example: if you don't understand how hash
tables work, then you probably also use naive O(n^2) algorithms where O(n log
n) is possible with little extra effort.) It's a personal decision to stay
this way, but it's quite awful, for other people who may look up to you, to
quash their interest to become more educated by proclaiming higher knowledge
is "dull" and useless.

------
taybin
I was with him until he started complaining about being asked how to implement
a hashmap and how this implied that the interviewer had reimplemented
Java.utils.

How would you know when to use a hashmap and when to use a list if you don't
know anything about big-O notation?

~~~
didgeoridoo
I think he addresses this point pretty well -- you can learn good programming
practices through apprenticeship/experience without understanding the deeper
fundamentals. You won't be creating the next MapReduce, but you'll be able to
remix and hack up existing functionality in new and creative ways.

~~~
sophacles
From the other end though, this can result in a lot of cargo-cult programming.
"this is how to do it" can create a ton of redundancy (the bad kind) if the
underlying mechanisms are not understood sufficiently.

~~~
beersigns
Even having the underlying ability to understand something sufficiently
doesn't imply you'll automatically do so. There are plenty of times even a
properly educated person on the subject matter at hand will miss opportunities
to apply their knowledge. Recognition of a given scenario is a test of your
analytic ability, not sheer know-how.

------
rlpb
"Of all the mathematical sciences, computer science is unquestionably the
dullest."

Really? I find it the most interesting. Which is, I think, what led me here.

~~~
alecbenzer
Sigh.

I keeping seeing all these cs vs programming articles. I'm really waiting for
a "fuck just programming, cs is fucking awesome" one, because all the ones
I've read so far sound like "haha, stupid math nerds and their cs. just learn
to program" (a bit of mis-characterization of this article, maybe, but I get
annoyed when people say something I like is "unquestionably" dull)

~~~
RegEx
Knowing HN, someone will surely deliver, and the front page will have 4-6
variants of "Why you should/shouldn't learn computer science"

~~~
alecbenzer
After I wrote out "fuck just programming, cs is fucking awesome", I
immediately thought it sounded like a good name for a blog post :)

Is my hipster showing?

~~~
eli_gottlieb
I've been mentally composing a blog post entitled, "Programming is hard, which
is why I don't want to do it" about the differences between "real programming"
and computer science. The thesis is that "real programming" involves solving
problems that are _inherently_ simple but have _loads_ of incidental state and
details to mentally keep track of, whereas computer science involves solving
streamlined, semi-pure instances of _inherently hard_ problems.

I prefer computer-science because I don't like loading five windows and 18
tabs worth of incidental state into my working mind just to get any work done
at all, but I greatly enjoy cutting away every impurity and irrelevant detail
to forge a creative solution from the ore of a truly difficult problem.

~~~
lookACamel
Please write this blog post out in full because it sounds exactly like what
I've always felt but haven't been able to express properly.

~~~
eli_gottlieb
Done and submitted to HN.

~~~
lookACamel
Thanks. I really think the difference you've pointed out is something more
people should discuss, instead of implying that CS is just like
programming(coding) but with more math.

Instead most people focus on how programming isn't CS enough, or how CS isn't
real-world enough and they miss or gloss over the fundamental difference
between the two in regard to the type of cognitive abilities required.

------
jes5199
I interview a lot of people who want programming jobs.

What I find is: almost nobody can program, and almost nobody knows basic CS
101 data structures.

It does not matter if you are a self-taught programmer with ten years of
experience in the best companies, odds are that you cannot solve a trivial
coding exercise.

It does not matter if you have a masters degree in Computer Science, odds are
that you cannot successfully build a tree structure.

I have no idea how these people keep their jobs or how they graduated, but
this is the norm. People who can do CS at all, and people who can code at all,
are both rare. Or at least, are rare in the pool of people applying for work.

~~~
FreebytesSector
If a person is a self-taught programmer with ten years of experience working
in a good company, then you are obviously programming for that company in a
sufficient capacity even if you are unable to solve puzzles offered up by
human resource managers that found them on Google by typing in "Questions for
Programming Interviews." Programming is not about being able to solve brain
teasers. Programming is about being able to deliver quality code. If the
language handles most of these data structures for you or if you have used
them before without actually considering it, then you obviously know their
importance even if you cannot put it into words under stress. Do not degrade
people that cannot repeat verbatim some useless information they read in a
book or solve brain teasers in minutes (unless they had already seen those
puzzles.) Being able to work hard, clean, in a team, and supply a functional
product on time according to specifications are the most important traits.

~~~
papsosouid
You are the only one who said anything about brain teasers and puzzles. The
parent lamented the fact that so many programmers can not solve basic
programming problems. Fizzbuzz for example. If you can't write fizzbuzz, you
are not qualified for a programming job. It has nothing to do with computer
science, or brain teasers people googled, and everything to do with writing
actual working code to accomplish a trivially simple goal.

~~~
FreebytesSector
I had to look up "FizzBuzz" to know what you mean, but you are correct. (I
have actually been asked to write programs like this, and this is great even
if it is minimal. I think the questions may need to be a bit more complex than
this, but at least it is possible to solve in one sitting.) Asking an
applicant to write simple programs like this would be good. Or, if the person
is a front-end JavaScript developer, you can ask them how they would handle
thumbnail mouseovers to display larger versions of the images in a separate
div. Things like this are fine and have purpose. Asking a database
administrator about the difference between joins makes sense. Another question
might be how would you write a class to represent a deck of cards including
methods for shuffling the deck. In comparison, sometimes you will have
technical questions thrown at you that have no real world applications or
literal brain teasers, and I think those types of questions are pointless.
There is a difference between asking programming questions and asking
programming puzzles, and I wanted to voice the opinion that puzzles should not
be misconstrued to the point of suggesting that people cannot program because
they cannot solve them.

Real programming projects are best. I think one of the best methods would be
to give a person a reasonable assignment that should only take a couple hours
to complete (if that long) and ask for the results within a few days. (This
will give them plenty of time to clean it up, add surprising features, and
create a nice design and front-end after they are finished with it. A day can
be used for the promise of completion, and the remaining time can be used to
overdeliver.)

~~~
papsosouid
>In comparison, sometimes you will have technical questions thrown at you that
have no real world applications or literal brain teasers, and I think those
types of questions are pointless

My point was that nobody else is talking about that. You just brought that up
completely out of the blue, but in response to someone. When you reply to a
post, those of us reading the thread tend to assume your post will in fact be
in reply to the parent post, not a completely unrelated post just stating your
opinion on something else entirely.

------
bluekeybox
The rift between CS and SE is unfortunate. To use Greek terms for different
kinds of knowledge, computer science is _logos_ (reasoning from first
principles). Software engineering is _metis_ (practical, local knowledge).
They complement each other.

I suspect that the only reason there is such a rift in the first place is
because the sources of funding for people employed in CS and SE are different.
CS is funded via (predominantly) government grants. SE, clearly, is typically
funded privately.

Like China commenting on diplomatic rows between North and South Korea, I'll
say: both sides need to learn how to work with each other.

------
andyjohnson0
“Computer science is no more about computers than astronomy is about
telescopes.” - Edsger Dijkstra

------
pnathan
It's worth noting that a sharp high schooler can learn to program - many do.

It's a rare, rare high schooler that can learn how to use computer science.
Most CS grads don't.

And we wonder sometimes why our software is so cruddy.

~~~
lrem
Well, a sharp primary schooler can too... Bah, my first CS teacher claims now
that it's crucial to start in primary school if you care about getting
anywhere in IOI.

~~~
tikhonj
I don't think it's _crucial_ to start early. Rather, there's a correlation--
the sort of person to become a really good programmer or really good at CS is
also very likely the sort of person to start programming at an early age.

------
csallen
The reality is that there are many different responsibilities that,
confusingly, fall under the singular title of "programmer".

If you're the tech cofounder at a startup, you're probably focused on building
a new product that customers love from scratch. You're going to need a very
different set of skills and abilities than, say, Microsoft engineer #10000 who
is maintaining some old codebase. Or even engineer #100 at Google who's trying
to scale to hundreds of millions of people. Etc.

What's weird is that people hardly ever mention these differences. They just
say things like, "All programmers should know advanced algorithms"... or data
structures, or compilers, or UX design, etc. Even if people/companies don't
say this explicitly, they say it implicitly when they quiz for specific
material in interviews for jobs that don't rely on that type of material.

If you're exceptionally good at what you do, but you constantly hear that
you're inadequate because you don't have _this_ skill or _that_ knowledge,
it's easy to doubt yourself. But you shouldn't. The fact is there's nobody who
knows _all_ of this stuff, or even most of it. And there's no job that's going
to ask you to _do_ most of it (I say this as the sole tech person at a startup
where I have to do sysadmin, back-end coding, front-end coding, and design
single-handedly).

Just find what you love and get good at it.

------
speg
I like to think of it like this:

Scientists: Focus on developing new theories, solutions to abstract problems,
etc.

Engineers: Build tools based on the theories created by the scientists.

Developers: Build products based on the tools the engineers made.

~~~
arethuza
So where do mathematicians fall in that spectrum?

~~~
loboman
Well it's not a spectrum really, you need a mix to do anything. Scientists
need developers (or need to be developers too) if they want to do experiments
related to their theories, or if they want to push them to the world.
Developers need to understand what scientists say, or they need to be partly
scientists, to be able to build up their own small theories whenever a problem
is difficult enough. And so on.

Back to your original question, maths is an extremely useful tool both for CS
research and development. A pure mathematician is providing material for all
of CS to work. But CS people, programmers, and so on need to know some math
too.

------
sakopov
When i was in university majoring in Computer Science i had about 5
programming classes in all 4 years of school while the rest were theory,
applied statistics and mathematics. So to call it "computer programming" is a
major overstatement to me.

~~~
tikhonj
This definitely varies per school. At my university, almost all of the CS
classes involve a significant amount of programming. (For reference, all the
EE and CS people have one major.)

We have a slightly weird structure: everybody takes the same intro courses but
then you can do whichever advanced courses you like. So this means that
_everybody_ (even pure EE people) get programming courses going from Scheme
(SICP) to assembly. (And the CS people like me also have to do a bunch of EE.)
Then, most of the advanced CS courses all involve a healthy amount of
programming. The only exception is the algorithms/theory sequence, but most
people don't do all of it and _everybody_ (except EEs) do some other
programming courses as well.

I think the main difference is that the program I'm in is part of the
engineering college of a school that takes engineering rather seriously.

------
kateray
Upvoted just for the title. C'mon, value judgements of CS vs programming
aside, there needs to be a broader awareness of the difference between the
two.

------
derekerdmann
That's why schools like RIT have a Software Engineering program. Learn the
basics of CS, then go build real software with it.

------
scott_s
I agree with his main point, that we should have an entirely separate
"software engineering" major which would stress the _process_ of software
development and prepare students for being professional software developers.
Then, computer science programs would mainly be for students who wanted to do
research in computer science - much like the difference between various
engineering disciplines and physics.

But he comes dangerously close to the "computer science is math" notion that
assumes CS is just theory. It is not. I wrote an entire blog post in response
to this (surprisingly common) sentiment: <http://www.scott-a-s.com/cs-is-not-
math/>

HN discussion: <http://news.ycombinator.com/item?id=3928276>

~~~
mahyarm
My university had a software engineering and computer science majors.
Practical difference was that the SE majors took the standard 1st & 2nd year
core engineering classes, which meant more physics and DSP classes. After that
both majors took mostly the same classes. CS majors took a bunch of SE classes
and vice versa. I could theoretically go back to school take about 8 classes
and get a SE major.

------
arikrak
Great article. Most students would probably prefer practical programming
experience but they get CS degrees since that is all that is being offered at
their college. The schools meanwhile couldn't care less about what's practical
and they refuse to become a "trade school" so they instead require the
students to learn difficult and often unnecessary material. Besides making it
more difficult for the students who do succeed, it ends up scaring off many
people from a career in software development all together. I think its time
for some disruption in the education system...

~~~
JimboOmega
I can't tell you how much I learned on the job vs. what I learned at school.

I don't think the difficulty barrier is the issue.

The issue is the code you write out of school. Your sense of style is driven
by the fact that the TA would mark you off if you didn't write a comment
before your function. Your experience working with other developers is
confined to that one terrible semester long project with the one idiot and the
other guy who wouldn't do anything until the week it was due.

I don't mind so much that I had to learn QuickSort every year for 6 years or
so. I do mind that I left school not really grokking a thing about object
oriented notation. I left school thinking objects were nice and they could
have methods, and you could create other objects that got those objects for
free - maybe some sort of polygon class with subclasses "square" and
"triangle".

But in practical terms of course it was one huge main() function for most of
the "hard" problems they had us solving.

I understand not wanting to be a "trade school". Computer science _is_ harder
than that. You want people who can understand big-O notation. But teach them
how to code, even just a little bit.

------
btb
IMO CS is necessary to advance the state of the art. And while I completely
agree that many computing/programming tasks currently do not necessarily
require a CS degree, there is no guarentee that will always be the case.

As for my myself, I studied roughly 3 years of computer science before I
dropped out to work full-time, so I only have a half-finished bachelors
degree. I wont say I regret it, because the last 5-6 years of being partner in
a startup and earning a good pay-check have been fun. But I very much do
regret not being able to completely grasp all the new interesting research
papers that are coming out. Nothing is more frustrating than reading a
research paper, and knowing enough to be able to grasp that this algorithm
could improve some part of your system, but then being unable to
decipher/implement it, because one have forgotten(or not learned) parts of the
mathematical notation/background. In other words being able to see the
solution, but the solution being juuust out of your grasp. I hope down the
road to be able to compensate for this problem by hiring smarter guys than
myself that DID finish their CS degree :)

Also another benefit of studying CS is that around year 2-3 you will be
introduced to some subject matter that I at least personally am pretty sure I
would never have heard of otherwise. I found stuff like operations research
and integer programming very interesting. I havent yet have had opportunity to
use any of it in the "real world", but its nice knowing whats out there, who
knows it might come in handy a few years down the road in some other venture.

------
joe_the_user
I've studied theoretical math and computer programming.

Coming from theoretical math, I feel like the reason that computer _science_
is dull that as a part of math, it is mind-bendingly difficult.

The almost no "substantial" theories of computer science because they would
have extraordinarily encompassing abstract statements about what is possible
to compute, essentially to even think about. P =? NP is a good example. Unlike
other Millennium Math Problems, there has essentially been no positive
progress on the question. The only theorems are about how this or that tool
won't help us. And P=? NP is a simple, even "obvious" statement from the right
standpoint.

Essentially, most of the generic theories of CS are constructions to show
something either possible or impossible.

I'd wonder if you could teach CS as something like the ragged edge of
mathematical logic. Might make it authentically interesting ... for a few
people but it would probably wind-up being less practical. Sigh...

------
dons
> the UML meta-meta-model

that's not computer science; that's software engineering "theory".

Algorithms; data structures; type systems; however ...

------
JoshMock
Great article. This expresses better than I ever could have at age 20 why I
quit my CS degree since I already had a job. At the time, the university was
experimenting with a "software engineering" degree, but it was new and not yet
accredited so it was too early to know if it was worth it.

------
badhairday
"Developers will need some theory, and I'm painfully aware, too, of the degree
snobbery that most employers harbour. So I propose that the right course would
be a 5+ year apprenticeship with part-time degree study - CS in the classroom
1 day a week, software development in the office the other 4."

I disagree with this statement. My program at school supplements 6 months of
formal learning with 6 month long internships. I don't feel like 4 days a week
is enough to get the benefits of working to supplements formal learning. I
defiantly need 6 months in a job to learn something valuable, and towards the
end of my internships is where I feel like I've learned enough to contribute
just as much as any of my teammates and coworkers can.

------
kelvin0
Basically, we should only learn the 'real' programming skills and forget that
the whole state of computing technology rests on the shoulder of giants who
created these algorithms and did all this research for 'real programmers'. Oh,
we certainly don't need CS, because it gets in the way of writing code.

Seriously, I understand what the author is trying to convey, but IMHO he goes
too far on the bias against CS. It is a serious handicap to program anything
worthwhile and using APIs and frameworks without understanding (at least to
some degree) what they do ... my .2 cents

------
ank286
To a computer scientist, programming is merely a tool to help bring their
computer science ideas to life. Writing a bunch of APIs and calling them will
only take you so far. After a certain point, theory will prevail because math
(computer science is applied math) is the truth. Also the "computer
programming" major is called Infoscience majors at the top engineering
schools, those students are laughed at, you don't have to be smart to grind
through those classes ie you don't build mental toughness towards theories.

------
flyhighplato
I agree that modern "computer science" educations often don't teach enough to
allow you to make great software, nor enough to open your eyes to the grander
concepts. But you can't take that to mean that there is some subset of
concepts that are useful to you and that this is all you need to know to hone
your craft.

I do not like these strange lines in the sand that are drawn between engineers
and scientists. These distinctions are artificial and a curious mind shouldn't
be trapped on one side or the other.

------
milesvp
>Time spent learning the UML meta-meta-model and Object Z >is, for 99.9% of
developers, time completely wasted

I thought it was interesting that the poster used these examples for CS.

I didn't take a single course at university that dealt with either of these
topics. Everything I dealt with in comp sci was algorithms & complexity
theory, coupled with a smattering of, "this is how computers actually work".
Far as I can tell op is talking about computer programming subjects, and not
computer science subjects.

------
raldi
Indeed, don't call it computer science unless you're making computer
hypotheses that you then test via computer experiments, using the computer
scientific method.

------
jeffdavis
While we're at it, why is it called Computer _Science_? I think "Computational
Mathematics" or something would make more sense.

~~~
sn6uv
Computational maths (research area of mine) is its own field, and is very
different to computer science.

A introductary (undergrad) computational mathematics course at my university
covers; numerical solutions to PDEs, Inverse problems, Regularisation
problems, numerical optimisation etc.

~~~
jeffdavis
I should have looked for a name conflict first, I suppose, but my point is
that "science" doesn't seem like the right word to describe most of CS.

I'm not saying it's incorrect, but it just doesn't seem to fit well.

------
JoeAltmaier
Writing applications: go ahead, program by the seat of your pants.

Architect a solution to a big problem: theory comes in very handy.

~~~
debacle
The theories behind computer science have little very application in large
software engineering.

software engineering != computer science

~~~
JoeAltmaier
That's preposterous. Computer science is directly applicable to understanding
issues of scalability, searching, hashing, database properties, network routes
and looping, the list goes on and on.

Computer science is a lot more than proofs.

~~~
debacle
None of those things deal with maintainability, design by contract, interface
design, etc.

When you're writing a multi-million dollar piece of software (20+ man-years),
the technical problems are the easy ones to solve. Actually putting the thing
together is the hard part.

~~~
JoeAltmaier
Well said. Computer Engineering is a lot more than programming languages. But
does it take a college education to get there? Or a seminar on the latest tool
chain.

------
cliftonk
Contrarian take on the issue:

I wrote a Quake 3 mod in C++ (directional damage modification, server/client
magazine+reload, and a few other things not-so-difficult things) in high
school around age 17. I then did a CS undergrad at a top 6 university.

I learned more about programming writing that mod than my combined experiences
at school.

~~~
jarek
Yep, because programming and computer science don't have a lot of overlap. But
I bet you could have written a mean linked list after the CS degree.

------
nivertech
What's wrong with "Software Engineering"?

------
swa14
CS to a programmer is no more "theoretical" than anatomy is to a surgeon.

------
wissler
Feynman had it right: <http://www.youtube.com/watch?v=lL4wg6ZAFIM>

~~~
Peaker
I agree it's more of a mathematical discipline than a science.

But it isn't just "studying man-made creations". It's about studying
computation in general. Not just man-made machines that compute.

~~~
tensor
Complexity theory is based on the idea of a turning machine, a man made thing.

Mind you, information theory, which is often considered computer science,
certainly applies to nature itself. Of course, it would be easy to claim that
information theory isn't actually computer science. Personally, I consider
most of computer science more math than science. In fact, I sometimes tell
people I do math! (This is a great way to avoid further questions at borders
or awkward parties.)

~~~
reitblatt
Not really. Complexity theory deals with many different forms of computation,
from Turing Machines to RAM models to circuits to quantum computers. These are
all particular concrete artifacts that we use to study the fundamental notion
of computation itself.

Saying that complexity theory studies "man-made things" is like saying that
chemistry studies man-made molecules. It's technically true, but it confuses
the methodology with the object of study: studying particular chemicals vs the
underlying laws governing them or particular models vs the underlying laws of
computation.

------
CrLf
"It helps to know some music theory if you write and perform music, but a lot
of very successful songwriters and performers get by very happily with just
enough music theory."

This is an absolutely bogus comparison. Music does not need to be maintained,
music does not need to be troubleshooted or debugged (and thus, reasoned
about), music does not solve a problem(1).

Music is an artistic expression, while computer software isn't.

(1) Writing soundtracks for movies, for example, can be considered solving a
problem with music. It also requires music theory knowledge because
soundtracks have to convey particular emotions at particular moments.

~~~
cperciva
_"It helps to know some music theory if you write and perform music, but a lot
of very successful songwriters and performers get by very happily with just
enough music theory."

This is an absolutely bogus comparison_

I disagree. There are very successful songwriters and performers who have no
training, but almost all of the _good_ songwriters and performers did have
(usually classical) musical training.

The same is absolutely true in software: There's a lot of very popular crap
out there, but the software which is universally recognized as _good_ \-- code
like TeX -- almost always comes from authors with solid computer science
training.

~~~
jff
There's some good stuff in TeX but it's been buried in an avalanche of shit
from people who aren't Knuth. You can get TeX in a couple megabytes
(<http://www.kergis.com/en/kertex.html>), but if you install something like
pdfTeX or XeTeX or TeXlive, well I hope you've got a big hard drive.

