I took it when I was an undergrad (that was ten years ago, but I hope the spirit remains the same) as my first CS class. It was very tough given my preparation, but the thing I appreciated was that it gave a very general introduction to many high-level concepts in fairly good detail. I felt I had a solid starting point in many things- programming paradigms, understanding data abstractions, levels of abstraction in program design, etc that I don't always see replicated in other introductory material.