Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
How I Wish Computer Science Was Taught (andrewcbrown.com)
12 points by uscfan1781 on Feb 7, 2011 | hide | past | favorite | 15 comments


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.


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.


> 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.


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


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.


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.


I've only studied CS at the Masters level, so I don't have experience of BSc CS. But I would think that there should be enough room to teach some software engineering, yes.


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.


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.


'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.


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.


Site not responding for me. Google cache: http://webcache.googleusercontent.com/search?q=cache:http://...


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


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.


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.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: