I think students get a deeper learning when they are trying things out. In my "crazy" younger days I spent years building games, going through help files, and trying out every command that I could in programs like QBasic and Microsoft Access. Today, we have too much to learn for that to work efficiently. That's why we spend time in a classroom learning the basics, the theories, and the applications. Whether we are programming a robot or analyzing a circuit diagram, I try to give students a challenge and let them apply what they've been taught to come to a solution. While that trial and error can be frustrating, I think a deeper learning comes from that frustration.