Assume each nodes as box. now in an html page we have many boxes and each boxes other small boxes in it.
now when we say:
child:: of a box - this would mean all the boxes inside the main box that we are looking at. this will only consider the boxes inside the current box. It won't look at the contents of the boxes.
following:: of a box - this would mean all the boxes after the box that I am looking at, this doesn't have anything to do with the current box that I am looking at.
descendant: it is like child, but the catch is - it looks all the boxes inside the node box and also look inside of each of the sub boxes too. child will only look for immediate boxes not inside each of the immediate boxes.