On Lambda the Utlimate, Ehud Lamm points to a short but informative post by Ed Felton titled Why Understanding Programs is Hard. Being a programmer I agree with Ed that this unpredictability of programs does make software development fun. It's also instructive, as a programmer, to remember how easy it is to build useful programs that aren't easily tested. How would we test these programs? By induction? (Hmm ... I need to think about this.)
But it's also important for ordinary users of programs to have some idea about the nature of software and the ways in which our computing systems are forcing us to think again about knowledge, learning, and experience. This reflective aspect of the development and use of computers can help us look again at how we use language, how it both informs and shapes our experiences and how we make sense of them.
Last year, my friend orcmid posted an informative description of what computers know and what programmers know, Orcmid's explanation is instructive for programmers and for those interested in the nature of our interactions with computer systems and applications. The nature of programs and their actions in the world is a source of wonder. It is pretty amazing how well it all works. And as was suggested here, we're responsible for making it work at all. Sometimes it is fun.