You can get “100 out of 100 marks in the subject of Mathematics”. This phrase was marketed to us so many times. That I internalize this term and because of that I always got 90 percent or more marks in maths.
Maths is logical. Similar to programming. You follow certain steps and the right answer is in front of you. Learn few techniques, apply them again and again and you are nearly invincible.
I practice solving maths problem every day. I became so good that I can fly through any problem given to me. These were the days of my college and my university years.
But I was not always that good.
What is deliberate practice?
Practice makes a man perfect. That was the first phrase I have heard about the importance of practice during my school education.
I bought a separate register to practice my maths problems, physics problems and occasionally chemistry problems.
In one exam, problems were different than the problems of our textbook. I was devastated and failed.
So I realized that I have to train myself for alternating situations. For example, when I was solving a problem during my practice- I stopped during a step and think about if the examiner just changes this parameter or that parameter then how would I solve it- and then try to solve it.
In short, I tried to anticipate the problems.
During a preparation for a competition, I anticipate a question from a textbook (After completing all the exercise questions) and that single question made me the winner.
This is called the deliberate practice.
Hence deliberate practice is something that prepares you to win the real exam by anticipating what could go wrong and then preparing for that in advance.
In the next section, I will discuss what are some good practices for deliberate practice in programming.
Why should you practice?
Some people said that real-time situation is more important than practice. They argued, for example, 1 hour in a real situation worth 100 hours of a practice session.
What makes the real situation different than the practice session? I can think of the following. If you come with another parameter then mention that in the comments.
The real situation is time bounded. A soccer game is 120 minutes at max. Exams are time bounded. During practice, you have unlimited time at your end to solve a given problem.
Another parameter is the reward. You will not get an ‘F’ if you failed to solve a problem during your practice session.
In the real-world situation, people are looking at you. If you failed people will make fun of you. They will not see your efforts but they will focus on your results. Hence real-time situations are public and practice sessions are private.
The real-world situation gives us unknown scenarios. You cannot anticipate each and everything.
Another thing is the opportunity. You get 1 exam every semester. You have one final for becoming a world champion in 4 years.
I believe these are some of the parameters that make a real situation more valuable. Now if you can simulate these parameters you can get best results from your practice sessions.
With advance preparation, you will be calm when you see a diversion or real-life situation. And I believe you will succeed and breeze through any stressful situation.
In the next section, I will discuss how can you simulate these parameters.
In any real situation, you are bounded by time limits. For example, if your boss gives you a task and ask you how much time will it take and you replied: “infinite”. You are fired!
In college years, I choose a set of problem and try to solve them in the 80% of the time available. If the exam is about 1 hour then in my practice session I will 50 minutes.
I hardly achieved these timings but during the exam, they provide me extra time to deal with any emergencies.
Hence, simulating time conditions is easy. And if you practice by deliberately reducing the time to solve a problem you will get better results in the real situation.
You can give yourself a small reward or punishment to train yourself.
In building habits, reward and punishment have key roles. In real situation reward is clear. During an exam, the reward is the result. During your work, it could be a successful contract, sale, promotion and not be getting fired.
I believe that our brain is wired to feel the sensation of reward in the same place if we are getting a salary raise or eat an ice-cream. Definitely, there is a scale of happiness in different reward. But having a small reward will work the same way as a big reward.
Hence keeping in view this knowledge, you can simulate this carrot and stick mentality in your deliberate practice. You can simulate this situation by giving yourself a small reward after each successful practice session. This can be ice-cream, coffee, a movie or anything else that makes you happy.
This is the area where I am so weak. But this is an important one. We are a social animal and we need social acceptance. In real-life situations, everybody is watching us. We are like gladiators, fighting for our life during an exam.
The audience is your parents, classmates, relatives, teachers and friends. That’s quite an audience.
How to simulate this? Frankly speaking, I haven’t figured it out yet. Group studies can help if they are designed properly. In a group, you have to prove your worth. You have to play your role otherwise you will be alienated. Hence a group can force you to work hard to meet the group’s higher standards.
I tried group studies but I usually end up in not getting any positive result.
The only benefit that I get from group studies is how to teach others. Hence when choosing people in groups make sure that everybody can perform and few people in the group are above your level.
In programming, you can choose online quizzes. They give rewards which are displayed publicly. There are dedicated arenas for beginners and experienced programmers. You can hone your skills through these competitions.
If you want to be great in your field you have to swim in uncharted territories. Challenge yourselves regularly. And if you have to do it regularly for years you will be great. According to Gladwell and Cal Newport, you have to spend 10000 hours in your field and you have to continuously stretch yourself to be so good that nobody can ignore you.
The major obstacle will be your brain telling you not do this and slowly guiding you into procrastination like watching movies or playing video games. Our brain resists change. It want’s to live in places with minimal discomfort.
Our brain knows that growth lies in change but somehow it tries to avoid the pain associated with growth. Hence watch for this pain and program yourself to accept it.
Can you simulate the opportunity? No, you cannot. That’s what I believe.
Practice and preparation are required to perform well when an opportunity is in front of us. For example, in an exam, if you are a student you have one shot. All of your advance preparation will help you during your exam.
If you are a programmer, then it could be a challenging task in your office that will put you up for promotion. It could be a new job offer with bigger salary or a new client to deal with if you own a business.
A quote that I have learned earlier is: “Luck is when the preparation meets the opportunity”.
So be prepared and wait for the opportunity!
Or expand your outreach to hunt for opportunities. You cannot simulate opportunity but you cannot just wait for the luck to open new doors for you. You can actively look for new opportunities.
What opportunities can you look for? One great opportunity is to work with open source projects where you work for free but on your own terms. For example, you can choose the technology you want to work in. You will get new connections, new experience, better jobs and eventually better opportunities.
Another opportunity is starting a side business. For example, be a freelancer and sell your services at UpWork, Elance and Fiverr. This can also open a new gate of opportunities for you.
So, what do you think about deliberate practice? How do you hone your skills in the programming world? Share in comments.
I read every comment.