Categories and Attributes are very similar however they work at different 'levels'
Categories: In your module settings you can setup as many Categories as you like. Categories can be sub-categories by setting their parent to an existing category. Think of a 'tree' control when you picture setting up your categories. Now, when an item is uploaded to your module, there will be a list of the available categories, and you can assign the new item to one or more categories.
The purpose of categories is to 'filter' the list of all available items. The user can select a category and only items that belong to that category will be shown
Categories are one-dimensional. A category has a name and you can assign a repository item to one or more categories. Membership in a category does not rely on any specific data value in the item, you can just assign the item to a category.
Attributes: Think of attributes as categories on steroids. Like Categories, Attributes are primarily used to 'filter' the list of items shown to the user. Attributes are two dimensional. They have a name (just like Categories do) but then also have a list of possible values. Just like Categories. you set them up on your module settings page. For Attibutes you can create as many as you like and for each one you create, you can specify a list of valid values. Ex: Set up an Attibute named 'Color' and set the possible values as 'Red', 'White' and 'Blue'.
When an item is uploaded, the user will be able to check off which attribute 'values' the item should be associated with. So again, in the previous example, the user would be able to select Red, White or Blue as the Color for the item. (see the pinned post in this forum for the technical details, I'm trying to keep this discussion theoretical).
So, in this example, you've created Categories and An Attribute named Color that has 3 possible values. The user can now use a combination of the Categories and Attributes to 'drill' down and see a set of items that meets their requirements. If you have Categories like 'All Items', 'Shirts', 'Pants' and 'Hats' the user could select a category, then optionally select an attribute (you will have to add the Attribute drop down list in the header template, again, see the pinned post for details). Ex: If the user clicks on Hats, then only items that were assigned to the Hats Category would be displayed. Now, if the user selects 'Red' from the Color Attribute drop down, only items associated with the 'Hats' Category AND the 'Red' Color Attribute would be displayed, showing the user only Red Hats.
I hope that helps, like I said you can setup as many attributes as you like so you could setup another Attribute for Size and the user could elect to only see Small Red Hats:)
Let me know if that clears it up. If you have any specific questions, let me know.