

How I Wish Computer Science Was Taught - uscfan1781
http://andrewcbrown.com/2011/02/07/duke-exeter-and-how-i-wish-computer-science-was-taught/

======
kenjackson
Interesting post. Although I think a bit backwards. Circuits are just a
manifestation of computers, much like women 70 years ago who acted as
computers.

The foundation is really these two questions "what functions are computabel"
and "how efficiently".

From those questions come other questions like what model are you using...
this changes the answers to both questions.

You then go into how do you build physical manifestations of these models and
how do they affect various aspects of computation.

Languages are just about how you express computation to the model(s).

And SW engineering grows out of how one builds non trivial functions and how
requirements often change over time.

Distributed systems are just a world where different computers (anything that
computes) has access to different data or functions.

So rather than go up from HW I'd spend more time in theory... move to lamda
calc and turing machines... and then languages... then architecture. And then
SW engineering, etc...

This probably won't make you any better of a dev from day 1 after graduating,
but will make you a better computer scientist.

And if you want to be a better dev, just grab a Safari Books subscription and
start (or join) a project.

~~~
uscfan1781
I appreciate the feedback. There are definitely many people more qualified
than me to actually design a curriculum. My argument is more about the
approach than the actual content.

Certainly agree about not making you a better dev from day 1. I do think in
the long run it will actually make you a better programmer though,
particularly for more difficult and complex projects.

------
user24
> The Duke Computer Science Department ... taught me almost nothing about how
> to program in the real world

That's because that's not what you learn in CS. You wanted to be doing a
software engineering degree.

~~~
beej71
I think a good University program should do both through the BS level. After
that it can get more theoretical.

~~~
possibilistic
I disagree. Computer science is supposed to be a "pure" field, like
mathematics. It is not meant to teach any specific technology, language,
library, development model, etc. You can (and should) pick that up on your
own. These things change so often anyway--you shouldn't pay a school to learn
such simple things.

Maybe industry and market forces want a more software engineering-type degree;
the people who want that kind of job should pursue such. In any case, there is
still an unquestionable need for pure CS in academia and research.

~~~
beej71
Fine point: I didn't try to define "CS".

We agree that a school shouldn't teach a breadth of languages and frameworks
du jour.

But I still think a good University program will teach both theory and how to
program in the real world. Is that so wrong? CS students must take spoken
language and physics courses, as well, and somehow that doesn't affect the
purity of their CS education.

Maybe the school doesn't call software engineering "CS" (like so many do), but
there should at least be the option to learn these concepts somewhere. There
must be shoulders to stand upon. I trust you'll find it impossible to argue
that all the knowledge regarding software production discovered in the past 50
years is obvious to every Computer Science PhD, let alone neophyte.

------
rgbrgb
I'm a Math/CS major and I can relate completely to this. In my upper level
math courses, we're given about 4 hard problems every week to struggle through
together. The problems always use the theorems from class in new and
interesting ways - you have to really get the theorems to do the homework.
Exams are almost always take-home proofs. It makes us feel like we're really
doing math!

In my CS classes, I too often feel like I'm just memorizing things to fill in
the blanks and gaining a breadth of vocabulary that I can google if I ever
REALLY need.

I think this may be partly because people who become CS professors are not the
people who love to make and deploy software.

------
mcmatterson
I highly recommend Charles Petzold's 'Code'. I originally bought it for my
father, but soon ended up reading it myself cover to cover. It fills a lot of
blanks in in my understanding; blanks that were also glossed over in my
education as well (Waterloo CS & C&O, 2002).

The book starts from the most basic 'switch and a lightbulb' circuit, and
takes a stepwise approach that ends up disassembling x86 by the final
chapters. Although it can be a little pandering in points, and the rigour
certainly isn't there (I can't remember for certain, but I'm pretty sure it
violates my 'must have footnotes' rule regarding non-fiction), in my opinion
it's a wonderful nightstand read regardless.

Indeed, there are a couple of spots the book knocks it out of the park without
(I think) intending to. As an example, the book presents Turing machines (not
by name, mind you) as a moving head traversing through a fixed memory, whereas
all of the theory I learned in school presented them as a moving tape passing
through a fixed head. It's a seemingly small detail of implementation, but it
made an _enormous_ difference in my understanding of how the modern computer
evolved from Turing's work. All of a sudden, an ALU + a program counter
becomes a modest leap from the theory of a TM ripping through a tape.

~~~
kenjackson
'Code' is also a great book to give to your non-coder spouse. Honestly, that
book should be the text used for the "computer literacy" class in most
colleges. Great book. Can't recommend it highly enough.

------
shortlived
A computer science degree should be a bit theoretical and broad in it's
topics. It's your internship(s) during college and even perhaps your first job
out of school that will start to solidify all of the pieces.

------
user24
Site not responding for me. Google cache:
[http://webcache.googleusercontent.com/search?q=cache:http://...](http://webcache.googleusercontent.com/search?q=cache:http://andrewcbrown.com/2011/02/07/duke-
exeter-and-how-i-wish-computer-science-was-taught/&hl=en&strip=1)

~~~
uscfan1781
I appreciate the heads up. Trying to get it up and running now.

~~~
user24
A wordpress cache plugin will probably help. I got 25k visits in one day last
week on puremango.co.uk which is hosted on a cheap-as-chips dreamhost shared
server and AFAIK it didn't blink. Cache FTW.

~~~
uscfan1781
It's funny I actually set up super-cache last night. I was just too cheap for
my own good. 256MB RAM on rackspace just wasn't cutting it.

