If you want to learn a new skill, create a safe simulated environment in which to practice. I feel this is a lost technique for most technologist. Perhaps it is too easy for us to just start writing some new module in a new language just because we wish to learn. We think that we will just solve the real world (work) problem at the same time. I learned of this case recently.
A developer used their work environment to learn a new skill. In this case the programmer decided to learn design patterns. So to do this he started applying every design pattern he could to the application he was working upon. Now, if you imagine this is a beginner at the technique of pattern application then you may imagine that he may have gotten a bit carried away. And that is what I've heard happened. Now the code has nice fancy patterns, some quite complex and many are used just to experiment with the pattern. This happens to be code that is sold to clients, and the over exuberant use of patterns have made the code worse, and harder to maintain. Quite the opposite of the intent of design patterns. In fact had the programmer learned his subject well, he might have found that he was applying the 'cargo cult programming' anti-pattern.
What interest me is why this happened. Why did the programmer feel the need to learn patterns. Why did he apply them to the clients code base (application) while he was learning? Why did he not have a 'safe' sandbox to learn and play within. Why did the company allow this behavior - perhaps they encouraged it?
I think many of these root cause issues come down to a human need to learn, and that learning needs to take place in the appropriate place and context. In this example case the developer had a context (the work environment and the companies application code). But, clearly, this was not an appropriate place to learn this skill set.
What would happen if the developer had a sandbox that he could apply those skills he wished to learn and they after a few experiments with design patterns he would take that new knowledge to the actual work? This is a concept used in so many other industries, yet in an industry where creating virtual worlds and models are our forte, we don't use them for our own learning. We learn on our clients new application. A common behavior pattern is to learn the next skill needed by gold platting the current application.
Why not have a simulation-lab where this type of learning may take place?
My sister-in-law is in town to do a sailing level II course (she is skipping the level I - so that she can get certified to go on a training cruise in a few months) She has never really sailed. She has studied the books, knows all the equipment names, parts of the sail boat, she can talk like a pirate. But, there is some part of sailing that is experience. Knowing which way the wind is blowing just by the pressure effects on the hairs on your body. And the spacial relationships of the sail, boat, and wind - not to mention the difference in apparent wind, true wind, apparent velocity, etc. Being expected to captain a boat for the first time can be a nerve wrecking experience. Why not simulate this experience.
My wife created a mock up sail boat, a small model. A cardboard boat and a mast with a plastic sail. A little fan provides the all important wind. Switch it on and the simulation is underway - the learning begins. Sailing - like Scrum - is an empirical game. In sailing one measures the wind and always adjust to the wind's force and direction. Everything is relative to the wind. They spend the afternoon learning to sail in the simulation of the apartment. When the model doesn't provide the proper scale for the next lesson, a bit of refactoring on the mock up leads to the swiffer mop becoming the mast and the coffee table becoming the boat. This time the model is complete with main sail and jib. Now the simulation has taken on a complex relationship and there is no risk of capsizing or running aground.
When learning becomes experiential and fun humans retain more. We don't just learn in our heads, We use the whole body to process and store information. Remember the reference to body hairs. Yes, those tiny little hairs are how we know the direction and force of the wind. We have to learn to process the signals they are sending and map that sensory information onto the model of how a sail boat converts wind into propulsion. When a person has done this a few time, even if it is in a living room, they know how to sail.
So why are we in the high-tech industry not creating simulation labs? Why don't we have a Matrix Construct, where we down load an application that needs some refactoring and a few patterns applied. This simulation would not be the clients application code. But a reusable learning environment. If we value learning, and we better, because in the 21st century the modes of wealth creation changes - it is not how much you can produce, it is how much you can learn, and apply that knowledge.