When talking about a good software developer one would usually use such adjectives as intelligent, hard-working, responsible and so on. In general, these are the people with many great qualities. Still, have you ever wondered what would be the best quality that these people possess? For me, one of the best traits of a good software developer (software crafters) is self-motivation.
I admire these self-driven people and their will to push through. Also, I watched and assisted some great minds while they were solving highly difficult problems, inspiring people around them and being overall good human beings. They achieved this just by accessing that pool of (what it seems to me) infinite motivation. It would be an understatement if one would say that I’m attempting to be like these people. However, I found out is that self-motivation is tricky, and it is especially hard to sustain it for a long period of time.
So, here and there is where I wrote about my little hacks to keep that motivation at a high level and how I used philosophy for inspiration. Coincidentally (or not), it seems that great philosophers knew a great deal about self-motivation, much like software crafters. My biggest goal is basically to get into a mindset in which I will produce high-quality software all the time, regardless of obstacles, problems, and self-doubt.
That is why I am writing about Marcus Aurelius and the philosophy branch he is representative of – Stoicism. I am not going to lie to you, this one is very close to my heart, and I hope that I will do good by one of my greatest heroes. So, what is so cool about Marcus Aurelius and Stoicism? Well, let’s take a look.
It’s safe to assume that most people aren’t fond of philosophy. It is associated with thick, unreadable books, long classes and boring professors in tweed blazers. Go on, try to talk about philosophy with (almost) anyone, and witness them making the biggest eye-roll of their lives. Hell, you wouldn’t believe what people on Reddit have to say about this series of mine. Nevertheless, we do use philosophy in our everyday life. Things we do are aligned with some kind of internal principals, some kind of value system. We use philosophy out there, in action, not in theory.
And Stoics did that very well, which made Stoicism the most practical of all philosophies. It was used by slaves, politicians, emperors and ordinary people as the most practical approach to problems in life. It is the philosophy that teaches us that we should find satisfaction in virtue itself and that judgment should be based on behavior, not on words. It teaches that we can’t control external events and that we cannot rely on them, but that we can control ourselves and our reactions.
Stoicism was founded in the early 3rd century BC, by Zeno of Citium. It has three big representatives: Epictetus, Seneca and Marcus Aurelius. You might not know them by the name, but I can assure you that these people were awesome. Epictetus was a slave that obtained freedom, Seneca was the tutor of Nero and Marcus Aurelius was a Roman emperor. The interesting thing is that we know about Stoicism from diaries and letters of these people because they never wrote anything for publications. We learn about their philosophy from their examples, their practices, and their actions.
As mentioned before, Marcus Aurelius was a Roman emperor. Even though he was from an established and well-known family at the time, no one suspected he will become emperor one day. By a turn of several of political events and sudden deaths, Marcus Aurelius ended up ruling the Roman Empire from 161 to 180 BC. As you can imagine, being an emperor is not an easy task, and it poses many obstacles on the way. His reign can be considered a successful one, even though he had to face major issues, such as wars and plagues.
It is important to realize what kind of temptations this position brings. Look at some other Roman emperors, like Nero, who has done terrible things. Nothing was off limits. Hell, look at some of the world leaders of today, their attitudes. Marcus refused to do that, to succumb to temptations. He tried to fulfill Plato’s ideal about philosopher-ruler and tried to run the country with the guidance of wisdom and virtue.
Now, imagine you can peek into a diary of the most powerful man in the world? Fortunately, all we know about Marcus Aurelius’ philosophy from his diary, one that is commonly called ‘Meditations‘ or ‘To himself‘. As it turned out Marcus Aurelius, no matter where he was, even on the battlefield, was self-reflected and noted down his thoughts in this document. For him, Stoicism provided a framework for how one should live, rule and deal with obstacles. This document is the definitive text on humility, self-discipline, personal ethics, strength, and is considered one of the best philosophy works of all time.
Is there a way for us, software developers to use this book as a motivation to be better in our job?
The impediment to action advances action. What stands in the way becomes the way.
We are problem solvers. We make a living by solving abstract and not so abstract problems every day. Still, I am fascinated how de-motivating encountering an issue can be. Even though I am aware that my highest goal should be writing quality software and readable code, sometimes I get down because testers report an issue or a colleague has problems understanding my code. What we fail to see in these situations is that the problem itself will lead us to a better solution. Often we need to suppress our ego and realize that every issue is leading us closer to the good solution we strived to get to in the first place.
When we create a bug, that is a great opportunity to self-reflect, see what have done wrong and learn from our mistakes. We may notice that we didn’t write a test for an issue that we created, or that we didn’t use a refractor method that really needed that, or we hadn’t followed some other best practices.
Waste no more time arguing about what a good man should be. Be one.
Numerous times I listened to developers talking about what being good developer means, or what should be considered seniority among software developers. The truth is we already know what good software developer should do. We have a lot of good practices that explain how we should develop our software. The only thing we need to do is to actually put them to practice. Somewhere along the way, we’ve lost our professional ethics. We started writing code that is not tested, code that is not easily maintainable and one that is actually harmful. Robert C. Martin has been trying to warn us about this decline for years now.
There are no shortcuts. In order to be good at something, one has to do it. We all know what high-quality code looks like, and how many bugs it has (close to zero). We already know what techniques people that wrote this code used. TDD, SOLID, DRY and all the other acronyms show us the way. The only thing we need to do is repeat that. Apply the same techniques and become good at them. We should not waste any more time arguing about what a good software developer should be. We should be good software developers.
That which is not good for the bee-hive cannot be good for the bees.
The introspection I mentioned before should not only happen on a personal level but on the team level as well. Too many times, I’ve witnessed team progress being hindered by just one person’s ego. It is easy to forget that a team is not just a group of developers, but a group of developers that have a common goal. It is our duty to do what is best for the people we are working with, not just what is best for us. After all, we spend at least eight hours with these people every day. Accepting and embracing your place in an agile team will not benefit just you, but your collages and the project you are working on as well.
Begin – to begin is half the work, let half still remain; again begin this, and thou wilt have finished.
I had the idea about this blog post for months now. Still, I never actually started writing it because I was waiting to find the perfect angle, the perfect mood to set in and what not. I also thought it would be hard to write this article. However, the very moment I started writing, I found that it is not that hard. The same thing is with my side projects and other ideas.
We may have multiple reasons why we are not starting certain projects and implementing certain ideas, and the most common is the fear of failure. Once we start working on our projects, we will find out that our tasks are not impossible. They can be hard or tedious, but they are not impossible. Eventually, we will gain momentum and finish things that we’ve been putting off for years.
Take a good hard look at people’s ruling principle, especially of the wise, what they run away from and what they seek out.
Sometimes we get stuck in our career paths. I certainly had periods when I didn’t know what my next step should be. Of course, having a mentor, who would guide you through those transit periods, would be a perfect solution. Unfortunately, that is not always the case. Sometimes you need to find your own path.
My suggestion is to look up to people who are already good in the field you’re trying to get good at and analyze their steps. It is always a good thing to read books and look what those great minds have written them have done. Which career steps did the girl who wrote a book on refactoring make? What did she have to do to learn so much about that certain skill? Of course, the longer you work in the industry, and the more things you know, the more you realize how many things you don’t know. In moments like these, when you realize the amount of work you need to do, you will be able to plan numerous steps for the long-term future.
For me, stoicism is one great philosophy. Don’t get me wrong, it is not a silver bullet that will solve all our problems, but in its essence, it gives us a more realistic and (ironically) more optimistic perspective on our world and problems we are facing. It’s a tool that we can use to become better at our craft, be better friends and better people. What’s your take on it – can stoicism help us achieve that?
Nikola is a big fan of extreme programming practices and agile methodologies. He is proficient in several programming languages and frameworks, but prefers .NET technologies. Read more his texts here.