About this course

Welcome to A596/B521/C311/H311! The official course description:

Systematic approach to programming languages. Relationships among languages, properties and features of languages, and the computer environment necessary to use languages. Lecture and laboratory.

As a future professional computer scientist, you should be comfortable with all programming languages, even those that haven't been invented yet. The way to do this is to understand the principles of programming languages. That is the goal of this course. Although we use the Scheme language as our medium for learning, the concepts covered in the course apply to programming languages in general.

We will study the principles of programming languages from an operational perspective – that is, by writing working programs. (Not only is this approach effective, we believe it's also a lot of fun! But you don't have to take our word for it – see the testimonials page.) The weekly programming assignments are therefore an essential part of the course. Assignments will be posted on Friday evening, and are due at 11:59 p.m. the following Thursday unless otherwise stated.

This course typically has a waitlist. If you are on the waitlist, please consider attending anyway. Though we can't make any *promises* we have yet to be unable to accommodate a student on the waitlist. If you want into the course, we will make every effort to get you in.

About learning Racket

Racket can be installed from here. This installation includes the Racket compiler and REPL that you could use on the command line. It also includes a graphical text editor/IDE called DrRacket which is the main way in which we will be interacting with Racket during the course. This webpage includes a few resources that would help you get familiarized with the Racket language. Not knowing about the Racket language before taking this course should not be an issue since we will teach you the Racket features relevant to the course as and when we come across them. If you encounter any Racket function/macro in the assignments or lecture notes that you are unfamiliar with, then you could search for that function on the Racket documentation website. Finally, if any of these resources are unable to help you, then you could contact the instructors during office hours.

C311/H311/A596 lecture and lab schedule

  • Lecture (with Dan Friedman & co.): Tuesday & Thursday, 1:15 PM–2:30 PM, Luddy Hall (Informatics) (IF) 1104
  • Lab (Section 1): Friday, 9:10 AM–10:00 AM, Myles Brand Hall (I) 107
  • Lab (Section 2): Friday, 10:20 AM–11:10 AM, Ballantine Hall (BH) 314

B521 lecture schedule

  • Lecture (with Dan Friedman & co.): Tuesday & Thursday, 11:30 AM–12:45 PM, Myles Brand Hall (I) 105

Supplementary Course materials

See the Key page for links to essential software and reference materials. There is no required textbook for this course. The best reading material for the course will be the notes you take yourself, plus the occasional handout during lecture. If you prefer to supplement your learning with the printed page, though, here are a few good resources. We have selected sections of these books as additional resources where useful during the semester.

  • Essentials of Programming Languages, third edition, Daniel P. Friedman and Mitchell Wand, MIT Press, 2008.
  • Scheme and the Art of Programming, George Springer and Daniel P. Friedman, The McGraw-Hill Companies, 1999.

Ancillary Resources

For those hungry for even more, you might consider some of the following:

  • The Scheme Programming Language, Fourth Edition, R. Kent Dybvig, MIT Press, 2009. Available online.
  • The Little Schemer, fourth edition, Daniel P. Friedman and Matthias Felleisen, MIT Press, 1995.
  • The Seasoned Schemer, Daniel P. Friedman and Matthias Felleisen, MIT Press, 1996.
  • The Reasoned Schemer, Second Edition, Daniel P. Friedman, William E. Byrd, Oleg Kiselyov, and Jason Hemann, MIT Press, 2018.

Course policies

Please read the course policies carefully, and contact an instructor if you're unsure about their content.

COVID policy

All students signed the Community Responsibility Acknowledgement (CRA). Your agreement to the public health measures in the CRA is a condition of physical presence on the campus this fall. Included in that commitment were requirements for wearing masks in all IU buildings and maintaining social distancing in all IU buildings. Both are classroom requirements.

Both requirements are necessary for us to protect each other.

Therefore, if a student is present in a class without a mask, the student will be asked to put on a mask and I will report the student to the Division of Student Affairs: Office of Student Conduct.

  • If a student refuses to put a mask on after being instructed to do so, the instructor may end the class immediately, and contact the Office of Student Conduct. Violation of the mask rule is a threat to public safety within the meaning of the Summary Suspension Policy.
  • If a student comes to class without a mask twice, the student’s final grade will be reduced by one letter (e.g., from an A to a B, for instance).
  • If the student comes to class without a mask three times, the student will be withdrawn from the class without refund of tuition and reported to the Office of Student Conduct.
  • If Student Conduct receives three cumulative reports from any combination of instructors or staff members that a student is not complying with the requirements of masking and physical distancing, the student will be summarily suspended from the university for the semester.
  • When class is over, students must continue to wear a mask until they have left the building, not as soon as they leave the classroom.

home.txt · Last modified: 2022/08/26 11:02 by darshal