Day 5 of the course: Paul Lu gave a lecture on Make in the morning, and students had a chance to work on problems of their choice in the afternoon. Of all the tools we teach in this course, Make is the least satisfying (at least to me): the basic concept is simple, and I wouldn't run a project without some automating repetitive tasks, but Make's syntax and limitations are repellant.
The problem is, the alternatives available today are equally unsatisfying. Ant requires human beings to write XML (the assembly code of the internet), and extending it requires serious skillz. Its creator, James Duncan Davidson, said back in 2004 that if he had it to do all over again, he'd have used a general-purpose scripting language as a base instead. Lots of build systems do, including CONS, SCons, and Rake, but they're all still niche products with small user bases, weak IDE integration, and even weaker documentation.
Most tellingly, none of these tools has a native debugger that's as useful as breakpoint-based debuggers for conventional programming languages. Rocky Bernstein's "remake" for GNU Make comes closest, but figuring out why something didn't get updated, or why hundreds of commands are executing when they're not supposed to, is still hard. This course is now 12 years old, and for 11 of those 12 years, I've been wishing for something better to offer students so that they could see just how much work task automation could save them. I'm still wishing...
Tomorrow (Monday) is Day 6 of the course; Francois Pitt will talk about computational complexity in the morning, and we'll start object-oriented programming in the afternoon. I'm enjoying it so far — hope the students are too.