As a programmer I'm often asked to do what lots of programmers have to do, think about and analyze a completely conceptual structure. Programs can build up massive structures, the computer is more than happy to allow you to create a hash of trees of lists of objects with properties that are hashes of trees of lists of objects with properties that are... and so on and so forth. That is one of the great strengths of programming, but also one of the greatest challenges.
At the end of the day the computer only has one data structure, a memory address. It's just one big long row of memory that we can store stuff in, the rest is all conceptual framework we build on top of it. To deal with these complexities we build tools and abstractions, I want to talk about some of my favorite tools, and find out about some of yours.
I was recently given the task of fixing up a workflow, there are many entries in a database table somewhere where each entry represents a part of a path through the workflow. So an entry might define that from the put on socks state you could move to the put on shoes state. Having a vast number of these states and a whole bunch of paths between them, it became difficult to think about the way the system worked, so I created a visualization.
This looks complex, and it is, but it is a much better reference when working with this particular part of the system than looking at the database table and trying to assemble parts of it in my brain as the situation demands. So how did I create this diagram
Diagrammr one of the coolest on-line tools I've ever encountered. It's free, it's fast, and it works really well. I just entered a bunch of fragments into a text box like this
- ds to dc
- dc to ta
- dc to tr
- tr to dc
And after adding quite a few more, this fun diagram popped out, quick and easy.
This diagram was fairly straightforward, the boxes are just simple states, but when I need a more full bodied solution, I use Dia. Let's run down the checklist here, free, yes, lightweight, yes, intuitive, yes, awesome, yes.
Dia is also cross-platform, super bonus, and it has figure sets for almost any kind of diagram you would want to make. One of the best things about Dia is that the images are intelligent objects, double click on a table in a schema diagram and it brings up a dialog to enter column information. Double click a class in an inheritance document and it brings up a dialog to add members, functions, and hierarchy information. Dia also lets you easily export to several different file formats including but not limited to
- Native Dia Diagram File (.dia)
- HP Graphics Language (.hpgl, .plt)
- Portable Network Graphic (.png)
- Scalable Vector Graphic (.svg)
- Visio XML Format (.vdx)
- Windows Meta File (.wmf)
- XSL Transformation Filter (.code)
Last but not least is my all purpose tool, the number one go to when the chips are down, Graph Paper. It is fair to say that I love graph paper. It is by far the most useful tool to have around. Is there anything graph paper can't do, lets look.
- Write beautifully in horizontal and vertical orientations... check
- Allow for monospaced fonts... check
- Ad hoc tables... check
- Impromptu graphs... check
- Arrow support... check
- Runs linux... soon (I'm sure someone's working on it)
These are some of my favorite tools, with them no data structure frightens me, no data set is too formidable, order can be brought to chaos. What are some of your favorite tools?
I do occasionally get asked about my favorite tools for XYZ. My answers, like yours, usually come down to the simplest tools. My biggest productivity and software development tools are an unlined notebook, a pen, and a text editor. I can wireframe UI, model data, document program flow, and write a reminder to pick up eggs on my way home. Sometimes all on the same page. Good stuff.
ReplyDelete[...] thinking it is much easier if we have a concrete model to wrap our heads around. Like I said in tool roundup [talking about a sweet visualization I made] …but it is a much better reference when working [...]
ReplyDelete