For a long time, I have believed that Jon Udell
has the best job in the world. He gets to build interesting systems and talk to interesting people about interesting futuristic things, and best of all, he gets paid for it.
A couple of years ago, though, I discovered Brian Hayes
' column in American Scientist
magazine. His job looks like a lot of fun too: every couple of months, he has to explore some interesting and revealing idea that is somehow related to mathematics and computing. Some of his past columns have now been collected in Group Theory in the Bedroom
, and they are as entertaining as they were the first time around. The opening article talks about the most elaborate mechanical clock ever made; others look at the problem of determining where the continental divide actually is, different ways DNA could have coded for proteins (but didn't), the statistical distribution of violent events, and what, if anything, "equality" actually means. Fans of Martin Gardner's long-running Scientific American
column are particularly likely to enjoy Hayes' tone, insight, and playful curiosity.
Demaine and O'Rourke's Geometric Folding Algorithms
is the raw material that popularizers like Hayes mine to create their essays. During the past decade there has been an explosion of interest in several closely-related problems: how to fold shapes up in two or more dimensions, and how to cut folded material so that it has a certain shape when unfolded. Applications range from drug design and robotics to forming metal sheets; the algorithms range from straightforward (though never trivial) to mind-bending.
This book does an excellent job of surveying the state of the art. There are copious examples and illustrations, and the authors manage throughout to convey the excitement of working in an area where many basic questions are still unanswered. Pick a page at random, and there's a fair chance you'll find a conjecture that is still awaiting proof. It is not for the mathematically challenged, but I expect graduate and undergraduate students will be finding research projects in it for years to come.
Cawood and Fiala's Augmented Reality: A Practical Guide
is aimed at less advanced readers, but offers just as many avenues for the curious to explore. (Disclaimer: Pragmatic Bookshelf published my last programming book, and will be publishing my next one as well.) "Augmented reality" is the practice of overlaying a virtual world on top of the real one, i.e., of synthesizing video data in real time to make imaginary objects appear to exist in the real world. Today's systems rely on contraptions that combine video goggles with a camera; the goggles put a small screen in front of each eye, while data is injected into the signal from the camera to create tanks, flying fish, or whatever else the programmer wants.
Most of the book is taken up with very detailed descriptions of the code required to glue the real and virtual worlds together. At the end, the authors pull everything together by creating a virtual tabletop tank game. Basic computer graphics concepts are introduced as needed, as is a little bit of AI (for navigating mazes). I don't think all the code examples were necessary---anyone capable of understanding the book could browse the source for themselves in most places---but this would still be a good starting point for an exciting undergraduate course.
Fourth on my winter reading list was Armstrong's Programming Erlang
, also from Pragmatic. The subtitle, Software for a Concurrent World
, explains why so many people are suddenly interested in functional languages like Erlang: there's a feeling that traditional imperative languages simply can't cope with a world of multicore processors and web services. I'm still waiting for evidence that it's easier to build such systems with functional languages, but even if it's not, programming in Erlang and its siblings is like stepping into a parallel universe.
Armstrong's book is a workmanlike introduction to Erlang in particular and parallel functional programming in general. Its author one of the language's creators, and that occasionally shows through in discussion that is more nit-picky than newcomers probably need. The wealth of examples more than makes up for that, though, and everything is solidly grounded in real-world needs. Many of the underlying ideas can be used in other languages, even if not as gracefully, and should be in every programmer's mental toolbox.
Last but not least are Thatcher et al's Web Accessibility
and Sydik's Design Accessible Web Sites
. Their common theme is making the web usable by people with disabilities, particularly visual handicaps. A quick audit of the web sites I've built in the past three years was pretty humbling; as the number of elderly web users grows, and as regulatory agencies start to enforce equal access rules, closing the gap between what is and what should be is going to become more and more important.
Of these two books, I preferred Sydik's, primarily because it was shorter (less than half the size of Web Accessibility
). On the other hand, the latter covers topics in more depth, and assumes its readers are somewhat more advanced. Both have plenty of pointers to tools and primary references; either would be a solid basis for several undergraduate lectures or an intensive two-day course in industry.
Joe Armstrong: Programming Erlang: Software for a Concurrent World
. Pragmatic Bookshelf, 2007, 978-1934356005, 536 pages.
Stephen Cawood and Mark Fiala: Augmented Reality: A Practical Guide
. Pragmatic Bookshelf, 2008, 978-1934356036, 328 pages.
Erik D. Demaine and Joseph O'Rourke: Geometric Folding Algorithms: Linkages, Origami, Polyhedra
. Cambridge University Press, 2007, 978-0521857574, 496 pages.
Brian Hayes: Group Theory in the Bedroom, and Other Mathematical Diversions
. Hill and Wang, 2008, 978-0809052196, 288 pages.
Jeremy Sydik: Design Accessible Web Sites
. Pragmatic Bookshelf, 2007, 978-1934356029, 328 pages.
Jim Thatcher, Richard Rutter, Christian Heilmann, Andrew Kirkpatrick, and Cynthia Waddell: Web Accessibility: Web Standards and Regulatory Compliance
. Friends of ED, 2006, 978-1590596388, 696 pages.