Warning: Illegal string offset 'filter' in /var/sites/t/theproactiveprogrammer.com/public_html/wp-includes/taxonomy.php on line 1409
In professional terms, at the age of 33 I am still relatively young. I have more of my career ahead of me than behind me. Nevertheless, when I look back, I can see that my perspective has changed considerably. With this in mind, I thought I would consider the question: if I could give some professional advice to myself as a fresh-faced graduate entering a career in programming, what would that be? This post is my answer to that question.
At the start of a project, things always look rosy
One of the most satisfying parts of life in software is beginning new projects. You have a blank sheet of paper upon which you can create the greatest system ever developed. The possibilities are endless. You will get everything done on time, under budget, and you will be a hero. It is difficult to avoid this kind of wishful thinking at the start of a project, in fact such optimism is a good thing in some respects. All great achievements start with a lofty vision. However, without being too pessimistic or miserable, I believe it is important to temper that early enthusiasm with a dose of realism. There will be difficulties, disagreements and unexpected obstacles. People will over-promise and under-deliver. Some things will take much longer to complete than expected. This is just how projects unfold. If we acknowledge this reality from the outset, we are more prepared for difficulties, even if only on a subconscious level. This is something I have learnt from experience. Things never run completely smoothly. One common mistake that people make is to believe that by following a particular methodology or project management method, difficulties can be largely eliminated. This is simply not the case. There will be difficulties, and a degree of stoicism is required to handle and overcome these difficulties.
Time and experience are the best teachers
Early on in my career, I was desperate to make progress. I could see that the people around me were better than me and I wanted to bridge that gap as quickly as possible. I studied and tried hard but just couldn’t move forward at the speed I wanted to. Now I see that the reason those around me were ahead of me was simply that they were more experienced. There is a reason that job descriptions tend to require a certain number of years of experience. Reading a book or completing a tutorial is incomparable to real experience. In addition, personal and professional development take time – not only the hours spent at work, but the years spent developing an overall picture of work, people and life. As you encounter and overcome obstacles, your brain forms new connections which make sense of those problems and prepare you for their reoccurence in the future. There is no other way to form these connections than to gain experience and wait. Success in my opinion is essentially about learning to solve problems, whether the problem is a bug in your code or a difficult colleague. You can read about bug-fixing or relationships, and this can help to some extent, but to really develop you need to face and overcome these problems.
Satisfaction at work is down to the people around you
As a junior programmer, I greatly underestimated how important people are to your level of satisfaction at work. From your peers to your boss to your customers, the people around you are the biggest influence to your day-to-day levels of job satisfaction. You can be faced with a failing project or a seemingly insurmountable snag list, but if the people around you are intelligent, positive and understanding, you will be able to cope and learn. Equally, you can have access to all the latest tools and technologies, and use them to design and deliver a brilliant system, but if you are working with difficult people, you won’t enjoy the experience. It is easy to think of life in programming consisting simply of a programmer and his machine, joining forces to conquer the world (or at least his project). Indeed, programmers are perceived stereotypically as geeks, because they are seen as lacking in social skills. This stereotype comes from the fact that introverts are often attracted to computers as a possible alternative to having to deal with actual people. I see myself as something of an introvert and this is possibly what drew me to computers initially, but there is simply no escaping the fact that you can’t get very far alone. The good news is that human relationships offer rewards far greater than anything offered by a machine, and the real value of a successful project comes from sharing satisfaction with your colleagues and your customers.
Don’t just code
As I have progressed in my career, I have learnt that actually writing code is a small part of being a good programmer. A much more important skill is the ability to think well. That is, the type of thinking required to take a vague task or problem and turn it into a plan of action. Sometimes we need to step back and perform a ‘brain dump’ of everything on our minds. We need to learn to capture, organize and prioritise ideas, and also to let go of some of our desires. For example, upon experiencing a desire for our code to be supported by unit tests, a seemingly reasonable next step would be to start writing unit tests. But we need to learn to view that desire relative to the bigger picture, to make sacrifices and realise that we can’t achieve everything. As much as we would like our code to be faster, is performance optimization the best way we could be spending our time right now? The only way to effectively consider such questions, I have found, is to stop coding for a while and start thinking. Make a list on paper, in notepad, or on a whiteboard. Draw a mind map, be messy, write down your thoughts. Think about how much time you have, make some estimates, make some sacrifices and decide upon the best course of action. Then go ahead and start coding in the right direction.
I hope you have found something interesting or useful in this post, particularly if you are new to programming. I have no doubt that in ten years time, my view will be quite different. As we progress through our careers and our lives, our experiences will inevitably reshape our views. It would be nice to know what my future self would advise me right now, but I guess I’ll just have to wait and see.