Cynicism and Experience

One output of experience is an ever-increasing list of things that caused you
pain in the past. Because you are not a monster, you want to save other people
pain. When you see them doing things that caused you pain, you warn them.

These warnings can come in several forms - don’t use this specific library, stay
away from this tool, this programming language is slow, this pattern is for
architecture astronauts, the entire paradigm of [current popular thing] is
fundamentally flawed.

The final step in this evolution is the cynicism crustacean ensconced within a
shell made of the disasters you have seen. Sometimes this feels strangely
powerful. It can be fun to be the wise elder telling legends of the great
monster you barely escaped in your younger days.

It also means that your experience is validated - if you hated a thing and it
sucks you were RIGHT to hate it. If you hated a thing and the problem was
you, you face the cold reality that maybe you did something wrong. Most of us
cannot bear to gaze into the abyss that yawns behind that thought, so we trust
our experience, we dogmaticize it, we turn our pain and the bleached bones of
dead projects to best practices, and we ossify.

New ideas or new technologies remind you of old pain and bounce off the
carapace of built-up wisdom. Eventually you are so encumbered by experience that
you become brittle and immobilized and changes in technology or culture or
management crumble you to dust.

If you don’t share experience with others, your effectiveness will never scale
beyond your own efforts. If you impart your battle scars on others without
considering the circumstances in which they were inflicted, people who believe
you will miss out on awesome things. The challenge of the experienced developer
is to pass on wisdom without passing on dogma, but most developers think
their personal experience should be enshrined as a best practice.

PUPPY BREAK

What a downer. Time for a puppy break.

Experience and Progress

I’m not arguing against the existence or validity of experience. Without
experience there is no progress, and software development becomes a pop
culture. Software development has
demonstrably progressed. “On the Criteria To Be Used in Decomposing Systems
into
Modules”
is a seminal paper on modularity written in 1971. It describes a simple program
based around sorting strings.

This is a small system. Except under extreme circumstances
(huge data base, no supporting software), such a system could be produced by a
good programmer within a week or two.

Thanks to the accumulated experience and effort of hardware designers, language
designers, and library creators, a competent programmer could build it in a few
hours today. Progress due to experience is real!

If experience can be harmful, but also enables progress, what is the right
way to share your experience with others? How do you gain experience
without turning in to a curmudgeon?

Context and Scope

Experience is helpful without becoming dogmatic when it is accompanied by the
context it was learned in and is not overly generalized. Now I will make up a
ridiculous example to illustrate this.

Imagine yourself as a wise elder, bitten once before by a project that used the
Ook! programming language. The project was to
build a social network specifically for people who hate social networks. You
used the web framework Ook! on Oreos, but even then it turns out a language
built around manually moving pointers around an array using grunts made it
hard to build a modern web application. The project failed, and you learned.

Next time Ook! is floated as a possible technical solution you have a few
options. You can decry Ook! as broken technology that only a monkey would use.
You can generalize that to say all esoteric languages, like
B***k,
Piet, and
Shakespeare
are awful and no one should ever use them.

Alternatively, you could scope your argument to the problem at hand.

“I used Oook! on a past project that failed. The project was to build a web
app, and Ook! is focused on low-level programming and simians, so it wasn’t a
great fit for that problem. Also, a social network for people who hate social
networks was probably not the best idea. On this project, since we are trying
to communicate with alien robot orangutans, it might still be a good fit.”

The difference between saying “I used X and it sucked” and “I used X for Y and
it didn’t work out because of Z” is the difference between becoming experienced
and simply growing cynical.

Be experienced, not cynical.

Jamison cares about family and programming and React Rally and Soft Skills Engineering and 🏋️ and 🏂 and computing and business and the Dunning-Kreuger effect. He is a real human bean who you can reach on Twitter.