- Tuesday & Thursday 3:30 - 4:45 PM
- Commons Room 310
Introduction to several major high-level programming languages and their characteristics. Programming projects are required in at least three languages.
Dr. Michelle Strout, GS 707, mstrout@cs.arizona.edu
- Phyllis Spence, pspence1234@arizona.edu
- CJ Chen, schen9@arizona.edu
- Dr. Strout office hours will be held after class in GS 707 until 6pm on Tuesdays and Thursdays.
- TA office hours will be held in GS, Phyllis Tuesdays 1:30-2:30 pm in GS931
- The office hours schedule will be posted on Piazza.
- Our scheduled office hours have an open door policy, which means you do not have to make an appointment. If you need to meet with any of us at an unscheduled time, you can email to set up an appointment.
There will be lectures, as well as in-class discussions and activities. This class also requires group work, so you should expect to work with other students both inside and outside of class. There is lots of programming, so bring your laptops regularly. Also, there will be some in-class activities that are handwritten, so bring something to write with.
This course will cover
- evaluation and comparison of programming languages
- programming language design
- functional programming using SML
- logical programming using Prolog
- parallel programming using Chapel
By the end of this class, students should be able to
- describe various programming languages with appropriate vocabulary
- compare different languages and paradigms in the context of real-world problems
- compare different kinds of type systems
- write programs in at least three different languages, including SML, Prolog, and Chapel
- complete a major team project
- write a lexer and recursive descent parser for a simple language
- use AI generation tools for comparing and contrasting programming languages
Note: This is a tentative schedule and may change as necessary.
| Week 1: 1/15-1/17 (No class 1/14, First class is Thursday 1/16) | |||
|---|---|---|---|
| Topics | Reading/Watching | Released | Due |
| Introduction | - Comparing How PLs are Used - Spaced repetition - Dr. Ray Toal on Why Study PLs |
SA #1 (W) | |
| Week 2: 1/20-1/24 (Note: Monday 1/20 is MLK day, class both Tues & Thurs) | |||
| Topics | Reading/Watching | Released | Due |
| SML Types |
- Chapter 1 of "ML for the Working Programmer" - Dr. Ray Toal on Types |
SA #2 (W) | SA #1 (W) |
| Week 3: 1/27-1/31 | |||
| Topics | Reading/Watching | Released | Due |
| Syntax and Semantics Lexing and Parsing SML |
- Video about web dev related languages and language levels - SA2-SML writeup and readings it links to |
LA #1 (F) | SA #2 (W) |
| Week 4: 2/3-2/7 | |||
| Topics | Reading/Watching | Released | Due |
| Recursive descent parsing Polymorphism and High-order functions SML |
- Predictive Parsing - Functions, mutual recursion, call by value, etc. pdf pages 22-42, polymorphic types pdf pages 47-51 - pdf pgs 1-21, functions and high-order functions - Skim this about lambda functions |
SA #3 (W), MT1 review | |
| Week 5: 2/10-2/14 | |||
| Topics | Reading/Watching | Released | Due |
| Scope and SML Visiting speaker and MT1 review |
- Scope in Java (1.5min) - Scope in Python (10min) -Fortnite programming with Verse - Verse PL Overview - Podcast interview: Exploring Verse, language design, and teaching with Simon Peyton Jones |
LA #1 (F) | |
| Week 6: 2/17-2/21 | |||
| Topics | Reading/Watching | Released | Due |
| Midterm 1 (MT1) Prolog Intro |
Prolog Introduction (Hands On) | SA #4 (W) | |
| Week 7: 2/24-2/28 | |||
| Topics | Reading/Watching | Released | Due |
| Type Inference Prolog |
Last 3 pages about Type inference, A Taste of Prolog(video), Seven Languages in 7 Weeks: Prolog(video), Production Prolog (video) |
LA #2 (Sat) | SA #4 (W) |
| Week 8: 3/3-3/7 | |||
| Topics | Reading/Watching | Released | Due |
| Prolog for solving problems | Principles of Type Inference (start at 10 minute point), Stepping through a type inference example, Great set of prolog slides with examples, Some reference notes if you want more background and theory |
SA #5 (W) is MT2 review (in Gradescope) | |
| Spring Break: 3/8-3/16 | |||
| Week 9: 3/17-3/21 | |||
| Topics | Reading/Watching | Released | Due |
| Prolog wrapup and Comparing PLs Visiting Speaker: Joe Strout, creator of Miniscript |
Reread Dr. Ray Toal on Why Study PLs with a focus on Evaluation Criteria, Comparison of Programming languages, Some cool side-by-side comparisons, 3.5 page paper on Miniscript | FP and SA#6 (M) | SA #5 (W) is MT2 review, LA #2 (Sunday 3/23) |
| Week 10: 3/24-3/28 | |||
| Topics | Reading/Watching | Released | Due |
| Midterm 2 Chapel Overview I |
ChapelCon 2024 tutorial | ||
| Week 11: 3/31-4/4 | |||
| Topics | Reading/Watching | Released | Due |
| Chapel Overview II, Chapel Basics I |
Learn Chapel in Y Minutes, Part 1 basic language features links in this larger tutorial | SA #7 (F) | SA #6 FP intermediate (M 3/31) |
| Week 12: 4/7-4/11 | |||
| Topics | Reading/Watching | Released | Due |
| Chapel Basics II, Parallelism and Chapel |
TBD | LA #3 (F) | SA #7 (F) |
| Week 13: 4/14-4/18 | |||
| Topics | Reading/Watching | Released | Due |
| Chapel large assignment, Classes & Memory Safety |
LA3 writeup, Blog post about memory safety |
||
| Week 14: 4/21-4/25 | |||
| Topics | Reading/Watching | Released | Due |
| More parallelism and performance, Guest Speaker |
TBD | LA #3 (F) | |
| Week 15: 4/28-5/2 | |||
| Topics | Reading/Watching | Released | Due |
| Iterators and generators, Outro: language comparisons |
TBD | SA #8 (T) is Final Review | FP (F 5/2)* |
| Week 16: 5/5-5/11 (Last day of classes: 5/7) | |||
| Topics | Reading/Watching | Released | Due |
| Final Exam Review on 5/6 No class on 5/8 |
SA #8 (T) is Final Review | ||
| Final Exams: 5/9-5/15 | Our final exam: 5/14, 3:30-5:30 PM |
*This is the final due date, but there will likely be intermediary deadlines for various tasks as well.
If you register late for the course, you are encouraged to work through the material that you missed, but none of the work can be submitted for a grade past the original deadline.
There will be various ways that communication will take place in this course, and it is important that you keep track of all of them.
- The Syllabus: You are expected to be familiar with the policies in the syllabus. If you have a question about the course expectations and policies, this is the first place you should look for an answer. The syllabus will be available on Piazza and D2L.
- Lectures: Sometimes things are announced in class, so if you are not present in class, make sure you check with another student to find out what you missed.
- Email: If we need to contact you individually, we will do so through your UA email, so make sure you check that regularly.
- D2L: Announcements may be made on D2L, so make sure you check that page regularly. I recommend checking both the announcements and the calendar on a daily basis (at least during the week). You can also keep up with your grades on D2L. You can also set up D2L to send you notifications when things are posted.
- Piazza: Announcements may be made on Piazza, and links to all of the course slides will be posted on Piazza. Piazza is the main webpage for this course. The primary use of Piazza will be for questions and discussions about course content.
- Please do not use Piazza to ask about grades or request a regrade. Instead send a direct email to Dr. Strout and the TAs.
- Make sure you add yourself and check regularly for announcements. Add yourself to the course by using this link: https://piazza.com/arizona/spring2025/csc372
- Note that although you can post anonymously to other students, none of your posts will be anonymous to your instructor or the TAs.
- Gradescope: This is where most assignments will be submitted and graded, which means it is the first place those grades will be released.
- GitHub Classroom: You will be expected to develop your programs using GitHub, where there will be some preliminary testing provided. Program assignments will then be submitted to Gradescope.
- Docker Desktop: A docker container with installations for all three programming environments will be provided. Using the docker container is optional, and you are welcome to install the development environments some other way. The instructor and the TAs will only help people with issues involved in using the docker container, the autochecking that happens in GitHub, or the autograding that happens in Gradescope.
Will be provided as links on syllabus.md in GitHub.
- Device to program with, probably a laptop
- Access to the Internet and a GitHub account
- Able to install Docker desktop on device you are programming with
There will be two midterms and a final exam. See the schedule for the dates.
- Midterm 1 is worth 100 points. Midterm 2 and the Final are worth 200 points each.
- If your final exam score is better than your second midterm score, I will replace the second midterm score with the final exam score.
- Make-ups will not be given unless you provide a Dean’s excuse or a letter from the Dean of Students office indicating an emergency situation.
- Exams are cumulative.
- For each exam, you can have a two-sided, 8.5x11 inch study guide that you will need to turn in with your exam. If you place your full name on the study guide, then it will be handed back after the exam has been graded.
There will be 8 small assignments, each worth 15 points. The total points you earn for all of the small assignments will be capped at 100 to provide some flexibility. These assignments can basically be of any type (writing, reading, coding, learning how to use various tools, etc.), so you will have to read and follow all the instructions carefully.
- These assignments will be released on Wednesday (or earlier) and will be due the following Wednesday by 11:59 PM. See the schedule for details.
- These assignments will not be accepted late, and there will be no make-ups.
- If you provide a Dean’s Excuse or a letter from the Dean of Students office indicating an emergency situation that stopped you from being able to complete the work, an assignment may be excused.
- These are larger assignments for which you have about 2 weeks. They are primarily programming assignments, but they may have other components as well. Each one is worth 40 points. (There are three – one for SML, one for Prolog, and one for Chapel.) The total points you can earn for all of the large assignment combined will be capped at 100 points to provide some flexibility.
- These assignments will not be accepted late.
- You must follow all the submission guidelines given in the spec. Improperly submitted assignments will not be accepted.
- Once the grades are released, you will have 72 hours to fix any issues and resubmit. Only one resubmission is allowed, and it will result in an automatic 20-point deduction. For your resubmission to be graded, you must email your instructor and TAs to let us know you have resubmitted. This must be done within the 72-hour timeframe or it will not be accepted. Furthermore, a resubmission implies that you actually submitted it the first time. We will not accept a resubmission if you did not submit it the first time by the appropriate deadline.
- These assignments are released on Fridays and due two weeks later (on Friday) at 11:59 PM. See the schedule for details.
- Extensions are only given in valid situations that are indicated by Dean’s Excuses or a letter from the Dean of Students office indicating an emergency situation.
Often there will be assignments and/or quizzes during class. These are generally unannounced, and the style and points will vary. Some will be individual, some in groups; some will be closed-note quizzes, some open-note; some will be coding, some hand-written, etc. There will be at least 120 points in this category, and your points toward the final grade will be capped at 100, so there is some flexibility. These assignments can cover anything from the course, but will often cover material from the most recent classes (including the stuff from the same day) and material from recent assignments. These assignments cannot be made up. If you provide a Dean’s Excuse or a letter from the Dean of Students office indicating an emergency situation that stopped you from being able to complete the work, an assignment may be excused.
Note that the first of these assignments will be given on the first day of class and will be graded for completion as it is a pre-assessment to see what everyone knows coming into the course. Since I do not want to assume you know something that you do not already know, nor do we want to spend too much time going over things you already know, it is in everyone’s best interest for you to answer the questions in a way that reflects your knowledge. The second of these assignments is another quiz on the second day of class and will ask you questions about the syllabus.
The final project is a group project and will include both a programming aspect and a presentation aspect (but not in class). Details will be provided later. The final deadline for this is given in the calendar, but there will likely be smaller deadlines leading up to that as well. If you miss those intermediary deadlines, you will not get credit for that part of the project. For the final deadline, each day late will result in a 70-point deduction (so there’s really no point turning it in more than 2 days late.) This project is due at 11:59 PM and must be submitted according to the instructions given in the spec.
- These opportunities can be done as many times as you would like:
- (4 points) Provide a substantive answer to another student’s question on piazza before the instructor or TAs answers that question.
- (4 points) Provide a unique and relevant question and answer for use in electronic flashcards, quizzes, and/or exams. Email to both TAs and the instructor for evaluation.
- (4 points) On a submitted assignment, list a source relevant to the material that the instructor has not seen before that would be useful for the rest of the class.
- (4 points) Create a study guide/cheat sheet for a graded quiz or exam.
- (2 points) Document and send an error from the course materials to the instructor. Note you have to email the documented error BEFORE the error has been fixed.
- (2 points) Document an error produced by an LLM or AI generator with a screenshot and an explanation about why it is an error. The error must be related to the course material.
- Only one of the below options can be done. And it can only be done once for extra credit.
- (20 points) Before MT1, show Dr. Strout a draft of your code portfolio for job interviews during office hours, or a virtual meeting, and discuss for 10 minutes.
- (10 points) Before MT2, show Dr. Strout a draft of your code portfolio for job interviews during office hours, or a virtual meeting, and discuss for 10 minutes.
- (4 points) Before Reading Day, show Dr. Strout a draft of your code portfolio for job interviews during office hours, or a virtual meeting, and discuss for 10 minutes.
Our final exam is on Wednesday, May 14, 2025 from 3:30 - 5:30 PM in our regular classroom.
Final Exam Regulations and Final Exam Schedule: https://registrar.arizona.edu/faculty-staff-resources/room-class-scheduling/schedule-classes/final-exams
Your grade will be calculated based on how many points you earn (out of 1000), so every point in the class is equally weighted. A summary of the point distribution is below.
| Category/Assignment | Points |
|---|---|
| Small Assignments (SA) | 100 |
| Large Assignments (LA) | 100 |
| In-class Assignments/Quizzes (ICA/Q) | 100 |
| Final Project (FP) | 200 |
| Midterm (MT1) | 100 |
| Midterm (MT2) | 200 |
| Final (F) | 200 |
To pass this course (receive a D or higher), you must earn at least 360/600 (60%) of the in class points (ICA/Q, MT1, MT2, and F). Assuming that has been achieved, then your overall course grade will be assigned as follows based on the number of total points in the course:
| Points | Grade |
|---|---|
| 900+ | A |
| 800-899 | B |
| 700-799 | C |
| 600-699 | D |
| 0-599 | E |
University policy regarding grades and grading systems is available at https://catalog.arizona.edu/policy/courses-credit/grading/grading-system
Requests for incomplete (I) or withdrawal (W) must be made in accordance with University policies, which are available at https://catalog.arizona.edu/policy/courses-credit/grading/grading-system.
- Regrade requests and grade disputes must be handled within 72 hours of the grade being released or by a specific deadline posted in a D2L announcement or Gradescope email.
- You must also follow the instructions for how to handle regrade requests, which will be given when the grades for an assignment are released.
- The specific guidelines may vary depending on the assignments, so make sure you read the announcements and/or Gradescope emails when the grades are released.
Students wishing to contract this course for Honors Credit should e-mail me to set up an appointment to discuss the terms of the contract and to sign the Honors Course Contract Request Form. The form is available at http://www.honors.arizona.edu/honors-contracts
To foster a positive learning environment, students and instructors have a shared responsibility. We want a safe, welcoming, and inclusive environment where all of us feel comfortable with each other and where we can challenge ourselves to succeed and learn from our mistakes. To that end, our focus is on the tasks at hand and not on extraneous activities (e.g., texting, chatting, reading a newspaper, making phone calls, web surfing, etc.).
Students are asked to refrain from disruptive conversations with people sitting around them during lecture. Students observed engaging in disruptive activity will be asked to cease this behavior. Those who continue to disrupt the class will be asked to leave lecture or discussion and may be reported to the Dean of Students.
For a list of emergency procedures for all types of incidents, please visit the website of the Critical Incident Response Team (CIRT): https://cirt.arizona.edu/case-emergency/overview
Also watch the video available at
Links to the following UA policies are provided here: https://catalog.arizona.edu/syllabus-policies
- Absence and Class Participation Policies
- Threatening Behavior Policy
- Accessibility and Accommodations Policy
- Code of Academic Integrity
- Nondiscrimination and Anti-Harassment Policy
Links to the following departmental syllabus policies and resources are provided here, https://www.cs.arizona.edu/cs-course-syllabus-policies:
- Department Code of Conduct
- Class Recordings
- Illnesses and Emergencies
- Obtaining Help
- Preferred Names and Pronouns
- Confidentiality of Student Records
- Additional Resources
- Land Acknowledgement Statement
I am assuming that your goal is to learn the material in this class. My goal is to enable you to learn as much as possible. It is also my responsibility to evaluate the extent to which you are learning the material and recognize that through assigning grades. Note that you must earn at least 60% of the in-class points (quizzes and exams) to pass this course.
If you are unwilling to meet the expectations and guidelines below, then please drop the course quickly as the waitlist is full. Any violations of the academic integrity policy in this course will result in a report to the Dean of Students office with a likely recommended sanction of a failing grade in the course.
- Students are expected to turn in individual assignments that reflect their own understanding of the material.
- Students are expected to contribute to class discussions and group assignments with kindness and respect.
- Students are expected to interact with instructional staff with kindness and respect.
- Instructional staff are expected to interact with students with kindness and respect.
- Students are expected to behave in ways that enhance learning.
- Out-of-class assignments: small assignments (SAs), large assignments (LAs), and group project
- You can discuss and work with anyone and anything on these assignments. This includes anyone in the class, people not in the class, and AI generators and LLMs.
- Follow all instructions on assignments.
- List sources and collaborators on your assignments.
- Out of class assignments are only worth 40% of your final grade. This means you have plenty of room to make mistakes, learn, and get some feedback on these assignments. Therefore, I strongly recommend you do them mostly yourself.
- I strongly recommend that you make sure you understand ALL of the concepts associated with these assignments. You will need a thorough understanding of these concepts and the concepts covered in class to pass the course, because in-class quizzes and exams account for more than half the course grade AND you must earn at least 360 of the 600 points in in-class activities, quizzes, and exams to pass this course. Here are some possible strategies to help you achieve the learning objectives for this course:
- Use a space repetition system like Anki (https://apps.ankiweb.net/) with all the concepts covered in class and in assignments and spend 10 minutes a day using that system to quiz yourself. Example deck questions will be provided and some of the assignments will have you create some to share with the class.
- Read through each assignment fully and note some of the concepts you think you will need to learn to complete the assignment. Then work through some online tutorials, examples, and documentation to learn the needed concepts. Then circle back to do the assignment.
- For all programming assignments, try to code a solution yourself first before asking a classmate, looking code up online, or using AI software. It is better for your learning to send your code into AI software to ask what the syntax issues are rather than having the AI generate code for you. Once you have written code that you think works, then I recommend you ask to see how your classmates have solved the problem and discuss similarities and differences.
- In class quizzes and exams (Q, MT1, MT2, and Final)
- These need to be done completely on your own. Keep your eyes on your own quiz or exam and study guide. Do not access the internet or any other person or AI to help you during quizzes and exams.
- All electronic devices such as watches, phones, laptops, etc. must be in a bag under your chair and turned off during the exam.
- You can have a 2-sided study guide/cheat sheet that you create available for all quizzes and exams. It can be handwritten or printed from a computer.
- Your study guide/cheat sheet should have your name on it clearly circled, because it needs to be turned in with each quiz or exam. Study guides will be returned the next class session. There will be opportunities to pick up your final exam study guide after grades have been released. In the past, I have asked for copies of some study guides to post in Piazza or on my wall as excellent examples and/or pieces of art.
- Guidelines for Group Assignments & Discussions including In Class Assignments (ICAs)
- For group assignments, every member of the group should be involved in every aspect of the assignment. That means that everyone needs to be involved in the programming, and you are allowed to share code and help each other debug.
- In group discussions, make sure everyone has a chance to participate.
- Admit when you don’t know something and be willing to learn from others.
- Give people time to think through a solution before jumping to sharing your thoughts.
- Deliver your components on time.
- Communicate with your teammates and participate fully.
- For projects, I recommend that as a group you establish specific expectations regarding
- how and how often you will communicate
- how and how often you will meet (e.g. in person or virtually)
- how you will divide up work (keeping in mind that everyone should be involved in all parts of the project)
- how you will share your work (e.g., GitHub)
- how you will format your code (i.e. expectations for style/documentation)
- any other group expectations you think are important
Information contained in the course syllabus, other than the grade and absence policy, may be subject to change with advance notice, as deemed appropriate by the instructor.