Extravagaria Workshop Wiki


RalphJohnson

I'll be at OOPSLA and would like to come.

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 for

church. 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 not

very good.

That is one of the reasons I like programming. I can make things!

Programming is a creative act, and sometimes it is like creating

the 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, others

have 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 so

focussed on solving a problem that they don't realize that they

shouldn't be trying to solve it. Programmers have a hierarchy

of goals; make your customer happy, build a web server, make a

particular page work, fix a bug in a servlet. Sometimes we spend

so 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 in

some way. People who talk about programming often focus on how

to analyze a system to discover what is wrong with it. But few

people talk about how we generate ideas in programming.

My home page is [http:/st-www.cs.uiuc.eduusers/johnson]