Course Description:

Over the years, numerous programming languages have been designed to encode algorithms and control what computers do. Languages evolved along more or less distinct paths that were addressing different programming needs. There are numerous languages in existence today that can be categorized into several not-necessarily exclusive groups: imperative, structural, object-oriented, functional, logic, scripting, and some other. Being able to select a right language for a programming job at hand is a necessary skill that a computer scientist needs to posses. Understanding how the programmers directives encoded using a programming language are projected onto computer activity is critical in developing robust and efficient code.

In this course, students will study the design, implementation, and use of high-level programming languages. The topics will include the historical background, how languages reflect different design philosophies and user requirements, technical issues in the design of major imperative (procedural) programming languages, other approaches to programming such as functional programming, logic programming, and object-oriented programming.

Student outcomes:

After successfully completing this course, students will be able to:

  • program in several languages representing a variety of programming paradigms,
  • recognize features distinguishing programming languages,
  • select a programming language for a specific task,
  • create XML-based data content,
  • define a new markup language using XML Schema,
  • parse XML content with SAX and DOM parsers using libxml2 library,
  • define a new programming language with variables, types, scopes, and procedures, using BNF (Backus-Naur Form) notation,
  • implement programming language compiler including:
    • a scanner,
    • a parser,
    • a symbol table,
    • a generator of decorated abstract syntax tree (intermediate code),
    • a scoping system,
    • a typing system,
    • a procedure invocation mechanism,
  • implement a virtual machine for executing compiled programs (intermediate code),
  • master programming in C with standard C libraries and a number of specialized libraries,
  • use compiler generating tools flex (lex) and bison (yacc), and
  • organize and express ideas concerning programming languages clearly and convincingly in oral and written forms.

Tentative Outline

  • Why to Study Programming Languages?
  • Specifying a Language.
  • Introduction to Compiling.
  • Scanning.
  • Parsing.
  • Semantic Analysis.
  • Flow Control.
  • Names, Scopes, and Bindings.
  • Data Types and Type Checking.
  • Subroutines and Control Abstractions.
  • Functional Languages: Case Study of Scheme.
  • Logic Languages: Case Study of Prolog.
  • Scripting Languages: Case Study of Bash.
  • Scientific Languages: Case Study of Python with Jupyter Notebook, SciPy, NumPy, and Matplotlib.


Effective programming skills are assumed in this class. Formally, students should have passed the following courses with a minimum of “C-” (i.e., the lowest passing grade for all core Computer Science courses):

  • COMP151
  • COMP162

Students who do not satisfy the prerequisite requirements will have to withdraw from the course.

Instructor: AJ Bieszczad

Office: Sierra Hall Laboratories 3315
Phone: (805) 437-2773
Office hours: Mondays, Thursdays 12:00 – 1:00 pm

Office hours are not class replacements! Please come with questions written down on paper, so we can communicate efficiently. You should be able to explain how you have tried to answer the question and why you have problems.

Teaching Assistant for Labs: Kevin Scrivnor

Office: Bell Tower West 1205
Phone: TBD
Office hours: TBD

Communication Policy:

The instructors will respond to your inquiry within 24 hours except weekends (5 pm on Friday and 8 am on Monday) and holidays. If we do not reply in this timeframe, please assume that we did not receive your email and contact us again.

Please manage the communication diligently.

Recommended Textbook:

Title: Programming Language Pragmatics, 4rd Edition
Author: Michael L. Scott
Publisher: Morgan Kaufmann Press, 2015
ISBN: 978-0124104099

Instructional Approach:

This is a balanced course that will keep students involved throughout the semester through theoretical studies and and intense programming hands-on assignments.

A self-study study set will be assigned each week along the lecture notes, so the students can reinforce the theoretical knowledge from the lectures. Self-study assignments are not graded, but to be admitted to the following quiz the student must complete the corresponding self-study set and formally submit the answers. The quizzes will consist exclusively of random questions from the self-study sets.

Labs are hands-on exercises in which students will be solving a number of programming tasks each week. Most of the labs have extensive instructions that must be followed closely. Any arising questions will be answered on the whiteboard as much as practically possible, so that the whole class rather than just the individual student asking the question may learn. Students will work on the assignments independently and submit answers individually, but they may discuss solutions to the problems with their direct neighbors. Copying any portion of the code is strictly prohibited however.

Programming tasks will usually take longer to finish than the time allocated in the labs, but the students are required to submit a snapshot of their work at the end of each in-class lab before leaving the lab. A snapshot is a regular submission and should follow the submission standards. Students will be able to submit multiple times. Violating the snapshot submission requirement will result in zero points for the whole lab segment.

Unless stated differently in the calendar, each homework (self-study) is due by the start of the following lab meeting, and each lab submission is due by the following lecture. The submission facility for a given task will not be visible after the deadline for that task. The deadlines will be strictly enforced; i.e., no extensions will be given for any but formally-verified medical reasons.

There will be a final exam that will consist exclusively of a selection of questions from the study sets. The date of the exam is available in the CSUCI Schedule ( and in the course calendar.


In the lab portion of the course, students must use Mac computers running Mac OS X in the Computer Science Mac Lab. Similarly configured Mac OS X is deployed on a number of selected Macs in the Broome Library 1330.

The course will take a pragmatic approach to UNIX development; that is, command line tools will be used ( All needed command-line tools (like the compiler, debugger, etc.) will be briefly introduced in the initial lab meetings.

A comprehensive IDE (Integrated Development Environment) tool called Xcode ( is installed on all Macs in the lab. Xcode has a good editor that can be used as a stand-alone editor. It has many nice features like syntax coloring and source formatting, so students are encouraged to use it.

There are numerous other text editors available on UNIX platforms.

The labs should be compatible with any POSIX-compliant Unix such as Linux Ubuntu ( or Cygwin (, so such systems can be used at home. However, the instructor will provide support only for Mac OS X running on the lab computers. There are a number of options to install Ubuntu as explained in Some students install Ubuntu on VirtualBox as explained in The instructions on how to install a development environment on Ubuntu are given in

Lab submission standards:

  • Students must follow submission standards described in the Labs section of the course. Violating that principle will imply penalties.
  • Labs that do not have a snapshot submitted at the end of the lab meeting will not be graded and the student will get “F” from the whole lab segment. Attendance will be taken to verify that the snapshot was taken in the classroom and submitted from the classroom. Any discrepancy will be considered a violation of academic code and will invalidate the submission.
  • The most recent lab submission made before the deadline will be graded. The last submission may be done from home. The instructor reserves the right to assign a grade that is consistent with the student activity and progress observed in the classroom.
  • Programs that do not compile will not be graded and the student will get zero points.
  • Parts of the submitted code that are commented out will be ignored.
  • Submissions missing session scripts that show compilation and test runs, as well as submission with missing test results (such as input and output files) will be rejected and the student will get zero points.
  • Files that are not signed by the submitter (as explained in the lab rules) will be rejected and the student will get zero points.
  • Programs that are not well-formatted will imply a 10% penalty.

Testing (quiz and final) standards:

  • All testing is done online through Blackboard either from the classroom or from the disability accommodation center.
  • Students must use university computers.
  • All tests and exams are closed-book. Students are not allowed to use any sources other than their own brains.
  • Only a browser with one window and no more than one tab is allowed. The Mac OS X Spotlight (a magnifying glass icon in the upper right corner of the screen) can be used for any necessary calculations.
  • Only plain text should be used in the submissions. Anything illegible (e.g., severely misformatted) will not be graded. Unfortunately, Blackboard often reformats submissions, so please make sure that it gets through correctly.
  • The tests and the exam are timed; they close and submit automatically on the deadline. No extensions will be given.
  • Activity monitoring software will be used to monitor student activities. Any material collected in that way will be used only for the purpose of proper course management including grade assignment and any appeals.
  • There will be no restroom or any other breaks.

Any violation of these rules, or any other rules of the academic code, will result in automatic “F” and the offenders will be reported to the Judicial Affairs. If multiple individuals are involved in the violation (e.g., two students submit same, or in the judgement of the instructor very similar, work), then all will be sanctioned.


The grades are a reflection of the efforts put by the student to fullfill the credit requirements of the course. All grades are computed automatically by the grading system in Blackboard.

There will be one course grade for both COMP232 and COMP232-L. The final grade will be calculated as the weighted average of the student’s average grades from the quizzes, the lab assignments, the project, and the final exam using the following weight distribution:

Theory: 50%
25% – Quizzes (distributed evenly over all)
25% – Final Theory Exam

Practice: 50%
25% – Labs (distributed evenly over all)
25% – Project

The following is a grade letter scheme used in this course:

Grade Letter

>= 96% – A+
>= 88% – A
>= 80% – A-
>= 72% – B+
>= 64% – B
>= 56% – B-
>= 48% – C+
>= 40% – C
>= 32% – C-
>= 24% – D+
>= 16% – D
>=  8% – D-
<   8% – F


  • To be admitted to final exams, a student must have accumulative averages of C- or better from both the quizzes and from the labs and projects.
  • The instructor reserves the right to adjust any grade of any student in response to in-class participation as well as any forthcoming vital information.

Class Attendance

Class attendance is mandatory. A student missing a class seating must submit a reasonable and formal document that proves that indeed the student was not able to attend the class. Any undocumented absence from a lecture or a lab will result in zero points allocated for the corresponding test or lab assignment.

If a student is justifiably absent from a class seating, it is the student’s responsibility to study the material presented in the class on her or his own and to check on any announcements made while the students was absent. Should a student justifiably miss a lab session, the student must complete the lab assignments on her or his own and submit it by the due date.

Early Assessment Provisions

Blackboard assessment facility will be used to provide students that fall behind in a number of areas such as grades, course activity, attendance, etc., with an early warning notification about their unsatisfactory progress in the course. An accompanying letter will explain the actions that the underperforming student needs to undertake to succeed in the course. The student will also have an option to withdraw from the course.

Restrictions on Lab Activities

  • The use of the lab resources including time is restricted to the activities directly related to the lab. Any other use is not allowed.
  • No solid or liquid food is allowed in the lab. If you need to drink or eat, please go outside. Closed water bottles are allowed.
  • This is an interactive educational lab, so no activities or equipment disturbing interactions and education are allowed; for example, headsets, any kind of goggles, phones, consoles, watching videos, listening to music, playing games, maintaining distracting conversations, etc.

Any violators of the restrictions will be requested to leave the classroom. Any contention will be reported to Judicial Affairs.

Academic Honesty

The university, the course, the labs and the instructors are here for the students so they can acquire sufficient knowledge to open a window of opportunity for them in their future careers. Any academic dishonesty limits the student’s chances to succeed.

Please consult the Academic Catalog ( for the details on the CSUCI’s academic code of honor.

Students with Disabilities

Students needing special accommodations must make formal requests to the CSUCI Disability Accommodation Services ( No informal requests for any accommodation will be granted.

Subject to Change

This syllabus and schedule are subject to change in the event of extenuating circumstances.