Aside from the software developers working on embedded systems and hardware modeling or any other job that deals with software for or on hardware, how much should a software engineer know about the underlying hardware that they might be developing for? Should it be treated as a black box that just works or should there be a very strong working knowledge of the hardware systems?
EDIT: This question was inspired by this post.