It's not that complex, actually. Here's how the basic usage works: you have a text file containing something like this for an undirected graph --
graph graphname {
a -- b -- c;
b -- d;
}
-- or like this for a directed graph (the -> arrows show you which direction the links are going):
digraph graphname {
a -> b -> c;
b -> d;
}
You can break up that first line into a -> b and b -> c and get the same graph if you want. It's not necessary here but it is when you have lots of outgoing links from the same node.
The other things you can type in are basically formatting options for the various utilities. You then feed these text files to various command line tools to do things like get a PNG of your graph:
dot -Tpng my_text_file.dot -o my_graph_image.png
That's it. The rest is just playing with it to get what you want.