{"id":14629,"date":"2015-10-09T08:00:16","date_gmt":"2015-10-09T12:00:16","guid":{"rendered":"https:\/\/simpleprogrammer.com\/?p=14629"},"modified":"2023-02-13T21:50:09","modified_gmt":"2023-02-14T02:50:09","slug":"deliberate-practice-for-programmers-a-framework-for-learning-on-the-job","status":"publish","type":"post","link":"https:\/\/simpleprogrammer.com\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\/","title":{"rendered":"Deliberate Practice for Programmers: A Framework for Learning on the Job"},"content":{"rendered":"<h2><b>Practice, practice, practice<\/b><\/h2>\n<p>\\\\n\\\\n<span style=\"font-weight: 400;\">Like most programmers, I am passionate about <a href=\"https:\/\/simpleprogrammer.com\/better-software-engineer-tips\/\">software development; it\u2019s natural for me to want to get better at it<\/a>. So, often I look up how to do that online.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">But it seemed that everywhere I looked, people were saying: \u201cPractice, practice, practice.\u201d I thought: \u201cOk, so what?\u201d Then, I looked some more and stumbled on things like: \u201cwrite more code!\u201d, &#8220;<a href=\"https:\/\/simpleprogrammer.com\/dont-code-katas\/\">Code Katas are the way!<\/a>&#8221; or &#8220;a programmer should practice programming by programming.&#8221;<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">Ever asked somebody about career advice and all you got was \u201cFollow your passion!\u201d It felt the same to me.<\/span>\\\\n\\\\n<b>\u201cPractice is the key to success\u201d<\/b>\\\\n\\\\n<span style=\"font-weight: 400;\">We\u2019ve heard such trite expressions so many times.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">Such kinds of advice lead us to exactly one place: nowhere land.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">I don\u2019t know about you, but when I\u2019m going out on a trip, I don\u2019t want to start the journey without knowing what direction to take.<\/span>\\\\n\\\\n<\/p>\n<h2><span style=\"font-weight: 400;\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-14635 alignleft\" src=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2015\/10\/Depositphotos_39627731_m-2015.jpg\" alt=\"young man scientist with glasses thinking\" width=\"350\" height=\"350\" \/><\/span><b>Have you actually read before\u00a0<em>how<\/em>\u00a0 developers should practice?<\/b><\/h2>\n<p>\\\\n\\\\n<span style=\"font-weight: 400;\">In my quest for answers on how we developers can perform\u00a0deliberate practice, I\u2019ve had to read many books, watch many videos, and take copious notes from blogs.<\/span><span style=\"font-weight: 400;\">\\\\n<\/span><span style=\"font-weight: 400;\">\\\\n<\/span><span style=\"font-weight: 400;\">Now, I want to save others the same frustration through which I went. I\u2019ve gone through all these notes and books and compiled some of the best ideas into a list that hopefully you\u2019ll love and apply to your work.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">Below you\u2019ll find a 7-step framework that we all can try. You\u2019ll then be able to incorporate your own tactics in addition to those I suggest.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">Here\u2019s an outline of the framework:<\/span>\\\\n\\\\n<\/p>\n<ol>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Set up your measurable goals: know where you\u2019re going.<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Break the goals down into discrete skills.<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Set up your practice plan: the operating procedure for you and your peers.<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Integrate the skill: understanding others\u2019 code.<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Incorporate feedback: staying on target.<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Reflect on your results: avoiding stagnation.<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Apply the law of the vital few: what\u2019s your 80\/20 like?<\/span><\/li>\n<p>\\\\n<\/ol>\n<p>\\\\n\\\\n<\/p>\n<h3><b>1. Set up your measurable goals<\/b><\/h3>\n<p>\\\\n\\\\n<span style=\"font-weight: 400;\">Never start an endeavor before having clear goals, especially on large scale projects.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">Goals should be made clear in your head so that they help you avoid getting distracted by less important work along the way.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">To then achieve it, you need to have a sense for what the destination will look like.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">Example of a bad goal: <\/span><i><span style=\"font-weight: 400;\">Understand system X thoroughly by the end of the year.<\/span><\/i>\\\\n\\\\n<span style=\"font-weight: 400;\">A better goal could be: <\/span><i><span style=\"font-weight: 400;\">Understand the 3 most used features, A, B, and C of system X by the end of the coming fortnight.<\/span><\/i>\\\\n\\\\n<span style=\"font-weight: 400;\">Note a couple of things about this rephrased goal:<\/span><span style=\"font-weight: 400;\">\\\\n<\/span>\\\\n\\\\n<\/p>\n<ol>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Sub-goals are clearly defined: \u2018thoroughly\u2019 or \u2018the 3 most important features\u2019 are too vague unless these 3 are listed.<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">They have a deadline that is not too distant. It should be a time frame that you can reasonably estimate.<\/span><\/li>\n<p>\\\\n<\/ol>\n<p>\\\\n\\\\n<span style=\"font-weight: 400;\">Your next steps can include consulting the architecture diagrams, looking at the user interface or asking a colleague for a walkthrough of the application. The idea here is to get a high-level sense of what you can expect to do on the project.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-14636 alignright\" src=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2015\/10\/Depositphotos_28996605_m-2015.jpg\" alt=\"Depositphotos_28996605_m-2015\" width=\"350\" height=\"418\" \/><\/span><span style=\"font-weight: 400;\">Colleagues will be particularly useful for you here: <a href=\"https:\/\/simpleprogrammer.com\/programming-mentor\/\">treat them as your software development mentors<\/a>. Mentors can help you find where it\u2019s more important to focus your energy and how to organise your practice sessions.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">When you have identified your high-level goals, make sure you understand how they all relate to each other. When goals follow each other, they will give you a sense of progress as you complete each one, and an overall direction on the project as well.<\/span>\\\\n\\\\n<b>Tip<\/b><span style=\"font-weight: 400;\">: When you commit to goals, use <\/span><a href=\"http:\/\/en.wikipedia.org\/wiki\/Consistency_(negotiation)\"><span style=\"font-weight: 400;\">the principle of consistency<\/span><\/a><span style=\"font-weight: 400;\"> by making your colleagues aware of them, thereby making you more likely to keep up with them.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">For a few other ideas on how to make this idea work for you, I invite you to read <\/span><a href=\"http:\/\/www.takebackyourbrain.com\/2007\/the-psychology-of-persuasion-consistency\/\"><span style=\"font-weight: 400;\">this article<\/span><\/a><span style=\"font-weight: 400;\"> that\u2019s based on the <em><a href=\"http:\/\/www.amazon.com\/exec\/obidos\/ASIN\/006124189X\/makithecompsi-20\" target=\"_blank\" rel=\"noopener\">Influence<\/a><\/em> book by one of my favorite authors, Robert Cialdini. \u00a0It shows you how you can apply one of the most powerful psychological forces in your own life.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">Remember the saying: You can&#8217;t hit a target that you can&#8217;t see. Therefore, make sure you know what you want to achieve beforehand.<\/span>\\\\n\\\\n<b>For each goal, ask yourself these questions:<\/b><b>\\\\n<\/b>\\\\n\\\\n<\/p>\n<ul>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Is your goal measurable? How will you know when you complete it?<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Does it have a definite deadline?<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Is it clear and focused?<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">What high-level documentation can you use?<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Whose help will you need to achieve your learning and practice goals?<\/span><\/li>\n<p>\\\\n<\/ul>\n<p>\\\\n\\\\n<\/p>\n<h3><b>2. Break the goals down into discrete skills<\/b><\/h3>\n<p>\\\\n\\\\n<b><\/b><span style=\"font-weight: 400;\">After you have defined definite and measurable goals, you&#8217;ll need to identify what skills you need to achieve them.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">Small and well-defined skills are easier to achieve and give you the confidence you need to pursue your goals.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">This is where you&#8217;ll identify the libraries, frameworks, and even modules of the project itself.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">For example: If you&#8217;re using Maven, consult the pom files to see them. If you&#8217;re using a major IDE, it should have a way to visualize it, e.g. <\/span><a href=\"http:\/\/blog.jetbrains.com\/idea\/2010\/05\/maven-dependencies-diagram\/\"><span style=\"font-weight: 400;\">here is an example of how to do it in IntelliJ<\/span><\/a><span style=\"font-weight: 400;\">.<\/span>\\\\n\\\\n<b>Ask yourself:<\/b><b>\\\\n<\/b>\\\\n\\\\n<\/p>\n<ul>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Which parts of the libraries\/frameworks used should I learn right now?<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">How are the libraries most frequently used on the project?<\/span><\/li>\n<p>\\\\n<\/ul>\n<p>\\\\n\\\\n<\/p>\n<h3><b>3. Set up your Practice Plan<\/b><\/h3>\n<p>\\\\n\\\\n<span style=\"font-weight: 400;\">Just like a well-managed software project is broken down into specific deliverables, so should your practice sessions.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">Next you\u2019ll write a document to comprehensively list all the skills, in what order you need them, and the expected time \u00a0each will require to complete.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">A side-effect of writing this document is that, just like writing the learning tests (see the next step), it is ready to be used by the new developers in your project without needing to repeat the whole process each time.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">This will become the operating procedure to which your newcomers will refer and improve upon.<\/span>\\\\n\\\\n<b>Kind of questions to ask yourself when writing the Practice Plan:<\/b><b>\\\\n<\/b>\\\\n\\\\nHave you listed all the skills you need?<b>\\\\n<\/b>\\\\n\\\\n<\/p>\n<ul>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Are the skills small and achievable within the time estimates?<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Will the next person reading this document have everything he needs to get up and running as soon as possible?<\/span><\/li>\n<p>\\\\n<\/ul>\n<p>\\\\n\\\\n<\/p>\n<h3><b>4. Integrate the skill<\/b><b>\\\\n<\/b><\/h3>\n<p>\\\\n\\\\n<span style=\"font-weight: 400;\">Now, you\u2019ll learn how to practice this skill <\/span><b><i>in context<\/i><\/b><span style=\"font-weight: 400;\">. Practicing in context will allow you to make progress faster because you will be learning how to \u00a0actually use the skill on the project and not just practice without any clear direction.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">Don\u2019t try to integrate code and learn it at the same time; that will be quite hard. Explore it first and then integrate it.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">One approach that you can try is to write <\/span><i><span style=\"font-weight: 400;\">\u201clearning tests.\u201d<\/span><\/i><span style=\"font-weight: 400;\">\\\\n<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">If there is a library with which you\u2019ll need to be familiar, follow these suggestions to familiarise yourself with it in the context of your project (of course, you\u2019ll still need to consult the reference for the library).<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">These steps are applicable to third party code as well as the project\u2019s own modules:<\/span><span style=\"font-weight: 400;\">\\\\n<\/span>\\\\n\\\\n<\/p>\n<ol>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Look at some scenarios in which it\u2019s being used in the project.<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Write some tests that use the library in such scenarios.<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Verify your understanding of the new concepts by making variations to the concept that will validate your knowledge.<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Then, and only then, you should integrate the code in new code that you write.<\/span><\/li>\n<p>\\\\n<\/ol>\n<p>\\\\n\\\\n<span style=\"font-weight: 400;\">Incidentally, following these steps will force you to think of the long run. The next developer will be able to get started more easily on the project. Learning tests may even help you catch backward compatibility issues that can arise when you later migrate to newer library versions.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">I first came across this \u201clearning tests\u201d gem in the fantastic book <\/span><a href=\"http:\/\/www.amazon.com\/exec\/obidos\/ASIN\/0132350882\/makithecompsi-20\" target=\"_blank\" rel=\"noopener\"><i><span style=\"font-weight: 400;\">Clean Code<\/span><\/i><span style=\"font-weight: 400;\"> by Robert Martin<\/span><\/a><span style=\"font-weight: 400;\">. In it, Martin explains: <\/span>\\\\n\\\\n<\/p>\n<blockquote><p><i><span style=\"font-weight: 400;\">\u201cIn learning tests we call the third-party API, as we expect to use it in our application. We\u2019re essentially doing controlled experiments that check out understanding of that API. The tests focus on what we want out of the API\u201d.<\/span><\/i><\/p><\/blockquote>\n<p>\\\\n\\\\n<span style=\"font-weight: 400;\">The salient point here is to understand that the more your practice resembles new code that you&#8217;re going to write, the more effective your learning will be.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">So, when integrating the skill, ask yourself:<\/span><span style=\"font-weight: 400;\">\\\\n<\/span>\\\\n\\\\n<\/p>\n<ul>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Do your practice sessions resemble the kind of work that is expected of you when you\u2019re actually going to use it?<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Do you repeat the maneuvers at which you\u2019re the weakest?<\/span><\/li>\n<p>\\\\n<\/ul>\n<p>\\\\n\\\\n<\/p>\n<h3><b><img loading=\"lazy\" decoding=\"async\" class=\"alignright wp-image-14637\" src=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2015\/10\/Depositphotos_73662757_m-2015.jpg\" alt=\"Man presses a touch screen smart phone with the symbol of feedb\" width=\"350\" height=\"525\" \/>5. Incorporate feedback<\/b><b>\\\\n<\/b><\/h3>\n<p>\\\\n\\\\n<span style=\"font-weight: 400;\">Feedback is the critical component to your practice sessions. You use it as a guide to help you know whether you\u2019re on target or not.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">You can receive feedback from several sources:<\/span>\\\\n\\\\n<\/p>\n<ul>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">People, e.g. your team mates\/ mailing lists.<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Tests, e.g. via tests in your development environment, your continuous integration server, etc.<\/span><\/li>\n<p>\\\\n<\/ul>\n<p>\\\\n\\\\n<span style=\"font-weight: 400;\">The feedback loop is the path between doing something and receiving the results. To accelerate your progress, it makes sense to strive to shorten the feedback loop.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">This is why automated test practices like Test-Driven Development (TDD) are effective; you can get feedback quickly and easily, whether in your IDE or your reports from your continuous integration server.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">Here are some other ways you can shorten the feedback loop:<\/span><span style=\"font-weight: 400;\">\\\\n<\/span>\\\\n\\\\n<\/p>\n<ul>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Configure your IDE to run tests on save\/compile. <\/span><a href=\"http:\/\/infinitest.github.io\/\"><span style=\"font-weight: 400;\">InfiniTest<\/span><\/a><span style=\"font-weight: 400;\"> is a plugin for both Intellij and Eclipse that allows you to do just that.<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">If you are writing front-end web apps, use a tool like <\/span><a href=\"http:\/\/livereload.com\/\"><span style=\"font-weight: 400;\">LiveReload<\/span><\/a><span style=\"font-weight: 400;\"> which will refresh your browser page automatically.<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Test or even run your code in REPLs as is commonly done in Lisp, Scala, and Python environments.<\/span><\/li>\n<p>\\\\n<\/ul>\n<p>\\\\n\\\\n<span style=\"font-weight: 400;\">If you&#8217;re a senior developer, consider tracking and rating your developers on how they successfully take action on feedback. Also, don&#8217;t forget that making feedback public can help your team build trust and encourage members to push their limits.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">Whatever the situation, what you need to keep in mind is that \u00a0there should be <\/span><b><i>as little friction as possible<\/i><\/b><span style=\"font-weight: 400;\"> between trying out an idea and seeing the results of it.<\/span>\\\\n\\\\n<b>Ask yourself:<\/b><b>\\\\n<\/b>\\\\n\\\\n<\/p>\n<ul>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Do you regularly receive and give feedback to your team members?<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Do you consciously set aside time to practice?<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Have you set up your environment so that feedback loops are kept as short as possible?<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Are you in the habit of writing fast automated tests?<\/span><\/li>\n<p>\\\\n<\/ul>\n<p>\\\\n\\\\n<\/p>\n<h3><b>6. Reflect on your results<\/b><b>\\\\n<\/b><\/h3>\n<p>\\\\n\\\\n<span style=\"font-weight: 400;\">This step is primordial. Nothing kills progress as much as working on auto-pilot and stagnating on a plateau.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">After seeing your results, you need to reflect on them by asking questions like:<\/span><span style=\"font-weight: 400;\">\\\\n<\/span>\\\\n\\\\n<\/p>\n<ul>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Why didn&#8217;t it work on your previous attempts? Why does it work now when you tried this particular way?<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">How will you apply the lessons learned in this practice session in the future? Can you write these into a \u2018Lessons learned\u2019 document and share it with the team?<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Did you notice anything in the process that you can improve? Is there anything that you can add to the Practice Plan?<\/span><\/li>\n<p>\\\\n<\/ul>\n<p>\\\\n\\\\n<span style=\"font-weight: 400;\">Also, these tidbits from <\/span><i><span style=\"font-weight: 400;\"><a href=\"http:\/\/www.amazon.com\/exec\/obidos\/ASIN\/020161622X\/makithecompsi-20\" target=\"_blank\" rel=\"noopener\">The Pragmatic Programmer<\/a><\/span><\/i><span style=\"font-weight: 400;\"> can inspire you to find your own ideas:<\/span><span style=\"font-weight: 400;\">\\\\n<\/span>\\\\n\\\\n<\/p>\n<ul>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Don\u2019t code blindfolded. If you don\u2019t understand the technology or the application on which you\u2019re working, focus on familiarising yourself with the basics first.<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Document your assumptions. The <\/span><a href=\"http:\/\/c2.com\/cgi\/wiki?DesignByContract\"><span style=\"font-weight: 400;\">Design by Contract<\/span><\/a><span style=\"font-weight: 400;\"> allows you to do just that; so, consider giving it a try.<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Don\u2019t be a slave to history; i.e. don\u2019t let existing code dictate future code. If there\u2019s code that needs to be yanked or refactored, be bold about it and make the changes required.<\/span><\/li>\n<p>\\\\n<\/ul>\n<p>\\\\n\\\\n<span style=\"font-weight: 400;\">Like Clean Code, I highly recommend that you read <\/span><i><span style=\"font-weight: 400;\">The Pragmatic Programmer\u00a0 <\/span><\/i><span style=\"font-weight: 400;\">too. Mr. Sonmez also agrees that this book is a must-read. Read his review about it <\/span><a href=\"https:\/\/simpleprogrammer.com\/2010\/08\/10\/book-review-the-pragmatic-programmer\/\"><span style=\"font-weight: 400;\">here<\/span><\/a><span style=\"font-weight: 400;\">.<\/span>\\\\n\\\\n<\/p>\n<h3><b>7. Apply the law of \u2018the vital few\u2019<\/b><b>\\\\n<\/b><\/h3>\n<p>\\\\n\\\\n<span style=\"font-weight: 400;\">This law, more commonly known as the Pareto Principle, essentially means that there is a small subset of all activities that yield the lion\u2019s share of output.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">This idea can be especially useful when you\u2019re optimizing for performance (e.g by identifying the methods that are taking up the most resources in your application), but it\u2019s also useful for your practice plan.<\/span><span style=\"font-weight: 400;\">\\\\n<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">Do this in three steps:<\/span><span style=\"font-weight: 400;\">\\\\n<\/span>\\\\n\\\\n<\/p>\n<ol>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Identify the things that create the most value. <\/span><span style=\"font-weight: 400;\">When you\u2019re just getting started on the project, these should be the things that you have identified in your Practice Plan. As you get more and more experienced, they could be a lot of other things. <\/span><span style=\"font-weight: 400;\">Identify some pain points that your team is facing by asking questions like:<\/span>\\\\n\n<ul>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Is there some area that is \u00a0known to be regression-prone or hard to maintain?<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Can I simplify the architecture in the most frequently used areas?<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Project goals change<\/span><span style=\"font-weight: 400;\">; <\/span><span style=\"font-weight: 400;\">so identify the new top priorities and follow the steps in this post again.<\/span><\/li>\n<p>\\\\n<\/ul>\n<p>\\\\n<\/li>\n<p>\\\\n    <\/p>\n<li><span style=\"font-weight: 400;\">Practice them repeatedly. The key here is to repeat this as often as possible until you feel comfortable with it.<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">After every few iterations, identify and remove the things that create the least value, add the things that bring the biggest returns, and repeat.<\/span><\/li>\n<p>\\\\n<\/ol>\n<p>\\\\n\\\\n<b>Ask yourself:<\/b><b>\\\\n<\/b>\\\\n\\\\n<\/p>\n<ul>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Where does your team need help the most right now?<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">In which areas are issues most commonly reported?<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">What parts of the source code are known to cause maintainability issues?<\/span><\/li>\n<p>\\\\n<\/ul>\n<p>\\\\n\\\\n<\/p>\n<h2>Your next steps<\/h2>\n<p>\\\\n\\\\n<span style=\"font-weight: 400;\">I\u2019ve summarized the seven steps in a flow chart for you:<\/span>\\\\n\\\\n<\/p>\n<h1><span style=\"color: #ff0000;\"><\/span><\/h1>\n<p>\\\\n\\\\n<span style=\"font-weight: 400;\">You&#8217;ll notice from the key above that there is a central theme: being mindful about the craft. Don&#8217;t forget there is a &#8216;deliberate&#8217; in &#8216;deliberate practice.&#8217; <\/span><b><i>Observe and extract the principles<\/i><\/b><span style=\"font-weight: 400;\"> every step along the way.<\/span><span style=\"font-weight: 400;\">\\\\n<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">In the same way as traveling without direction will get you to nowhere land, practicing without intentionality will cause you to perform without it.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">Take action. Seeing yourself improve will inspire you to believe in <\/span><i><span style=\"font-weight: 400;\">deliberate practice<\/span><\/i><span style=\"font-weight: 400;\"> even more. So, don&#8217;t leave practice to chance, practice and work deliberately.<\/span>\\\\n\\\\n<\/p>\n<h3><b>Information alone won\u2019t help<\/b><b>\\\\n<\/b><\/h3>\n<p>\\\\n\\\\n<span style=\"font-weight: 400;\">If you already knew some of these ideas, don\u2019t go out looking for the shiny new tactic.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">You don&#8217;t have to follow all the advice on deliberate practice out there (in fact, you shouldn&#8217;t try to). Just follow a simple framework and you&#8217;ll be fine.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">As you get more at ease with practicing deliberately, you\u2019ll have the opportunity to make changes to it and make it work best for you.<\/span>\\\\n\\\\n<\/p>\n<h3><b>Taking this even further<\/b><b>\\\\n<\/b><\/h3>\n<p>\\\\n\\\\n<span style=\"font-weight: 400;\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-14638\" src=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2015\/10\/Depositphotos_80834714_m-2015.jpg\" alt=\"Next Steps\" width=\"350\" height=\"233\" \/>Turn your practice session from just an \u2018ok\u2019 one to a great one <\/span><b>by adopting systems<\/b><span style=\"font-weight: 400;\">. Earlier I gave an example of one: your Practice Plan. It can serve as your blueprint for getting from a beginner to a master.<\/span>\\\\n\\\\n<span style=\"font-weight: 400;\">Think of what parts of your work can be systemized.\u00a0<\/span>\\\\n\\\\n<\/p>\n<h3><b>Other recommended resources<\/b><b>\\\\n<\/b><\/h3>\n<p>\\\\n\\\\n<\/p>\n<ul>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Some developers like to practice with \u201ckatas,\u201d whereby they work on problems that exercise skills in specific areas. One site that has katas is <\/span><a href=\"http:\/\/codekata.com\/\"><span style=\"font-weight: 400;\">codekata.com<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">If you would like to hear the \u201cdevil\u2019s advocate\u201d view, John has some mixed feelings about it. <\/span><a href=\"https:\/\/www.youtube.com\/watch?v=FF0CTW76vp0\"><span style=\"font-weight: 400;\">Watch what he has to say<\/span><\/a><span style=\"font-weight: 400;\"> on the subject.<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\"><a href=\"http:\/\/www.amazon.com\/exec\/obidos\/ASIN\/0670024961\/makithecompsi-20\" target=\"_blank\" rel=\"noopener\">Mastery by Robert Greene<\/a><\/span><span style=\"font-weight: 400;\"> is one of my favourite books that examines the subject in depth.<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\"><a href=\"http:\/\/www.amazon.com\/exec\/obidos\/ASIN\/B00AYQNR5U\/makithecompsi-20\" target=\"_blank\" rel=\"noopener\">The Passionate Programmer by Chad Fowler<\/a><\/span><span style=\"font-weight: 400;\">. The title states clearly to whom it\u2019s targeted \ud83d\ude42 Highly recommended.<\/span><\/li>\n<p>\\\\n    <\/p>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\"><a href=\"http:\/\/www.amazon.com\/exec\/obidos\/ASIN\/B00JQ3FN7M\/makithecompsi-20\" target=\"_blank\" rel=\"noopener\">Make It Stick by Peter Brown<\/a><\/span><span style=\"font-weight: 400;\">. Research-backed book from which I learned a lot about learning.<\/span><\/li>\n<p>\\\\n<\/ul>\n<p>\\\\n\\\\n<span style=\"font-weight: 400;\">To give other readers some ideas on how to take action, do share examples in the comments on how you&#8217;ll apply this to your work. I can\u2019t wait to see what you think of!<\/span>\\\\n\\\\n<em>You can also check out my course <a href=\"https:\/\/simpleprogrammer.com\/store\/products\/learn-anything-quickly\/\">&#8220;10 Steps to Learn Anything Quickly&#8221;<\/a> for methods to optimize your learning.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Practice, practice, practice \\\\n\\\\nLike most programmers, I am passionate about software development; it\u2019s natural for me to want to get better at it. So, often I look up how to do that online.\\\\n\\\\nBut it seemed that everywhere I looked, people were saying: \u201cPractice, practice, practice.\u201d I thought: \u201cOk, so what?\u201d Then, I looked some more&#8230;<\/p>\n","protected":false},"author":29,"featured_media":14631,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[162232877],"tags":[],"class_list":["post-14629","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-better-software-engineer"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Deliberate Practice for Programmers: A Framework for Learning on the Job<\/title>\n<meta name=\"description\" content=\"Have you actually read before \ufeff*how*\ufeff\ufeff developers should practice? Follow my quest for answers on how we developers can perform deliberate practice.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/simpleprogrammer.com\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Deliberate Practice for Programmers: A Framework for Learning on the Job\" \/>\n<meta property=\"og:description\" content=\"Have you actually read before \ufeff*how*\ufeff\ufeff developers should practice? Follow my quest for answers on how we developers can perform deliberate practice.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/simpleprogrammer.com\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\/\" \/>\n<meta property=\"og:site_name\" content=\"Simple Programmer\" \/>\n<meta property=\"article:published_time\" content=\"2015-10-09T12:00:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-02-14T02:50:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2015\/10\/practice.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1089\" \/>\n\t<meta property=\"og:image:height\" content=\"598\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Michael Washburn Jr.\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Michael Washburn Jr.\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\\\/\"},\"author\":{\"name\":\"Michael Washburn Jr.\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#\\\/schema\\\/person\\\/70ec90843b815334527c2860a2c1eeb7\"},\"headline\":\"Deliberate Practice for Programmers: A Framework for Learning on the Job\",\"datePublished\":\"2015-10-09T12:00:16+00:00\",\"dateModified\":\"2023-02-14T02:50:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\\\/\"},\"wordCount\":2830,\"commentCount\":9,\"image\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2015\\\/10\\\/practice.png\",\"articleSection\":[\"Better Software Engineer\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/simpleprogrammer.com\\\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\\\/\",\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\\\/\",\"name\":\"Deliberate Practice for Programmers: A Framework for Learning on the Job\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2015\\\/10\\\/practice.png\",\"datePublished\":\"2015-10-09T12:00:16+00:00\",\"dateModified\":\"2023-02-14T02:50:09+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#\\\/schema\\\/person\\\/70ec90843b815334527c2860a2c1eeb7\"},\"description\":\"Have you actually read before \ufeff*how*\ufeff\ufeff developers should practice? Follow my quest for answers on how we developers can perform deliberate practice.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/simpleprogrammer.com\\\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\\\/#primaryimage\",\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2015\\\/10\\\/practice.png\",\"contentUrl\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2015\\\/10\\\/practice.png\",\"width\":1089,\"height\":598},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/simpleprogrammer.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Deliberate Practice for Programmers: A Framework for Learning on the Job\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#website\",\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/\",\"name\":\"Simple Programmer\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/simpleprogrammer.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#\\\/schema\\\/person\\\/70ec90843b815334527c2860a2c1eeb7\",\"name\":\"Michael Washburn Jr.\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/73f60fa2c305a87a854cf24b3c5faabb82881a35e2f491a9ee26d7c79f9864dc?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/73f60fa2c305a87a854cf24b3c5faabb82881a35e2f491a9ee26d7c79f9864dc?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/73f60fa2c305a87a854cf24b3c5faabb82881a35e2f491a9ee26d7c79f9864dc?s=96&d=mm&r=g\",\"caption\":\"Michael Washburn Jr.\"},\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/author\\\/michaelwashburnjr\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Deliberate Practice for Programmers: A Framework for Learning on the Job","description":"Have you actually read before \ufeff*how*\ufeff\ufeff developers should practice? Follow my quest for answers on how we developers can perform deliberate practice.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/simpleprogrammer.com\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\/","og_locale":"en_US","og_type":"article","og_title":"Deliberate Practice for Programmers: A Framework for Learning on the Job","og_description":"Have you actually read before \ufeff*how*\ufeff\ufeff developers should practice? Follow my quest for answers on how we developers can perform deliberate practice.","og_url":"https:\/\/simpleprogrammer.com\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\/","og_site_name":"Simple Programmer","article_published_time":"2015-10-09T12:00:16+00:00","article_modified_time":"2023-02-14T02:50:09+00:00","og_image":[{"width":1089,"height":598,"url":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2015\/10\/practice.png","type":"image\/png"}],"author":"Michael Washburn Jr.","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Michael Washburn Jr.","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/simpleprogrammer.com\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\/#article","isPartOf":{"@id":"https:\/\/simpleprogrammer.com\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\/"},"author":{"name":"Michael Washburn Jr.","@id":"https:\/\/simpleprogrammer.com\/#\/schema\/person\/70ec90843b815334527c2860a2c1eeb7"},"headline":"Deliberate Practice for Programmers: A Framework for Learning on the Job","datePublished":"2015-10-09T12:00:16+00:00","dateModified":"2023-02-14T02:50:09+00:00","mainEntityOfPage":{"@id":"https:\/\/simpleprogrammer.com\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\/"},"wordCount":2830,"commentCount":9,"image":{"@id":"https:\/\/simpleprogrammer.com\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\/#primaryimage"},"thumbnailUrl":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2015\/10\/practice.png","articleSection":["Better Software Engineer"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/simpleprogrammer.com\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/simpleprogrammer.com\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\/","url":"https:\/\/simpleprogrammer.com\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\/","name":"Deliberate Practice for Programmers: A Framework for Learning on the Job","isPartOf":{"@id":"https:\/\/simpleprogrammer.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/simpleprogrammer.com\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\/#primaryimage"},"image":{"@id":"https:\/\/simpleprogrammer.com\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\/#primaryimage"},"thumbnailUrl":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2015\/10\/practice.png","datePublished":"2015-10-09T12:00:16+00:00","dateModified":"2023-02-14T02:50:09+00:00","author":{"@id":"https:\/\/simpleprogrammer.com\/#\/schema\/person\/70ec90843b815334527c2860a2c1eeb7"},"description":"Have you actually read before \ufeff*how*\ufeff\ufeff developers should practice? Follow my quest for answers on how we developers can perform deliberate practice.","breadcrumb":{"@id":"https:\/\/simpleprogrammer.com\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/simpleprogrammer.com\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/simpleprogrammer.com\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\/#primaryimage","url":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2015\/10\/practice.png","contentUrl":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2015\/10\/practice.png","width":1089,"height":598},{"@type":"BreadcrumbList","@id":"https:\/\/simpleprogrammer.com\/deliberate-practice-for-programmers-a-framework-for-learning-on-the-job\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/simpleprogrammer.com\/"},{"@type":"ListItem","position":2,"name":"Deliberate Practice for Programmers: A Framework for Learning on the Job"}]},{"@type":"WebSite","@id":"https:\/\/simpleprogrammer.com\/#website","url":"https:\/\/simpleprogrammer.com\/","name":"Simple Programmer","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/simpleprogrammer.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/simpleprogrammer.com\/#\/schema\/person\/70ec90843b815334527c2860a2c1eeb7","name":"Michael Washburn Jr.","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/73f60fa2c305a87a854cf24b3c5faabb82881a35e2f491a9ee26d7c79f9864dc?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/73f60fa2c305a87a854cf24b3c5faabb82881a35e2f491a9ee26d7c79f9864dc?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/73f60fa2c305a87a854cf24b3c5faabb82881a35e2f491a9ee26d7c79f9864dc?s=96&d=mm&r=g","caption":"Michael Washburn Jr."},"url":"https:\/\/simpleprogrammer.com\/author\/michaelwashburnjr\/"}]}},"_links":{"self":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/posts\/14629","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/comments?post=14629"}],"version-history":[{"count":0,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/posts\/14629\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/media\/14631"}],"wp:attachment":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/media?parent=14629"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/categories?post=14629"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/tags?post=14629"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}