Lots of noise recently about Jeff Atwood's post about why you should not learn to code.
I am here now telling you you should learn to code. But only after you learn a few
other things.
You should learn to speak. You should learn to write. You should learn to listen.
You should learn to read. You should learn to express yourself.
Richard Feynman once described his problem solving algorithm as follows:
Write down the problem
Think real hard
Write down the solution
Most of us cannot do that because we are not Richard Feynman and thus, sadly,
cannot keep all the solution in our head in step 2, so we need to iterate
a few times, thinking (not as hard as he could) and writing down a bit of
the solution on each loop.
And while we who code are unusually proud of our ability to write down
solutions in such a clear and unforgiving way that even a computer can
follow them, it's ten, maybe a hundred times more useful to know how
to write it down, or say it, in such a way that a human being can
understand it.
Explanations fit for computers are bad for humans and viceversa. Humans
accept much more compact, ambiguous, and expressive code. You can
transfer high level concepts or design to humans much easier than
to computers, but algorithms to computers much easier than to humans.
I have a distrust of people who are able to communicate to computers
easier than with fellow humans, a suspicion that they simply have
a hole in their skillset, which they could easily fix if they saw
it as essential.
And it is an essential skill. Programmers not only run on coffee
and sugar and sushi and doritos, they run on happiness. They have
a finite endowment of happiness and they spend it continuously,
like drunken sailors. They perform an activity where jokingly they
measure productivity on curses per hour, a lonely endeavour that
isolates them (us) from other humans, from family and friends.
If a developer cannot communicate he isolates. When he isolates he can't
cooperate, he cannot delegate. He can't give ideas to others, he can't
receive them, he can't share.
And since lots of our communication is via email, and chat, and bug reports, and
blogs, it's better if he can write. A developer who cannot write is at
a serious disadvantage. A developer who cannot write to express an idea
cannot explain, he doesn't make his fellows better. He's a knowledge
black hole, where information goes to die behind the event horizon of
his skull.
So, learn to write. Learn to speak. Learn to read and listen. Then learn to code.