It can certainly be puzzling. I can’t see how the pieces fit together and don’t know how to solve the problem, but I can always count on finding some clues online. I learn the most when I discover my own solution to a problem. I refine my knowledge by observing the solutions of others. Time melts when I’m working away.
Was that last paragraph about Rubik’s Cubes, or computer programming? Read it twice and you might see how it applies to both. It may not immediately be apparent, but I will show you how lessons I’ve learned from cubing apply to programming.
There’s No Secret Knowledge
Knowledge is not hidden. It’s not in a library on the other side of the world. It’s not behind a lock and key. You don’t need to achieve a certain rank to gain access to it. Knowledge is everywhere.
Programming is retrieving knowledge and using it. As a co-op Software Engineer at Hootsuite, programming involves scouring the web for relevant Stack Overflow posts, and reading documentation on frameworks. Programming involves applying that general information to a very specific problem. This pattern of learning has been familiar to me long before I started programming: when I started solving Rubik’s Cubes in 2008. With no internet access through a smartphone, I carried three sheets of paper detailing everything I needed to know about the puzzle. These described 57 OLL and 21 PLL cases, and the algorithms to solve them. If I didn’t know a case, I’d look it up and use it. I learned that the world has answers for our questions, even before they’ve formed.
Learn by Doing
I’ve found that the best way to learn the unfamiliar, is to jump right into it. No amount of theoretical explanation can replace figuring things out for yourself.
In the popular Fridrich method of solving the cube, there’s a step known as OLL (orientation of the last layer). A cuber must recognize 57 cases and memorize 57 algorithms. Let me tell you, memorizing that many algorithms becomes a chore after a while. To take a break, I’d play around with the cube and observe what would happen. I found that it isn’t rare to arrive at one of those 57 cases myself. Given a known case and algorithm, I’d try the mirror, try the inverse, or try breaking it down into segments to combine it with others. I was able to stumble across a dozen or so of the 57 through this trial-and-error process. This made them much easier to remember (since I discovered them). I also gained a better understanding for how they work.
Much of the Hootsuite front end is written with the Backbone.js framework. Having never worked with Backbone before, I set out to read the documentation. Doing so helped me gain familiarity with the functions and features available, but I still didn’t feel comfortable. It was nothing like diving into the Hootsuite codebase and having a go at it. The volume of new information and unexplained unknowns was overwhelming, but it kickstarted my understanding in a way the documentation could never do.
Solving Rubik’s Cubes, programming, and likely anything else, are best discovered when you start by doing.
Learning by Observing the Best
Doing has given me a wealth of experience, but it can only bring me so far. I eventually need to look to others for refinement. And who better to learn from than the very best?
A wonderful way to discover better solutions and best practices is to observe what the masters do. Open source code is abundant, and any Rubik’s Cube solve can be reconstructed with just a video. Here’s a reconstruction of the 5.55 second world record by Mats Valk, using the standard notation:
D2 U’ R2 U F2 D2 U’ R2 U’ B’ L2 R’ B’ D2 U B2 L’ D’ R2 // scramble
x y’ // inspection
F R D L F // cross
U R U’ R’ d R’ U R // 1st pair
y U2′ R’ U’ R // 2nd pair
U L U’ L’ d R U’ R’ // 3rd pair
y’ U’ R U R’ U R U’ R’ // 4th pair (OLS)
R2′ U’ R’ U’ R U R U R U’ R U2′ // PLL
By applying the same scramble and following his moves, we can observe what he did in just 5 seconds for as long as we want. By examining what, we can learn new algorithms. By asking why? we can discover new perspectives. We refine our knowledge and our techniques when we do so. As a friend once put it, “do what fast people do.” There’s no doubt that you’ll improve if you’re learning from the best.
Reading code written by masters of programming is the same. It helps if the code is properly explained with comments, but deducing the reasons behind it is an exercise in its own right. Observing can refine our thought processes and teach us solutions to problems that we wouldn’t otherwise conceive.
Everyone wants to be a master. What’s more, we want it overnight. We want a shortcut. But short of magic lamps and devils to make deals with, there is only one way. I claimed earlier that there is no secret knowledge. However, there is a secret explaining why few can solve a Rubik’s Cube in a matter of seconds, and few can write an operating system in an afternoon. That’s right.
You’ve heard it a million times. Part of you knew I would write this. However, I must say it anyway because it really is the truth.
The improvement seen above is a direct result of the countless hours I spent cubing. Unfortunately, forcing yourself to practice isn’t easy. That’s why this second secret comes in. (So secret, you didn’t even know it existed.) You have to love practicing. Love it to the point that you don’t consider it practice. Love it to the point that it doesn’t feel like practice. Love it to the point that you tell yourself, “just ten more minutes” for hours.
When programming something exciting, I get the same feeling. I’ll let it eat into lunch. I’ll hold off checking the email that made my phone buzz. Nothing can stop me from coding. Although difficult to measure, I feel myself to be a much more adept programmer afterwards.
Though speed solving Rubik’s Cubes and programming computers are very different activities, lessons learned from one apply to the other. For both, all the necessary knowledge is out there. We learn best through experience. We refine through observation. We achieve mastery through practice and the love of practice. After all, “practice makes perfect.”
The next time you think about your hobbies, I hope you’ll see them from an entirely different angle.
- CFOP (Fridrich) Method
- Lightning Talk on Cubing and Cube Art (and solving a cube in 13.26 seconds)
- Mats Valk Rubik’s cube World Record single: 5.55 S
To Max Brodie, Noel Pullen, Kimli Welsh, and David Chan for valuable suggestions and editing.
About the Author
I’m a student of everything worth learning who loves computers, Rubik’s Cubes, and breakdancing. I work as a co-op Software Engineer working on the Hootsuite Publishing team and study Computer Science at the University of Waterloo. Follow me on Twitter @danielque.