A Pedagogic Philosophy of Software