One of our project authors, Marlena Baker, is a big proponent of Practice Perfect and author Doug Lemov in general. We’ve recently been discussing Practice Perfect, and how we might encourage more developers to follow its framework for developing deep mastery.
Practice Perfect: 42 Rules for Getting Better at Getting Better by Doug Lemov, Erica Woolway, and Katie Yezzi, offers valuable insights into how we can improve our skills through deliberate and structured practice. While the methodology itself is broadly applicable across various fields, its principles can be particularly beneficial for learning software development.
In this post, we’ll look at some of the key lessons from the Practice Perfect methodology and how you can apply them to mastering software development skills.
1. Encode Success 🧠
Practice should be designed in a way that ensures the practitioner is executing skills correctly. It’s about creating the right habits from the start, rather than reinforcing mistakes or inefficient methods.
The best practices here are to craft specific, measurable objectives for each practice session, regularly seeking feedback on your work, and ensuring you’ve solidified foundational knowledge before moving to complex topics.
Application in Software Development:
- Set Specific Objectives: Ensure you know exactly what you want to practice during your practice session. Crafting a deliberate plan will help you make the most of your time and choose practice projects effectively.
- Solidify Your Fundamentals: Make sure you solidify programming fundamentals before moving on to advanced topics. Practice the basic programming concepts thoroughly, such as data types, control structures, and basic algorithmic techniques, until they become second nature.
- Code Reviews: Regularly participate in code reviews where more experienced developers can provide feedback, ensuring that your practice leads to the correct application of concepts.
Examples
Bad practice: Just trying to build things without clear goals or requirements. This can lead to a lack of focus, missing key learning opportunities, and developing sloppy coding habits.
Good Practice: Practicing coding by working through real-world scenarios or problems that simulate actual challenges you will face in the workplace. This approach not only helps in understanding how to apply coding skills in practical situations but also helps in learning how to navigate and solve complex problems effectively.
Good Practice: Repetitive Practice with Variation. Repeating similar types of coding challenges but with variations in the requirements or constraints. For example, writing a function to sort a list, and then modifying it to handle sorting when some elements are the same, or when there are null values.
This type of practice helps in deeply understanding the problem space and solutions, while also preparing you to adapt to different scenarios.
2. Practice the 20 🎯
This is about following the Pareto Principle for skill development. The Pareto Principle is that 80% of outcomes are driven by 20% of causes. Applied to any field, we can anticipate that 20% of our skills will cover 80% of what we’re asked to do. Beyond that, it will be infrequently used skills and edge cases.
So following Pareto for practice means focus your practice on the 20% of things that are used 80% of the time in your field.
Application in Software Development:
- Essential Skills Focus: Identify key skills that are most often used in software development, like version control (e.g., Git), debugging, and a core programming language like Python or JavaScript. Spend the bulk of your practice time refining these skills.
- Project-Based Learning: Build projects that require frequent use of these essential skills to solve real-world problems, thereby reinforcing your learning.
As a junior developer, it can be difficult to know which skills are essential. Consider following a structured curriculum, like App Academy Open or The Odin Project, as these programs are designed to train learners to get their first software development job. Curricular Projects are also organized into learning paths so you can practice the essential skills in a real-world context.
3. Make Practice Game-Like 🎲
This is one of our favorites at Curricular. The closer your practice conditions mimic the real-life situations in which you'll apply the skills, the better.
Application in Software Development:
- Simulate Real-World Scenarios: Engage in coding challenges and hackathons that simulate real-world pressures and problems.
- Use Real Tools and Environments: Practice with the tools and environments that professionals use (e.g., integrated development environments, Linux terminals, etc.).
Our practice projects are designed in collaboration with hiring managers and engineering leaders because we feel that practicing real development is the best way to learn how to solve real problems.
4. Unlock Creativity by Repeating 🔁
You might find it boring to do the same thing over again a few times. But it actually helps creativity by providing the skills foundation that fosters it. You’ll start to see how you can use these foundational skills to solve new challenges.
Application in Software Development:
- Refactor Code: Regularly revisit and refactor your code for efficiency and clarity. Each iteration helps understand different ways to solve the same problem.
- Practice Patterns: Learn and apply design and architectural patterns in your projects to see how various solutions can be implemented effectively.
Bad Example: Repeating the same LeetCode challenge without altering the parameters or seeking new solutions. This will help you become adept at solving that specific problem, but you'll fail to develop flexible problem-solving skills.
Good Example: Taking a familiar coding problem and solving it using different methods or under different constraints. For example, practicing sorting algorithms using different techniques and then applying each technique to different types of data sets, unlocking new insights each time.
5. Integrate Feedback Instantly 📣
Immediate feedback during practice helps in correcting mistakes and embedding the right methods into your skills repertoire.
Application in Software Development:
- Use Linters, IDEs, and GenAi: Tools like code linters and integrated development environments can provide instant feedback on code quality, syntax errors, and best practices. You can also use GenAI tools like GitHub Copilot to get feedback on your code.
- Peer Programming: Pair programming with peers or mentors gives immediate feedback and advice, speeding up the learning process.
6. Practice “Whole-Part-Whole” 🎂 🍰 🎂
Start with a complete performance, break it down into parts for focused improvement, then integrate back into the whole.
Application in Software Development:
- Analyze Complete Applications: Start by examining a complete piece of software, understand its architecture and flow, then drill down into understanding its components (modules, classes, etc.).
- Incremental Development: After understanding individual parts, work on integrating them back into your projects, ensuring they function seamlessly as a whole.
Conclusion
Looking for practice opportunities? Check out our practice projects, which help you follow these principles by targeting specific skills on real world projects. Most of our projects are available for free, so get started today.