The best programmers love programming. I believe it is very difficult to be productive at anything you do not enjoy doing. So if you do not love programming, the rest of this article might not be that valuable for you.
The real joy of programming is when you enjoy the process as much as the output. Seeing your code run perfectly and create something from bits of 0s and 1s was pure magic to me when I first started programming 20 years ago, and the feeling remains the same today.
After programming for over two decades now (I started in 1999), and in many different languages like C++, Java, PHP, Perl, Python, Scala, etc, I believe programming is a very subjective skill. What I mean by that is there is very little agreement in the industry to who makes a good programmer, and how much better one programmer can be to another.
In these 20 years, my enthusiasm has moved from programming to leadership and coaching, but I have continued to work with and learn from many programmers better than myself. Below are what I believe are the skills of a high productivity programmer:-
1. Focus, Focus, and Focus
- Do one thing at a time. Clear your head of everything else. Don’t think of home or that other project.
- Multi-tasking never worked for anyone. It is a myth. Our brains are not made that way. Do not fall into the trap of multitasking.
- To keep your mind free, write (park) things down to get back to them later. Having a reminder in your head to get back to later takes away attention from the current task.
2. Simplicity
- Keep things simple. Do not unnecessarily complicate the project.
- Choose the solution for the problem you have. Do not over-engineer things.
- Understand the larger context where your software will work. Programming for NASA will require certain standards to be adhered to. Programming for an e-commerce company not so much.
- If you are making a simple thing complex, always think twice. Avoid it if you can.
3. Foundational Theoretical Knowledge
- Understand the foundations of computing reasonably well. Understand how CPUs and memory work. Do you know how bits are transferred over networks?
- Theoretical knowledge of algorithms and data structures will expand your options when you are faced with problems to solve.
- Understand math and basic statistics – probabilities, algebra, calculus, etc. Not essential but these skills can improve your analytical abilities in simple yet effective ways.
4. Break Problems Into Sub Problems
- Learn to recognise subproblems in what you are working with.
- Know the solutions to common subproblems like sorting, searching, and other common data structure algorithms.
- Breaking tasks into sub-tasks also makes it easier to organise the code and the project.
- Breaking tasks down builds modularity in your code, which makes maintenance easier. It also makes it easier for others to understand your code.
5. Growth Mindset
- Adopt a beginner’s mindset. Always be willing to be amazed by new discoveries.
- Never get stuck in an “I know it all” attitude. It is very dangerous for your growth.
- Always be eager to learn something new. Learning never stops.
6. Ship Code Today. Avoid The Perfectionism Trap
- Get things done. Today.
- You can always improve tomorrow what you shipped today.
- Focus on making iterative improvements. A lot can improve over time by doing little improvements.
- Perfectionism can stop you from doing things fast. Be watchful.
7. Learn to Communicate
- Think about if what you are going to say will make things better. If not, stay quiet.
- Support others in their ideas, instead of only pushing your own ideas. Collaborate.
- Control your EGO. Don’t speak just for the sake of it. Listen more.
- Don’t worry about having the last word, or winning every argument.
- Learn about persuasion and influence. Speak to enrich your team and your relationships with others.
- When speaking to non-technical people, learn to adapt your communication to the audience.
8. Take Care of Yourself. Mind, Body, and Soul.
- Get a good night’s sleep every day. Go to sleep at the same time every day.
- Get moving. Our bodies are not meant to sit in a chair the whole day.
- Eat healthily. Cut out salt, sugar, and fat. Keep yourself hydrated at all times.
- Physical well being (diet, sleep and exercise) also impacts your focusing abilities and productivity, so don’t ignore this.
- Take drinks and drugs (alcohol, coffee, other stuff) in moderation. Avoid them altogether if you can.
- Meditate. Walk in nature. Get a hobby. Do what you like (other than programming) every once in a while.
- Take regular breaks when working. You will come back with fresh ideas and energy.
- Be ambitious, but watch out for anxiety and stress. Take enough rest to rejuvenate.
9. Debugging Skills
- Run and test your code often. Things will go wrong. Catch your bugs early. It will save time later on.
- Learn to use different debugging tools. Get good with using your tools.
- Build an intuition. Debugging skills get better over time. Practice makes perfect.
10. Get Over Yourself. There Is Nothing Special About You
- You are not special. Give up any entitlement you might have. Don’t let your EGO fool you otherwise.
- Nobody (at work) will miss you if you drop dead today. Or if your software / code / work suddenly disappears.
- Remember it is more important (and difficult) to be kind than clever.
- Control your desires. Learn to live with less. Be grateful for what you have.
- Enjoy what you have today. Don’t worry about tomorrow or the past.