Wednesday, February 25, 2004

Borland? Or Bore-bland?

I was at the Orange County Delphi User Group Meeting last night. It was a special meeting because John Kaster flew all the way down from Scots Valley with a promise to tell us "all the reasons why we should make Delphi 8 part of our .NET plans," according to the e-mail advertisement. I guess that's a popular subject these days since this meeting had the largest attendance I’ve seen in years. Too bad Kaster couldn’t deliver the goods.

I should mention that I was 10 minutes late, so I can’t speak to the very start of the meeting. When I arrived, Kaster was winding down from some introductory remarks about how Borland is repositioning itself as the "whole development lifecycle" company (or something like that) -- complete with an epiphany-inspiring puzzle piece logo that's sure to change my life forever.

Kaster then turned the floor over to two of his colleagues in the Starteam division (which is still located here in OC). They proceeded to bore us to death for almost an hour. Try as I might, I couldn't figure out why they were even up there. This had nothing to do with either Delphi or .NET. At first, I thought maybe they were leading up to some news about Starteam, but my anticipation faded fast when they started droning on with a demo of how to set up a Starteam project. Talk about old news! As a longtime Starteam user, I can attest that there was not one scintilla of information less than 3 years old. Maybe it was because of my seat in the back of the room -- one of those folding chairs with an attached writing desk -- but I could swear I was back in high school and had been sentenced to detention.

When they got to Q&A, I decided to throw them a bone. In keeping with their development lifecycle theme, I asked about how well Starteam integrates with their requirements tracking tool, Caliber RM. "For example," I asked. "Say a project manager is looking through the bugs that have been reported as change requests in Starteam and decides that a few of them should really be treated as feature requests for the next version. What facilities are there for converting such bug reports into Caliber requirements?" The answer I got was really convoluted, but what I think I heard was essentially "Ctrl-X/Ctrl-V." Am I missing something? How does the self-proclaimed thought leader in development environment integration expect to thrive by selling us bundled products that don’t integrate?

Needless to say, by the time Kaster got back in front of the projector and started to actually talk about Delphi 8, I was numb. I made a valiant effort to follow along and understand what big things Delphi 8 brings to the .NET table, but I didn’t see any. All I saw was Microsoft finger-pointing and all I heard was more old news: "Live data at design time this" and "still not quite drag-and-drop form design that." Ho, hum. By 8:45 I was counting the minutes until the meeting ended, hoping to salvage what was left of the evening with one of our famous parking-lot “after-meetings.” But the meeting ran long and there was still no end in sight, so I bolted.

Monday, February 23, 2004

Contact Management Software for Job Seekers

I'm on a quest to find a good, inexpensive contact management software package to recommend to jobseekers. ACT and Goldmine are way too expensive at $500 a pop. So far, the closest I've seen is one that my friend, Vladimir, just discovered. It's the QuickBooks Customer Manager for $80. It's a version 1.0 product, so the feature set is lacking, but the basics are there. [See the CNET Review] I especially like the way it manages links between names and companies. You can associate several individuals with a company/organization and quickly jump between them. For example, I can click on my employer and see a list of all of my coworkers (that I’ve entered), and from their click on myself. My record, in turn, shows that I'm associated with my employer (of course) as well as the School of Information and Computer Science at U.C. Irvine. If I click on that link, it'll show me all of the other people that are associated with the ICS School (i.e. my fellow alumni, current faculty, and whomever else I'm tracking as such). In that regard, it's very much like the genealogy software I use. My biggest complaint is that the searching capability is severely limited. For example, you cannot search within the text fields of the notes, the call logs, or the e-mails that are associated with people. Don't get me wrong, this is better than trying to use Outlook alone as a contact manager, and I'll probably stick with it and hope that a search feature is forthcoming. In the mean time, if anyone out there knows of a better alternative, preferably an open-source one, I'll all ears.

Wednesday, February 18, 2004

Computer Science Careers

It's career night at U.C. Irvine again and I've been asked to participate on a panel discussion with some fellow alumni. Here are a few references that I plan on mentioning:
  • Joel Spolsky of Fog Creek Software is outspoken on many aspects of software craftsmanship. His site includes a pretty good forum discussion on questions to ask the employer during an interview. Be sure to check out Igor K's contribution at the end entitled, "How to research the company," as well as Ged Byrne's great list of questions such as "Do you fix bugs before writing new code?" and "Can you make a build in one step?"
  • Right Management Consultants do a fantastic job running outplacement seminars and otherwise helping people to boost their careers.
  • Software Development magazine is always a must read. Among the technical articles you will usually find one or two per month concerning software careers (salary surveys, outsourcing issues, résumé writing, etc.)

Tuesday, February 17, 2004

Can We At Least Agree on What "Agree" Means?

Like the good citizen that I am, I decided to read up on proposition 56 in my California voter’s guide to get my facts straight. (In case you are not from CA, prop 56 is a constitutional ammedment that would make it even easier for our legislature to tax us to death by reducing the vote needed to pass a spending bill from a 2/3 majority to only 55%.) On page 11 of the guide, there’s a "Fiscal Effects" analysis prepared by some unnamed Legislative Analyst in the Attorney General’s office which includes this statement: "This proposition, by reducing the number of votes needed to pass budget-related bills, would make it easier for the legislature to agree on these measures." [Emphasis mine.]

Shouldn’t that be “disagree?” I don’t know where this guy studied math, but I was taught that when there is a 55-45 split of opinon, that means there is LESS agreement among the parties than with a 67-33 split, not more. Prop 56 would certainly make it easier to get a spending bill to pass, but it would be in spite of disagreement among the legislators, not because they suddenly agree.

Monday, February 16, 2004

The Reasonable Man

"The reasonable man adapts himself to the world; the unreasonable one persists in trying to adapt the world to himself. Therefore, all progress depends on the unreasonable man." ~ George Bernard Shaw

Wednesday, February 11, 2004

Brainstorming and Pair-Programming

While Vladimir Drndarski and I were pair-programming today, the following conversation ensued:

Vlad: "That's a bad design."
Craig: "Only because we are testing it."

I'll leave the circumstances to your imagination, although I assure you that I was serious at first, before I realized the absurdity of what I had said. Well, we both cracked up. Then, needless to say, we changed our tack. Chalk up another victory for pair-programming.

On a related note, Jim Powell, a colleague of mine, gave a presentation yesterday about brainstorming techniques. For example, he talked about how an initial pool of ideas can be built up in the generation phase by pushing the boundaries, piggy-backing on the previous ideas, and inverting or negating the previous ideas. (More on that in a moment.) Afterwards, it occurred to me that one of the reasons pair-programming works so well is that it basically amounts to an endless stream of mini-brainstorms between the two partners. I don’t have any objective proof, but I swear that whenever I pair with someone, we’ll write code that is easily 3-4 times tighter and cleaner that if I had written it alone. I'm sure the brainstorming aspect has a lot to do with why.

Regarding idea generation via negation, I will never forget the first time I tried it. I was using a technique called “20 Answers” which is essentially a way to do a brainstorm single-handedly. I started with a blank piece of paper and wrote my question at the top, “How can I get this bleepin’ report-printing framework to fill in the calculated totals I need on the cover sheet at the beginning of the report, even though the figures to be totaled haven’t been processed yet?” (That was back in my C/PM days, and the tool I was using didn’t know how to make a preview pass when generating a report.) Some of the possible answers that immediately came to mind were:

1. Somehow pre-calculate the totals
2. Write a post-processor to fix up the cover page
3. Bypass the framework and write the whole report in Print statements

But they were obviously too complicated. So, I loosened the constraints and brainstormed some more...

8. Find another framework and rewrite the whole app
9. Write my own framework from scratch

Of course, those were even more complicated. Eventually, I started getting really silly and downright contrarian. I thought to myself, what if I don’t try to answer the question at all? Or that I only answer part of the question? That generated a few more possibilities...

15. Perhaps I could convince the customer that they don’t really need the totals on the cover sheet?
16. Perhaps they’d settle for a summary page at the end instead of a cover sheet in front?

And then it finally hit me. Who says the cover sheet has to actually come out of the printer first? Thus:

19. Print a summary sheet at the end that looks like a cover page and have the clerk move that page to the front before mailing the report.

Walla! I had struggled with that problem for a few days before I brought out the "big guns" and went through the 20-Answers exercise. It’s true what they say about the power of getting things down on paper to stop the mental "looping." But disciplined brainstorming like that isn’t something that comes naturally to a single individual, at least not to me. When I’m pairing, however, it does happen naturally -- and constantly. It's just part of the conversation.

I’ve been pair-programming on and off for a few years now, and the more I practice it, the better my work gets. What’s your experience? Write me.