I would say following a tutorial trying to understand how the approach and why it would be pertinent to the task at hand. Then rewriting the code to perform the same tasks with a different approach or with added functionality. Try to keep the tasks relevant to a game pipeline and a real-time render environment.