We completed Scheme in the first and first-half of the second semester. It was not until we actually got down to working with C that I began to realize the power of Scheme. As to your question, why Scheme is chosen: the answer is that it is one of the simplest languages out there and it allows you to do alot (especially when we start playing with lazy lists later on). Moreover : 1. For people who have no programming experience, it is easier to learn. There aren't many technical details and just a few special forms. 2. It allows for higher level abstraction. A good course can focus on teaching programmers how to think instead of focusing on the technical details which allows students to become better programmers. 3. The lists are amazing. There is so much that you can do with them. Car and cdr prove to be powerful tools and it is only when you start working with pointers that you realize that Scheme was amazing at handling lists.