I've spent nearly all of my free time over the past two years studying different aspects of software engineering that I had let languish after college. I've quite enjoyed picking up learning again after a long hiatus,
but recently I've felt the need to take a small breather, and watching
the occasional movie wasn't going to cut it this time. I haven't played a
video game in the past two years, but I tend to get sucked into those
to a point that they take up weeks of my life.
I haven't read any novels in that time, either, and I love reading fantasy novels. The last ones I read were The Lost Chronicles Trilogy
from the excellent DragonLance series. I've read most of the series,
and I've enjoyed it immensely. But for this little break, I wanted
something a bit lighter. Since Ender's Game
is coming out as a movie very soon, I thought I'd pick up the book and
see if I liked a classic work of science fiction as much as I like
fantasy. I read it in three days.
Three days might not
sound fast, but it was for me, considering I only have a couple hours a
night of free time. The first couple chapters were slow and awkward, as
if Orson Scott Card didn't quite know how to begin. And the last chapter
was a bit off, too, as if he didn't know how to end it, either. But the
middle was excellent, and I couldn't put it down.
I
had forgotten how nice it was to sit down with a good book and get
entirely lost in another world, to set your imagination free and dream
while you're awake. I especially liked Card's sparse descriptions. He
stayed away from specifics about the battle room or the simulators or
any other settings so that you could imagine it for yourself. If a scene
was taking place in a corridor, you were free to build up the
environment in your head in your own way on the fly. It helped put you
right there in the middle of the story because you're not working to
figure out what the author is trying to describe, but witnessing the
unfolding of the events on the page.
I also thoroughly
enjoyed reading a book that only showed you what was happening. There
was no telling you what to think. This feature is common in novels. But
it's something I had forgotten, and it's in stark contrast to all of the
technical books I've been reading. I know they're not really
comparable, but please, bear with me. Some of the best technical books
are very good at showing with examples or anecdotes or what have you,
but even the best ones still fall back on their own analysis to make
their points. They end up telling you what you should think or do. "This
is the best way to format your code, for these reasons," or "that is
the proper way to build a web form because the user is going to want to
do this."
In all fairness, it is essentially
unavoidable. People expect the author of a technical book to give plenty
of advice on the right way to do things, and they would criticize any
book that didn't give a complete analysis of the material being
presented. I would, too. After all, we read technical books to get an
expert opinion on the topic at hand. But boy, is it refreshing to get
away from all of that telling, telling, telling for a while. In Ender's Game
there was none of that. The story showed you what happened. It took you
inside Ender's mind and showed you his feelings and reactions to what
he had to deal with. And then it left you to sort everything out for
yourself, to draw your own conclusions.
Ender's Game
covered a lot of ground. It dealt with bullying, social hierarchy, and
violence. It dealt with loyalty, authority, and responsibility. It dealt
with self-reliance, teamwork, and perseverance. It never beat you over
the head with any of these themes, but it left you thinking about them.
The more I thought about all of these themes and others, the more I
thought that the overarching theme of the book was that nothing is
certain.
I would like to explore the way the book
presents this theme, but I don't want to give away any spoilers for
anyone who hasn't read it, yet. I hate having plot surprises spoiled for
me because I love the thrill of experiencing them first hand, and I
want to protect that experience for others as well so forgive me for
being somewhat vague. People who have read the book should know what I'm
talking about.
Nothing is black and white in the book.
Characters that appear to be evil end up doing things that could be
considered good, and characters that appear to be good end up doing
things that are incredibly evil, when viewed from a certain perspective.
Sometimes the character is not even aware of the consequences of their
actions. Nothing is as it seems. Everything depends on how you look at
it. And events, motivations, and intentions can be interpreted multiple
ways.
Once I found out what was really going on with
the I.F., (because it should be obvious that all is not as it seems) I
immediately began to wonder what would have happened had the course of
events been different. Everyone was so focused on the current strategy
and the tools they had developed that no one questioned whether another
path could be taken or if there was an alternative explanation for past
and current events. What if different decisions were made? It seemed to
me that there was not a single, definite path to achieve the final goal,
but numerous possibilities. The outcome that resulted was by no means
necessary, but now that what was done was done, could the reconciliation
at the end be adequate? That is left for the reader to decide ... and
ponder.
That line of thought is where the questions
lead out of the book and back to the real world. Coming from software
engineering, where almost everything is supposed to have a definitive
answer, or at least most people believe that they have the definitive
answer on any number of topics, it is important to come back to reality
every once in a while. The reality is that there is no right answer.
There may be wrong answers and mediocre answers and possibly some good
answers, but nothing definitive. The best that can be said is that you
have an answer, one of many that could possibly work.
The
point is to consider whether the methods, practices, or standards being
advocated are indeed the final answer to the subject at hand, or are
the good outcomes resulting from those practices due as much to luck or
coincidence or pure randomness as to the processes that were followed.
Does the programming language you use really matter that much? How about
the design methodology, or the development environment? Is it possible
that the positive results that were achieved in successful projects
could have come about in any number of other ways, and that the most
important factor might have been the people involved?
After
all, software engineering is mostly a human endeavor. We are not so
much dealing with the physical laws of nature as the continually
evolving rules and constraints of human design. Software is built on top
of hardware and other software designed by humans. The design
constraints matter, and as they change over time, best practices will
change with them. We are also continuously gaining new insights and
information about how we can be more productive both as individuals and
in teams. With new information comes new ideas and new ways of doing
things, so we shouldn't hold on to old practices too tightly just
because we've already committed to a certain course of action, like the
I.F. in the book. The goal should be to always evaluate the current
context for the best way of achieving the most positive outcome for all
parties involved.
No comments:
Post a Comment