All or Nothing Debugging
I've recently been doing some fun (and unprofitable) work on a replica Altair 8800. This has been a real blast from the past, but it has also made me think of how much things have maybe come full circle over the years. I guess its true. The more things change, the more things stay the same.
I have a soft spot for the old Altair. When I was a kid I read voraciously about anything and everything. About a year before the Altair came out, I borrowed a book from the library called "Basic Computer Programming." It was written before there was such a thing as BASIC, mind you. The title simply meant "fundamental." The text discussed an imaginary computer called TUTAC and the book did a credible job of teaching you about indexing, looping, and all the other intricacies of programming without having access to any real hardware. Years later my mother found a copy of the book and gave it to me as a gift. I was thrilled to see it again.
This approach was common back then (Knuth, after all, had MIX which was another fake computer for learning). Computer time was worth hundreds of dollars per hour, so you couldn't just have some student banging away at the computer all day. I was fascinated with whole idea, but had no way to get access to a real computer.
Then the Altair arrived. I realized that maybe I could get access to a real computer. Of course, as a kid, the price of the thing was way out of reach. I never got a real Altair, nor even any time on one. But it made me realize that it was possible.
Personal computers like the Altair changed how we do software development. Are you old enough to remember the term "desk checking?" That was the process of reviewing your code by hand to catch errors before submitting them to the computer. This was especially important in places where you put your deck of cards on a bus where they were taken to a remote computer and you got a print out the next day on the same bus! To wait 24 hours to find out you transposed two letters in the word FORMAT was heartbreaking.
Who desks checks anymore? Your computer is sitting idle anyway. Let it throw out the error messages for you. Another thing that has changed is internal visibility. The old Altair had a nice exposed bus and any of my logic analyzers do a fine job of letting me watch what's going on inside the box. Most of my paying work these days are with CPUs locked up inside of a chip (either hard coded silicon or an FPGA) and you can't really look inside of it easily. Sure, with the FPGA I can add a logic analyzer core, although I find that is sometimes too intrusive (and expensive -- the license for those isn't cheap!). And more CPUs now have some sort of debugger interface built in which is really helpful.
So maybe there are times where I should go back to the practices of my youth and desk check before I start throwing things at the hardware. After all, a computer 24 hours away is about the same as one locked up inside of an IC package. But maybe things don't just stay the same. Maybe they cycle. We go from having the internal visible, to hidden, but then exposed again via debugging and emulation interfaces. Maybe the next round of technology will hide it for awhile again.
Meanwhile, I have to remember to do paying work in addition to tinkering with the old hardware.