"Principles of Imperative Programming" is a misnomer.<p>The course is really about developing techniques for reasoning about low-level software. You build up abstractions in C by leveraging contracts and writing proofs of correctness based on those contracts.<p>Explore the "Learning Objectives" section to read about what the course really entails: <a href="https://www.cs.cmu.edu/~15122/about.shtml#LO" rel="nofollow noreferrer">https://www.cs.cmu.edu/~15122/about.shtml#LO</a><p>This was the first computer science course that I took at CMU and it was absolutely mind blowing for me. I had previously taken AP CS and had played around with making games in flash and writing little programs for my graphing calculator. But this course taught me how to reason about my programs (and why that might be valuable, to begin with).
This is a bit of a tangent, but I read the prerequisites for this course and felt the same annoyance that I did when I was in college.<p>I didn’t major in CS, but I wanted to take some CS classes. Several times I had to go back and forth with the course instructor and the director of undergraduate studies in the department, trying to convince them to let me take the class, or at least audit it or get access to the course materials if it was filling up.<p>I was mostly successful, but there were a couple times where I was told I simply could not take the class because I didn’t take the prerequisite. As a lifelong computer nerd and capable programmer, I could have sat the exam for the prerequisite classes without preparation and passed, but they did not allow this.<p>If there are open spots in the classes after all the CS majors signed up for it, then why not just let anyone take it if they’re up for the challenge? You can warn them about the prerequisite knowledge, so if they fail it’s completely on them.
Is this about Design by contract? [0]
But why do they force students to use an imperative language?<p>[0] <a href="https://en.wikipedia.org/wiki/Design_by_contract" rel="nofollow noreferrer">https://en.wikipedia.org/wiki/Design_by_contract</a>