>At Mudd, this course is taken by almost every first-year student—irrespective of the student’s ultimate major—as part of our core curriculum. Thus, it serves as a first computing course for future CS majors and a first and last computing course for many other students.
This is a great thing to offer students and I wish my University had made this a part of the curriculum. Somehow I managed to have practically zero exposure to computer science or programming until after graduation--only to discover that I find it immensely challenging, interesting, and rewarding. I probably would have switched majors if I'd taken this class Freshman year.
I think it's a good idea, but fwiw it's not CS-specific. Harvey Mudd's idea isn't that CS is so uniquely important that everyone should take it, but rather than everyone should take a lot of things, regardless of major, and CS is one of those things. The curriculum is designed with a philosophy of fairly broad education, kind of in line with a liberal-arts college ideal, but with more of a STEM flavor. I was a CS major there, and only maybe 1/3 of my total course hours were CS: the split is roughly 1/3 in your major, 1/3 Common Core, and 1/3 "HSA" (humanities, social-science, and the arts). [1]
The technical part of the Common Core is currently: 1 course biology, 1 course CS, 1 course engineering, 1.5 courses chemistry (0.5 is a lab), 2.5 courses physics, 0.5 course elective lab, 3 courses mathematics.
The University of British Columbia also has something similar, CS110 which uses a subset of Racket (Beginning/Intermediate/Advanced Student Language) to teach core CS concepts to a wide range of students.
As a former student of CS5 (the class), I must say it was spectacularly well-run, fun, and educational. Zach Dodds, one of the authors of this book, was a particularly brilliant and inspiring professor.
While I'm an advocate for practical eduction, I'm equally an advocate for understanding the principles of your field. This book will much less vocational than your typical code-school/academy/etc and instead focus on building a foundation with which you can build upon.
I highly recommend this as a great primer to computer science.
Beautifully written text. I also really like the idea of an intro course but am, probably like many others, struggling with how to present the topics in an interesting (and practical) way without missing the theoretical beauty of computer science.
This course reminds me a lot of the Berkeley course posted a month ago, if anyone wants to see the discussion there: https://news.ycombinator.com/item?id=9838196. From what I can tell, the coverage is almost the same, except that the Berkeley course pretty much trades computer architecture for declarative programming and some other briefly-covered topics like machine learning, map reduce, concurrency, etc.
The prime sieve algorithm in chapter 3 is not the real sieve of Eratosthenes. Which is kind of funny because the person who pointed this out to the FP community is also a professor at Harvey Mudd.
Ran Libeskind-Hadas is an amazing teacher. He really got us exicted about stuff in theoretical computer science. I was actually dissapointed in my advanced algorithms class in grad school because Prof Ran already taught us everything except for skip lists during his enrichment sessions in the summer of 2006.
Mudd Alumni here. I had the pleasure of being a student of Professor Ran Libeskind-Hadas and Zach Dodds (who are two of the authors of this book). Amazing group of professors!
Before we move to CS for all, can we at least solve the problem of Computer Literacy for all!?
There's a huge population of people who simply cannot effectively use a computer. Can we fix that first?
Otherwise we're leaving them behind and that's not right.
Computer literacy and computer science are two different things with two very different pedagogical objectives.
Often times, when people say "computer literacy", they mean popular software competency. It often means ad-hoc comfort with specific software interfaces and solutions.
So if I've learned the steps necessary to attach files into Gmail, browse in Safari, download and remove apps, use Dropbox, and so on, then I'm considered computer literate. At one time, employees were expected to type in DOS commands. Now command line is considered hacker territory.
Almost everyone in the world is living very high away from computer science, and instead they are living in the world of corporate designers. They are living in a world where people at Apple build app experiences called "Mail", "Calendar", "Reminders", and you swipe left to delete. Soon you'll be asking Cortana or Siri to do things for you.
In that designer world of proprietary software and aesthetic trends, what does computer literacy mean? It sounds like a class on Microsoft Word or Outlook. It sounds like a class on how to use the App Store.
Those of us in computing sometimes tend to forget that there's a whole world of people for whom computers are not a passion, they are simply something they have to deal with whether they like it or not.
I know MD's who have no love or interest in computers at all. No interest in becoming "computer literate" as defined by people like us. These are not dinosaurs. Yet, some of them live in a world where pen-and-paper are more efficient and safer than paging through text boxes in a shitty UI on an equally shitty medical data entry program.
Some of them couldn't scan-and-email a document if their lives depended on it. They screw-up sending links to websites and have crap spread all over their computers rather than organized in a sensible way within a directory structure.
This is either a case of literacy or one where computers and UI design still have a lot to be desired before any human being can walk-up to a computer and get things done. And, BTW, this isn't a Mac vs. PC issue as these people are equally clueless regardless of platform.
I know music teachers who can barely send email and school teachers who get flustered within anything more complex than an iPad.
None of these people are stupid.
And, to some extent, I am not sure anyone needs to actively pursue a "solution". Most of this will resolve itself with generations of people who grew up with computers. Sad to put it that way, but I think there might be a degree of truth in that.
I've made this comment multiple times: I told my son that his generation is likely to be the last to actually drive a car. It is almost guaranteed that his kids will have no need to drive a car and will, instead, use fully automated vehicles. A human driving a car might become a recreational activity. Two hundred years ago nobody would have though of running or jogging as a recreational activity. Today we do.
The point is, things change, some are left behind and some adapt.
> Before we move to CS for all, can we at least solve the problem of Computer Literacy for all!?
This is only "CS for All" Harvey Mudd students; I don't think real computer illiteracy problem there.
> There's a huge population of people who simply cannot effectively use a computer. Can we fix that first?
If you mean to shift topic from what "CS for All" means in the title to "CS for All in the world", obviously, that inherently requires solving Computer Literacy for all. So, yes, we can solve that first, if we can solve either at all.
If you mean "CS for All" in the sense actually used in the title, then, demonstrably, no. Since the source linked from the title is the solution to "CS for All" in the sense used in the title, and yet, as you note, Computer Literacy for all (in the broader sense of "all" that you wish it solved for) is not solved.
This. I believe very strongly in the importance of touch-typing. I went to an inner city school for elementary and high school. And when I arrived at university computer science I felt like I was light years behind my peers. A lot of that stemmed from not being able to type as fast as them. Hunting and pecking typing while trying to wrap your head around making abstractions and recursion is enough to make anyone frustrated.
I don't think this is a solvable problem, especially when people just don't care. There are plenty of resources from websites to youtube videos to teach users how to be more computer literate. But instead of learning, people would rather watch someone unbox candy on youtube.
I tend to think computer literacy is the wrong approach. I think the right approach looks like "interfaces that don't require literacy" (one of the reasons why I think human-quality NLU for command & control systems are going to be amazing). Most people don't need most of the functionality of a computer.
Great--I think every student should take a CS class!
That said, this course suffers from so many CS courses.
1. It's too wordy!
2. As usual, I don't like the layout.
3. Funnel your subjects. (I'll give that a B.)
4. Funnel your paragraphs, or eliminate most of them?
5. Most people(students) find this material extremely dry. Introductory books should be "tight"! They should go through numerous edits? Take out every non-essential word?
6. I haven't yet read an introductory CS text that gets it right?
7. As to exercises? Try to use excercises that the student might have some immediate interest in, or can use in their daily life?
For example, instead of some cute game example, show the student how a simple reminder application is programmed? How Google works?(just the basics). Or, how their spellcheck program works?
8. If I was going to write a introductory computer course,
after explaining the hardware(that's usually sitting in front of them), I would explain an how operating systems stores their information--"The use, and location of Folders."
I would want my students competent in the Command Line before we did any Programming. I would want them to know they can have two folders named the same, but located in different sections of the hard-drive. I would want them competent in finding them, and manipulating them.
I was too hard with my review--sorry! I was doing some yard work and felt really quilty. I know getting across computer science concepts/theories is terribly difficult.
Part of my anger is I don't have a good grasp of CS theory, or why we do someting a particular way? I can get things done, but I'm missing the bigger picture--in many instances?
My education into CS has just been following many steps, and listening to videos. I will go back to this free book, and give it a full read. Sorry to the Authors. I was in a bad mood?
> 7. As to exercises? Try to use excercises that the student might have some immediate interest in, or can use in their daily life? For example, instead of some cute game example, show the student how a simple reminder application is programmed? How Google works?(just the basics). Or, how their spellcheck program works?
Yes! I agree wholeheartedly. I took an intro to CS course at UBC which is similar to this (I talked about it in a comment thread above) and this was a big thing I loved about having new exercises created specifically for that course. I got to create space invaders (I found that super fun), newer years create a snake game. In addition, I created a simple graph crawler which used Google a lot as a way to tie in what we were creating with what Google does. Now, they create part of a client-server application which resembles Twitter or an IM program. We also created a minmax algorithm for pawns which was really cool since it showed how an NPC could ostensibly be made in a game, although that has been dropped since. It's all really cool examples that simplify something that exists in real life, and really helps engage students a lot more.
What if colleges started offering this as an alternative to the basic MS Word class most schools make everyone take? Then people who didn't know how to use a computer would be too intimidated by it, but students who already knew the basics could move on to this more interesting course.
You should still be able to test out, though. That way, if you're totally uninterested, you can test out of the MS Word class and move on.
I think there are enough students sufficiently interested in computers that they'd check out the harder course if its name didn't sound too obscure.
I'm a current UC San Diego student. It's awesome to see our faculty featured here, particularly Christine Alvarado. She has a fantastic reputation within our CS department and I'm really glad to see she's doing great things and getting recognition outside UCSD as well!
This looks like it would make for a very nice course -- a good middle ground between the hardcore practical course ("let's learn C") and the hardcore theoretical course ("let's do denotational semantics with Scheme" -- or whatever).
[+] [-] allencoin|10 years ago|reply
This is a great thing to offer students and I wish my University had made this a part of the curriculum. Somehow I managed to have practically zero exposure to computer science or programming until after graduation--only to discover that I find it immensely challenging, interesting, and rewarding. I probably would have switched majors if I'd taken this class Freshman year.
[+] [-] mjn|10 years ago|reply
The technical part of the Common Core is currently: 1 course biology, 1 course CS, 1 course engineering, 1.5 courses chemistry (0.5 is a lab), 2.5 courses physics, 0.5 course elective lab, 3 courses mathematics.
[1] There's even a hokey triangle illustrating that philosophy in the course catalogue (p.26): https://www.hmc.edu/academics/wp-content/uploads/sites/7/201...
[+] [-] mynameisvlad|10 years ago|reply
The course videos are all available on Youtube: https://www.youtube.com/channel/UC7dEjIUwSxSNcW4PqNRQW8w/pla... and I believe the "Systematic Program Design" courses on EdX are an expanded version of the course.
[+] [-] nnnnnn|10 years ago|reply
While I'm an advocate for practical eduction, I'm equally an advocate for understanding the principles of your field. This book will much less vocational than your typical code-school/academy/etc and instead focus on building a foundation with which you can build upon.
I highly recommend this as a great primer to computer science.
[+] [-] bwy|10 years ago|reply
This course reminds me a lot of the Berkeley course posted a month ago, if anyone wants to see the discussion there: https://news.ycombinator.com/item?id=9838196. From what I can tell, the coverage is almost the same, except that the Berkeley course pretty much trades computer architecture for declarative programming and some other briefly-covered topics like machine learning, map reduce, concurrency, etc.
[+] [-] ufo|10 years ago|reply
http://www.cs.hmc.edu/~oneill/papers/Sieve-JFP.pdf
[+] [-] hadas|10 years ago|reply
[+] [-] MarkPNeyer|10 years ago|reply
[+] [-] sontakey|10 years ago|reply
[+] [-] JustSomeNobody|10 years ago|reply
There's a huge population of people who simply cannot effectively use a computer. Can we fix that first? Otherwise we're leaving them behind and that's not right.
[+] [-] threatofrain|10 years ago|reply
Often times, when people say "computer literacy", they mean popular software competency. It often means ad-hoc comfort with specific software interfaces and solutions.
So if I've learned the steps necessary to attach files into Gmail, browse in Safari, download and remove apps, use Dropbox, and so on, then I'm considered computer literate. At one time, employees were expected to type in DOS commands. Now command line is considered hacker territory.
Almost everyone in the world is living very high away from computer science, and instead they are living in the world of corporate designers. They are living in a world where people at Apple build app experiences called "Mail", "Calendar", "Reminders", and you swipe left to delete. Soon you'll be asking Cortana or Siri to do things for you.
In that designer world of proprietary software and aesthetic trends, what does computer literacy mean? It sounds like a class on Microsoft Word or Outlook. It sounds like a class on how to use the App Store.
[+] [-] rebootthesystem|10 years ago|reply
I know MD's who have no love or interest in computers at all. No interest in becoming "computer literate" as defined by people like us. These are not dinosaurs. Yet, some of them live in a world where pen-and-paper are more efficient and safer than paging through text boxes in a shitty UI on an equally shitty medical data entry program.
Some of them couldn't scan-and-email a document if their lives depended on it. They screw-up sending links to websites and have crap spread all over their computers rather than organized in a sensible way within a directory structure.
This is either a case of literacy or one where computers and UI design still have a lot to be desired before any human being can walk-up to a computer and get things done. And, BTW, this isn't a Mac vs. PC issue as these people are equally clueless regardless of platform.
I know music teachers who can barely send email and school teachers who get flustered within anything more complex than an iPad.
None of these people are stupid.
And, to some extent, I am not sure anyone needs to actively pursue a "solution". Most of this will resolve itself with generations of people who grew up with computers. Sad to put it that way, but I think there might be a degree of truth in that.
I've made this comment multiple times: I told my son that his generation is likely to be the last to actually drive a car. It is almost guaranteed that his kids will have no need to drive a car and will, instead, use fully automated vehicles. A human driving a car might become a recreational activity. Two hundred years ago nobody would have though of running or jogging as a recreational activity. Today we do.
The point is, things change, some are left behind and some adapt.
[+] [-] dragonwriter|10 years ago|reply
This is only "CS for All" Harvey Mudd students; I don't think real computer illiteracy problem there.
> There's a huge population of people who simply cannot effectively use a computer. Can we fix that first?
If you mean to shift topic from what "CS for All" means in the title to "CS for All in the world", obviously, that inherently requires solving Computer Literacy for all. So, yes, we can solve that first, if we can solve either at all.
If you mean "CS for All" in the sense actually used in the title, then, demonstrably, no. Since the source linked from the title is the solution to "CS for All" in the sense used in the title, and yet, as you note, Computer Literacy for all (in the broader sense of "all" that you wish it solved for) is not solved.
[+] [-] morenoh149|10 years ago|reply
Teach touch-typing!
[+] [-] rdudek|10 years ago|reply
[+] [-] speechduh|10 years ago|reply
[+] [-] randomnumber53|10 years ago|reply
I see no reason that they can't be tackled concurrently!
[+] [-] ggchappell|10 years ago|reply
[+] [-] marincounty|10 years ago|reply
That said, this course suffers from so many CS courses.
1. It's too wordy!
2. As usual, I don't like the layout.
3. Funnel your subjects. (I'll give that a B.)
4. Funnel your paragraphs, or eliminate most of them?
5. Most people(students) find this material extremely dry. Introductory books should be "tight"! They should go through numerous edits? Take out every non-essential word?
6. I haven't yet read an introductory CS text that gets it right?
7. As to exercises? Try to use excercises that the student might have some immediate interest in, or can use in their daily life? For example, instead of some cute game example, show the student how a simple reminder application is programmed? How Google works?(just the basics). Or, how their spellcheck program works?
8. If I was going to write a introductory computer course, after explaining the hardware(that's usually sitting in front of them), I would explain an how operating systems stores their information--"The use, and location of Folders."
I would want my students competent in the Command Line before we did any Programming. I would want them to know they can have two folders named the same, but located in different sections of the hard-drive. I would want them competent in finding them, and manipulating them.
[+] [-] marincounty|10 years ago|reply
Part of my anger is I don't have a good grasp of CS theory, or why we do someting a particular way? I can get things done, but I'm missing the bigger picture--in many instances?
My education into CS has just been following many steps, and listening to videos. I will go back to this free book, and give it a full read. Sorry to the Authors. I was in a bad mood?
[+] [-] mynameisvlad|10 years ago|reply
Yes! I agree wholeheartedly. I took an intro to CS course at UBC which is similar to this (I talked about it in a comment thread above) and this was a big thing I loved about having new exercises created specifically for that course. I got to create space invaders (I found that super fun), newer years create a snake game. In addition, I created a simple graph crawler which used Google a lot as a way to tie in what we were creating with what Google does. Now, they create part of a client-server application which resembles Twitter or an IM program. We also created a minmax algorithm for pawns which was really cool since it showed how an NPC could ostensibly be made in a game, although that has been dropped since. It's all really cool examples that simplify something that exists in real life, and really helps engage students a lot more.
[+] [-] yasoob|10 years ago|reply
[+] [-] daveloyall|10 years ago|reply
Might be out of date. Looks like the book was built with Sphinx (documentation tool), so maybe you could find the source and build a fresh copy.
[+] [-] rebekah-aimee|10 years ago|reply
You should still be able to test out, though. That way, if you're totally uninterested, you can test out of the MS Word class and move on.
I think there are enough students sufficiently interested in computers that they'd check out the harder course if its name didn't sound too obscure.
[+] [-] mathattack|10 years ago|reply
[+] [-] techman9|10 years ago|reply
[+] [-] unknown|10 years ago|reply
[deleted]
[+] [-] ggchappell|10 years ago|reply
[+] [-] lynn729|10 years ago|reply
[+] [-] arctansusan|10 years ago|reply
[deleted]
[+] [-] the_cat_kittles|10 years ago|reply