Lists are just higher level arrays (you can manipulate them a little more intuitively, for example, delete one item and the rest of the items move down one. You can also sort them).
They just store values in succession, 0-> value, 1->value, etc etc
Maps are a way to give data values labels, where a list wouldn't be appropriate. For example if I wanted to record someone's name, favourite colour and height I would not use a list because the procedural nature is not appropriate. It also makes code a lot easier and more intuitive to understand. You would access them as follows: map[? "colour"], map[? "name"] and map[? "height"]
Buffers are just direct access to binary data stored in the memory and are a lot faster than the high level abstractions that are maps and lists. You probably don't need to worry about them. When you NEED to use them you will already know about them from experience
Lists and maps (maps are also referred to as objects sometimes) are a very common computer programming idiom. They form the basis for example of the JSON spec (which GM supports). Read some more here
http://json-schema.org/example1.html