Generic programming and design new thinking.pdf