tags:

views:

540

answers:

6

INTRO: As you may have noticed if you've read my other questions, I'm in the process of designing a university course on the fundamentals of programming. I have asked two or three questions about this, and I was thinking it was perhaps unwise to ask so much about the same topic; it is, after all, my job to do this. However, the answers I have gotten have indeed helped me a lot... they show how varied interests and opinions are, and although I will ultimately make the decision of what goes in the course, StackOverflow has helped me quite a bit... and I'm sure it will be a better course for this site.

QUESTION: After all that prolegomena, my question now is: if you were to teach a fundamentals of programming course, what books would you use as the basis, and which as secondary material?

EDIT: Please, as new as possible. Not after classics like SICP, but into new, engaging ones for young people.

+1  A: 

This book is really good and is free under thee GNU Free Documentation License: http://www.greenteapress.com/thinkpython/thinkCSpy/

It uses python, one of the best programming languages for beginners, that allows you to introduce both, the structured and Object oriented programming concepts without having to deal with language-specific limitations or complexities.

Sam
i dunno about the book, but thats a cool idea
Greg Dean
I just don't like the idea of dynamic languages for teaching intro CS courses. CS students have enough trouble keeping the compiler happy. Getting vague errors and being able to happily misspell everything and only getting runtime errors is a bit too much for me for early CS.
BobbyShaftoe
+4  A: 

I would go on a limb here and actually argue that if you are designing a course for students who are CS majors or who are likely to program professionally in the future, you should insist on having no official textbook.

Beyond the many limitations of most textbooks on programming, I believe that programming is one of those skills where it is not a good idea to provide students with an official and structured "crutch" such as a textbook. Today it is more important to encourage them to learn how to find information themselves, and more importantly, to be able to judge the many available resources for quality, relevancy, and applicability. Thanks to the internet, there are now numerous resources for every language, API, or technique, and a critical skill is for students to learn by themselves.

So in my view, go ahead and provide your lecture slides online. But for those students who seek to learn more, experiment, etc., it is important to encourage them to think for themselves and be smart knowledge consumers early on. Otherwise, you will "breed" developers who years down the road will not be able to accommodate changing technology or imperfectly-documented frameworks.

When I was a kid, there was only one book in my language about programming, so I read it and ended up stuck within what it covered. When I got my first IDE with language reference (good old Borland), it encouraged me to learn by myself, everything from control structures to concepts like polymorphism.

Uri
I thought about the "no book, just handouts" idea... but I decided against it because at this level, students always need some sort of handle on a well structured document (that's why textbooks are so popular)... What do you think?
Dervin Thunk
I come from an educational system where the vast majority of students cannot afford textbooks or read English well enough to benefit from the official textbook. And I would argue that it made most of them much better programmers.
Uri
My school relied on the lecture and tutorial slides and they were good enough. If you needed anything else, there's enough online. I strongly agree with that view for programming (not for algorithms)
Uri
That's a good argument of programming vs. algorithms...
Dervin Thunk
As someone who as taught at University level in the UK, I would go further. Provide nothing at all. The students should be taking their own notes - spoonfeeding does them no favours.
anon
@Dervin: a well-structured document could just as well be a short guide you write yourself. If it's understandable yet basic enough that the students still have to seek out other resources, you're probably doing them a favor.
David Zaslavsky
I completely agree with the arguments. providing some good links for online reference is, IMHO, the way to go.
jcinacio
In my opinion, you should encourage both: having a framing book and researching particular subjects from other sources. A book gives you a comprehensive structure to follow the course and provide concepts that you can miss if only studying from disconnected articles.
Sam
@Neil: I disagree. While you are teaching a class, undergraduates are often busy transcribing. If you use a lot of code and diagrams, you can only get them to listen rather than write if they have the slides.
Uri
@Uri - then how did they manage in the hundreds of years before PowerPoint?
anon
I had a course taught with Latex Slides or whatever it was called :)
Uri
I respectfully disagree with this. Books have this property of having more information.
BobbyShaftoe
@Uri, most people learn more from transcribing as they listen than from just listening. I would not provide slides.
HLGEM
A: 

Here are my top three in order:

Code Complete
The Pragmatic Programmer
The Art of Unix Programming (this isn't unix specific despite it's title)

Thees books helped me tremendously, but I didn't find them until way after I graduated from college. It would have been nice if a professor had recommended them.

Ok, maybe add Why's Poignant Guide if your looking for something "new and engaging to young people".

Seth Reno
I could not upvote you enough.The only thing I think you're missing is an introduction to programming... See my comment :)
David Wolever
Four excellent books about software development praxis. Very good for professional developers, less good as a "best book" in a 'Introduction to programming' university course, imho.
Roberto Russo
@Robert - I agree on the first three, I didn't read the questions well enough. I do think Why's Poignant Guide is a fun intro though.
Seth Reno
A: 

Your question begs another question - what do you mean by "fundementals"?

Edit: Your comment pointed me to another question which supplies data on what a bunch of other people think are fundementals, but it doesn't answer my question: What do you think are fundementals?

Answering this question (should be less than half a dozen things) is crucial for any course designer - I speak as someone who has designed courses in tertiary and commercial education in the UK. But no-one can answer for you - it's the prime creative decision for any courseware.

anon
I asked this: see answers at http://stackoverflow.com/questions/660695/what-should-be-taught-in-a-fundamentals-of-programming-course-at-university
Dervin Thunk
+1  A: 

My wife learned to program with How To Design Programs (http://www.htdp.org/), and I was quite impressed by what she learned. I'm also quite fond of Dive Into Python (http://www.diveintopython.org/), and Practical Programming: An Introduction to Computer Science Using Python (http://pragprog.com/titles/gwpy/practical-programming -- I know three of the four authors, and they are all excellent teachers).

David Wolever
A: 

One of the courses I learned the most from in college (number theory, yes a math class with no textbook!) was the one that didn't have a textbook. It made us awfully uncomfortable the first week or so though. As someone who has taught, I later came to the realization that it is good for the students to get them out of their comfort zone.

Even if you decide to use a textbook, consider this. I used to design a project as the final grade for each class. I would define only what they needed to do to get a B. Then I told them that anything above that would get them extra points toward an A. That would especially include doing things that we did not specifically cover in class. The results were amazing. Since I didn't define how much extra they had to do for an A, they went way overboard and did much more work than anyone would have expected. And becasue the project was not designed with the textbook in mind, they really had to reach outside the cookbook type instructions in the textbooks.

I'd also consider adding a little realism through the class. I used to have them do an assignment and then give it back the next week and say, "Oops the requirements changed, you need to make it do this instead."

I have found through the years that more you spoonfeed students, the more harm you cause them in the long run. If you expect them to do more and to learn more and to stretch to the farthest extent of their abilities, you will be surprised at how much smarter they will seem and how much more they can do than you would have initially thought. They won't like it at first and you won't ever be popular. But a teacher's job is to teach not to be popular.

HLGEM