[techtalk] XP vs UML
jenn at simegen.com
jenn at simegen.com
Fri Mar 30 07:36:58 EST 2001
Michelle Murrain wrote:
> For those who've done application or OS programming as well as web
> programming, what do you see are the major differences? Major similarities.
> Which do you like best and why? I've been thinking of delving into some
> application programming, but it seems a bit daunting to me.
Ok. NOW I feel old!
The TLAs (three letter acronyms) confused me, but by listening and
grokking arguments and context, it looks like the discussion is
rapidly churning out code (probably after some thought)
sitting back and *thinking*, an awful, awful lot, first.
It's an old argument. It pre-dates me - it probably pre-dates most
of my lecturers. (Possibly not the one who once worked on ENIAC,
though, even though ENIAC was near its retirement when he did.)
For production programming, I advocate somewhere between the extremes.
Speccing and designing before production have got a bad name in some
camps, mostly because they /over/-spec and /over/-design when they
try it. Or get lost in a maze of paper.
Speccing (specifying) isn't about the paper. It's about thinking things
through. In a project I'm part of at the moment, the lead hadn't thought
about whether users needed a home screen of their own - until my
task-view proposal document brought it up.
Hell, neither had I - but as soon as I viewed the project from a user's
perspective, it was an obvious need.
Plot your way through the project from every perspective you can. From
the perspective of a user doing each of the tasks you expect them to be
able to do: and making mistakes, requiring your program to allow those
mistakes to be fixed. From the perspective of a system administrator
concerned with backups and security. From the perspective of the
(end-user) company manager, wanting to know the state of their company.
That should enable you to list *ALL* the functionality that will be
required. Including the functions you overlook if you just look at it
from a programming viewpoint.
You'll probably want to write these lists down. :)
Don't touch the keyboard yet. Think about the range of ways you could
implement a program to do all of these things. Try to find the way which
seems to you to be most extendable - customers who love your system will
want to use it for all sorts of stuff. Think about deliberately limiting
the scope of your system, as well - customers who love your system will
want to use it for EVERYTHING, whether it's appropriate or not. Think
about which designs will allow you a chance for code re-use, too -
either re-using existing code or writing re-usable code.
Then make your best guess as to which design is best for the purposes of
*this* code and *this* client.
You may want to write down the options, and the reason you chose the
ones you did.
Now you can touch the keyboard.
Keep your various bits of paper nearby. When you're tempted to change
something, look at the paper. It'll help you remember why you made the
decisions you did. If you remember why you chose to do it this way, and
STILL think the new way is better - go for it. The decisions you made
are only written on paper, not carved in stone.
But write down the new decision. And why. Cause you might need that
knowledge in a day's time. Or a week's. Or five years'.
Hm. I've rambled. Hope I've rambled usefully.
"Do you ever wonder if there's a whole section of geek culture
you miss out on by being a geek?" - Dancer.
jenn at simegen.com Jenn Vesperman http://www.simegen.com/~jenn/
More information about the Techtalk