Why Building the Right Habits Is Crucial for Becoming a Great Programmer
This is a chapter from the upcoming book “The Successful Programmer Mindset” which we will be publishing first on Simple Programmer. You can find out more about the book, and its upcoming launch, by clicking here.
I’m Not a Great Programmer, I’m Just a Good Programmer With Great Habits.
Every programmer knows what skills they need to master to be fully competent. If you know a number of programming languages well and know how to build good-quality software from scratch – then you can call yourself a professional programmer.
But these skills are not sufficient for you to become a truly great programmer. If you merely know how to code, you will be merely average. You will have to deal with a lot of competition from other programmers and your salary, while probably being higher than average, would still be much lower than what it could have been. Plus, if you merely meet minimum criteria for being a professional software developer, it would be next to impossible for you to get into one of the FAANG companies (Facebook, Amazon, Apple, Netflix, Google). You need to truly stand out to be a member of the elite software development club.
Have you ever wondered what makes famous software engineers, the truly elite, like Kent Beck, Scott Hanselman, Robert C. Martin (who is also known as Uncle Bob) and Martin Fowler so successful and so different from most of your colleagues? It may, at first, seem that those people are geniuses and that you have to be born special to achieve their level. But it’s not necessarily the case.
If you look at what these people do and how they do it, it becomes apparent that their main skills aren’t the hard technical skills. And it’s not even the so-called soft skills. It’s something way more fundamental that makes them as exceptional as they are.
It doesn’t matter that much how many languages and best practices you know. What those exceptional soft engineers know is that developing meta-skills matters way more. Meta-skills is an all-encompassing term that refers to components of your personality that you can consciously develop, such as habits, routines, self-awareness and general mindset.
In this book, you will learn a whole range of meta-skills that, if incorporated into your daily routine, will help you to become a programmer that truly stands out from the crowd. You will be able to master anything much quicker than most people. Your competition will be substantially reduced, companies will want to hire you and everybody will want to pay you well. Your job will become easier, more enjoyable and something you can switch-off from when the time is right. You’ll be able to compartmentalize and improve your work–life balance.
We will start our journey with the most fundamental meta-skill of them all: proactively building productive habits and breaking down negative ones. But after that, you will learn other important meta-skills that, if applied, will greatly enhance your career. You will learn how to enter a productive mental state known as “the state of flow”, which will enable you to stay deeply focused on your work for long periods of time. Afterwards, you will learn various routines and mindset development tricks that will make it easy to develop the right habits and become a true master of your craft.
Learning how to program requires hard work. But, as a programmer, you’ll have to keep learning new things regularly, because technology constantly evolves and the last thing you want to do is stay behind. The programming language you know today may become obsolete tomorrow.
But if you just brute-force your way into every new programming language that you need for your job, you will soon burn out. This is where well-developed habits of effective learning will mean you constantly evolve too. And they will help you to develop the knowledge of absolutely any other technology that remains relevant and in-demand.
Likewise, in order to truly stand out as a programmer, you will need to develop a habit of discipline. And, with the right tips, it’s a habit that’s actually much easier to develop than it sounds. We will cover some ways you can develop it.
Once you have mastered these habits, learning anything will become easy. And your general efficiency at work will be much improved. As a bonus, you will also gain much better self-awareness.
So, let’s examine what makes expert-level programming skills, seemingly reserved for the elite, so hard to develop and what meta-skills you can learn to make the hard work easy.
Why mastering programming skills requires hard work
Programming is hard. If it was easy, then anyone would have been able to do it. But only a relatively small proportion of the general population become software developers, despite a high demand for the profession.
The fact that programming is hard is precisely the reason why programmers are well-paid. In a free-market economy, your salary generally depends on three key factors – the need for what you do, your ability to do it and how difficult it is to replace you. The ability to code is in high demand and because not many people know how to program, the ones that do are hard to replace. And if, on top of this, you can do your job exceptionally well, then you can, pretty much, write your own pay-check.
Programming is not hard because of how many educational diplomas you’ll have to earn. In fact, you can have none and still be a successful programmer. Many successful software developers are fully self-taught. The IT sector is probably one of the least bureaucratic industries ever. Your hiring managers would probably not care what college certificates you have. In many cases, the only thing that will be truly important to them is whether or not you can code.
But the fact that you can learn the entire set of skills just by using a computer connected to the internet doesn’t make it easy. Yes, you can find all the information you need. But mastering those skills will still require hard work.
First of all, you will need to remember a lot. As a beginner, you will probably be overwhelmed with information. But this is just a tip of the iceberg. To progress in your career, you will also need to learn many different programming principles and best practices.
As a junior developer, you might get away with solving a problem any way you want. But you will never reach a more senior level unless you are familiar with design patterns, naming conventions, SOLID, KISS, DRY and other principles of clean code.
To become a truly exceptional developer, you will need to learn even more. And not just learn. You need to practice. Practice so much that you’ll become a real code craftsperson.
But as every developer knows, you don’t learn things only once and then just continue applying them. Technologies evolve. Programming languages get updated. With those updates, new best practices become adopted.
This is why, if you have chosen a software development career, you are in for life-long learning. And you have no choice. You can’t afford not spending your time on learning and practicing new things. If you choose not to, you will soon become uncompetitive.
Learning how to program and applying this knowledge to solve actual problems requires time and focus. The time and focus that other, much more pleasant, easier, activities are always trying to take away from you.
This is why programming is incredibly hard, especially if your goal is to become a programmer that truly stands out. You may be an IT geek and programming could be the only career you have ever wanted. You may find coding enjoyable. But with unlimited access to social media, video games and streaming services, it is very hard to force yourself to actually spend your time on programming practice.
It’s hard to even start doing something as mentally demanding as programming if there is a gaming console staring right at you. But it doesn’t have to be this way. You can make it easy by taking advantage of the power of habits.
Why habits are the key to making hard work easy
Even though we think of ourselves as conscious creatures, the majority of the things that we do are done subconsciously. Most of the little actions we take throughout the day are done on autopilot. And that’s exactly what habits are. 
You have probably been in a situation where you have driven somewhere and could not remember the details of the journey. Or maybe you needed to return home to check whether you have locked the door, only to discover that you have. Situations like these are good examples of how routine actions that we do every day become something that we do outside of our conscious control.
The reason why habitual actions become subconscious is that conscious thinking requires a lot of energy. According to well-established neuroscience and evolutionary biology, the brain has evolved to use this energy as efficiently as it can as part of our survival instincts. Every conscious decision we make requires a relatively high amount of energy. This is why our brain strives to automate things as much as possible.
Human brain uses up to a quarter of all the energy available to the body despite making up only approximately 2% of the total body weight. And these figures are just average for an average person. People who regularly spend a lot of time thinking hard need even more energy for their brain. 
The World Chess Tournament of 1984 had to be stopped abruptly. This was because one of the main contenders, Anatoly Karpov from Russia, has lost 10 kg (22 lb) of body weight and organizers were worried for his health. And all of this was caused purely by having dozens of chess matches within a relatively short period of time. This was substantial proof that heavy thinking uses so much energy that it does burn calories and can force us to use stored energy reserves. 
Programmers are similar to chess players in a way. Due to the nature of our work, we have to think hard too. This is why it’s reasonable to assume that the work we programmers do is energy-consuming.
But according to evolutionary biology, our bodies strive to preserve as much energy as possible. We haven’t evolved in an environment with surplus food, like the one we live in today. When people used to live in caves, food was scarce, so the body needed to do everything it could to preserve as much energy as possible.
This is why it’s so easy to gain weight and so hard to lose it. The layer of fat is nothing but the energy store. Because even if we know exactly when our next meal is coming from, our body doesn’t: Our instincts are still attuned to the harsh reality of the stone age. 
And exactly the same principles apply to our brains. As that incident at the chess tournament demonstrates, the process of conscious thinking can use a lot of energy. This is why, by default, our caveman instincts will do everything they can to make us do as little conscious thinking as possible.
Chances are that you have been in a situation when you needed to learn something, but you have struggled to even get started. But then, after brute-forcing the process of learning for a period of time, the activity became easier. Starting-out was hard because it was energy-consuming, but once we’ve done a task many times, it just becomes a subconscious habit. This is an example of this energy-preservation instinct in action.
Remember how you didn’t like brushing your teeth as a kid? But over time, it just became a daily routine. You don’t mind doing it. You are not asking yourself why you should do it. You just do it.
So the same can be applied to the process of mastering programming skills. You can make a routine out of it. When you start, you have to use your willpower and coerce yourself into practising coding instead of browsing your social media feed. But if you do it consistently every day, this will become your routine.
Same applies to those who already have a successful career in software development. You may get a little complacent after your probation period is over. You may get into a habit of doing just enough not to get fired, but nowhere near enough to become a great software developer that everyone will want to hire.
Now you can use the understanding of how habits work to your advantage. You can develop routines that will gradually turn you into a person for whom complacency is virtually impossible.
Neuroscientists now know that habits physically restructure your brain. Understanding how it happens will help you to eliminate all the bad habits and build the good habits that will eventually make you into a much more productive and focused programmer.
Programmers are people with analytical minds. We like to get into details of how something works to understand it better. This is why, as a programmer, knowing how habits are formed on a biological level will make it much easier for you to start consciously applying the right habits in your own career.
Understanding the science behind habit formation
There are many things about the human brain that we still don’t know. But fortunately, there is a well-established knowledge of how habits are formed. At least, all reputable neuroscientists agree on the general principles of it. 
If you have worked with machine learning, then you will be familiar with neural networks. But the neural networks used for machine learning are nothing more than a highly simplified mathematical model of how actual neural networks work in the brains.
Our brain consists of many neurons, which are connected to each other via a complex network. Those networks transmit signals that reach various parts of the brain. And a route in the network that the signal takes is called a neural pathway.
When we haven’t done something before, we don’t have any well-developed neural pathways for that action. This is why learning something completely new is always hard. The best the brain can do in this situation is re-use some neural pathways that are vaguely related to the action we are trying to do. This may allow us to complete the action, but our performance will be abysmal, and the energy consumed will be high.
A model has been developed by psychologists that describe four stages of competence that a person goes through while learning something new.  Those are as follows:
- Unconscious incompetence. In programming, this is when a programmer hasn’t yet started learning a new technology that he or she needs for the job and can’t possibly appreciate how difficult this technology is to master.
- Conscious incompetence. This is when a programmer has already started learning a specific technology and fully realizes what gaps of knowledge he or she has.
- Conscious competence. This is when a programmer can use the technology well, but needs to apply conscious focus every time he or she uses it.
- Unconscious competence. This is when a programmer has mastered a particular technology to such a level that it can be applied on autopilot.
Remember when you used the computer keyboard for the first time? Or when you’ve taken your first driving lesson? You were probably able to follow the instructions, but it took you a long time to type that first word or to drive the first 20 yards.
When we do something repeatedly, the neural pathways associated with that physical action become stronger. A new highway gets built in the network of neurons inside our brain. And then it becomes really easy for neurons to fire. This is why, over time, you are able to type on a computer or drive a car without even thinking about it. The energy-reserving brain likes this because forging new pathways is hard. 
As Daniel J. Siegel, a famous psychiatrist and an author, said: “Where attention goes, neural firing flows, and neural connection grows.”. 
But this principle is not only limited to the process of learning new skills. This applies to establishing new routines too. Neural pathways don’t just control the physical actions your body can take. Cues and associations are also transmitted by neurons as signals.
For example, there isn’t much skill involved in brushing your teeth. It’s a series of very simple moves that even a little kid can do without any effort. Only that the kid will probably find the process unnecessary, boring and time-consuming.
But over time, the process of brushing teeth just becomes a routine. Your brain would have built a neural pathway based on cues. It might be that your brain associates getting up from your bed as a cue for brushing teeth. Or maybe it’s the sound of the alarm clock. Whichever exact association it is, when the morning comes, you just go to the bathroom and start brushing your teeth. And you aren’t even thinking of it. You don’t remember what exact hand movements you’ve made when you brushed your teeth last time, do you? And that’s because the action was fully subconscious.
Now, you know how habits are formed on the biological level. This will now help you to deal with the process that is perhaps the most destructive to your programming career – procrastination.
Why we procrastinate
As a software developer, you will have to regularly deal with the urge to procrastinate. And you’ll find it hard to resist, especially when there are so many distractions around you.
But if you want to be a truly exceptional programmer, procrastination is your mortal enemy. Every hour you spend procrastinating is an hour you could have spent developing your professional skills, but didn’t. The more you procrastinate – the more you are putting your professional development on hold.
It may be even worse. Procrastination may delay you when you try to complete an urgent piece of work. And if this was a mission-critical task that had to be completed before a strict deadline, you may even get fired for that.
And procrastination is not even pleasant. You gain absolutely nothing from it. Remember last time you were meant to complete a task, but ended up mindlessly browsing the web instead? If you are like me, then you have probably felt guilty about not completing your task, while the process of browsing the web didn’t give you any real pleasure either.
So why then do we procrastinate, if there are no benefits from it whatsoever, while it also harms your career progress?
You now know that the brain is an energy-consuming organ that likes to preserve the energy as much as it can. And this is the primary reason why we procrastinate.
If the brain perceives the task at hand to be too difficult, it will try its best to make you avoid it. This is why, even if you fully understand the benefits of doing the work, there will be some sort of subconscious urge to make you do something else instead. Normally, you will have a craving to do something much less difficult and much more pleasant. This is why when you procrastinate, you normally end up doing some mindless things, like continuously scrolling your social media feed or binge-watching YouTube videos.
It is a form of self-sabotage. But your subconscious mind doesn’t perceive it as such. According to it, it’s trying to save you from potentially using up too many resources. Remember that your subconscious mind still lives in the stone age where your next meal wasn’t guaranteed. 
And any task that you haven’t done before will be especially prone to be perceived by your brain as something too big and too hard. It doesn’t yet have anything it can compare the difficulty of this task with. So, by default, it will just put it into the category of “too big”.
Procrastination can be an easy trap to fall into for anyone, but it’s especially a problem for anyone involved in intellectually challenging work, including software developers.
As a software developer, you will regularly do something that you haven’t done before. Sometimes you will be learning a new technology. Sometimes you will be investigating a problem in a system that you aren’t too familiar with. If you can’t estimate how challenging the task will be, by default, your brain will perceive it as too difficult. There is no getting away from it. It’s how the brain works on the basic biological level.
And you can probably relate to it yourself. Do you remember the inner resistance that you have felt when you needed to study a new technology or a programming language? Or maybe you felt it when you needed to build a feature or investigate a bug in a system that you aren’t very familiar with? Perhaps you have been putting it off for as long as you could. But then, once you get started, it doesn’t feel that bad anymore and you are fairly happy to continue.
The fact that experiencing the urge to procrastinate is sometimes inevitable doesn’t mean that you can’t fight that urge and win. This is exactly what habits are for. Procrastination is a habit. The more you succumb to the urge to procrastinate – the harder it will be to resist it in the future.
But successfully convincing yourself to get the work done despite the urge to procrastinate can also become a habit. You just need to do it frequently enough. Over time, you will be able to resist this urge easily.
Now, let’s talk about more concrete steps on developing productivity habits.
How to make coding as easy as brushing your teeth
If you have good oral hygiene, then the process of brushing your teeth will be second nature to you. But to be an extraordinary software developer, you will need to make your technical skills second nature too.
You already know how neural pathways form and why it’s so hard for software developers not to procrastinate. And, of course, programming is not even comparable to brushing your teeth. It is way more difficult.
Well, the bad news is that once you make a decision to become a master of the software development craft, you will have to overcome some serious obstacles. You will have no choice in this matter. You will have to use your willpower.
But the good news is that you will only do so at the beginning. Once new neural pathways are formed and solidified, your work will feel easy. Your subconscious mind will know exactly how difficult each task will be if it’s similar to the ones you’ve done many times before and you will no longer feel an urge to procrastinate. Or maybe you still feel the urge, but it won’t be so strong that you won’t be able to deal with it.
And this is where the analogy of brushing teeth comes into play. You probably no longer brush your teeth because you are actively worried about your oral hygiene. You brush your teeth because, over the years, you have built many cues that make you go and brush your teeth.
The same principles can be applied to building good working habits. If you feel your environment with certain cues, then, over time, your subconscious will start associating these cues with work. And you will be able to give your work 100% focus.
It can be anything. Different techniques will have a different degree of success for different people. But the general principles will apply to everyone.
Scott Hanselman, one of the most famous senior software developers from Microsoft, seems to be a genius of productivity. He blogs. He filmes videos. He interviews people. He travels around the world and gives talks. He publishes programming courses. And this is on top of his already busy work at Microsoft. And, on top of that, he has a family.
But he isn’t actually that special. One of the most popular themes of his talks is productivity hacks. And when you listen to those, it appears to be that he is just extremely good at designing routines. And his routines become solid habits. 
Basically, as well as being a true master of software development, he is also a master of meta-skills. But he doesn’t keep it a secret that it’s precisely the meta-skills that made him a successful software developer and not the other way round.
For example, he talks a lot about setting up a distraction-free environment and making it a habit to focus only on a narrow range of things that are required to achieve a specific goal.
He is also really good at not letting his professional work interfere with his private life. And his routine allows him sufficient opportunities to recharge. For example, he completely switches off his devices when he is around his family in the evenings, on the weekends or during their vacations. 
Here, Scott Hanselman has shown us one of the greatest habit-forming techniques you can use. You can separate your work from other aspects of your life and create strong associative cues to make your work much more focused and productive.
You can separate your work from other parts of your life by time, space or both. For example, you could:
- Have a special alarm ring-tone that will indicate the start of the work time.
- Always start your work at exactly the same time.
- Do your work in a special room that exists only for work.
- Keep your working computer just for work and nothing else.
You can choose whatever works best for you. Later, we will cover in more detail why these routines work, so you will better understand how to design your own routine for enhanced productivity.
But for the time being, just remember that consistency is the key. If you carry on performing these little rituals while you work, your brain will start to associate them with work. And over time, you will get to the state where a particular cue will make you sit down and start working without giving it a second thought.
If you haven’t been consciously working on your productivity before, the initial period will probably be challenging. Most people are like this. And to them, some days that can focus, while on other days they get hardly anything done.
What you need to start doing is forcing yourself to start doing the work, even if you don’t feel like it. To make it easy, you can associate cues with it. Maybe you can try to do it every day at a particular time. Maybe it will always be at a particular place. Maybe you will do it on a device that you have been using for work and nothing else. Or maybe it's a combination of those.
What you do repeatedly becomes your subconscious habit. And this is how you build a habit of jumping into a productive activity when you see certain cues. You just continue doing it over and over again in the same way until you start doing it on autopilot.
Over time, the tasks themselves will become easier. If you regularly study new material, you will learn how to enjoy the process. If you write code regularly and frequently, many of the programming techniques will become second nature to you. Once you have experienced a repeated exposure to finding and fixing bugs, you will know exactly where to look when you’ll be working with similar systems. Your brain will no longer perceive those as particularly challenging tasks.
But to make coding a second nature, you have to do a lot of it. You have no choice. Habits take time to form. And repetition is the key.
What exact habits successful programmers have
Martin Fowler, who is well-known in the software industry as probably the main expert on software design and architecture, frequently uses this famous quote from Kent Beck, to emphasize how much of his career success is attributed to habits: “I’m not a great programmer; I’m just a good programmer with great habits.”
But what exact habits do you need to develop to become a great programmer? Well, the most fundamental habits that you need to work on are the ones that apply to any field, not just programming. Let’s call them “the habits of discipline”.
But, contrary to a popular misconception, discipline is not entirely about using your willpower to do difficult things even when you don’t want to do them. Discipline is also about restructuring your environment and your routine in such a way that it would make it easy to do those things that would help you achieve your goals. With those changes in places, you won’t have to use a lot of willpower.
And one of the best changes you can apply to your working environment as a programmer is to reduce the amount of cognitive load in it.
How to reduce cognitive load
Those are the habits that will allow you to keep focused on useful tasks. Until you develop those, you will have to exert willpower. And as we have already determined, willpower (which is the same as consciously maintaining focus on something that you don’t want to do) is a finite resource. It consumes energy, which is finite, until you do something to replenish it.
But the things that replenish energy usually take a lot more time than the things that deplete it. This is why people need eight hours of sleep on average, while most of them can only maintain conscious focused activity for a couple of hours per day at most.
One of the things that gets you tired the most during challenging cognitive work, like software development, is the process of deciding to do the work. It’s not as simple as just making the decision to do the work and immediately sitting down to do it. Because the task you are about to do competes with a whole range of various pleasant activities you could do instead, the process of making such a decision includes conscious or semiconscious assessment of pros and cons of doing the task compared to other things you crave to do instead. This is why it’s so exhausting.
The process of getting exhausted from making too many conscious decisions is known as decision fatigue or ego depletion. The term “ego depletion” was first coined by Roy Baumeister – a world-class social psychologist. Since then, a lot of research has been done on the subject. 
Some successful entrepreneurs just understood this concept intuitively. Steve Jobs, for example, used to wear exactly the same outfit all the time. He just had several exact copies of it in his wardrobe. But this was just one of the best-known rituals to minimize the decision fatigue that he did. He had several of those. For example, he was notorious for saying “no” to almost every idea that came his way and he aggressively delegated tasks. 
Even though the process of selecting what to wear is seemingly easy, it does deplete your mental energy a little bit. And if you have to make many little decisions like this, all of these small energy depletions add up. So, if you manage the number of decisions you have to routinely make to an absolute minimum, then you will have sufficient energy to make really hard decisions, which he, as Apple CEO, had to make many of on a regular basis.
So, you need to build a habit of doing focused work without thinking about more pleasant things that you would prefer to do instead. And for that, you will need to minimize ego depletion.
A good trick would be to eliminate as many distracting cues from your environment as possible. Then the habit will solidify much quicker.
It will probably be hard for you to focus on your work if you are a gamer and there is a poster of your favorite game in the room you are trying to do your work in. Or even worse – when there is an actual gaming console right next to your desk. If you use social media a lot – it will be hard to resist the temptation to scroll through your timeline when you are logged into your profile on the computer you are trying to work on.
So, clear any logins to the entertainment resources you have on your work computer's browser. Uninstall all the entertainment apps and games from it. Put your phone on silent and move it out of your sight. Or better yet, move it into a different room.
You can go full Steve Jobs by throwing away the entire content of your wardrobe and buying multiple copies of exactly the same outfit. This would be helpful. But for the vast majority of people, this would be an overkill.
As you can now see, the most effective way of improving your discipline is not by forcing yourself to do hard things, but to rearrange your environment in such a way that it would be easy to do those things. If your environment helps you to focus on your productive work, then you won’t have to apply too much willpower to maintain your focus. And if you constantly keep removing cognitive clutter from your environment, you will become disciplined without having to force yourself.
Developing good programming habits
As well as mastering the fundamental habits of discipline, you obviously need to develop good programming habits. And it’s not only about being able to type the code intuitively. This is probably the least important thing, although you will gain this skill after typing a lot of code over a long period of time.
What you need to work on is mastering the habits of doing software development in a proper way. You need to make it a second nature to write clean code, well-maintainable and bug-free code and not just any code.
Martin Fowler gives this timeless advice to help us develop good programming habits: 
- “If you can get today’s work done today, but you do it in such a way that you can’t possibly get tomorrow’s work done tomorrow, then you lose.”
- “When you find you have to add a feature to a program, and the program's code is not structured in a convenient way to add the feature, first refactor the program to make it easy to add the feature, then add the feature”
These practices that he has developed over the decades is exactly what sets him apart from someone who has been coding for an equivalent amount of time, but has never learned to do it well.
And those quotes just summarize the purpose of structuring your code properly instead of just writing any random bunch of statements. Best practices, such as SOLID principles, coding style conventions and design patterns are there for a reason. Yes, you can write code that solves any particular problem without applying any of these best practices and if your code ends up badly structured as the result, you will cause yourself a bunch of problems in the future.
This is precisely why badly written code is referred to as “technical debt”. Yes, you may save a little bit of time right now by writing a solution to a specific problem without taking a step back and thinking about the best practices. But this negligible amount of time saved will result in significantly more work in the future when you will have no choice but to restructure a badly written code. This is precisely why Martin Fowler says that it’s worth refactoring badly written code every time when you see it. This little amount of extra work now will save you a lot of hassle in the future.
So, what specific best practices do you need to implement? Well, there are plenty of those and you won’t remember them all. And you don’t need to know them all right away anyway. SOLID, KISS and DRY principles are examples of these best practices, along with above mentioned coding style conventions and design patterns. But covering them in detail is beyond the scope of our subject.
To develop the habit of applying best practices while writing software, the easiest thing you can do is spend some time each week reading books and blogs written by well-respected software developers to find out the details of those best practices, make notes of the key concepts and then start incorporating them into your code. Over time, your code will become better and better. And those best practices will be something that you do completely intuitively.
Dedicating a specific time frame on a specific day of the week to learning best practices will help you to establish a consistent routine, which itself will eventually become a habit. This kind of approach to productivity is what Scott Hanselman advocates and regularly mentions in his blog and his talks.
It’s important to remember that merely knowing the syntax of a programming language is not enough. In order to be a good software developer, you need to know how to use this language well. And it’s those best practices that prescribe it. So, in order to be a true master of your craft, make those best practices your habit.
Why soft skills are also important
But to become a truly exceptional software developer, mastering software craftsmanship is not enough. You will also need to obtain reasonably good soft skills. These include a whole range of interpersonal skills, like communication, leadership, the ability to sell, etc..
Of course, you aren’t a professional public speaker (although nobody is saying you can’t be one). And you aren’t a salesperson either (although we all have to sell something from time to time; we just don’t tend to call it that). So perhaps you don’t need to develop your soft skills to a level where you can win a political debate against a professional politician. But nevertheless, if you want to be successful in your career, any career for that matter, you have to at least develop the following skills to a fairly good level:
- Your salary doesn’t only depend on how good you are as a coder. Many people wish it did, but it isn’t how things work in real life. Your salary also depends on your ability to negotiate.
- Not all good jobs are accessible via just a resume. In fact, when you look at top-level jobs, probably only a small fraction of those are obtained by a standard application process. More often, you will get a job offer based on how you present yourself as a professional. For example, some directors may have liked the way you presented yourself at some conference. Or maybe some hiring manager saw your blog and really liked it.
- If you don’t have good communication skills, you won’t get far, even if your technical skills are exceptional. If you are the best coder in the company but nobody wants to work with you, you won’t get promoted. If your idea is objectively the best, but you can’t sell it at a meeting, your idea won’t get implemented.
- Lastly, almost any well-paid high-level role in almost any industry consists of leadership components. Senior software developers no longer just code. They influence their teams. So, without even the minimal ability to influence, you won’t be able to become a senior software developer.
But the approach towards learning soft skills and making them your habits is similar to mastering hard technical skills. Dedicate some time to learning them and then consciously try to adjust your behavior and the way you talk according to what you have learned.
Over time, even if you won’t become completely charismatic, you will at least become someone that is pleasant to work with and who can influence other people. Your ideas will actually get implemented, because you will be able to present them well. And you may even receive a job offer out of the blue because someone really liked something you said.
I am personally acquainted with these principles. I used to be fairly shy and introverted in the past. I wasn’t much of a communicator. And I did think that success in a software development career should be driven purely by technical merit.
Until I changed my attitude, I was stuck in a mid-level position. But since I started proactively working on my soft skills, my career has improved dramatically.
One thing that I did was to start blogging and filming video lectures about programming. Since then, I have received a number of job offers from good reputable companies purely because someone found my blog or one of my lectures.
And working on my face-to-face interactions has also played a positive role in my career. I got hired into a lead software engineer position because I’ve made friends with someone who later obtained a top managerial position.
So, while technical skills are extremely important for the development of your programming career, you will quickly hit the limit unless you also work on your soft skills.
But as well as building good habits, you absolutely need to make sure that you don’t allow bad habits to form and solidify. Those can easily derail you, even if you have already established some good habits.
How to stop bad habits sabotaging your progress
One of the most important things to remember about habits is that the process of habit-formation doesn’t only build positive habits. It builds any habits, including destructive ones. This is why, as well as deliberately working towards building the habits that will help you to achieve your goals, you must always be on the lookout for the habits that can sabotage your progress.
Unlike positive habits, negative habits are never in the open. You don’t have to think about them. They will just form on their own. This is why you need to pay attention to the actions that you do throughout the day. 
Another feature of negative habits is that they take no effort at all. Those are the habits that will form by default if you don’t take any conscious action to develop yourself into the person you want to be.
There are many negative habits that everyone is aware of – over-eating, binge-drinking and smoking. Those are bad for your health. And they can also turn into full-blown addictions. But there are also some nasty habits that are perhaps less known and more socially acceptable that can, nevertheless, derail your career.
Procrastination, that we have already been talking about, is one of them. As with any other harmful habits, you don’t need to put any effort into building it. The inclination to procrastinate is what you will naturally feel from time to time. And if you succumb to it too many times, it will become a strongly ingrained habit that will become extremely difficult to get rid of.
So does the habit of ignoring best practices when you write your code. It’s much easier to just write the code than also thinking about how to structure it properly. But overtime, this habit may turn your codebase into an unmaintainable mess. And it may also cost your professional reputation and your career. You may become known as someone who writes junk code despite the years of experience. And if this happens, nobody would want to hire you.
The best time to get rid of any destructive habit is when it hasn’t yet developed into a fully blown habit. Your brain wouldn’t have built strong enough neural pathways at that point. Once it does, it will take a lot of time and effort to weaken those neural pathways.
And this is why, if your goal is to be as successful as you can possibly be in your career, you need to build one particular habit – a habit to regularly examine your thoughts and actions throughout the day. Only this way you will be able to spot the patterns of your behavior that may, over time, develop into a habit that you don’t want to have.
Using mindfulness to stop bad habits forming
There are many ways you can achieve it. Mindfulness meditation is one of the most popular ways. There are several different ways of doing it, but the most basic method is to sit in a comfortable position with your eyes closed and pay attention to your breath. Every time you notice some thoughts – you must refocus your attention on your breath.
Jon Kabat-Zinn, a mindfulness expert and a founder of Stress Reduction Clinic has said the following: “Mindfulness means being awake. It means knowing what you are doing.” 
The main benefit of mindfulness is precisely that – knowing what you are doing. Getting to know those things about yourself that you don’t normally pay much attention to. And this is precisely why mindfulness is one of the best ways of spotting your hidden bad habits that are trying to creep in and become ingrained.
If you do the meditation regularly for 10 to 30 minutes, then you will gain better awareness of your thought patterns. This will help you spot any thoughts that can potentially build negative habits. Once you notice those, you can take appropriate action to eliminate them.
Spotting bad habits through journaling
But sitting down quietly with your eyes closed won’t suit everyone. If meditation is not your thing, there are plenty of other techniques you can employ to examine your behavior. For example, you can get into the habit of journaling. When you are about to go to bed, you can write down what happened during your day, paying particular attention to your actions. As well as writing down any actions you are proud of, you need to write the ones you aren’t proud of that much.
Markus Aurelius, one of the best-known Roman emperors and one of the most famous practitioners of Stoicism, performed journaling regularly. And this perhaps was one of the main things that helped him to maintain the upstanding character he was known for. In fact, his book “Meditation” that every practicing Stoic has read is nothing more than a collection of his journal entries. 
When you put your thoughts on paper, you remember them better. Therefore, over time, your journal will show you your behavior patterns that you probably should change.
Replacing bad habits with good habits
But what to do if you spot a negative habit forming? The best thing you can do is replace it with a good habit. So, if you are feeling a slight urge to procrastinate – shift your attention to something productive. Then, immediately performed this productive action. Over time, your thought about procrastination will become a cue for such an action.
But why is it that the best way to eliminate a bad habit is to replace it with a good one? Again, we are going back to the biology of our brain. When you build a good habit to replace a bad one, you build one neural pathway to weaken the other one.
When neural pathways form, neurons have to establish new connections. And if those connections are used frequently, they become stronger. On the other hand, the connections that aren’t used as much become weaker.
The reason why you can eliminate the procrastination habit by shifting your attention towards productive work is because you are redirecting your neural network away from the existing cue. The action of shifting focus, if regularly done, will contribute towards a new neural pathway. And, over time, the mere thought about procrastination will make you automatically shift your focus to something productive. You’ll do it unconsciously. There’ll be a well-used neural pathway for that.
But whether you are building good habits or trying to eliminate bad ones – always remember that habit formation takes time.
Why you should not be discouraged if things remain hard for a while
Consistently building productive habits while eliminating unproductive ones is the best and the easiest way of building yourself into a person you want to be. But nothing worthwhile is easy in the absolute terms. Therefore it will probably still take you a while to build those necessary habits.
When focusing during your work or study isn’t getting easier over time – don’t be discouraged. It’s meant to be this way.
How long and how easy it will be depends on how many habits you have already developed and whether it’s the good or the bad habits that dominate. So, if programming is harder for you than it is for your peers, it doesn’t necessarily mean that you aren’t as good as them. It may mean that you simply carry more counter-productive baggage in your brain than they do.
You don’t have to be a genius to be an exceptional programmer that everybody wants to hire. What you do need is the ability to focus and to foster the other good habits we’ve discussed. What will set you apart is the ability to focus.
We are all different. A young person with no experience whatsoever can pick up programming really easily. Such a person wouldn’t have had any strongly ingrained habits yet. The neural network inside their brain would still be fresh. This is why you can just mould it into anything.
A person with a whole range of unproductive habits will find it hard to become productive. By trying to build new productive habits, this person will be building neural pathways that will compete with many strong and well-established pathways that exist already. This is a person that will probably require a lot of time and willpower to turn into someone successful.
You may also know someone who has been highly productive their whole life. For example, a successful research scientist may want to decide to become a software developer. In this case, chances are that such a person will become a fully competent programmer in a much shorter time than an average computer science graduate.
This is because such a person would have already built a strong set of base habits that are transferable to any other scientific or engineering discipline. The neural network inside their brain is already correctly configured. And this is why there are many successful software developers who are self-taught. And many of them come from engineering or science backgrounds.
This process can be observed in religious Jewish families, where people tend to become more financially successful than average, even under the most unfavorable of the circumstances. For example, despite arriving to the US in the early 20th century with virtually nothing, the vast majority of people from Jewish background were able to establish successful businesses and build successful careers. 
The reason for this is that the Jewish tradition dictates that children need to study a lot. And they are mandated to read complex religious texts.
Not everyone remains religious when they grow up. But the learning skills they have obtained as kids remain with them for the rest of their lives. And this is how they can then learn almost any in-demand skills.
If you aren’t getting anywhere, it’s OK. Every positive action contributes towards building a positive habit. Every time you don’t give in to a distracting thought that has been driven by a bad habit builds your habit of not giving in to distracting thoughts. You just need to keep building the right habits.
You may not have come from a background of education. And perhaps you have accumulated many negative habits throughout your life. But this doesn’t mean that you can’t become truly successful. This merely means that the process of transforming yourself may take a little bit longer.
Don’t compare yourself to somebody else. Instead, compare yourself to the person you were yesterday.
Trust the process. The results will come.
A metaphor that will help you to remember how habits work
Imagine your mind as your garden. What happens to your garden if you don’t look after it? It gets overgrown with weeds.
Weeds don’t require any help from you. And they will sprout up in the least expected places.
If a garden weed is still small, it won’t do much damage. And you can pull it out easily.
But if the weed is already fully grown, it can do a lot of damage. It can poison your soil, so your garden plants can no longer grow there. And if you try to pull it out, you will probably cause some damage. Or maybe you won’t be able to pull it out at all if the root system is too big.
Garden plants, on the other hand, require a lot of effort. If you don’t get soil chemistry correctly, they may die. If you don’t water them enough, they may die. Or maybe they won’t die, but they won’t grow the way you want them to grow.
And the more beautiful a garden plant is – the more active maintenance it requires.
A weed represents a habit that forms on its own. It will form without any effort from your side. And while it’s still in its infancy, you can eliminate it easily. When it grows to a certain size, it may start causing damage. And it will then become difficult, if not impossible, to get rid of it.
The garden plants are like your positive habits. You have to actively maintain them. If you won’t – they will die. Or maybe they will grow into something nasty. For example, persistence is a good habit. But it can become bad if you are persistent in doing something counterproductive.
The most precious and beautiful garden plants are like the habits of excellence. They are the ones that truly set you above everyone else. And they are the ones that require the most maintenance.
Gardening work is hard, especially if you want to build a truly beautiful garden. But so is building the right habits to become an exceptional programmer. But if you want to have a career that can be compared to a beautiful garden – the work is absolutely necessary.
Now we know the science of why programming is hard and how habits can either hinder us or help us stand out in the crowd. Another meta-skill that can help you stand out even more is getting into a state of deep focus; make this a habit and you’re on your way to being an exceptional programmer.
- Dr. Mike Dow – Your Subconscious Brain Can Change Your Life: Overcome Obstacles, Heal Your Body, and Reach Any Goal with a Revolutionary Technique – Hay House Inc
- Michael W. Richardson – How Much Energy Does the Brain Use? – brainfacts.org
- J. Spearman and Jon Tisdal – Moscow Marathon: World Chess Championship, 1984-85 – HarperCollins Publishers Ltd
- James G. Ferry and Christopher H. House – The Stepwise Evolution of Early Life Driven by Energy Conservation – Molecular Biology and Evolution, Volume 23, Issue 6, June 2006
- Broadwell, Martin M. (20 February 1969). “Teaching for learning (XVI)”. wordsfitlyspoken.org. The Gospel Guardian. Retrieved 11 May 2018.
- Benjamin Gardner and Amanda L. Rebar – Habit Formation and Behavior Change – Oxford Research Encyclopaedias
- Daniel J. Sieagel – Aware: The Science and Practice of Presence – TarcherPerigee
- Jane B. Burka and Lenora M. Yuen – Procrastination: Why You Do It, What to Do About It Now – Da Capo Lifelong Books
- Scott Hanselman – Scott Hanselman's Complete List of Productivity Tips – https://www.hanselman.com
- Scott Hanselman – This developer’s life 1.1.0 – Disconnecting. https://www.hanselman.com/blog/this-developers-life-110-disconnecting
- Roy F. Baumeister – Willpower: Rediscovering the Greatest Human Strength – Penguin Random House USA
- Waater Isaacson – Steve Jobs
- Wendy Wood – Good Habits, Bad Habits: The Science of Making Positive Changes – Macmillan USA
- Jon Kabat-Zinn – Wherever You Go, There You Are: Mindfulness meditation for everyday life – Piatkus
- Marcus Aurelius – Meditations
- Amy Chua – The Triple Package: How Three Unlikely Traits Explain the Rise and Fall of Cultural Groups in America – Penguin Books