Good software developers are, in general, people with many qualities. When talking about a good software developer, one would usually use such adjectives as intelligent, hard-working, responsible and so on. What would be the biggest quality that these people have? For me, one of the best characteristics of a good software developer (software craftsman) is self-motivation.
Yes, I admire self-driven people and their will to push through. I watched and assisted some great minds solving some difficult problems, inspiring people around themselves and being good human beings all around, just by accessing that pool of (what it seems to me) infinite motivation. Of course, it would be an understatement if one would say that I try to be like those people. And what I found out is that self-motivation is tricky, and it is especially hard to sustain it for a long period of time.
So, I was writing here and there 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 lot about self-motivation, just like software craftsman. 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 I encounter.
That is why I am writing about Marcus Aurelius and 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 biggest heroes, so to say. So, what is so cool about Marcus Aurelius and Stoicism? Well, let’s take a look.
About Marcus Aurelius and Stoicism
People don’t like philosophy. That is a fact. It is associated with a tick, 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 to be considered 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 we should find satisfaction in virtue itself and that judgment should be based on behavior, not on words. It teaches that we cannot 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 down for publications. We learn about their philosophy from their examples, their practices, their actions.
As mentioned before, Marcus Aurelius was the Roman emperor. Even though he was from an established and well-known family at the time, no one suspected he will become the emperor one day. By the turn of a lot 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 has many obstacles in the way. His reign can be considered successful one, even though he had to face some major issues, like wars and plagues.
It is important to realize what kind of temptations this position brings. Look at some other Roman emperors, like Nero, who have done some terrible things. Nothing was off limits. Or look at some of the world leaders today and their attitudes. Marcus refused to do that, to succumb to temptations. He tried to fulfill Plato’s ideal about philosopher-ruler and tried to rule with the guidance of wisdom and virtue.
Now imagine if you can peek into a diary of the most powerful man in the world? Fortunately, all we know about Marcus Aurelius philosophy is from his diary that is commonly called ‘Meditations’ or ‘To himself’. As it turned out, Marcus Aurelius no matter where he was, even on the battlefield, he self-reflected and wrote 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. Of course, there is.
Quotes and Applications
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 demotivating encountering an issue can be. Even though I am that my highest goal is should be the 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, or in any situation we encounter a problem, is that the problem itself will lead us to a better solution. Often, we need to suppress our ego and realize that every problem is getting us closer to great software we want to write.
When we create a bug, that is a great opportunity to self-reflect, see what have we 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 refactor method that really needed that, or we haven’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 that can be considered seniority among software developers. The truth is we already know that and the only thing we should actually do is practice it. 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 harmful code. Robert C. Martin is trying to warn us about this decline for years now.
There is no shortcut. In order to be good at something, one needs to do it. We all know how high-quality code looks like, and how many bugs it has (zero, or close to zero). We already know what techniques people that wrote this code used. The only thing we need to do is repeat that. Do 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 the personal level but on the team level too. Too many times, I’ve witnessed team progress being restricted by just one person’s ego. It is easy to forget that 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 are spending at least eight hours with those people every day. Accepting and embracing your place in an agile team will not benefit just you, but your colleagues 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. Nevertheless, I never actually started writing it because I waited for the perfect angle, and for the perfect mood to set in and what not. I also thought it will be hard to write this article. However, in the moment I started writing, I have 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 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 path. 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 in the field you try to get good at and analyze their steps. It is always a good thing to read books and look at what those great minds that have written them have done. Which career steps the girl that wrote a book on refactoring made? What she had to do to know 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 what things you don’t know. In moments like this, when you realize the amount of work you need to do, you will be able to plan steps deep into the 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 an essence, it gives us 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 in our craft, better friends, and better people.
What do you think, can stoicism help us achieve that?
Read more posts from the author at Rubik’s Code.