Or even better, try to solve problems you think of as tedious in ways that are not tedious. I always find it strange that so many programmers complain about boring grunt work. There is a perfect opportunity there to invent tools that optimize and speed up this boring grunt work. The next level is to make those tools work in a way that is usable and intuitive for other programmers. The end result is worth gold (or glory, depending on what you're after)
Good practice is all about doing hard things. Doing the same things that you can already do perfectly (both in music and programming) leads to no improvement. Doing things you consider hard leads to amazingly quick improvement.
Musicians that concentrate on practicing only the hard and unpolished parts of their performance are more effective than the ones that practice both the easy and the hard parts. Those musicians that have found a way to "modularize" their practice and split it to the tiniest most focused bits are the most successful ones. (This is not easy because beyond a certain point the flow of the music is lost)
In programming we must do both the easy and the hard parts, but we can turn the easy parts into hard by writing code to make them even easier or to completely eliminate them.