Archive for October, 2003
I’m not at the Microsoft Professional Developers Conference in Los Angeles. However, I feel almost like I’m there reading all the various blog entries from people at the conference. I’ve added another 20 feeds to SharpReader.
Thanks to John Lam, I read about mind mapping, which was a new concept to me. In particular, he pointed to the Freemind project at SourceForge. John mentioned that he used it for brainstorming. However, I have found that it is very useful for the technical design process.
I looked at the screenshots. The concept intrigued me. However, I didn’t see a compelling need for the software at that time. Without the proper motivation, I wasn’t going to spend time installing the Java runtime.
A couple months ago, I was asked to lead the design of a new business process in our application. This is the first significant project in which I’ve been asked to take the lead. My supervisor and I spent 6 hours a week over the course of several weeks working out the business cases in depth. We used OpenWiki to record the information.
The Wiki page worked pretty well. We were able to elicit comments from interested parties on our team who were following the updates. From the beginning, I had planned to use a Wiki page to record our technical design notes as well. As we worked on the business design, I realized that some characteristics of the technical design process were going to make the Wiki page inefficient.
The general process using the Wiki went like this:
- Diagram on the white board
- Record on paper
- Update Wiki
When we were doing updates, sometimes the updates were simple and could be entered directly into the Wiki in a couple minutes. However, most computer entry was done between sessions. If enough time passed before updating the computer info, sometimes the notes were unclear and unrecorded information was missed.
Ideally, we would have worked off the computer information and updated it as we talked. However, the editing environment for Wiki pages is not terribly sophisticated. This hindered real-time editing during the discussion process.
My review follows here. It is more about the mind map concept than specifically about the FreeMind program.
For the technical design documentation, I considered these key issues:
- Information is often hierarchical in nature
- Structural changes are common
- Need to see “big picture” as well as “detail”
Mind map information is hierarchical by nature. This fits perfectly with technical documentation.
Concepts are encapsulated in nodes, which makes it very easy to reorganize the information. When somebody asks, “Shouldn’t we split these up into separate categories?”, the items can be split with drag-and-drop. Need to reorder a series of multi-part steps? Simple drag-and-drop can change the order. You can do drag-and-drop with a text editor, but you have to manually select sections of text that represent a single topic. With the nodes and branches of the mind map, every thought is selected with a single click.
Here’s a practical example of how this works for the design process. Business objects must have knowledge of the database. To create a new business object, database objects must also be created. With the mind map, you can record the database details along with business object. This keeps the information in close proximity for review.
Eventually, work must be assigned to developers. It makes sense to group all the database information together and give it to somebody to do as a single task. With the mind map, you can visually drag all the database nodes together and give those to the developer.
When the discussion switches from big picture ideas to detailed ideas, the mind map can be “folded” and “unfolded” to provide a view that is consistent with the level of the discussion. Folding hides more detailed information. Unfolding reveals the detailed information.
FreeMind supports applying styles to nodes and branches. We apply styles to nodes to keep track of what kind of followup might be needed. We find adding color to the different branches helps keep perspective when the size of the map becomes pretty big.
FreeMind also has a Java applet that lets you view the data through a web page. I have placed this on an internal IIS server and it allows others to see what we are doing. They can’t change anything through the web viewer.
For people who have a difficult time comprehending the mind map concept, FreeMind also supports exporting the data to an HTML file. The data is exported in a standard outline style. The HTML can be simple text or DHTML tags can be added to allow the text to be expanded and collapsed (ala Visual Studio regions). I put this HTML page on the web server as well. Both of them are linked from our Wiki.
The underlying data is simply an XML file. This is great for storing in a source control system. If you work with XML regularly (we don’t), I can envision writing custom analyzers of the mind map data. Somebody who is really ambitious might create a “code generation” from the mind map data.
One of the best features of FreeMind is that it is free. When trying something totally new, you can’t go wrong trying something that is free. There are plenty of commercial applications that support the mind map concept. We’re pretty happy so far with FreeMind.
Every company has people who issue memos that make no sense. The larger the company, the more frequently it is likely to happen. Raymond Chen points out an important missive that was sent within his Microsoft group.
It’s a good thing he wasn’t on vacation when this message came around. Otherwise, he might have received this message too late. ðŸ™‚
According to a new study, having multiple monitors increases productivity and morale. I’m sure that the study wasn’t influenced by two of the partners in the study being manufacturers of graphics cards and monitors. ðŸ™‚
As a programmer, I know that I could benefit by having multiple monitors. Where I work now, I only have a single monitor. It can be a pain to have to switch between the debug window of VB and the form that is running. Because our forms are large, it’s not possible to watch the visual side-effects while stepping through the code. Having a second monitor for this would help tremendously.
When I was a hobbyist programmer in the late 80s, I used to have a monochrome monitor and a VGA monitor hooked to my 386. Borland’s C++ environment (under DOS and OS/2) supported having the code editor on one monitor and the program output on another monitor. I always thought this was pretty handy, and was amazed at the time that this could work in DOS.
I wonder if there have been surveys showing the percentage of business programmers who use multiple monitors. If I had this guy’s setup, I would probably have a decrease in productivity.
According to CRN, IBM is adding a new technology to their Thinkpad line of notebook computers. Basically, a motion detector will lock down the hard drive to protect data in a crash.
Will this help out the flight attendants who tell us to turn off our notebooks during takeoff and landing? With this laptop, I can envision the pilot starting the takeoff run and all the Thinkpads on the jet simultaneously lock up.
Or if I’m in the middle of a flight that starts to go south, which will happen first, the deployment of the oxygen masks or the lock of the hard drive on the Thinkpad? Will anybody really care?
Ivan Medvedev posted an interesting little exercise on his weblog yesterday. It has generated quite a few comments (incuding some from me) and an interesting discussion that I think shows an interesting aspect of human nature.
Check out the link.
It’s interesting to me that some of the people responding to the exercise are coming up with answers that don’t solve the problem. Even after I had posted a logical reasoning (IMHO) of the answer, some posters are still questioning if that is correct.
My mother teaches programming in a local high school. In past years, she has also had to teach algebra classes. She had some students who were seniors taking algebra for the third time — and failing for the third time. I don’t know if my mother is an effective teacher, but I wonder if there are simply people who can’t grasp the abstract concepts required in algebra. They can add concrete numbers with the best of them, but they can’t factor an equation.
I wonder if some of these programmers are simply incapable of grasping the logical and mathematical concepts involved in the exercise that Ivan posted. If that is the case, how is it that they are successful programmers?
Back in my day — when we walked through 3 feet of snow to school every day — programming classes were relatively small. In my programming classes, all the students were also in the honors classes. In other words, they were among the smartest students in the school. When I went to college, there was a computer science program, but there wasn’t a business programming curriculum.
Today, a lot of colleges have business programming curricula. I wonder if these programs are turning out “boilerplate” programmers. I wonder if these programmers would be capable of completing the standard computer science program? Are they dumbing down the intelligence of the programming pool? Am I sounding like an elitist blowhard? ðŸ™‚
DevX released this editorial yesterday. I must say that I have to agree with most of the opinions that were stated in this article, both from the optimists and the pessimists.
I work in a small software shop (7 developers). Our owner was looking at outsourcing to southeast Asia. As he delved into the actual costs, I think he realized this only works for larger operations that have the ability for people to specialize. The people who specialize in the grunt work of programming are the ones who are in danger of having their job outsourced.
Even in a small shop, we have grunt work. At some point, somebody has to write code. In my opinion, writing code is grunt work.
We already use an alternative to outsourcing this kind of work. Two of the positions on our staff are college interns. We try to hire juniors, keep them for two years, and then hire another junior to replace them.
We can pay two college interns the same salary as we would pay an outsourcing company for a single developer. There are other factors to consider, of course, such as experience, training time (which takes away from the potential productivity of other developers), and overhead (office space, a computer, benefits, etc.). Internships, though, certainly merit consideration.