I'm currently working on the last few lessons in Learn Python The Hard
Way and I want to include a lesson
on general health problems programmers run into during their careers. I
find many programmers seem to ignore their body's physical state when
they're coding, most likely due to the intense concentration required.
I'm hoping other people could benefit by simply understanding a few
health related problems programming has almost caused me or caused many
other people I know, and how I avoided them.
I probably won't put this whole blog post into LPTHW since it's a bit
much, but I will make a shorter version of it. Please feel free to let
me know if you hate it or like it or if you have some additional
resources I could reference.
My Background And Qualifications
In the past I was a top qualified soldier in the US Army, and I have
studied many martial arts. These days I'm not as into working out and
studying martial arts as I used to be, instead focusing on yoga,
meditation, and simpler activities. When I was younger I was incredibly
fit, and still am because of habits and practices I ingrained in myself
from an early age.
First a quick list of martial arts I've studied for various periods of
time: Ninjitsu, Aikido, Judo, Muay Thai, Wing Tsung, Capoeira, and
Arnis in no particular order. I would say only Muay Thai is the one I
studied most consistently, for probably about 6 years. The others I
studied for about 1 or 2 years if I could. I moved around a lot so the
only way to study was whatever was in the area.
Also, in the US Army I was at the top of my physical fitness exam, going
from barely passing to maximum scores consistently in about 2 years.
This involved about 2-4 hours of working out nearly every day if I
remember it correctly, which in the Army isn't that difficult. There's
really nothing else to do.
Finally, I've been the exact same weight, flexibility, and nearly the
same strength my whole life, whether I worked out or not, which means
that I probably can't tell you about how to lose weight. I'm most
likely genetically predisposed to be this way. That means you should
adapt my advice to fit your life and what you've found healthy.
With all that being said, as I've gotten older I much more enjoy the
less violent and more "supple" forms of exercise. I feel Yoga is
excellent exercise because it's deceptively difficult. I'd also vote
for Pilates, swimming, dance, and anything that doesn't cause direct
impact on my body. I especially have to watch out for my hands for
reasons I'll explain in a bit.
Alright, that should give you an idea that I know something, but more
importantly, while doing all of these things, I also wrote software
professionally. After getting out of the Army I averaged about 8-16
hours of coding and study a day. I also touch type and I play guitar,
yet I've mostly avoided carpel tunnel and other RSI problems.
Hopefully, my experience maintaining my physical health will help you
gain some or keep yours.
Common Problems Programmers Face
Programming is a deceptively damaging field to be in, partly because it
doesn't seem like you're doing much, and also because of the attitude
many programmers have toward their body. You should care about keeping
yourself healthy because, when your body is in good shape, that removes
"friction" from your mental capacity so that it can focus on important
things rather than annoying little problems with your physical wellness.
Obviously the advice on eating right, going outside, getting exercise
has been said by everyone. I'm not really going to tell you how to eat,
or work out, or how to do a martial art or something else to stay
healthy. If you are interested in those things, then please find a
professional who can train you and help you.
What I do want to cover are a set of particular problems programmers
have from their daily profession. These are just simple really obvious
things that for some reason programmers don't realize aren't supposed to
be happening:
- Pain in your wrists from Repetitive Strain Injury (RSI).
- Problems with your eyes from staring at moving print for extended periods.
- Back problems from poor posture, especially in the lower back and upper shoulders.
- Bowel and urinary issues from not crapping and pissing when you should.
- Dehydration from drinking too much caffeine and not enough water.
- Problems with hemorrhoids and the prostate for guys from sitting too much. Yep, I'm gonna go there.
- Vitamin D deficiency from lack of sunshine.
- Sleeping disorders from staying up late and drinking too much coffee.
- General stiffness and soreness from a lack of stretching in general.
I've had to struggle with all of these problems at one point in my life
because of programming, guitar, or actually from lifting weights wrong.
In each case I was able to get healthy and then avoid it the rest of my
life, and really only deal with a few problems periodically. You may
think some of these are stupid, but believe me, many programmers have
these problems for various reasons even if you might not.
The General Cause
Overall the general cause of all of these problems can be summarized as
treating programming as an obsession. You may want to be very good at
it, like I did, so you exclude everything else in your life in order to
master it. You don't go to the bathroom, you have macho 10 hour coding
sessions, you don't eat right, and all manner of mythological beliefs
about "real programmers".
Truth is real programmers are kind of idiots. They don't eat right.
They don't have sex on a regular basis. They can't run without gasping
for breath. They have huge problems with their internal organs not
caused by disease. Really, it's just not worth it if you have to kill
yourself to be good at something.
So, as you read through each of these problems and how I've cured them,
remember that it's all about just having a balanced life and not being
obsessed with coding or your business. Trust me when I say you will
actually become better if you take it easy on yourself and stay
healthy.
Wrist Pain
This is probably the one I struggle with the most, because I code and
play guitar quite frequently and for long periods of time. I've had
pain in my wrists periodically since I started coding professionally at
22, but I always had a set of Aikido exercises I did to get my wrists
straight.
You see, Aikido has these fantastic wrist exercises that make your
wrists strong and supple at the same time. They developed the exercises
to avoid injuries during practice since many of the Aikido techniques
involve wrenching, ripping, and breaking the joints in the arms, wrists,
and shoulders.
For me these exercises have always fixed any misalignment and pain, and
they've allowed me to code for long periods of time without much
trouble. Typically the only time I'll have problems is if I've switched
keyboards and have a new odd keyboard layout, but if I do I simply do
the exercises for about a week every time I go to code and they get
strong again.
Now, if you have serious carpel tunnel or another kind of RSI then
consult your physician before trying these. If you do them, then start
very slowly, and do not try to make them hurt. Stretching should not
hurt, it should just be "mildly uncomfortable". If it hurts, then you
are straining to do the stretch.
What you actually want to do is relax into every stretch you do. It's
hard to explain, but instead of forcing your joint to a certain
position, bring it to that position and then think about relaxing it or
"letting" it move a bit further.
Keep this in mind, and then here's a set of videos that show you how to
do each exercise:
Here's how you use these exercises before you sit down to type (every
time!):
- First, you need to warm up, so put your hands out in front of you and
grab at the air as fast as you can 20 times. Then shake your hands,
then rotate your wrists 10 times one direction and 10 times another. - Start with the first exercise you're best at, and do 5-10 of them at
a medium speed. - Continue through each one, but after each one shake your hands and
arms and rotate your wrists to realign them. These exercises do some
moving of the bones in your wrist, so shaking them sort of makes them
settle back in. - NEVER do too much strain on your wrists. Do just enough to get them
going and feeling supple and relaxed, but the motto "no pain no gain"
will only damage you.
Do these each time you go to type, every day, and any time you stop. It
doesn't take long to do them, and after a bit of discomfort as your
wrists start to adapt and get realigned, you'll start to feel better.
One more time though: DO NOT DO THIS WITHOUT CONSULTING A DOCTOR
FIRST You do these at your own risk, so don't sue me if you fuck up
your wrists because you didn't pay attention. These exercises have been
done for maybe thousands of years in various martial arts, so I know
they aren't dangerous but everyone is different. You could screw
yourself up bad if you do them wrong, so if it hurts stop doing them
and talk to a doctor!
Guitarists Are Worse
Programmers will get RSI but it's nothing compared to what guitarists
and bassists get. For various stupid reasons there's myths around many
of the big name musicians and their claims of studying "8 hours a day"
or "16 hours a day!". Because of this guitarists will kill themselves
and damage their hands making it impossible to play.
Guitar is a hard instrument on your hands, so even a little pain can put
you out of commission. I learned this the hard way in school because,
like an idiot, I believe my instructors when they said I had to study 8
hours a day. I literally thought they meant 8 hours straight, so I did
that for about a month and then BAM!
Fucked up my thumb and gave it a bone spur and all my fingers hurt like
crazy. My wrists were solid, but my fingers just couldn't take it.
Like an idiot I didn't listen to what I already knew which is any new
activity has to be gradually increased like any other work out.
The only way I could fix this, and it took nearly 1.5 years, was to do
the following:
- Find guitars that didn't hurt my hands. The idea that you can "play
any guitar" is crap. Get the best guitar you can that doesn't hurt you. - Do the above exercises, and then some more for my fingers.
- Start slowly rebuilding my fingers and thumb by doing a set of
exercises to improve their strength and relaxation. - Constantly focus on relaxing while playing so that I could use a
lighter touch. - Avoid bends as they hurt my hands and caused me injuries.
- Changed my position and playing style so that I'm able to move around
quickly without having to grip the guitar, instead my thumb is on the
back of the guitar where it's comfortable. - Adjusted the height of my guitar so that it was comfortable
on my shoulder and hands to play. - Always play standing up now, rarely sitting down for long periods of
time because the position is awkward, and if I do I keep the same
position.
After doing that for the last year my hands are finally feeling good and
have healed up, and I've not got good habits that prevent me from
injuring myself. I'm an old guy so these things are important, but that
also means I can't do anything that might hurt my hands.
My hands are my life right now, so that means no boxing, capoeira, or
anything else I really want to study. I have to much riding on my hands
to waste it on a punching bag.
Eye Strain
I think this isn't as much of a problem as it was for me, but you have
to watch out for your eyes. I had perfect better than 20/20 vision when
I was younger, but from decades of computer use my eyes are "slightly
off". I have a minor correction in glasses and these days I just wear
them all the time even if I only need them a little bit. The world is
just annoyingly fuzzy without them.
Back in the bad old days we stared at CRT screens all day, which had
horrible annoying flicker and screwed up quite a few eyes. These days
it's not the flicker so much as the poor font rendering on most LCD
screens. Thanks to patents owned by Apple (I think) many computers
can't render fonts well on an LCD screen. Some folks though think
Apple's font rendering looks "fuzzy" so your mileage may vary
considerably.
In my case I try to get out for about 2 hours a day and not look at a
computer. Either I do something that doesn't involve reading like play
guitar, or I go for a walk or to the park. I may not do this for a full
2 hours but I try to not start at a computer screen for at least 2 hours
a whole day.
This will also help with headaches you might have. Frequently
programmers will think that the lighting in a room is what gives them
headaches from using a computer, but really it's bad posture, shitty
fonts, not drinking enough water, and just using the computer for too
long at a stretch.
Instead of doing some extreme thing like turning out all the lights in
your office, just have good lighting and use a color scheme that fits
the type of LCD you have and the room's lighting. It's the combination
of room/area lighting, LCD brightness, LCD quality, fonts, and your
color scheme that will make you feel better.
But most importantly, just take a break.
Back Problems
I've been extremely luck to have a good solid back most of my life.
Even though I've been sitting in a chair for a good portion of that
life, I still have a good flexible and strong back.
For me, the problem is in my upper back, neck, and shoulders. I tend to
hunch over the keyboard and have to force myself to sit up straight.
In fact right when I started typing this section I noticed I wasn't
sitting up straight and had to correct it.
Now, the choice of chair matters, and I tend to like either Aeron chairs
of some kind of solid small stool or bench. I'm currently very much
liking my little $40 piano bench I used to sit on to practice piano.
It doesn't have a back so it forces me to sit up straight more often and
engage my core muscles (stomach and back muscles).
For my shoulders though it's entirely stress. I tend to "scrunch up" my
shoulders when I'm focused intensely and that causes my whole upper back
to hurt, sending pain all the way up my neck and head. It gets really
bad if I practice guitar for long periods at a time.
What I've found helps the most is stretching your upper arms and doing
push-ups. Stretching your upper arms is as simple as grabbing a door
jam, grabbing it, and pulling each arm or both arms in a different
direction. Try these if you're feeling stiff:
- Grab a door jam with one arm so your palm faces the front of your
body, then pull your shoulder out so you stretch your chest and the
front of your shoulder. - Grab the door jam with one arm so that your arm crosses your body,
and again with your palm facing the front (kind of backwards), then pull
so your shoulder at the back is stretched. - Put both arms on the door jam in front of you, right above your head,
and stand away from it a bit so that you lean down and pull your arms
above you and back.
If you do that, and also rotate your shoulders and shake your body out
you'll start to feel much better. Maybe combine this with your wrist
stretches before you work each day.
Another big help is doing some push-ups. I wouldn't do these at work or
before you work because it will make you tired and make it hard to work.
I'd instead just do 10 a night before you go to sleep. Just 10 will do
a lot for your chest, back, wrists, and neck. Don't do them very fast,
but do them slowly and focus on balancing your body when you do them.
Dehydration
This one is simple, and I'm guilty of it quite frequently. I find I
drink a ton of coffee, and because of that I have to make sure I drink
some water too. If I don't I get headaches and really don't feel right.
The problem with dehydration is it's hard for you to tell you're
suffering from it until it's too late.
What I suggest, and what I've started doing more, is that you drink a
bottle or cup of water with every non-water beverage you drink. I also
recommend you ditch the sodas. They're just full of nasty fake sugar
that make you fat and cause diabetes, and they're not rehydrating you.
If you gotta drink something then plain black coffee is pretty damn
good, but again drink some water with it.
Bowel And Urinary Problems
Alright the next two are kinda gross so I won't go into what happened to
me, but I'll say this:
Go to the fucking bathroom right when you have to go. Don't wait.
You wouldn't believe how useful this advice is and I really wish I'd
been told it when I was younger. Because I would code non-stop like a
"real programmer" I would skip bathroom breaks and hold it in for far
too long. The problem is with bowel movements your body just stops
telling you to crap, and then it builds up.
This eventually leads to constipation and it's a motherfucker on your
health. For your urinary tract it causes problems that are less
important, but you can get infections and other nice little surprises.
If you've already screwed up, the best thing to do is go get some fiber
tablets and take them then stay home 'cause it's gonna get ugly.
Then, when you feel you need to go, just get up and go for the love of
god. I'm telling you, your brilliant idea will come more naturally
after you poop.
Hemorrhoids and Prostate Health
The other problem you have from not using the restroom when you should
is that you get hemorrhoids. Yeah yeah, I know, really gross and I
promise this is the only time I'm gonna mention them ever. But, many
programmers have them and are ashamed to talk about them or even know
what causes them so I'm going to lay it out for you. I've actually done
all of these but only had them once or twice:
- Sitting for a long period of time.
- Lifting heavy weights without proper equipment.
- Not taking a dump when you actually need to.
- Forcing a dump when you don't need to.
- The worst one though: Sitting on the toilet reading.
This last one is the killer let me tell you. If you don't have to go,
then do not sit on the can hanging out. What this does is put all the
weight of your body and bowels on your already probably screwed up rectum
and then pushes it out. Nasty. That also then causes hemorrhoids
because the pressure increases in your blood vessels unnaturally.
These are just freaking gross, but they're also potentially harmful.
Yes, you can get some that are so bad you bleed all over the place. If
you have some, please go see your doctor and deal with it. You may need
surgery, so just do it. I didn't but man it was close. One year I was
lifting weights, working in a warehouse, coding non-stop, and not using
the bathroom.
Yep, I was idiot, so don't make the same mistake. Make sure you do
these three things to keep your ass healthy:
- Eat some veggies regularly, or eat some fiber tablets at least.
- Go to the bathroom right when you have to go.
- Don't force pressure down there in any way.
This can also damage your prostate if you aren't careful, but usually
that's from sitting on your ass all day. Just get up and walk around or
take breaks and you'll fix that problem. If you find blood in your
urine or you have problems peeing, go see a doctor because it might be
more serious. If you pee a lot it can also be bad, so again see a
doctor.
Vitamin D Deficiency
Vitamin D is weird. You really only get it from the Sun but you don't
need much direct sunlight to get it. Maybe like 5-30 minutes depending
on how strong it is. It's also tied to your calcium levels, and a lack
of phosphate, but if you eat regularly and something other than potato
chips that shouldn't be a big problem.
Some of the things you can get are depression, screwed up teeth, pain in
weird places like in the bones in your arms, cramping muscles, and just
generally feeling like crap. If you're really bad you might need to get
a prescription from a doctor, but usually you can just make a plan to go
outside for 30 minutes when the Sun is high in the sky.
In fact, I think this is one of the problems with catered food at many
startups here in the Valley. Since you are inclined to stay in the
office and eat food and constant leftovers, and because many offices
have poor lighting, you tend to not go outside when the Sun is out.
Combine that with poor sleeping habits and you can really be screwing up
your vitamin D levels without knowing it.
Just something as simple as not eating the catered lunches and walking
outside at noon to get your food could help more than you know. Anyway
the food is better.
I got minor vitamin D deficiency when I lived in Vancouver and Seattle.
Up there you just don't have sunshine for months on end, and for me that
was a killer. Some people can handle it, but for people like me who
lived on a tropical islands in his teens, this was just murder.
So, if you have sunshine, get out and grab some when you can.
Sleeping Disorders
I've always had a flexible sleep schedule, usually depending on the
season and the region. In some areas I trend toward a night owl persona
and stay up really late doing things then sleeping in. Lately since
moving to SF I've been getting up earlier and not staying up as late,
and I've actually been feeling really good lately.
Sometimes though, and I'm not sure why, I feel way more productive in
both music and coding late at night, or very early in the morning. I
think it's because I'm still in a tired state and so my brain is
relaxed. I also think it's because it's very quiet and I can just hang
out and think with no distractions.
Either way, this need to either get up very early or stay up very late
sort of screws with my sleep schedule. I find that I much prefer
getting up early as I get older. I feel more awake and rested during
the day. If I stay up late and sleep in I feel like I have a hangover
and I can get headaches.
If you have problems sleeping though, I have a very simple kind of
meditation that I've been using for years to help you crash. It takes a
bit of practice, but it totally works and works quickly.
First up, if you can, get the best damn bed you can afford. 2000+ dollars is
nothing for a great bed. I spent at least 2200 on a sweet Tempur-Pedic.
It's totally worth it.
Now with your awesome bed here's how you start practicing getting to
sleep easily. It's kind of a self-hypnosis trick:
- Make sure that you've killed all sounds and lights that might be in
your room. - Lay on your back and put your hands on your body somewhere
comfortable, or at your sides. - Start breathing in deeply and slowly and breathing out, as you do
this imagine you can see the air flow in and out of your body. - Once you start to see your breath, imagine that you're looking
through a window and outside the window is a large huge open space with
stars in it. - As you breath feel yourself float through the window and slowly out
into the massive expanse of stars, all floating softly around you. - Keep this going and then just let this floating spread into your bed
and out around you until there is nothing.
You probably will crash out at around 4 or 5, but if not just hang out
and keep letting yourself float and melt until you do.
If you have severe insomnia then definitely talk to a doctor about it,
but try this out, as well as exercising like crazy for about an hour or
two a day. Exercise will definitely make you sleep.
Stiffness And Flexibility
If you constantly feel "stiff" or unable to move well, then you probably
need to stretch regularly. Really the best thing you can do is go to
yoga about once a week, and then try to do the exercises on your own.
If you can't do that, then go get any number of books on basic
stretching from the library or from a book store. You really just need
a simple book on the subject, and you don't need to do too many.
I think if you did about 5-6 big stretching exercises a night before
sleeping you'd feel very relaxed and see a major improvement in your
general health and feeling.
Relaxing your body through stretching relaxes your mind as well, so a
great way to improve your creativity and boost your ideas is to do yoga
or stretching for about 30 minutes, then take your morning shower.
Combine this with some meditation and you'll start to see a major
improvement in your general ability to mentally adapt and start to see
yourself make odd connections you wouldn't have before.
I'm not sure why this is, but a relaxed mind is crucial to spontaneous
creativity and idea generation.
A Simple First Step
This is probably a lot of information for one person, and I seriously
hope that you don't have all of these problems. What I recommend though
if you don't have these issues is that you try to avoid them. If you're
just starting out then you need to maybe adopt a simple "coding warm-up"
routine you can go through before you code.
Here's what I do before I sit down to code, or before I play guitar, and
whenever I get stiff and need a break:
- Rotate all the joints in your body by just moving your wrists, arms,
neck, back, and hips in a few little circles. Say 5 one direction, then
5 in another direction. - Do a small number of the wrist exercises and shake your wrists
between each set. - Stretch your arms above your head as high as you can, and then
stretch them back as far as you can, and then pull them across the front
of your body. - Finally, carefully use your hand to pull your head to the right,
left, forward, and back a bit.
If you just did this you would avoid quite a few programming injuries.
Since programming isn't really that physically taxing it's fairly easy
to avoid hurting yourself, so this is really all you need.
However, if you have a specific problem, then again consult a physician
and try some of my advice if they say it's alright. Nothing I'm
proposing here is radical or weird, just basic exercises and common
sense, so it should be alright with any doctor. I just don't want to
get sued so remember I told you to ask one first.
Hopefully that helps you out, and if not just remember the advice in
case you run into these. If you're lucky they won't be a problem but I
think every programmer I know has had something like this at least once.
If you have other problems along these lines, then feel free to email
me and I'll reply with some advice.
Take care.
REFERENCES
http://sheddingbikes.com/posts/1281257293.html
http://news.ycombinator.com/item?id=1585085