We are on the nearly flooded Barton Creek in Texas. Considering that its bound-
aries are almost entirely within the Austin City limits, it is an amazingly isolated
run. The creek normally has plenty of fun, intermediate-level rapids when the
water is at sane levels. Today it is freight-train loud. We'd run it many times
before, but never with this much water.
Years before, in much easier conditions, I'd been trapped in a hydraulic, where
I struggled in vain, panicked, and was beaten badly on the river bottom before I
swam clear. Today, I have a healthy dose of nervous anticipation, but not so much
as to be incapacitated. After all, I am on a familiar creek with some very strong
boaters. There are few dangerous places on the river where I cannot be reached
from the bank with a short throw rope or from another boat, and I am prepared.
I know where the challenges are hiding.
As we descend I see the mist rising just behind a horizon line. It is the first dan-
ger spot, an 8-foot waterfall with a nasty hole at the bottom. At the top of the fall
my approach and speed are good—I get a nice jump off the edge of the drop. I flip
as I clear the hydraulic but I roll routinely, without much effort. Now we are
approaching the second danger spot called Twin Falls.
A mass of water surges violently to the left over a 4-foot waterfall with a com-
plicated hydraulic. I do not want any part of it, but some of the stronger paddlers
head that way. I go right instead. The move is intricate, but plenty of water sweeps
through the main channel to guide my boat. In spite of that help, I misread the
current and get swept into the hydraulic behind a pour-over. It is a particularly
nasty and sticky formation today. My momentum is gone. I shudder at the power
and suction of the hydraulic, and focus on staying upright. Barton Creek now has
my undivided attention.
Antipatterns help us on many levels
Throughout this topic, we've looked at Java programming processes and prac-
tices that break under pressure. We've refactored the problems to solutions
that work. At this point, let's step back briefly and take one final look at the
By now, the value of the antipatterns presented here should be clear, but
this list is in no way comprehensive. Now that we understand the negative
impact of individual antipatterns on projects, management, and programmers,
we can begin to appreciate the value of integrating antipatterns on many dif-
ferent levels. They can jump-start careers, save projects—make us into better
programmers. Study and application of antipatterns in advance of a program-
ming venture can steer us around the swamp-like traps that have mired so