How much did you remember from your high school Spanish or French class?
If you’re like most people (including me) probably very little. We all know that there’s a difference between hearing something in a classroom and being able to apply it in context later. And just like your forced two years of High School language classes didn’t help you actually learn the language, most software development (aka programming) classes have this same problem.
There must be a better way to help people retain more knowledge during a class…RIGHT?
Here are a few tips and tricks for increasing retention that we’ve learned in 20 years of teaching people how to write software.
- Takeaways on resources
When learning a new language or piece of software, developers need to be taught how and where to look for more information. For example, developers who are learning front end development will be served well if they know how to search StackOverflow, Github, as well as use code playgrounds such as Codepen or Plunker. Knowing where to find help/information when they are on their own will serve them better than additional exercises. Cheatsheets (also known as job aides to the learning professional), such as the ones provided by dZone, are another easy way to help developers.
- Time for practice
If we don’t use it, we lose it. This might apply even more to programming than other fields. Developers need time to practice with the new tools/languages they’ve learned in a training class. Practice could come in the form of internal hackathons or getting a chance to work occasionally on a different team (that uses a different development stack).
- Quizzing and Testing
Checking our knowledge with quizzes and tests is actually one of the best ways we can learn. Numerous peer reviewed studies across many contexts show the power of testing. Testing not only tells us what we do and don’t know, but guessing wrong actually changes how we store the knowledge in our brains. Testing after a training session can help us avoid the fluency illusion, i.e., how it is we can be familiar with something without really knowing it.
- Code Reviews
Code reviews are common in the software industry. They are akin to peer reviews in the medical industry, but not as gory. Using a code review process during the classroom is a great way for everyone to learn by reading, reviewing, and analyzing code written by others. It also forces the learner to justify (read: think through) why they did what they did.
- Debugging Broken Code
Over the years, people have done studies that the largest effort in software development projects if spent during the ‘maintenance’ phase. Some studies claim that 70% of the level of effort is in maintenance. Very few of us ever get to join pure so-called greenfield projects. In fact, most of us when we join a team are responsible for extending the features or functionality of an existing product. To be successful in that role, you have to be really good at reading (and debugging) other people’s code. Creating opportunities in the classroom to debug, enhance or fix broken code, teaches people not only how to learn to read code, it also helps them learn how to work through existing code bases.
Rubber Duck Debugging is a software development practice wherein developers explain how code works to a rubber duck to hear their logic/rationals aloud.
- Test First / Test Driven Development
Nearly everyone in the software industry agrees that test driven development (or test first development) is the way to build software. It is no doubt a paradigm shift in thinking, and is difficult to do where you are adding functionality to a 5-year-old codebase. But if you’re doing greenfield development, new feature development on a modular system, or learning how to program, test driven development should be considered a requirement.
By using TDD concepts in a course, developers learn two things: 1) how to write good test cases, and 2) how to write the code that first fails and then passes. As we all know, sometimes (in fact, most of the time), we learn best through our mistakes. By writing something that fails first, and then learning how to fix it to ‘work’ reinforces the programming concepts taught during a course.
Unfortunately, retention is poor after finishing most software classes. Developers consume the content during the class but few are able to apply it later. But it doesn’t have to be this way!
There are steps, tools, and strategies teams can use to help their developers learn new technologies and ensure they are getting a good ROI for their training dollars. Implementing these ideas can help your team improve your training ROI and give your developers the knowledge they need to succeed.