
More Universities Should Shut Down Their Computer Science Programs - jeffreymcmanus
http://blog.jeffreymcmanus.com/1924/more-universities-should-shut-down-their-computer-science-programs/
======
zeteo
This kind of reasoning actually led to the establishment of "Java schools" in
the late 90s, and I hope we've all read Joel Spolsky's classic piece about
them:

[http://www.joelonsoftware.com/articles/ThePerilsofJavaSchool...](http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html)

------
cube13
I think you're missing the entire point of what a Computer Science program is.

It's not to teach programming. It's to teach computing theory, algorithm
design, etc. That's the reason that the top-level university programs are so
heavy on theory. That just happens to fit with systems programmers(who somehow
aren't software engineers... curious). It also fits with game programmers,
which is where I think a lot of CS students want to go after they graduate.

I also disagree that there is any real good way to teach software engineering
at this point in time. Unlike other disciplines such as Mechanical or even
Electrical engineering with decades, even centuries of practical knowledge
that has resulted in a lot of very strict best practices. Software engineering
doesn't have that. Everything in the domain is extraordinarily fluid.
Processes are changing rapidly. Tools as well. Even the end product we produce
is vastly different from what it was 10 years ago. There simply isn't any good
way to teach this subject in this environment short of on the job training.
It's compounded with the fact that every software development house is
different. Nobody has the exact same process, or uses the exact same tools. So
teaching SE as a discipline really doesn't make much sense.

~~~
jeffreymcmanus
did you actually read the post? i actually pre-rebutted both of your
arguments.

i understand quite well what a CS program is, since (as i pointed out in the
post) i've been a student in three university CS programs and taught coding at
a fourth.

i'm saying that most of what goes on in academic CS departments is not what we
need as a society and it's not what most undergrads hope to get into when they
enroll. most undergrads get into CS to write software, not to learn "theory"
or "compiler design" (although, again, as i pointed out in the post, if this
happens to be your bag, more power to you -- but this isn't really about you,
it's about the mismatch between what university CS programs do and what people
and society really want or need.)

software engineering is obviously teachable (i've been doing it for 20 years)
and that's true even if you personally didn't have any good software
engineering instructors or mentors. it looks like you and i are in agreement
that rapid change in software engineering makes universities not the optimal
place to teach software engineering (that was the point of my post). but it
doesn't follow that because universities are bad at this, that software
engineering is "not teachable".

~~~
ChuckMcM
Interesting side discussion.

I do thing cube123 read your post, and I do think a valid conclusion from
reading your post is that you have missed the point of what a CS program is.

I suspect that this comes from your own history, and part from the way in
which CS 'grew up' as a discipline.

The point of your posting is that being employed as a programmer, and learning
programming is not what a Computer Science degree is about. Try getting an
undergraduate degree in Electrical Engineering, its similar in that you have
lots of theory on lots of things but little practical experience.

The leap you make which causes me to discard your argument is this one, _"but
this isn't really about you, it's about the mismatch between what university
CS programs do and what people and society really want or need."_ You have
taken on the role of speaking for society and yet you haven't successfully
made a case that you can accurately represent what society wants.

You can make an argument that there is a need for a training program between
high school and employment that teaches people how to write programs to solve
problems. You can call that Computer Engineering, Applied Programming,
Programming Technology, what ever. Such programs exist, both in the 'for
profit' University world and elsewhere. You can argue that such programs
should be structured more along the various processes for producing reliable,
testable code, and you do some of that in your education project (always great
to put your money where your mouth is like that).

But the opportunity to teach folks who 'just want to code' does not disqualify
CS as being a valid course of study, just like 'Accounting' doesn't disqualify
'Mathematics' as a course of study. So your central thesis that 'more
universities should shut down their CS programs' fails the 'sniff' test.

Now if you said 'More universities should offer applied programming type
degrees' and used your points about how it is what many people want to do.
That is a reasonable conversation to have, do we want to elevate what have
been things like ITT Technical College programs into a more general purpose
degree program? Something between 'JavaSchool' and 'CS' ? I can see arguments
for and against.

But if you are going to blurt out things like "Most undergraduates and
professional actually want to learn applied software engineering, not
'computer science'" you really should try to develop some foundation for that
claim. What evidence do you offer that this claim is valid? Some study on
college exit exams, some survey of recent CS graduates? A self selecting poll
on Reddit? Its all well and good to wonder if most folks just want to code,
but to use it as a claim in your argument that Universities should restructure
their CS programs, and expecting your readers to 'buy in' to that requires
that you provide some basis for making that claim.

Your post makes a bunch of claims, four of them in big bold font, for which
your provide no supporting evidence or structure at all around why the reader
should believe them. Because of that your message is lost.

I agree with you that it is an interesting topic and as we've moved
'programming' into a more general skill requirement based on the explosion of
'programmable' devices, you might be more successful making the argument that
we need to offer a better high school programming class. (much like Typing was
offered in the 70's as a way to provide a generally useful skill to High
School students).

~~~
glogla
Just a terminology note: 'Computer Engineering' is already existing term for
the discipline of making computers -- designing CPUs and building hardware in
general (our CE has strong security focus, so they do lot of RFID ASIC stuff,
and some FPGA crypto stuff) and low level programming like compiler backends
(SPARC register windows are pretty!), microcontrollers and interfacing with
other hardware too. And whatever Hennessy and Patterson are doing.

So you shouldn't name gutted code monkey courses Computer Engineering :)

------
10098
I have a CS degree, and worse than that, it's a double major in CS and applied
math. I had to study things that seem really pointless for an "applied
software engineer", like differential equations or numerical methods (ok,
maybe the latter is not so pointless). We also studied a considerable chunk of
other, more "CS-esque" stuff, like introduction to mathematical logic,
computability theory, lambda calculus. Does this stuff pay off? Well, my
actual job never required me to implement any complex algorithms, because
everything has already been written in the standard libraries. It does help to
have at least an approximate picture of what's really going on under the hood.

But what really helps me is that 4 years of being exposed to all this crazy
theory has affected my brain in a certain way: it has altered my perception of
problems.

Before going into CS I was programming by chance: slap some code together
(without really understanding the problem domain) and poke it with a stick
until it somehow works the you want it to. I think most kids who are just
learning to program do that. However, that approach changed radically after I
spent some time at the university. In that sense, CS has been really useful,
at least in my case. Btw, I'm not saying those skills could not have been
obtained elsewhere.

And learning theory really broadens your horizons. Things like computability
theory, I have no use for them in my day job, but they're just interesting.
Back at the uni, I had a blast writing a turing machine "emulator" and
programming it instead of manually writing the assignment on paper :) And yes,
you _could_ study them in your spare time, but the truth is, the job eats up
so much of your time, and makes you so exhausted that you barely have the
resources to follow an online lecture after a long day at work. So why not
spend some time learning while you still free from most of the
responsibilities of adult life?

~~~
jeffreymcmanus
No argument there. Like I say in the post, I'm all in favor of the goodness of
the basics. I just think that giving undergrads all theory and very little
practice is not optimal, and they should have the opportunity to go minimal on
theory if it makes sense for them. Very few universities offer such a choice
today.

~~~
10098
I know. We lacked practice at the university too. I don't think you can blame
the university for that, though. Practical things are better taught by people
who actually use them on the job, not by PhDs who write scientific papers.
That's why I went to long-term internship at an actual company during my
second year, which later turned into a full-time job.

~~~
jeffreymcmanus
if the university purports to teach this stuff, they should hire people who
actually know how to teach it. if their tenured PhDs aren't cutting it, they
should look elsewhere. (this is how i got my university teaching job.)

~~~
10098
> if the university purports to teach this stuff,

It doesn't. The major purpose of a university is to produce scientists who do
research, not software engineers who write crud apps. We, the software
engineers, are just a byproduct.

> they should hire people who actually know how to teach it

They can't and they shouldn't. Why would one want to teach at a university
when (s)he has enough skills to work at a company for a big fat compensation,
and, possibly, equity? The only way to attract those people to the
universities would be for the universities to offer much higher salaries,
which would consequently drive up the cost of education (in my own country it
wouldn't even work, because education is "free", i.e. mostly paid for by the
government). And for what - to teach the students something they could have
easily picked up on their own by poking around the internets or participating
in internships? That is not optimal. If you study formal grammars in class and
don't try writing your own little lexer/parser at home, it's your own fault,
don't blame the university. It has taught you everything you need to know to
write a parser, and it's your job to put it to use.

------
UK-AL
Hint: pointer arithmetic is a pretty practical, not theory. It's easy to
understand, and is usually first year stuff. Program in c and you are likely
to use it. pointer arithmetic should be taught for software engineers
anyway... Compiler design again is a pretty pratical subject, except for
formal grammars. It has tons of practical uses, especially for dsl's.

Theory for me is more like machine learning(Bayesian theory, probability
latent semantic analysis and way more advanced stuff). However with the age of
big data upon us, we are going to need this for your average programmer more
and more. Stuff like that happens to be what interests me, I also find it the
difficult much to detriment of consistently high grades..

I think your what your proposing would lower the barrier entry so much, your
average software dev won't be very good, and they will be cheap. Is that what
you want for the proffesion?

------
SlipperySlope
This post is spot-on.

During the boom cycles of software development, its not neccessary for someone
to go back to university for the skills - online is good enough, more
specialized, and much more cost-effective.

Why get in crushing debt to become an app developer? Or to program a startup's
back-end, or to administer a cloud infrastructure.

------
chanian
Cherry picking applied software engineering (and glancing over your
curriculum, specifically web programming/app development) as the only modern
relevant subset of computer science seems a bit dramatic. I personally don't
really care how/where people learn how to code, and like you, I don't care
much for the "priesthood of the technologist" I see so often in our industry.

But so confidently suggesting that ".. academic CS departments is not what we
need as a society" is no different "cargo-cult" thinking than the poster who
suggested that many don't take vocational training seriously. You are blogging
about and representing a vocational training service, obviously the readers on
HN are going to be skeptical.

Choosing the path of academia in education and as a career is a perfectly
valid and respectable choice. Suggesting that the works of groups like the
ACM, IEEE are not addressing real societal problem is pretty harsh, regardless
of how elitist they may or may not be, and regardless of whether those
individuals are making a significant contribution to society or not. There's
no need to shit on smart and passionate people in specialized / esoteric
fields in computer science simply because their work can't be easily app'ified
or conjured into an mvp (<http://cs.nyu.edu/~jhan/>,
<http://www.dgp.toronto.edu/~ravin/> ...)

I studied computer science in my undergrad. I didn't go to learn how to code
nor did I expect my university to teach me how to code, I already knew how to
do that. Many of my friends discovered a passion for CS because of their
overlapping math/logic/theory breadth courses, not despite it. Assuming the
typical CS student is someone who only enrolls to learn things like applied
programming grossly oversimplifies and generalizes a person's intentions and
motivations for learning, even though I'm sure there are many with that
primary motivation.

Online/alternative learning programs, like your company, are a great approach
on education which have lived happily in parallel with universities for years.
It's not a replacement though, it is an alternative. I don't think the
shortcomings in some universities warrant the "academic butchering" as
suggested so boldly in the post's title. To suggest that we should start
systematically shutting down CS departments simply because their current
curriculum doesn't produce good programmers in a way that aligns with your
model/curriculum, is a scary and dangerous thought. When you take away
university departments, you chop the legs off entire disciplines.

------
StuffMaster
>one of the most pressing problems that humanity has today is obtaining clean
drinking water. Yet no university has a Department of Water.

He made some interesting points, but this just sounds crazy.

~~~
tzs
Also, the University of Arizona does have a Department of Hydrology and Water
Resources: <http://www.hwr.arizona.edu/about-department>

------
jeffreymcmanus
Looks like ye olde blog is a bit slammed at the moment, apologies. (If only my
university CS program taught me how to be a Wordpress sysadmin!)

~~~
earl
Maybe try this introduction to web publishing with wordpress [1].

Google cache of the blog post: Also,
[http://webcache.googleusercontent.com/search?q=cache:http://...](http://webcache.googleusercontent.com/search?q=cache:http://blog.jeffreymcmanus.com/1924/more-
universities-should-shut-down-their-computer-science-
programs/&hl=en&prmd=imvns&strip=1)

[1] [http://codelesson.com/courses/view/introduction-to-web-
publi...](http://codelesson.com/courses/view/introduction-to-web-publishing)

~~~
jeffreymcmanus
the issue has to do with apache and my cheap-ass underpowered personal server,
not wordpress. but gracias for the link!

~~~
jeffreymcmanus
Server has been migrated to WPEngine, which I am now deeply in love with.

