Simple Is Good

November 14, 1994

I was thinking about something last night. Actually, I spent all of yesterday worrying about point-sampling issues, so I couldn’t get point-sampling and antialiasing out of my head, even until morning. But between that, I realized that “Simple is good” has become my prevaling philosophy, and I didn’t tie it all together until last night after a discussion with my roommate and another student. They were arguing that radiosity was better than path-tracing because it was faster and produced better results. I was arguing that path-tracing was better because it was simpler, more physically accurate, could model more optical phenomena, and could be more easily parallelized with large SIMD arrays. The argument reminded me of the kind of arguments that must have gone on twenty years ago, when the major visibility algorithms were these complex cookie-cutters and scanline rasterizers and stuff. I’m sure that when Z-buffering came along, everyone who liked the complex but fast algorithms laughed and said that Z-buffering was expensive in memory and hardware, didn’t work with vector displays, etc. etc. Eventually the Z-buffer approach won out because it was simple and as hardware got cheaper, it was easier (and faster) to use it than to implement a complex and not very flexible visibility algorithm. Last night’s argument was just like that. As hardware speeds up, path-tracing will win out because you can implement a great path-tracer in a few days, but it would take anyone several months to make a radiosity program that generated comparable images. Sure, that program will run faster than the path-tracer, but in ten years no one will want to implement it when a path-tracer will run in 1 second, so radiosity will lose.

This “Simple is good” philosophy seems to have influenced many of my other views, too. UNIX is “we’ll give you a few tools and allow you to use them together well”; VMS is “we’ll give you everything on this planet.” C is “the language should be a minimal as possible, with everything else in the library”; C++ is “the language should have so many features that you never feel the need for anything.” vi is “we’ll give you as little as you need, and you can use pipes for the rest”; emacs is “we’ll give you everything and then more.” Libertarians are “government should be as small as possible and no bigger”; Democrats are “government should do and be everything under the sun.” Same with neural nets vs. complex AI algorithms, plane equations vs. edge walkers, RISC vs. CISC. I’m sure I could come up with more examples, but it seems that everything I strongly believe in falls into this “Simple is good” category.