While programming problems these days might not be so academic, or theoretical as they used to be, there are still plenty of things to solve. Why does this program do strange things, how can we glue these components together, how do I make this program do Y when it does X.