The Assayer: Python for Software Design: How to Think Like a Computer Scientist The Assayer - book reviews and discussion for the free-information renaissance
home    help    links    log in    log out    add or review a book    contact
Browse by    subject    author    title    reviewer

Python for Software Design: How to Think Like a Computer Scientist

AuthorsAllen B. Downey, Jeffrey Elkner, Chris Meyers Entered2000-12-26 00:23:33 by bcrowell
Editedit data record FreedomCopylefted: anyone can read, modify, and sell (disclaimer)
SubjectQ.A - Mathematics. Computer science (programming languages)
This link was reported to be OK by user Ben Crowell on 2002-02-09 10:27:08
You can't update this URL or report it OK or broken because you aren't logged in.
ReviewYou can't add a review of this book right now because you're not logged in.
It's good. It's free. It matters.
by Ben Crowell (crowell09 at (change 09 to current year)) on 2002-03-02 10:33:46, review #178
better than 95%
better than 80%
A new hope

Long ago, in a galaxy far far away, Bill Gates and David Lien made it possible for me to learn computer programming on a TRS-80. (This was before Bill went over to the dark side of the force, but that's a different story.) Bill wrote Microsoft BASIC, and Lien wrote Radio Shack's informal and unintimidating tutorial on programming. The beauty of it was that both these nifty items came with your computer as freebies. It was assumed that every computer owner would learn to program, and if you needed some nontrivial examples to play with, the usual method of acquiring games was to type them in from source code listings in books like David Ahl's 101 Basic Computer games.

Then the dark side grew stronger, and the Republic fell on hard times. The world of microcomputers became a lot less inviting for the beginning computer nerd. Programming books didn't come with Macs or IBM compatibles, nor could you get programming tools for free. In terms of languages, this dark age ended with the advent of free software like gcc and the Perl and Python interpreters, and now there's once again a free book on programming -- one that I can recommend to the generation who first noticed computers because of Lara Croft.

The title of "How to Think Like a Computer Scientist" betrays its highfalutin' educational purpose. It's aimed at the high school or college classroom, but just like Lien's funky classic, it would make an excellent self-study guide, and it, too, has a sense of humor:

It's free. It matters.

I mentioned it was free, didn't I? And it's not just free, it's open-source and copylefted. This is both unusual and important. Although On-Line Books Page and Internet Public Library have catalogued thousands of public-domain e-texts, you can still recite the titles of the world's open-source books without stopping to draw a breath. Who cares? Well, kids' parents may be pushing them to learn about computers as a career move, but if anything about programming is really going to catch their imagination and make them realize they can change the world, it's the free information movement. If Linux let the free-information community eat its own dog food, How to Think Like a Computer Scientist lets them eat their own baby food.

The open-source flavor comes through in various ways. There are Java, C++, and Python versions of the book. I read the Python version, which was my first introduction to the language. The book has also been translated into French, and is available as HTML and LaTeX. This proliferation of versions is a good thing for users, and should also make it possible to fit it into more schools' programs. It's hard to imagine how this many versions could have been created and maintained except as an open-source project. The power of parallel debugging is also in evidence: the low frequency of typos is particularly remarkable since the Python version is very new.


Oh yeah, content. The book starts off with procedural programming, and then moves on to object-oriented approaches. (I suspect that many high-school teachers who use the book for the first time will be teaching themselves OOP from the second half while their students learn algorithms from the first.) As implied by the title, there's a lot of emphasis on teaching computer science not just as a technical trade but as a mental discipline. Each chapter is designed to introduce the minimum of new language constructs needed to get at an underlying concept such as encapsulation or incremental development.

After seeing so many textbooks written in the impersonal, omniscient style of Isaac Newton, it's pleasant to see that this book encourages the reader to find things out for herself: the text is sprinkled with mini-exercises in which the author poses a question about what the Perl interpreter would do in a particular case, and asks the reader to carry out the experiment. This is what's known in edspeak as active learning, and it's a Very Good Thing.

No open-source experience would be complete without a little whining, complaining, and kibbitzing:


The highest possible purpose of education is to subvert our youth. This book does an admirable job at that, not because of what it says but because of what it is: an experience that will probably free a great many young people from the idea that ideas can't be free. Their kids may be the first generation that considers owning information as much of an anachronism as owning people.

Notes added later

This review was discussed on Half-Empty, May 2001.

Some of the people connected with the book have now started up their own publishing house, Green Tea Press, and have print-published it. They sent me a review copy in Feb. 2002, and I revised this review based on the improvements they'd made.

Information wants to be free, so make some free information.

This review has been revised. Earlier versions (viewing not yet implemented): -1 -2 -3 -4 -5 -6 -7
You cannot revise or reply to this post because you are not logged in.

The contents of this web page, except the parts contributed by members of The Assayer, are copyright (c) 2000 by Benjamin Crowell, and are copyleft licensed under the Open Publication License 1.0, without options A or B.