The best way to understand a program is to try to change it.
The challenge in theoretical computer science is not just to solve problems, but to understand the nature of problem-solving itself.