Become a Great Programmer Through Deliberate Practice: Focus and Coaching

In my series of articles on becoming a better programmer through deliberate practice, I have discussed how you can’t become an expert programmer without moving outside your programming comfort zone and becoming an expert programmer requires that you set performance goals so that you work to achieve higher levels of programming mastery. This article discusses another facet of deliberate practice: obtaining and maintaining focus on your practice and using coaches and/or teachers to improve your skills.

How to Get and Maintain Focus for Your Deliberate Practice

In this age of attention-grabbing and attention-hogging social media, it is harder than ever to focus on work, especially when it comes to working for self-improvement. There are already enough things pulling at your attention, from necessary things such as your work and your family, to less necessary things such as social media and streaming services. In order to improve your programming skills through deliberate practice, you need to be able to find time and energy for deep work.

Deep work is defined in a book by Cal Newport of the same name as “the ability to focus without distraction on a cognitively demanding task.” To be able to practice further developing your programming skills by going outside your comfort zone, must be able to focus on that practice. So how do you develop the ability to focus.

There are several productivity writers who offer lots of advice on how to obtain and maintain focus. I’ll discuss the ideas of two of these writers, Darious Faroux and Scott Young, in this article.

Faroux says that the way to manage your focus is to manage your attention. First, is becoming a better programmer through deliberate practice a priority for you? If it’s not then it’s going to be hard to focus during your practice time when there are so many other distractions.

Second, can you manage the distractions that are part of your life? Can you control checking Facebook every five minutes? Can you stop checking your email every few minutes even through you know there aren’t going to be any urgent emails? You need to be able to manage distraction in order to find focus for your programming practice.

Finally, if you’re finding it hard to maintain focus than you are having trouble controlling your life. You are letting external events dictate what you do and what you think about. Getting and holding onto focus requires that you be in control of your life in order to prioritize becoming a better programmer.

Scott Young believes that a great way to learn how to focus is to practice meditation, or at least learn about the techniques used in some forms of meditation. Young doesn’t believe that just practicing meditation will make you able to focus better because focusing on a task such as a new programming technique is different than meditation, where you turn your focus inward towards your thoughts and feelings. Instead, learning some meditation techniques such as breathing and focusing your inward thoughts will help you see what is involved in the outward focus you need for deliberate practice.

Young believes that there are two important requirements for developing focus: managing distractions and devoting chunks of time for focus. As with Faroux, Young states that you will never be able to focus fully on your programming practice if you are constantly being distracted by your phone, the internet, or any external stimuli. Your best bet for developing good focus is to keep all devices away from your practice area so that the distraction is out of sight and eventually out of mind.

Once you’ve learned how to manage your distractions, you next need to be able to devote specific chunks of time for your programming practice. This needs to be a time when there will not be any other requests for your attention. Many successful professionals find early morning as the best time for their personal improvement projects. If the morning is not possible, any other time of the day can be used for practice time if you can devote at least twenty to thirty minutes for your practice, if not more. It is a fact of learning science that twenty minutes of focused time in study and practice is better than an hour of distracted study and practice time.

A very popular suggestion for learning how to focus for a set period of time is to use the Pomodoro technique of setting a timer for a set period of minutes where you are going to focus completely on a task and when the timer goes off, take a few minutes break, then reset the timer and start again, if you have the time.

The ability to focus on a task is becoming harder and harder in our society. I strongly suggest you begin practicing developing your focus skills by following the techniques above or researching other techniques that will help you learn how to obtain and maintain the deep focus required for deliberate practice.

Teachers and Coaches

One of the most important facets of deliberate practice is that the learner has access to a coach or teacher who can help him or her develop their skills. As Ericsoon and Pool state in their book on deliberate practice, “you need a teacher or coach who assigns practice techniques designed to help you improve on very specific skills.” (page 100) A good teacher or coach knows what skills and knowledge are necessary to move forward in a field and have experience in designing practice sessions and projects to help advance their students towards expertise.

Teachers

If you are in school, you will have teachers who should be working from a detailed curriculum that is designed to develop your skills and expertise in computer programming. Most introductory programming curricula are designed to do this. The student starts out at the very beginning of programming, working with variables and data, and works his or her way up to designing software using objects or some other advanced technique, all in a sequenced manner where the new skill being learned builds on the previous skills already learned in the course.

Many students fail, however, in fully utilizing their instructors. Students should ask questions outside class, ask for advice on how best to learn the instructor’s material, ask for career advice from their instructors, and just pick the instructor’s brain as much as possible. Most students are afraid to approach their instructors in this manner, but most instructors are thrilled when they get the chance to talk about their field.

Coaches

If you are not in school, you will need to find someone who can act as your coach. The best way to do this is to look at your place of employment or in your area for people who are considered expert programmers. Finding experts in your company will not be too difficult and you can approach them about learning from them, either formally through coaching lessons, or informally by watching and learning from the work they do.

If you can’t or won’t find an expert at work, another place you can look is a programming interest group that meets in your area. The programmers who attend these meetings are clearly people who are interested in advanced their craft and can be a tremendous source of knowledge on expert programming practices. Just attending the meetings and paying attention to the presentations will be beneficial to you, but you may also ask around to see if any of the members is willing to mentor you. I have found that most programming user group members are eager to help newer programmers learn the craft and are more than willing to share their expertise with you.

When seeking out experts, however, you need to keep in mind the advice given by Ericsson and Pool in their book. As studies have proven, professionals with many years of experience in their field often have deteriorating skills when compared to professionals with fewer years of experience. If the professional has not been extending their knowledge through deliberate practice, their skill level has probably decreased from where it was when they had less experience but were still learning.

Computer programming, like many fields, does not have clear areas of expert performance, as do areas such as music performance and athletic contests. This means determining who the experts are in programming is harder than in more performance-based fields. This is where user groups and other meet-ups are useful because you can attend these meetings and determine for yourself who the experts are. Otherwise, you need to talk to co-workers and others in the field to get an idea of who you can approach for a mentoring/coaching relationship.

Another possibility for learning how expert programmers work is to read books that discuss the work these programmers do. A great example is the book Coders at Work by Peter Seibel. This book has interviews with several famous programmers who have designed and built several important and famous software programmers. Included in the interviews are Brendan Eich, the creator of JavaScript, Ken Thompson, the co-creator of Unix, Peter Norvig, who is the director of research at Google, and Donald Knuth, considered the father of computer science and the creator of the Tex document processing language. These programmers, all with others, discuss how they work, what motivates them, and what skills they think are important to become great programmers. This book is well worth reading if you want to become a better programmer by learning how the great ones program.

Programming Expertise Does Not Come Easily

The overall gist of the articles I am writing on becoming a better programmer through deliberate practice is that expertise does not come easily. You have to work very hard at becoming better and two of those ingredients are learning to be able to focus intently on programming practice and on finding a coach, mentor, or guidance in how to focus that practice so that you are working at incrementally improving your programming skills and not just practicing at the same level over and over again.