A while back I wrote an article about how to use “Art of War” to be better Software Craftsman. The idea behind the article is that every craftsman should create a personal mindset in which they are able to create great software. One of the biggest problems I faced in creating that kind of mindset is the inspiration, and since I am quite a bookworm, I found my inspiration in books.

Sometimes those books are technical, and sometimes non-technical; the source is not important as long as it makes my blood flow. However, the problem was not always the inspiration itself, but keeping that inspiration at a high level for a long period of time. So, I started using cool sentences from those non-technical books to create mini-mantras, which in turn would boost my inspiration in my day-to-day work. Basically, I have used some of my other interests to remind me of what being a good software craftsman and being a good human is all about. And apparently, apart from Art of War, which I already covered, I use Nietzsche’s philosophy to remind me of those virtues.

About Nietzsche

Why is Nietzsche’s philosophy so cool? Well, first of all, it is quite controversial. Nietzsche applied himself to such topics as morality, ethics, religion, psychology, and social criticism. While covering all those topics he created some polemical ideas. His concept of Master-Slave Moralityis one big criticism of society. In this concept, he argues that there are two types of morality, the master morality and the slave morality, and that struggle between those two polarities can be seen throughout history.

As far as controversy goes, Nietzsche is probably most famous for this proclamation “God is dead”. He pretty much attacked the Christian religion, as represented by churches and institutions, for what he called its “transvaluation” of healthy values. There were also, of course, his concepts “Will to power” and “Ubermensch”, which describe the human ambition to become something more than a human.

Also, he was the father of one form of nihilism – existentialism. This is a philosophical theory that emphasizes the existence of the individual as a free and responsible being determining their own development through acts of will. A lot of personal development ideas of today can be traced back to one of his most famous works – Thus Spoke Zarathustra. His ideas inspired numerous free-thinkers, from good guys like psychologist Carl Jung to notorious villains like Hitler.

You can see that he valued the individual above all and considered a person’s will a force of nature. Those are some very brave thoughts for a person living in the 19th century, don’t you think?

Nietzsche’s quotes and applications

That which does not kill us makes us stronger.

You have probably said this Nietzsche’s quote more than once in your life, never realizing this guy said it first, right? This is probably the most famous sentence he uttered and it is applicable to pretty much all fields of life. Of course, there are numerous ways in which his saying could be applied to software development, but I interpret it like this: don’t be afraid to make mistakes.

For a Software Developer, it is important to play around with technologies, languages, and frameworks. That is how we gather that much-needed experience. But, playing around also entails failing a lot. For example, you know that you can use a certain technology for some problem because you have tried that technology before and you know its pros and cons. On the other hand, you have perhaps tried to solve a similar problem using different technology and failed by doing so, which led you to the right solution. Mistakes are evolution tools if you learn from them. We should always fight that fear of failure because failure is at times the only road to success.

Whoever fights monsters should see to it that in the process he does not become a monster. And if you gaze long enough into an abyss, the abyss will gaze back into you.

You have probably heard of the “good kind of paranoia” that has been cultivated among programmers. This concept is in fact really good for our profession. We should train our minds to question everything, to find loopholes in our solutions, to test everything we can and go much further than that. There are many approaches which rely on this kind of mindset, one of them being defensive programming. And in general, it is good to be in this mindset at work and have that critical edge; it is a professional aspect that you want to have and foster.

However, the problem that I have encountered is when this mindset overflows to some other spheres of my life. For example, communication with other people. We shouldn’t forget that the problems we face at work are based on a model of reality, not reality itself. Sometimes people in our profession forget that. We cannot apply all principles we learned in software development to all aspects of our lives. Remember, do the TDD, test your code, but your life will be much easier if you tone down that paranoia in communication with other people.

In individuals, insanity is rare; but in groups, parties, nations and epochs, it is the rule.

Working in a team is so much different than working alone. In general, there is a portion of the day that is spent on communication, planning, meetings, and design. Being a part of a team brings a different dimension to software development, especially if you are a part of an Agile cross-functional team. It seems that there are always so many things you should keep your eye on and this applies to all members of the team.

That is why a team as a whole can lose sight of why they are working on a certain software and lose sight of the bigger picture. It is easy to get lost in technology, design, code reviews, as well as dependency injections and what not. Projects were ruined because a group of engineers lost sight of the larger goal.

You see what I heve written there – a group of engineers. Yes, not every group is a team. A team is so much more than that. A real team will remember that the software they are working on is there to help other people. A real team knows that the client is the final judge of the application and that the client’s goals are much more important than any elegant technical solution.

There is more wisdom in your body than in your deepest philosophy.

I sit for at least ten hours a day at this point. There is no activity that can substitute that kind of inactivity. Still, I try to work out every day and take care of my diet as much as I can. Hell, I even quit smoking.

It was not always that way. It took me a while to notice that when I work out regularly I achieve much better results at work. I am far more creative and have a lot more energy. Yes, I know all the books suggest that, but sometimes we ignore things that would clearly benefit us. Anyway, there are many pieces of research that indicate that regular exercisers do better on tests of creativity.

To be more specific, researchers have found that regular exercise is in close relation with improved divergent and convergent thinking. These types of thinking are both considered the two components of creative thinking. Divergent thinking involves coming up with multiple solutions for one problem, while the convergent thinking involves finding one solution for the problem. Go running or to the gym, do yoga in the morning, just get moving. Just try to keep yourself active and you will be better at your job.

One must still have chaos in oneself to be able to give birth to a dancing star.

Making software is a somewhat complicated process. Have you ever tried to explain what, in fact, your job is to a non-technical person? I know, right. And it seems that no matter what process we apply to the production of the software there is that feeling that it is still way too chaotic. This tweet probably demonstrates this feeling:

Sigh. “Post-Agile”. Right. Because people have actually tried #agile. — ☕ J. B. Rainsberger (@jbrains) December 19, 2016

Still, software gets produced. Problems got solved. How? By tremendous work of countless software developers. And that is the key. Push trough the fogginess and confusion, and do the actual work.

Conclusion

This is another example of what I do to reach something that I like to call a professional mindset. I like to use this phrase, but if you find something else that is closer to home, use that. Find those quotes that give you that enthusiastic feeling about the world, and then transform them into your personal motivational tools. Once you get used to them, find other, new ones. The goal is to create great software, be professional and avoid situations in which your job affects your relationships with other people.

Read more posts from the author at Rubik’s Code.

CodeProject