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
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
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
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.
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.
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.
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
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
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 :)