# How to Have Fun Programming

By Randall Degges · June 2, 2012 · https://rdegges.com/2012/how-to-have-fun-programming/

> What keeps programming fun for me: hard challenges, a samurai warrior mindset, open source, not conforming, technical books, and talking with hackers.

![Kenpachi Sketch][]


I may not be a great programmer, but I have a ton of fun programming.  As a
self-taught hacker, I've always enjoyed programming to a great extent--but
everyone has their ups and downs.  These are simply my reflections about what
makes me happy while programming, and serves as reminder to myself why I should
keep pushing onwards!


## Live for the Challenge

![Byakuya Sketch][]

Writing software is difficult for so many reasons:

-   It requires a great deal of concentration.
-   It has lots of complexity.
-   It requires you to be in a certain emotional state to produce quality work.
-   It requires a great deal of prerequisite knowledge to do even the simplest
    of tasks.

One of the things I've come to understand over the years as I've learned more
and more about coding is that if I'm not working on something that I find
challenging, I have an extremely difficult time motivating myself to complete
the project.

I find that I have the most fun when I feel like I'm accomplishing impossibly
difficult tasks, building software that is not only critically useful to me
(and others), but that requires a great deal of effort to produce.  There are
certainly exceptions to this rule (building simple software if it is needed)--
but in general, only when I'm working on a challenging project can I really
utilize my skills.


## Have a Warrior Mindset

![Kenpachi Alternate Sketch][]

The way you approach challenges makes an enormous difference in the quality of
your work.  If you take a project lightly, and don't fully commit yourself to
working on it--you will always produce low quality software.

A mental hack I've learned to make heavy use of over the past two years is to
put myself into a warrior mindset.  As someone obsessed with Samurai culture, I
find the idea of fully committing yourself to a task, and staking your life on
it, a very powerful concept.

The first step in achieving a warrior mindset is to understand that if you
commit to something, you will do it--or you will die.  There is no "try".  The
most practical way to apply this mindset to your day-to-day programming life is
to be very selective about the projects you work on.

Is the project you're about to start working on something you'd die for?  If
not, then it isn't worth doing.

The second step in practicing the warrior mindset is to battle your code.  If
you're working on a difficult problem, and can't find a solution--find a way
to persevere.  *Don't quit.*  No matter how great the challenge, push through
and do whatever it takes to win.

The sense of accomplishment and achievement you get after completing an
incredibly difficult task is overwhelming.  It's certainly one of the greatest
natural "highs" you can get.


## Share Your Work

![Kneeling Samurai Sketch][]

One of the most powerful motivators in software is open source.  Writing code
in the open is incredibly fun.

Among other things, building and contributing to open source software:

-   Motivates you to produce high-quality work.
-   Encourages you to collaborate with others.
-   Helps you grow as a developer, by exposing your weaknesses and learning
    from them.
-   Builds a reputation for yourself amongst other programmers, and helps you
    make friends.

Aside from the obvious benefits--I get an enormous rush from publishing
software online.  For me, I get a giant sense of satisfaction from solving a
problem using code--it's the feeling that I've solved a problem that I have,
and will never have to solve again.

Publishing my work brings a sense of 'finality' to the problem, and makes me
feel like I've contributed something useful to the world, regardless of how
many people do (or don't) use my creations.


## Don't Conform

![Kenpachi Back Sketch][]

The software industry can be harsh--it's filled with brilliant minds, and large
egos. Unfortunately, this makes it very difficult to discover truth in what you
read and hear.

All too often you'll hear people say *this technology sucks*, or *use this
instead of that*, and it can be easy to simply agree with a person based on
their status--the truth, however, may be completely opposite.

Programming is meant to be fun.  Writing software is a very personal, and very
intimate creative experience.  Instead of readily agreeing with your friends,
coworkers, or random blog authors--experiment with whatever piques your
interest.

Just because someone tells you that *the cloud isn't for you*, it doesn't mean
you should listen!

No matter what the general consensus is--never conform.  Make your own
decisions, create your own path.  Find out what you enjoy by trying a wide
variety of things, and always try to remain optimistic.


## Read

![Ichigo Hollow Sketch][]

Technical reading is incredibly underrated. Whenever you have the chance, you
should spend time reading technical books.

Not only does reading technical books help you gain a better understanding of
your field--but more importantly, reading introduces you great hackers. There is
absolutely no substitude for reading a good technical book--you'll pick up:

-   Useful technical information.
-   The mindset of the author.
-   How the author thinks, works, reasons.
-   Best practices.
-   Multiple ways of doing things (many books are great at this).
-   A better understanding of the underlying technology you use, and how you can
    use it better.

I'm constantly surprised by how little time my peers spending reading technical
books. To me, they're an extraordinary motivation tool.

A big part of the fun in programming (for me) is learning new things--and one of
the best ways to learn new things is to read and gain perspective.


## Be Mindful

![Ichigo Hollow Screaming][]

As a large part of writing software is mental, consciously analyzing your
thoughts and actions is incredibly important.

Being mindful of what you're doing, why you're doing it, and generally keeping
the *big picture* in mind will help you stay motivated, have fun, and truly
enjoy your work.  It's far too easy to get swept away in details of day-to-day
implementation--only when you take a step back, and analyze your progress, can
you truly take pride in your work (and enjoy it).

No matter how frustrated, upset, or angry you are with your code--if you want to
immediately feel better and be able to relax--think of the people you're writing
your software for.  When I'm feeling unmotivated, all it takes is a few minutes
of meditation on my purpose to get my hyped up inside, and propel me forward.


## Talk With Other Hackers

![Renji Sketch][]

No matter where you are in your programming career, you will have ups and
downs.  One of the best ways to continuously motivate and push yourself to new
levels of skill is to hang out with other hackers like yourself.

Surround yourself with others who have an extreme drive to learn new things and
build awesome products--and their contagion will rub off on you.  Having a
group of supportive, like-minded friends can make an enormous difference in
your personal development, happiness, and day-to-day satisfaction.

In the off chance that you've read this far, and would like to hang out with
some amazing hackers--you're formally invited to join `#heapify` on
`irc.oftc.net` (a public IRC channel).  IRC has played a crucial role in my
life, and many of the programmers I met years ago on IRC I'm still great
friends with today.  If you'd like to join a supportive group of enthusiastic
developers, please drop by and say hi :)


[Kenpachi Sketch]: kenpachi-sketch.png "Kenpachi Sketch"
[Byakuya Sketch]: byakuya-sketch.jpg "Byakuya Sketch"
[Kenpachi Alternate Sketch]: kenpachi-alternate-sketch.png "Kenpachi Alternate Sketch"
[Kneeling Samurai Sketch]: kneeling-samurai-sketch.png "Kneeling Samurai Sketch"
[Kenpachi Back Sketch]: kenpachi-back-sketch.jpg "Kenpachi Back Sketch"
[Ichigo Hollow Sketch]: ichigo-hollow-sketch.png "Ichigo Hollow Sketch"
[Ichigo Hollow Screaming]: ichigo-hollow-screaming.png "Ichigo Hollow Screaming"
[Renji Sketch]: renji-sketch.jpg "Renji Sketch"
