I have been using the term "Viking Coder" for a several years now. Honestly, it was a "equal and opposite" reaction to the rise of the Rockstar Ninja Samurai whatever in job descriptions. I don't play a guitar or dress in black PJ's. I am a tall person, and I like big, simple solutions to problems. And I am least a little bit Scandinavian.
I wanted to open this up, so steal, pull, push away!
Thus the Viking Coder was born.
The Viking coder is also a response to many of the Agile practices out there. We mean to strip the nonessential bits of cruft away and expose the naked goodness of what we have learned over the last few decades.
So you want to sling code. Or you already sling code. And you are deciding what type of coder you want to be. Rockstar? With all of the glitz and glamor? Ninja? Sneaking in under the cover of darkness and fixing hard problems?
Have you thought about a life on the sea? Vikings make some of the best coders. They are not elegant, and you would not want to take one to a fancy dress party. But they get it done. Normally by hammering it into little bits.
Viking coders are not all male either. Some of the best vikings that I know are not male. Just because someone cannot grow a beard does not mean that they cannot be a Viking Coder.
You might be a Viking Coder if:
- You value simplicity wherever possible
- You do not shy away from brute force
- You have a hat with horns on it
- You understand that others (including your previous self) might very well be smarter than you, so you reuse their stuff
- Did I mention a horny hat?
- You like to take a huge axe and cut out swaths of code that are not needed
- You enjoy long sea voyages
There are a few tenants to Viking Coding:
All things being equal the simpler solution is the best. Best is a hard term to quantify. For this, we mean most readable, most easy to support and most robust. We don't want Rube Goldberg contraptions running in production. We want Sherman Tanks. So, build Sherman Tanks.
When it comes down to it the first one out of the gate is the winner more times than not. So while you're refactoring your SQL for the 12th time, we have a rough version in front of a select group of beta testers. It might be ugly, it might have rough edges but it's out there.
Hand in hand with brute force is monitoring. Your brute force tactics are going to be slow and bloody. If you don't know what parts are bleeding the worst, then how can you fix them?
We don't call it refactoring. We call it shoring up. Like shoring up the walls. When you hack out a ugly, brute force solution, stuff is going to be slow. So when it's running, find the bleeding parts and bandage them.
As a Viking Coder, we care very deeply if our stuff fails. It's an honor thing. If your code causes someone to wake up in the middle of the night, you are honor bound to let them punch you in the face. If your code wakes you up, you have to punch yourself in the face. Twice.
Keep that in mind when you are writing code. If it fails you will get punched in the face.
If a tool works for you, use it. If it does not, don't. It's that simple. Love ruby, hate PHP? Then use ruby. Love PHP? Then write your BSD init scripts in it. (http://m0n0.ch ?). We don't care. Use the tools and processes that make your team more productive. Because a productive Viking Coder gets more time to sharpen his horns.
If you want to evangelize your favorite tool, don't go around bad mouthing other tools. Rather build amazing stuff with your tools, and then show it off.
Continuous Integration and Testing
Seriously, if you are not doing this, you are already doing it wrong. We don't care which tool you use, just use one. Why? see Bullet Proof. Can you write perfect code with no regressions or logic errors? Neither can we. CI or testing is not a silver bullet, but it will reduce the number of times that you get woken up. And that's a good thing, right?
We're going to steal everything from http://programming-motherfucker.com and just put it here. Some will say that we don't really get P-Mfer. They are wrong. We do get it. Daily. Being a viking coder means just getting it done. Forget meetings, scrum, tear downs, burn ups or rain dances. Spend your 8 hours just getting code written. Basically, minimal time planning, maximum time doing.
Operations vs Developers
As you can see from the Bullet Proof section, developers might start to fear operations if every time they see them they get punched in the face. So, we feel that ops and developers need to collaborate. On development projects. And on Ops rotations. So developers get woken up in the middle of the night once in awhile.
Just like the Vikings of yore, it takes more then one to crew a longship and pillage far off lands. Vikings are team players!