"It'd be boring if it were too easy"... is my favourite quote. It sums up my approach to life and work, and this is exactly what I said at my FITC Amsterdam session on Tuesday.
I further went on to ask "wouldn't you rather get new challenges and learn new stuff rather than building the same apps over and over again?". The audience were stunned by my question. Or at least they all went very quiet. They may have just been falling asleep.
The audience getting playful with 3D audience controlled 3D Pong
Of course it's scary doing new things in new projects every time. And it's risky. But unless you take that risk how will you ever become better at what you do?
I got a mail yesterday from someone in the audience who said :
"...in my experience, most projects don't offer (m)any challenges. For the majority of my projects I already know how to solve all the issues before I start. And you are right, that is really boring. I am really interested in tips/advice on how to get projects that offer a challenge. I am all ears ;)."
So here are my tips for stretching yourself and integrating that back into the workplace.
If you're stagnating in your cubicle you need to kick-start things, and this means extra curricular projects, which means working outside of work. But that's OK, because it's not work, it's play. And if you get good enough at playing people will eventually start paying you to play, and then you'll never have to work another day in your life (to misquote a famous quote variously attributed to Edison, Socrates and Winston Churchill amongst others).
Personal buildable projects
Find things that interest you, an
d usually it's best if they're buildable projects. If you have crazy ambitious ideas you probably will struggle to dedicate the necessary time to finish them. So find simple things. Sometimes they can be the most fun! Like my legoizer app, that only took 20 minutes to make. Or my 3D Lunar Lander, that was only a day or two, which looks complicated but there were only one or two things that I didn't know how to do. It was buildable within the time available.
I usually find that there's a point in a project, usually a couple of days into it, that it suddenly gets difficult. The initial enthusiasm wears off and it's just a bit of a slog. You want to make the "slog" part of the project as minimal as possible. If you can get through this to the finish then that's when the joy comes back! You will feel pride in your work, and then you can publish it.
Pulling your pants down in public
Once it's done, share it on your blog and show it to your colleagues and bosses. If they're receptive to new ideas, then you can be sure they'll take your new skills and make use of them. And if they're not, then you can use all the experience and blog posts to get a new job.
It can be scary to post about your stuff, and that's normal. But stare this fear in the face. Don't just post the swf - post the source code too. It can feel a little like pulling your pants down in public but don't let this stop you.
This is what I started doing a few years ago, and now my blog is quite popular. If your work is good, people will show their appreciation. If it's not so good then people will let you know - and by doing so you'll learn a new technique.
Recently I had this exact experience a few times when posting about ElectroServer - something I knew little about at first. By posting about my learning process, commenters on my blog told me about better solutions.
So at best you'll get appreciation and at worst you'll learn some new stuff.
Our skill is the ability to learn
It seems like nowadays it's not enough to be a "Flash programmer", even Flash changes enough to make us learn new skills all the time. So to be really good at our jobs it's not enough to be an expert in one technology.
Our skill has to be the ability to learn new technology.
And once you start focusing on that, things start to get fun. Just look at the new tools we have to play with! Not just Flash and it's new target devices, but also Unity3D, iPhone/Mac development, OpenFrameworks, Processing, or even new back end systems like Django and Ruby on Rails. Or what about multi-player stuff like ElectroServer and FMS?
And I find that the more different technology I try, the more of an insight I get into new ways to do things, which in turn makes me better at Flash.
I should just warn you - learning new stuff and playing is great at home, but when you find that you're promising new things to clients that you really don't know how to do, that can be very risky.
So how do you manage that? Well you can cost it in for starters. You can also make sure that your workflow is as optimised as possible (but we'll save that for another post). And of course if you've done some experiments in your own time, you'll have a greater insight into what you're doing.
It's such an exciting time and we're truly living in a period of digital enlightenment. So let's enjoy the process of play, discovery and learning, and then perhaps the constant change won't seem nearly as scary.