Monday, April 4, 2011

A few words about Mind Maps

Is it just me, or is there a lot of muddy and unconnected thinking going on? I'd like to advocate a technique that IMHO should be taught in all schools. I came across it way back (whichever year it was the Open University used K as the prefix for its intake and Use Your Head was on the telly.)

They are called Mind Maps and are a graphical way of organising your thoughts. And thoughts might be notes for a speech, outlines for a piece of writing or just getting some clarity about something that is complex or confusing. They are great for taking minutes of meetings because when you come back to them you can pick out the important bits from the other fluff and dross that you get from he-said-she-said minute style. For the more formal stuff they can be structured to form a RAID* log.

The big idea is that thoughts are organised as a number of linked one-liners. Breaking down problems to manageable chunks is one of five* key problem solving skills. The map should use colours, fancy text decoration, pictures, highlights. This brings out the key points (pros in green, cons in red for instance) and allows you to get a bit artistic.

It works because our creative thinking isn't organised into straight line lists. Ideas pop into our heads sponaneously and unexpectedly. The Mind Map allows these apparently random ideas to be recorded, organised, linked and expanded on.

Sounds great. But there are some disadvantages. They are quite difficult to share. I have written a complete spec for a document management system as a map but when I shared it with the customers it became clear that they would much prefer a linear document of 10 pages with all the noise words to a one side of A4 containing the same information.

There is also intentionally no temporal dimension. This is a bad and a good thing. Sometimes things must come in a given order. The good news is you can use numbering schemes, colours or text size to impose an order.

There is no right way to create a Mind Map but here are a few starters to get you going. A map always starts with a central topic which should be in the centre of your piece of paper. It's a good idea to start in landscape mode as maps tend to 'expand widthways.' From the main topic you can start mapping out the high level ideas. Sometimes you will feel that an idea may need to be a 'hub' with it's own spokes. If it does make sure it is less prominent than the main topic. Keep coming back to the main topic and working down the branches of the ideas and let new idea form themselves. Add them to the map. Repeat until done.

I think the best maps are done on paper but attending a meeting with my pencil case of crayons got some very funny looks. And maps created electronically are easier to rearrange and update. There are a few good bits of free software out there that allow the basic notetaking. My current favourite is FreeMind:
There are some omissions the most notable is the ability to do freehand drawings on the map. On the plus side it has a great html export facility which can create javascript webpages as bullet lists to allow branches to be expanded and collapsed.

There's a big list here:
Here are some books that I find useful. A good start is Use Your Head which accompanied the BBC TV program in the 80's. There are some second hand ones for as little as 1p + p&p. It covers lots of other stuff too, like remembering lists and how important revision is.

Use Your Head on Amazon
Mind Maps for Kids
The Mind Map Book on Amazon

So next time you need to organise your thoughts either for yourself or to communicate with others you could give it a try. When I have converted enough people I might be able to get some fun out of writing my specification and proposal documents ;)

BTW the map in the diagram above my first 15 minutes of thoughts for a workshop I am doing with a some local authorities who want a 'Portal'* but have no idea what it is. Personally I dislike the use of the word Portal but I suppose it has the benefit of being a bit shorter than transactional website....

Big hat-tip to Tony Buzan.

*I might get round to writing these up one day.

Monday, February 28, 2011

Emergent Design

I'm just reading Scott L. Bain's book again. For the fourth or so time. Well worth a read for anyone in the software business, even if you don't work at the codeface.

I'll try an paraphrase it a bit:

  • Making software should be a profession no less than law or medicine. It's just that the profession has only a 40 year history and hasn't evolved the structures it needs.
  • It is also an art and a science.
  • Things change, be prepared to change with them. Code with change in mind.
  • Stand on the shoulders of giants. Use patterns that have been used before.
  • Develop instincts that tell you something smells funny (he actually uses this analogy)
  • Constantly refactor. If you have coded for change then it's not a big issue to move things around to make things self contained.
  • Think about how you are going to test the stuff you write and unit test it often.
The book uses Java for the examples but c# and vb programmers (and probably any other OO developers will be able to follow.

And while we are on books I've found PDFs of Polya's how to solve it book on heuristics in a few different PDF versions. Although the book applies to mathematical problems it's great for finding all sorts of solutions. Having the following checklist in mind is very useful:

  • Do I understand the problem?
  • Have I got enough info to solve it? If not can I safely make assumptions? Can I get more information?
  • Can I draw the problem as a diagram?
  • Can I restate the problem in my own words?
  • Is it somehow like something I've seen before?
  • Can I guess the range of the answer?
  • Can I reduce it so more soluble chunks?
Having a framework like this really helps you get some clarity.

Monday, February 14, 2011

Getting bored now.

Admittedly I've only given it a day and a half but Microsoft WPF is starting to bore me. OK it is probably very nice for making pretty pictures but as a basis for making thing that work it is a backward step. Or at least sideways.

The Windows.Forms namespace goes back to the beginning of the framework. There are gazillions of coders out there who know the object model backwards and it works most of the time. Wouldn't it have been a great idea to build the presentation host stuff on it? You'd have thought so wouldn't you. But the chaps and chappesses at Microsoft didn't. I accept that doing media rich stuff that will run in either the presentation host or a browser needs a new paradigm but it would have been nice if it used an existing and well known model. They have broken at least two of the tenets of Object Orientation to bring use something that might work if you are willing to fiddle with it for long enough.

I started to  list the things that were wrong with it but I've decided to pick on one. The nice thing about strongly typed code is that "if it compiles, it runs." I know that there has been a move back towards mutable types (you can replicate this already in the framework, just declare everything as object.) But WPF doesn't have mutable types. It's just pretends to...

Unfortunately Silverlight has tipped over to over 50% market share so I think I might have to persevere...

Friday, February 11, 2011


So here we are. I have decided to start blogging again. I might keep it up for a while and I may not. Let's see.

What prompted me to start again is that I have started coding again and it I can share my thoughts and have somewhere to park my discoveries and also vent my spleen on the idiocies of the stuff I have to work with.

I have just completed a nice little month long project to create a framework for a touchscreen wayfinding system in shopping malls. One in Saudi and one in Jeddah. At the customers request I did in in Visual Basic. It all went not to badly and I managed to hand over the code and a usable (if not polished) manual in the calendar month I originally quoted. Nice when that happens.

It was quite pleasing to find I hadn't lost the knack after some years of designing solutions rather than doing the work (although I secretly snuck in a bit of coding here and there.) It was also nice to to find I still got satisfaction from making something that is going to be used by real people to do real stuff.

So onward and upward. I have no more work on the horizon so I am exploring. I'm creating a shop in PHP on the XAMP stack and I have a bit of stuff to do on a database solution. I started them both before this job came up and I can pick them up again.

Oh, and blog a little about what I am doing...