Course Syllabus

Some links in this syllabus page may only be accessible to currently enrolled students.

Course Introduction

This course is an examination of the constructs of programming languages, the four major programming paradigms, and several programming languages, including their application and underlying execution models. The paradigms examined in this course include imperative, object-oriented, functional, and logical. Students will gain exposure to and experience in a variety of languages, including Raku, Ruby, Racket, and Prolog. Other languages will be discussed in context in the explorations.

Download Syllabus

Course Content

  • Language and regular expressions
  • Imperative programming and history
  • Grammars, derivations, and parse trees
  • Abstract and concrete syntax
  • Operational, denotational, and axiomatic semantics
  • Variable naming and scope
  • Static and dynamic type systems
  • Expressions, assignment, selection, and iteration
  • Parameter passing schemes
  • Functional programming
  • Logic programming
  • Special topics
    • Garbage collection
    • Concurrency
    • Exception handling
    • Event handling

Learning Outcomes

ABET Evaluated CLOs:

  1. Produce an abstract syntax for a language given its concrete syntax. 

Additional CLOs:

  1. Create functional programs using algebraic data types and recursive functions.
  2. Produce and explain the type and result of an expression in the context of functional programming. 
  3. Create a denotational semantics for a language given its abstract syntax and an informal specification of its behavior. 
  4. Produce and explain the behavior of a program under static vs. dynamic typing, and discuss the benefits and drawbacks of each approach. 
  5. Produce and explain a program's output under different parameter passing schemes, such as call-by-value vs. call-by-name vs. call-by-need.
  6. Produce and explain a program's output under static vs. dynamic scoping of names. 
  7. Create logic programs and express queries using predicates. 

Course Structure

Schedule of Topics
Module Topic Explorations Chapter Lab Homework Quiz
1 Language Formal language; regexs; imperative programming 1, 2 Hw1 Q1
2 History History of languages; Raku language 2 Lab 1 Hw2 Q2
3 Grammar Backus-Naur form; parse trees; precedence; ambiguity 3 Hw3 Q3
4 Syntax & Semantics Syntax; semantics; variables; scope 3, 5 Lab 2 Hw4 Q4
5 Types Types; type systems; OOP; Ruby language 6,11,12 Hw5 Q5
6 Statements Expressions; assignment; selection; iteration 7, 8 Lab 3 Hw6 Q6
7 Functions Functions; function passing; call & return 9, 10 Hw7 Q7
8 Functional Programming Lambda calculus, functional languages; Racket language 15 Lab 4 Hw8 Q8
9 Logic Programming Predicate calculus; logic programming; Prolog language 16 Hw9 Q9
10 Special Topics Garbage collection; concurrency; exception handling 13, 14 Lab 5 Hw10 Q10

Course Structure

This section describes the structure of the course including an overview of the graded components. 


The homeworks are practice problems worth 30% of the total grade. There is a homework assignment associated with each module. These ten homeworks are given as Canvas quizzes. The homeworks serve as drills, intended to review and solidify the course content while preparing students for the end-of-module quiz. Each homework contains 10 questions. The types of questions include true/false, multiple-choice, multiple-answer, numeric answer, ordering, and matching. 

You may repeat each homework up to three times. Your highest score achieved will be retained. The questions change between attempts. Students are encouraged to use all three attempts to practice with the course topics.

Programming Labs

There are five programming assignments, worth 40% of the total grade. For each programming assignment, you are given a series of tests. Assessment of your programming assignment is based on your intelligent code formatting, informative code comments, and the number of tests you pass. Rubrics for the programming labs will be provided by the instructor in Canvas.

You are expected to use the Internet to seek out tutorials, documentation, and examples in order to learn these languages. There will be a lab exploring regular expressions (Raku) as well as a lab for each programming paradigm: imperative (Raku), object-oriented (Ruby), functional (Racket), and logical (Prolog).

Failure to submit two or more labs may result in an automatic failure of the course. 

Module Quizzes

The module quizzes are assessments worth 30% of the total grade. There is a quiz at the conclusion of each module. These ten quizzes are given as Canvas quizzes.  Each quiz contains 10 questions. The types of questions include true/false, multiple-choice, multiple answer, numeric answer, ordering, and matching. 

You may repeat each quiz up to two times. Your highest score achieved will be retained. The questions change between attempts. Students are encouraged to use both attempts. Quizzes are not proctored. 


There are no exams in this course.


Weights for Grading
Homeworks 30%
Module Quizzes 30%
Programming Labs 40%


Letter Grade Percentages
[93, 100] A [80, 83) B- [67, 70) D+
[90, 93) A- [77, 80) C+ [63, 67) D
[87, 90) B+ [73, 77) C [60, 63) D-
[83 - 87) B [70, 73) C- [0, 60) F


Late Work Policy

Requests for extensions are considered on a case-by-case basis. Non-emergency requests must be submitted via email at least 72 hours before the due time. (Not having enough time to get the assignment done does not, by itself, constitute an emergency, sorry!). If you don't know if you will need an extension but might, you should ask for one.

Time elapsed past the due date Penalty Applied(if no extension is granted)
T < 24 hours -10%
T < 48 hours -20%
T < 72 hours -30%
T >= 72 hours -100%

PLEASE NOTE: If you submit the incorrect files/assignment you WILL NOT be given a chance to resubmit (after they are graded) and will receive a 0 for the assignment. It is important that you download your submission after it uploads to verify that everything is as you expected. There will be no exceptions.

Course Policies

This section details the university policies pertaining to this course. 

Academic Integrity

For this class, it is encouraged for students to discuss course content with each other, even including general discussion of homework and programming assignments and how to fix specific issues. However, each person must develop her or his own individual solutions. In particular, a student may not copy (by any means) another's work (or portions of it) and represent it as her/his own. Plagiarism can result in drastic consequences for both the person who copied and the person who allowed them to copy. The normal penalty is a zero for the assignment and having the incident go on your official record. If you make your code available to others (for example in a public GitHub repository) and someone else copies it, both parties will be held responsible.

Student Conduct Code

This program strives to prepare students for careers in computer science, which includes preparing students to communicate professionally. Therefore, students in this class are expected to communicate in a professional manner in discussion forums, email messages, and all communications for this course. Critiques, disagreements, problems, or other topics of a sensitive nature can be addressed but should be addressed civilly and professionally. If a student's communications become unprofessional, disruptive, abusive, inflammatory, or if they otherwise obstruct the learning process of the class, the instructor may restrict the student from participating in the electronic forums associated with the class and notify Ecampus and the OSU Office of Student Conduct and Community Standards. Productive learning communities and workplaces depend on civil, professional discourse. It is our hope that this policy strengthens your learning community and prepares you for the professional workplace.

Students with Disabilities

Accommodations for students with disabilities are determined and approved by Disability Access Services (DAS). If you, as a student, believe you are eligible for accommodations but have not obtained approval please contact DAS immediately at 541-737-4098 or at  DAS notifies students and faculty members of approved academic accommodations and coordinates implementation of those accommodations. While not required, students and faculty members are encouraged to discuss details of the
implementation of individual accommodations.

Online Privacy

Posts to Canvas or Teams discussions are public messages, and all such posts will be viewable by the entire class. If you prefer that only the instructor sees your communication, use a private message or email. Posting of personal contact information is strictly at your own risk.

Technical Assistance

If you experience any errors or problems while in your online course, contact 24-7 Canvas Support through the Help link within Canvas. If you experience computer difficulties, need help downloading a browser or plug-in, or need assistance logging into a course, contact the IS Service Desk for assistance. You can call 541-737-8787 or visit the IS Service Desk online.

Where to Go For Help

Eric Ianni, Instructor

Communication Policy

  • Always use your OSU email to contact us.  The Canvas mailbox doesn't work very well. 
  • When you send me an email, you must include the tag "[CS 381]" in your email subject.

You should expect a response to emails within 48 hours. Emails sent over the weekend sometimes take longer to respond to.

Post all course-related questions on the Ed board so the whole class may benefit from our conversation.  Please sign up yourself on Ed. You can use the course Teams channel to ask questions as well.  

For grading questions, please post a private Ed message (this is viewable by me and the graders); do not email directly for grading questions.  To help with response time, please also tag your grading TA in the Ed thread using the @ symbol in the body of your question. You should expect your grade to be posted after one week after the due date.  If you submit the assignment late, it may take longer for your grade to be released.

The instructional team will be using the class mailing list extensively to communicate with you. We will also frequently post information on Ed. It is your responsibility to keep up-to-date with this communique, and they are considered part of the required learning material.

Getting Help

When you have a question about something, the order of steps you should take to pursue answers is roughly the following:

  1. Review the relevant materials (assignment description, readings, lectures).
  2. Search the class discussion board on Ed (it can take some practice to learn how to refine your searches well) to see if your question has been answered already.
  3. Post to the class discussion board on Ed (by doing #1 and #2 first, you might save yourself asking a question, and you might also then be better able to help others). When you post a question on Ed and it's answered there, that benefits other people who have the same question (if you're shy, you can post anonymously to your peers).
  4. If you've tried #1-3 and feel like your question hasn't been fully addressed, please email your assigned TA or me. Or attend one of the office hours.
  5. For questions about assignment grading, post a private post to Ed and try to tag your grading TA/ULA.
  6. For questions relating to course policies or administration, email your instructor directly.

You are allowed to post small snippets of non-working code, as discussed in the section on Academic Integrity. That also applies to answering other students’ questions - please use pseudocode or give hints so the student will have the satisfaction (and learning reinforcement) of figuring out the solution for themselves. When you are willing to help others on the discussion board and take pains to not make anyone feel like they asked a dumb question, you are reinforcing both your technical knowledge and your people skills, both of which are highly valued not just here, but out in the real world.

Technical Assistance

If you experience any errors or problems while in your online course, contact 24-7 Canvas Support through the Help link within Canvas. If you experience computer difficulties, need help downloading a browser or plug-in, or need assistance logging into a course, contact the IS Service Desk for assistance. You can call 541-737-8787 or visit the IS Service Desk online.

Reach Out for Success

University students encounter setbacks from time to time. If you encounter difficulties and need assistance, it’s important to reach out. Consider discussing the situation with an instructor or academic advisor. Learn about resources that assist with wellness and academic success at If you are in immediate crisis, please contact the Crisis Text Line by texting OREGON to 741-741 or call the National Suicide Prevention Lifeline at 1-800-273-TALK (8255).


This is a list of the tools and programming languages used in this course.


Canvas is the LMS (Learning Management System) that you are using right now to view this course. For questions about Canvas, check  this list of help topics  (Links to an external site.) .


There is a link to Ed in the left sidebar of Canvas. This ongoing Q&A forum is a valuable resource for getting official answers to your questions (and often helpful student responses also). It's good to use the search box before posting, to see if your question has already been addressed.


Microsoft Teams is a way for more informal interaction with your fellow students. You should be automatically added to the course channels.

Here's how we'll use the Class Teams:

  • #announcements
    We will use this for announcements about the course and reminders for office hours.
  • #random
    Random chat among course members (students and teachers)
  • #general
    Class-specific discussions, office hours, etc.


At the bottom of each programming, assignment page is a link to Gradescope, which will open in a new tab. On Gradescope you'll be able to click a link to submit your project. is the tool that was used to create the interactive code exercises in the lessons. The exercises are embedded in the lesson pages in Canvas, but you will need to be logged into in order to view them. You'll receive an invitation to join the "classroom" around the first day of class


H5P is the tool that was used to create the interactive Self-Check exercises in the lessons. These exercises are embedded in the lesson pages in Canvas. There are three Self-Check exercises in each in exploration.  

Programming Languages

You will need to download and install the following program languages to complete the programming assignments. Each assignment will provide you the link to download the language required. The complete list is given here.


The following textbook is required for students to explore the topics in more depth and to see more examples. 

Concepts of Programming Languages by Robert W. Sebesta

The most recent 12th edition is expensive and only available from the publisher as an electronic text. However, it is available as an electronic rental for about $25. For those seeking print editions, it is recommended that students find an older, used edition. Any of the following versions will suffice. 

Course Summary:

Date Details Due