I want to see if there is anything I don't need in my CSS file for my current layout
Unless your element is fixed or absolutely positioned, top: 0 is doing nothing for you (#header).  Unless your descendant elements are absolutely positioned (or you need to adjust the element's stacking order due to surrounding absolutely positioned elements), you probably don't need position: relative either.

The negative margin on #main is doing nothing for you (margin: 0 auto gives identical results).  Generally, you use negative margins to nudge things around similar to relative positioning, but where it effects the position of everything that follows as well (eg. an element with margin-top: -50px will move up 50px and so will everything below it, but an element that's relatively positioned with a top: -50px will only shift that element up and not the following elements).

vertical-align: bottom isn't doing anything for you either (#main).  The vertical-align property only works on inline or table-cell elements.

It's not really a good idea to set fixed heights on elements that will have an unknown amount of content (#main).  Scrollbars give users clues as to how much content there is on the page.  It can be confusing to the user when they scroll and scroll, but there's no more content to find.  If the content is longer than you've allowed for, it will spill out of the container or get clipped off (depending on the element's overflow setting).

If you want your footer to be at the bottom of the viewport, then yes, you need bottom: 0.