In my software engineering class, we were taught that it was an option, but generally not preferred compared to an iterative model. So far so good.
We then proceeded to ignore this entirely and for the rest of the course acted implicitly as if we were using waterfall. Including in subtle ways, such as being given homework assignments due next week with no chance for iteration. An "assignment" in which there is no room for iteration bears absolutely no relationship to the practice of software engineering of any kind.
In hindsight, thinking back to my software engineering course, I'm not sure there's a single thing in it I agree with ten years later, and it's not like any of the things I've learned in those ten years are brand-new knowledge, it was all equally obvious in 1999.
We then proceeded to ignore this entirely and for the rest of the course acted implicitly as if we were using waterfall. Including in subtle ways, such as being given homework assignments due next week with no chance for iteration. An "assignment" in which there is no room for iteration bears absolutely no relationship to the practice of software engineering of any kind.
In hindsight, thinking back to my software engineering course, I'm not sure there's a single thing in it I agree with ten years later, and it's not like any of the things I've learned in those ten years are brand-new knowledge, it was all equally obvious in 1999.