I am not an artist. Of all the arts, the one I know best is music.
I've sung in choirs, played baritone in bands and recorder with friends, and directed a couple of children's Christmas programs forchurch. But I haven't had much training and never call myself a
musician.I'm even worse in the visual arts. I never learned to draw and
even my handwriting is horrible. My hand-eye coordination is notvery good.
That is one of the reasons I like programming. I can make things!
Programming is a creative act, and sometimes it is like creatingthe world from nothing. Of course, in the modern age, most software
is built from components so our creativity is constrained,but usually the biggest constraint when we program is our
lack of creativity, not the components we use.I teach junior/seniors how to work in groups to develop software.
Some of them have only been programming for a couple of years, othershave been programming for eight or nine years. One of the biggest
problems I see in them (and I also see it in me) is getting sofocussed on solving a problem that they don't realize that they
shouldn't be trying to solve it. Programmers have a hierarchyof goals; make your customer happy, build a web server, make a
particular page work, fix a bug in a servlet. Sometimes we spendso much time on a low-level problem that we ignore the high-level problem that we are supposed to be solving. It is important to time-box each task so that if it takes longer than we think, we have a chance to "come up for air" and to think about whether we need to try something entirely different.
I think this is part of the secret of the XP advice "do the simplest thing that could possibly work". If you are going to follow that advice then you have to think about a variety of solutions, and then pick the simplest. It doesn't mean "do the first thing you think of". That is unlikely to be the simplest.
Anything that helps us generate ideas is good. Experienced programmers generate ideas by remembering other systems they have worked on. That is why learning new languages and systems is
important. But we also generate ideas by talking with others, by having reviews, and by reading about systems that are similar insome way. People who talk about programming often focus on how
to analyze a system to discover what is wrong with it. But fewpeople talk about how we generate ideas in programming.
My home page is [http:/st-www.cs.uiuc.eduusers/johnson]