When I was younger, I searched (as 99% of teenagers I guess) for a summer job to get some money. I ended up working as a cook in a retirement house, in one of the best work experiences I ever had.
What started as a way to get money became a hobby, and I would put my toque on each time vacations would come (even on New Year's Eve :)) for three years.
I keep this experience in mind even years later, and I can't spend a week without mentioning it as an example. In fact, It even helped me get my new Job!
Here are some points I'd like to share with you :
I love the worflow you can find in kitchens. You always find yourself either working like crazy or in a 'cool' state. I have never seen any other environment with such peaks and variations in the daily workflow. This makes hours fly, and you feel like you can work for days before feeling tired.
I got addicted to this way of working and think it's really efficient as a developer. I always try to switch between states where I can burst hundreds of lines of simple code (like preparing the architecture for my core code, or designing a quick proof script for a method) and others where I can stay one hour without committing any line of code (like searching for a better architecture, or enhancing my methods' capabilities).
These alternate cycles have to be planned out (as you have to think which tasks to do beforehand), but they are awesome because they prevent monotony and keep you focused.
Writing a lot of code is not a hard task for a developer, while searching for a proper solution may be. Switching between low and high complexity tasks permits you to keep your brain at its top level all day.
Workflow optimization, task switching
In a factory restaurant, most of the tasks are highly repetitive. My typical workday would start with something like cutting 60 kgs of tomatoes into pieces, or peeling 45 kgs of potatoes. 200 cups of marmalade would also have to be prepared, together with 35 plates full of cheese.
Believe me or not, after several days you learn what optimization means! Morning after morning, I would search for ways to save some time and perform those tasks a bit faster. As your hand becomes surer, you also learn that it is possible to perform several tasks at the same time as long as you do not need to OPERATE them at the same time.
Converted to the dev world, my question is: What do you do during compilation time? Where is your ant script?
If you find yourself waiting for something in front of your screen, you're doing it wrong! There must be something somewhere that you can be doing.
Clean up your mess, real time!
This is one of the first things my chef taught me when I started working in his kitchen. Whatever is used to prepare food should be cleaned right away. This seems easy, but can be really life-saving when cooking. While in a rush, cleaning should NEVER be considered optional, and the "I'll do it afterwards" idea must be seen as really dangerous.
A kitchen can become a huge mess in 20 minutes, and you will soon find yourself surrounded by trash and dirty plates (if you are lucky enough not to slip on the tomato that was lying there, just waiting for your feet!).
You find yourself with 2 minutes free to help your colleague in the kitchen? Wash his dishes, you'll definitely save him some time!
The same rule applies for software development: Let's write some dirty code, I'll clean it afterwards... Bad idea! When I write dirty code (everyone does, isn't it?), I always confine it to a method and don't let it spread everywhere! And if my colleague is struggling with deadlines, I try to help him by cleaning up all those elements that he hasn't had time enough to perfect. It doesn't take much time to get into it (as it is confined), and it will definitely help him work faster.
Which one... do you prefer?
From a more social point of view :
As a cook, part of my job was to operate a factory restaurant. I would be alone in a remote location, preparing lunch and serving 30 to 60 people. I will never forget what direct customer contact is. If you feel yourself bored in your dev job, find a way to see your final users and discuss with them.
Customer contact is a fuel that keeps you motivated, and makes you give the best of yourself every day. What reward is better than a smile on someone's face after you spent the whole morning preparing their lunch?
Of course, with cooking even more than with software, customer contact also means that if you screw up there is nowhere to hide (especially when you have a plate in your hand :)). I had forgotten about that feeling until some days ago when Ignacio contacted me about FaceMovie. It gave me a great push of motivation. Customer contact is really the best fuel on Earth!
One last thing though: As cool as customers can be, never forget that you have to make money from them! At the very beginning, I had a tendency to please them as much as possible, reducing my margin as a side-effect... Not a really good idea in the long run.
Not everyone uses a computer 8 hours a day
This is more of a side note compared to the rest of the article, but still worth mentioning. I really think spending as much time as we do on the computer tends to bias us. While working in the kitchen, I met people for whom the computer was a strange and frightening beast.
They would not know how to copy-paste, would fill up an Excel sheet while doing all the cost calculations by hand, and so on.
I think this effect tends to disappear (in fact, my boss was pretty good at creating macros), but it's still true though.
This can be a good point for you, as long as you take this into account when talking to your customers. And this also means that user experience is really the main key to enter those niches.
As I said, being a cook also helped me get my last job. More people than you think are really into food, and this is one of the reasons I like to keep this experience on my resume.
At the end of my interview process, I met my big boss for the first time. The interview went pretty well, and the cook experience came up after some time.
We discussed about food for almost 40 minutes, and he explained to me that he was actually using cooking as a 'psychological' tool for years.
When meeting big clients, he would rent a house instead of simply choosing a hotel. Everybody would work there for several days, but also live... and cook together.
Cooking is a social experience that definitely ties relationships; and it also shows what kind of person people are...
Who tends to manage, follow orders or simply fit in their place naturally? Cooking is both pleasant and reveals a lot about people.
I found the idea excellent, clever, and elegant at the same time. It amazed me!
Needless to say, today won't be the day where I remove the word 'cook' from my CV!
And you, what past experience makes you a better developer? Do you love cooking, how do you feel yourself in a kitchen? I'd love to know more about your opinion and experience!