7 Qualities of Professional Programmer
The first book I read after joining Bright Inventions team was The Clean Coder: A Code of Conduct for Professional Programmers by Robert C. Martin. It was the book that showed me what kind of developers we would like to hire and why - engineers who care deeply about the practice of creating software and about their own self-development. True professionals.
The Uncle Bob's volume is packed with practical pieces of advice from estimating and coding to refactoring and testing. But it is more about attitude to creating software than techniques themselves. Robert C. Martin shows how we can approach our work with clarity, honesty and responsibility in the face of difficult decisions, tight deadlines, conflicts or demanding communication with clients. The author raises a lot of really good points that we sometimes do not put much thought into - when to say no even to the most persistent manager or when to say yes by committing to a task, how to stand behind your commitment and write the best code possible by not sacrificing any of the best principles, or when and how to ask for help and help others instead of avoiding responsibility.
I believe this book covers many important topics every professional (not only software developer) should think of and keep in mind while pursuing their career. When Paulina nad Agata joined our recruitment team I invited them to read the book and I was curious what they would think about it and which insights they would find valuable. I know that probably it was not the book they were expecting to read during first months 😉, but I truly believe it was worth it. 🧡
Paulina and Agata, both paid attention to sever significant qualities mentioned by Uncle Bob - the synergized descriptions of which you can find below. And let these be the encouragement for you to look the book through.
Keep your eyes on the stars, and your feet on the ground.
Every professional programmer understands that they should always strive for a perfect code. They also know that such a code is simply unattainable because there is always a risk of errors regardless of the experience. Therefore, when they happen - they knows how to apologise for them and make an effort to make them less and less in the future. Professional programmer will not point out the mistakes of others as they know they can make a mistake at any time.
When they needs help - they know how to humbly accept it and feel grateful for it regardless of whether it is offered by a junior or a senior. The professional knows the limits of his assets and creativity - he/she knows when it's time to take a break from mental work to have a positive effect on his future professional productivity.
Professionals try to step into the shoes of their co-workers and clients on different levels - cognitive and emotional. They do it because they put the importance of working hand in hand above the selfish pride and individual achievement.
Professionals exchange information, support each other and helps the team aim at the same goal. A good example is the relationship between an engineer and QA specialist - it is unprofessional to send code to QA when you are aware of existing bugs. When it happens, you violate the elementary principle of "Do No Harm”. Professional developers do not treat QA team as bug detectors.
You can rely on professional programmers - when they say they are going to do something, they actually mean it. There is no space for wishful thinking. Professionals communicate effectively via the language of commitment: Say. Mean. Do. They avoid impersonal statements: need/should, hope/wish etc. They avoid promising to try if they cannot keep it. The promise of try gives a message that something will be done, that you have some new plan of action. However, if you fail in your attempt - it will send a message of disappointment - it will be a failure. The insincere promise to "try" is a lie.
Don't be afraid of saying “no”. You know that something is not possible to achieve, you know that you will not be able to finish something within the timeframe? Don’t hide it. Say it. "No, we can't make it. We need more time." instead of "Yes, we'll do what you need."
Practice and habits allow us to create patterns of the most effective work. Don’t give up important steps as you are chasing the deadline. Be disciplined. If you have previously committed yourself to maintaining certain standards - don't abandon them.
Professionals also know the importance of meetings, and if they know that they are not necessary, they can resign from them. The programmers should choose carefully what kind of appointments they will spend their time at and politely decline these which will not benefit the project. It is important that you always know the purpose and agenda of the meeting - this will make it much easier to facilitate your attendance. Your time is money, remember.
Professionals know very well how much effort it takes to constantly improve. They know that programming is like a muscle and if untrained it can fade away. Just as a musician constantly exercises his fingers by playing an instrument, the programmer should undertake various activities to maintain and develop their coding skills.
"Your career is your responsibility". Your career and your development is solely in your hands. Continuous learning and practice is the key to success; read, go to conferences, practise pair programming. Try to keep up with the latest technological developments and news. Uncle Bob gives a great example of a doctor and lawyer: "Would you visit a doctor who did not keep current with medical journals? Would you hire a tax lawyer who did not keep current with the tax laws and precedents?” It is the same with developers - to be a professional, you need to constantly train, practise, learn something new, consolidate your knowledge, detect more mistakes, and even develop crazy, creative ideas.
The backlog changes, inadequate estimates, undelivered features just before demo. These are just some of the difficult situations developers may encounter in their daily work. How to find your inner peace in this escalating pressure? Avoid pressure in the first place. This is possible by getting aware of potential risks that may affect the quality of your work and possible solutions how to change it.
Work is usually unintended slowed down by rushing and panicking. Slow down. Think through the problem. Plan a solution and consistently move toward it at a reasonable pace.
Keep your teammates and leader updated about problems. Ask for help and feedback.
Rely on your own proven coping strategies - people under stress have a narrowed perception of reality and stream of attention. Be kind to yourself. If TDD is a method that helps you - write even more unit tests than usual. If you write small functions - write even smaller ones. If you need a break - go out and take a deep breath.
Code in pairs - it's an effective way to stay informed by your teammate about the aspects that you missed because of your low level of focus.
A true craftsman knows the secrets of their craft - the same can be said about a programmer. As a software developer in a particular industry, it is good to explore the field, do research to know about all potential user pain points, dependency mechanisms, and "behind the scenes" nuances. Gathering as much knowledge as possible will give you a deeper understanding of your project specification.
The Clean Coder is the book about how a professional programmer conducts him or herself. For sure one may disagree with some ideas Uncle Bob expresses, but still there are some unique thoughts worth our attention if we want to rise to a higher level of professionalism in our job. Have a good read!