CS 355 - Programming Languages - Fall 2024

Description

A programming language defines one particular way to give instructions to a computer. It is comprised of rules about how those instructions should be formed and what they mean. As with human languages, there is a great diversity of programming languages, and as with human languages, they have evolved over time, developing out of predecessors and borrowing features from contemporaries. We can study programming languages in terms of those relationships (giving us rough groupings of language types, sometimes called "paradigms") and the various common features each language may or may not contain. Each language, designed with particular choices from the huge range of possibilities, thus has its own strengths, weaknesses, and varying suitability to various tasks to which we might apply it.

In this class, we will study these aspects of programming languages. We will focus on a few specific languages as examples of broader classes and as particular implementations of language features; the details will be broadly generalizable to large numbers of other languages. We will study and practice writing programs with a few new languages and learn about certain features in the context of languages you have studied previously (Python and C++).

By the end of the class, you will:

For an idea of the specific topics covered in the course, see the rough schedule for the semester.

Other Pages

Semester schedule — tentative - see Canvas for up-to-date details.

Canvas — assignments, quizzes, announcements, and other online resources will be here.

CS Codex resources for CS355 — collected resources and readings for this course.

Details

When/Where:
MWF 2-2:50pm / CNS E204
Instructor: Mark Liffiton
Office: CNS C207B   (2nd floor CNS, in middle of building over atrium)
Office Hours:
  • Monday 1-2pm
  • Tuesday 10-10:40am
  • Wednesday 10-11am; 3-4pm
  • Thursday 10-10:40am
During my scheduled office hours, I will be in my office and possibly available on Discord (if I'm not with someone in person).
And generally, feel free to drop in any time if my door is open.
If your schedule prevents you from attending my set office hours or you would like to meet sooner than the next office hours you can attend, I will often be available on Discord, and I'm very happy to set up alternate meetings. Just ask at least a day in advance.
Contact (you→me): We will use Piazza for most course- and content-related questions. For anything specific to you, feel free to talk to me before or after class, meet me in office hours, stop by my office, catch me on Discord, or email (for email, please start the subject with "CS 355:").
Contact (me→you): I will post course announcements through Canvas, and they will be sent to your IWU email accounts. Check your IWU email frequently or have it forwarded to an address you do check.

Textbook

There is no required textbook. We will use a variety of freely-available online resources and others I provide. If you prefer physical books, talk to me for recommendations.

Grading

The final grade will be based roughly on the following breakdown:

Assignments15% 16%
Quizzes5%
Exam 010% 11%
Exam 120% 21%
Exam 225% 26%
Final Exam25% 26%

Exams

Exams will be held in class, on paper. The final is cumulative. Exam 0 is a lower-stakes exam intended to familiarize you with the style of the exams before they become higher stakes.

Quizzes

Quizzes will be held in class. There will be no makeups for missed quizzes, but the lowest quiz score will be dropped. I didn't find a good way to fit these into the class, so I've shifted the percentages as seen above to not include quizzes.

Assignments

Assignments will be posted on Canvas. You will use the Git version control system to store and manage your code for programming assignments. Effective use of Git will be one component of the rubric for grading such assignments. Each assignment will include specific submission instructions.

Late Policy

Assignments will be due at set times; they will be considered late at any point after that time. An assignment will lose 10% of the total possible points for every day or partial day it is late, and after five days it will not be accepted.

Assignments can't be accepted at all after solutions have been handed out or the graded work has been returned to the class.

Grace Tokens

Every student has two "grace tokens" that they may use for extensions in instances where they are unable to complete work by the assigned deadline. To use a grace token on an assignment, send me an email before the assignment deadline, explain why you need an extension, and we will determine an appropriate extension, which will be granted with no grade penalty. Some assignments may not be eligible for grace tokens due to immediate use of or feedback on the submitted work, but most will be.

Regrading

If you would like to request a regrade, submit a request to me in writing (via email) within one week of receiving the graded item. Indicate exactly which part you believe deserves a different score and why.

Office Hours

If any concept, piece of code, compiler error, or anything else related to this course is ever unclear to you, please come see me during my office hours. One-on-one, I can help you bridge the gap from what you do understand to what you want to understand. It will generally be the easiest, fastest way to clarify something.

If you cannot attend any of my regularly scheduled office hours, I'm more than happy to setup another time to meet. Just let me know.

And to make sure that misunderstandings and difficulties do not go unaddressed, I will often ask that anyone who receives a C- or below on any assignment or exam come see me to see what we can do about improving that going forward.

Working with Others; Using External Resources

In this course, collaborating with other students on assignments and using generative AI tools (like large language models) on assignments is allowed. I will lay out the reasoning for this in class. It is a bit of an experiment, however, and if it leads to poor outcomes for students at some point during the semester, I will change the policy then.

Important: Submitting any work done by someone or something else without clearly citing them as a source is still plagiarism. In every assignment, you must clearly and accurately state the type and scope of assistance you received and who / what you received it from.

Also important: Doing the work to complete assignments is how you learn a lot of the material in this class, and if you do not do that work yourself, you will not learn much. That will be reflected in your quiz and exam grades, in your ability to succeed in later courses, and in your knowledge and skills after graduation. You are responsible here for ensuring you do enough work to learn the material. Be mindful of that, and don't let yourself take shortcuts that skip the learning and harm you later.

Quizzes, exams, and anything that is explicitly stated to be individual work must be completed without collaborating with others, sharing or looking at solutions, or using generative AI.

For details on the university's policies regarding academic integrity, please read the University Policies Concerning Student Conduct & Academic Integrity. Academic misconduct can result in failing the course and a report to the associate provost. If you are ever unsure of whether something might be crossing that line, please err on the side of caution. You can also just ask me, and I'll be happy to provide guidance.

Accommodations

Illinois Wesleyan University strives to make all learning experiences as accessible as possible. If you anticipate or experience academic barriers based on a disability (including mental health and chronic or temporary medical conditions), it is your responsibility to self-disclose and provide documentation to the Office of Student Accessibility Services. Please note that accommodations are not retroactive and accommodations cannot be provided until I receive an email from Student Accessibility Services. Once the email is sent, please make arrangements with me as soon as possible to discuss your accommodations confidentially so they may be implemented in a timely fashion. For more information contact Student Accessibility Services by e-mailing accessibility@iwu.edu or stopping by their office in Holmes Hall.

Diversity

Our university's mission statement includes, "The University through our policies, programs and practices is committed to diversity [...]" Our school and this course are made stronger by the mix of people that come into it bringing a diversity of ideas, experiences, and backgrounds. I expect everyone in this course — instructor, TA, and student — to contribute to an inclusive atmosphere that respects the diversity of all others in it. Dimensions of diversity can include sex, race, age, national origin, ethnicity, gender identity and expression, intellectual and physical ability, sexual orientation, income, faith and non-faith perspectives, socio-economic class, political ideology, education, primary language, family status, military experience, cognitive style, and communication style. The individual intersection of these experiences and characteristics must be valued in our community. If you have related concerns about the class environment or behavior of any in it (including me), you are welcome to raise them with me, and I will do my best to address them. If you are not comfortable speaking with me about them, you may also bring concerns to the Associate Provost or the Office of Diversity and Inclusion.

End-of-Syllabus Advice

Play around. Studying programming languages is like exploring a tool library. Different options are all around you, some familiar, some novel. There are many more than you have experience with, but each one was designed and created for some purpose. You can figure a few things out by looking at each one, or maybe reading a bit about it, but you won't really understand how they work unless you try them out and put them through their paces. So play around with them. Write small programs to see how they work. Run head-first into compiler and runtime errors, then reason about what those errors are telling you. See if you can use some new language feature to write more elegant or compact code than you would have before you knew about it. Make lots of little experiments. Try to have fun with it!

page last updated Oct 09, 2024