
CS for All - joeclef
http://www.cs.hmc.edu/csforall/
======
allencoin
>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.

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

[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...](https://www.hmc.edu/academics/wp-
content/uploads/sites/7/2013/11/hmc-catalogue-13-14.pdf#28)

~~~
PascLeRasc
What do they cover in the basic general engineering course?

~~~
bgribble
When I took it ~25 years ago it was called Intro to Systems Engineering, and
covered the foundational principles of control systems design and analysis of
linear dynamic systems. A lot of Laplace transforms, first- and second-order
differential equations, relationships between time-domain and frequency-domain
behavior, etc.

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

------
bwy
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](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
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.

[http://www.cs.hmc.edu/~oneill/papers/Sieve-
JFP.pdf](http://www.cs.hmc.edu/~oneill/papers/Sieve-JFP.pdf)

~~~
hadas
Thank you! We took a liberty here but have just updated the online book to
clarify this.

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

------
sontakey
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!

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

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

Teach touch-typing!

~~~
Retra
You learn touch typing by having something to type, not by having it drilled
into at school. There are better things to teach.

~~~
drakenot
I completely disagree with this. Despite being a fast typist when I first
started high school from years of computer use, I still consider my typing
class to be one of the best bang-for-the-buck classes I took in terms of what
I have gotten out of it since graduating.

My form was not perfect before taking the class. I would often do something
slightly weird with my right hand where my it would "walk" to slightly
incorrect positions to reach keys that my other hand should be hitting.

My typing teacher put covers over the keyboard so we couldn't see our hands
and then had us do typing drills. She would strictly enforce that we maintain
our hands on the correct home-row position, wrist positioning, etc.

After a semester of this class, despite an initial drop in my speed, I can now
touch type correctly and my speed is now faster than ever.

I work with professional programmers who hunt and peck and it drives me crazy.
For something that you interact with daily and is the instrument of your
profession, taking an hour a day for a few months is a no brainer to perfect
your form.

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

~~~
marincounty
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?

~~~
matchu
I think it's probably solid feedback if you include more tangible action
items. What's an example of wordiness in the text? What would be a better
phrasing? What don't you like about the layout? Why?

Don't feel back about feedback :) Suggestions for improvement are always
helpful, especially if you also include the stuff you _do_ like.

------
yasoob
Is there any way to download it in pdf format?

~~~
daveloyall
[https://github.com/emhill/117-S15/commits/master/src/morea/m...](https://github.com/emhill/117-S15/commits/master/src/morea/materials/cs5book.pdf)

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

~~~
mathattack
Do schools really make people take an MS Word class? I've never seen anyone
have the courage to put that on a resume or transcript.

~~~
mdpopescu
I've had people show up with Word and Excel on their resumes when I was
advertising hiring C# programmers...

~~~
mathattack
Are these long resumes playing Keyword Bingo, or shorter resumes?

I've kept my resume to 1 page and avoid the table stakes skills.

~~~
mdpopescu
One, two pages at most. They just had no clue about programming and had to put
_something_ in there. Ours is a strange field :)

~~~
mathattack
Indeed. In this instance a negative keyword filter would be appropriate. :-)

------
techman9
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!

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

------
lynn729
This course is a great idea. Since so much of what we do each day is impacted
by computers a basic understanding is important for everyone

------
the_cat_kittles
i would rename the second chapter from "functional programming " to
"programming with functions"

