Pick a markdown and code style:

CSC 123 Course Syllabus

Dr. Chuck C. Liang

Class Location and Times: Tuesdays and Thursdays 4:20-5:45pm in Adams 208

Office Hours: Mondays and Tuesdays 1-2pm, Thursdays 11am-12pm or by email appointments. Office hours are both in-person in Adams 116 and Zoomed. Hours are subject to change: always check the Office Hours folder on blackboard for the lastet hours and zoom links.

Office Phone: (516 463) 5559

Email: chuck.c.liang@hofstra.edu

Information Specific to CSC123, Spring 2023

The class will be taught in-person and in the classroom. This class is being taught simultaneously with CSC252DL, the graduate, distance-learning version of this class, and because of this classes will be recorded and graduate students, and only graduate students, may attend the lectures via zoom. Otherwise, NO ZOOM IS AVAILABLE except for office hours. Class recordings will not, in general, be available. Undergraduate must attend classes in-person. In case you come under Covid protocols and cannot attend class, you must inform the university. The university will send me an email stating that you cannot attend classes in person. Only then will I make online course materials available to you on a case-by-case basis. All major exams must be taken in-person: even if you come under protocol, the exam must be made up when you're cleared to attend classes again.

Special Measures Against Cheating

Academic cheating was a huge problem with online and hybrid modes of teaching, and unfortunately some students have retained old habits even with in-person classes resuming. Individuals caught cheating will face disciplinary actions from the university. There will be no warning. Individuals posting course materials and solutions online may also face legal action for violating the university and the instructor’s copyrights. No course materials may be shared with others without consent from the instructor.


Course Description

A study of the semantics, specification and behavior of programming languages. The course will focus on various programming language paradigms including functional, imperative, object- oriented and aspect-oriented programming. Programming assignments using example languages from these paradigms will be required. Emphasis will be placed on learning languages such as Scheme, Perl, C#, ML, C++ and Rust. Other topics covered include language syntax, control structures, objects and functions.

Prerequisite: CSC 16, 17; CSC 14 and 24 strongly recommended

Recommended Text: "Programming Languages: Concepts and Constructs, 2nd Edition" by Ravi Sethi.

Tentative List of Topics

  1. Introduction and review of programming concepts:
  1. Mathematical Foundations: The Lambda Calculus

  2. Formal Models of Computation:

  3. Lazy versus Eager Evaluation: The Church-Rosser Theorem

  4. Dynamic versus Lexical Scoping

  5. Side-effects and State

  6. Object Orientation

  7. Types

    • the typed lambda calculus
    • Safe versus unsafe type systems
    • runtime versus static typing
    • various forms of polymorphism
    • principal types
    • inheritance
    • templates and generics
  8. Typed functional programming

  9. Zero Overhead Abstraction

  10. Approaches to Memory safety

  1. Aspect Oriented Programming.
  2. Advanced topics (if time allow)

Exams, Assignments and Grading

Assignments will be given regularly. There will be a midterm exam and a final. The final exam will be cumulative. Periodic quizzes, including one-on-one quizzes may also be given. The grade distribution will be roughly 70% exams and quizzes and 30% attendance, programming assignments and other homeworks. Grading will be curved but the exact curve can be modified by the instructor. Students are required to keep copies of all programming assignments throughout the semester. When working in a group, all group members must possess current versions of the assignment. Final Note: The contents of this syllabus may be modified depending on the progress of the course.