Programming
is easy. You just assemble large lists of instructions for a computer
to follow. And these days there is an abundance of information out there
about which combinations of instructions will produce the best effects.
If you can’t figure it out, there are plenty of people to ask.
But
programming is hard, because there is never enough time to assemble all
of the instructions yourself so you end up relying on other people’s
lists. And often, the behavior of their collections doesn’t match your
expectations. They skipped functionality or built it weird, or just
hacked it together without thinking.
But
it is easy because there are plenty of the stable ‘components’ that
have been around for years or even decades. There are loosely-followed
standards and although some are quirky, once you understand how to use
them properly they’ll do what you expect. It may take a while to find
the ‘grain’, but once you know how to utilize something, you can make it
work for you.
But
then it’s hard because the more stuff you build on, the farther away
you get from what is happening underneath. This detachment often causes
people to over-simplify their understanding, leading to invalid
assumptions about the way things really work.
But
it’s easy again because there are plenty of conventions, knowledge and
advice out there to follow. Sometimes you have to dig a bit, but it’s
out there somewhere. At some point, someone has delved into the details
and has spent time explaining them. It just might take a while to find
and assemble that information, but if you take the time to learn how to
do it properly, you can skip a lot of the frustration and pain.
But
then programming is hard, because it often attracts people who want to
utilize it, but they don’t have any real experience or patience to
learn. They over-simplify the amount of effort involved, and think that
short-cuts will get them there faster. Looking at a screen, many people
think that the work involved is close to what they see. But it’s in
what lies beneath that all the details and complexity brew. The screens
are the easy part, particularly if you follow the existing user
interface conventions.
But
it can be easy. If you spend the time to learn it, then do it properly,
and gradually work through all of the issues one-by-one until they are
complete. Eventually you’ll get there. A good solid organized process
with no cheap short-cuts will always result in something that is usable.
It may just take a while.
But
then we’re back to hard, because to overcome other’s lack of experience
and impatience we need to point them to an authoritative reference.
Somewhere that explains the basis for getting the work completed
properly. There are little clues spread every where; some correct, some
wrong. But no ‘building code’. Without that, new people coming in just
ignore what was known for decades, without realizing that it’s been
worked out already.
So
is programming easy or hard? When the people around you accept it as
hard, then although it may take a while, it doesn’t have to be painful
or a mess. But when the people around you think it is easy, they get
impatient and take really bad short-cuts to avoid the necessary work, so
it becomes increasingly difficult to get anything finished properly
within the chaos. Thus it all depends on whether the people around you
get that in order for it to be easy, they really have approach it like
it is hard. Or slightly restated: it is easy right up until you fall
into the trap of thinking it is easy ...