CSCI 2320:
Principles of Programming Languages


Spring 2026

 

What's this course about?

CSCI 2320 studies design principles and paradigms of programming languages. Different paradigms of languages correspond to distinct ways of thinking about problem solving. For example, functional languages (such as Haskell) focus attention on the behavioral aspects of a problem; object-oriented languages (such as Ruby) focus attention on data--how to model and manipulate it. Despite their differences, a common set of principles often guide language design. Covers principles of language design and implementation including syntax, semantics, type systems, control structures, and compilers. Also covers various paradigms of languages including imperative, object-oriented, web, and functional languages.

What's new: With the rapid adoption of AI, our relationship with programming languages is also changing (so is our intellectual curiosity). Whereas we were mostly interested in the under-the-hood of language design before, we are now also curious about AI writes code. We'll have an LLM module on program synthesis to study this.

Instructors

Mohammad T. Irfan
Email: mirfan@bowdoin.edu
Office hours:
Tue 3-5pm
Fri 10am-12pm
Office room: Mills 209
LA hours:
Mon 7-9pm (Mills 105): Victoria Figueroa

Time & Place

Lectures: MW 2:50--4:15
Mills 210
Final Exam: No final exam
Midterm Exams: No midterm

Course Outline

Learning Goals:

Even after 5 years:

  • Know:
    • The building blocks of language design.
    • Diverging paradigms of languages and their philosophical differences.
    • How AI writes code.
  • Be able to do:
    • Design and implement an interpreter for a C-like language.
    • Choose an "appropriate" language for a given problem.
      • Examples of these paradigms are imperative (e.g., C), object-oriented (e.g., Ruby, C++, Java, Python), functional (e.g., Haskell), etc. Also covered is how some of these paradigms are used in web programming (e.g., Ruby on Rails).
  • Find value in:
    • Convergence of design principles but divergence of language paradigms!
    • What goes behind the scene at various stages of your coding.

Textbook: Languages by Tucker and Noonan (2nd Edition).

Evaluation:

  • Ungraded summative assessment (SA): There will be several programming projects. These projects will be ungraded, but you will receive detailed feedback. These projects will be connected to viva voce as described next.

  • 50% points for viva voce: Viva voce, which means "with the living voice" in Latin and is usually translated as an oral exam. In this course, viva voce will mean face-to-face conversation with Prof. Irfan. You will get points on viva voce by demonstrating that you have an adequate understanding of the course materials.

    After you receive the feedback for each SA/project (except the final project), you will meet with Prof. Irfan during office hours (or by appointment) for a few minutes to talk about the project and related topics. To prepare for the viva, you should make any necessary corrections and review the related course topics as if you are preparing for a midterm. You will get points based on your understanding of the materials.

  • 30% points for formative assessment (FA): This includes formative assignments and in-class group work.

  • 15% points for final project: The final project should be on a paradigm of programming languages on the applied side. You have the freedom to choose your project, but you should consult with Prof. Irfan. You will submit a project report.

  • 5% points for good citizenship: Attendance, adherence to the screen policy, and active participation in class, including note taking. Taking handwritten notes is highly recommended for its many benefits.

  • Points to letter grade conversion: 95% A, 90% A-, 85% B+, 80% B, 75% B-, 70% C+, 65% C, 60% C-, 55% D, below 55% F

Programming Assignments:

  • There will be a number of programming assignments. Some of the assignments would be project-type. For the assignments in the first part of the course, the preferred programming language is Python 3 and the preferred IDE is Visual Studio Code.

Late Policy:

  • Extensions will be given if there is any health or other emergency situation. Otherwise, late submissions will be accepted up until 24 hours after the deadline with a penalty. Each hour after the deadline would cost 4% (for projects, this cost will be charged to viva voce).

Software Installation:

Outline of Topics:

Week Topics Reading Notes, Slides, Video
1 (1/21) Introduction Ch 1
1. Slides- Intro
2. Links:
Tiobe Index of PL
PL in big data
Video on Ada Lovelace
Bjarne Stroustrup video
2 (1/26, 1/28) Syntax Ch 2 1. Slides- Syntax
2. Video: John Backus on BNF
3. Full interview of Backus
3 (2/3, 2/5) Syntax (cont.) Ch 2 1. EBNF of C++ (Canvas)
2. Niklaus Wirth: creator of EBNF, Pascal, etc.
4 (2/9, 2/11) 1. Lexical analysis
2. Finite state automata: NFA and DFA
Project 1 out
1. Ch 3
2. Handout: Finite state automata - Scott (Canvas)
1. Slides- Lexical Analysis
2. Video: NFA -> DFA
5 (2/16, 2/18) Syntactic analysis & parsing algorithms
1. Ch 3
2. Handout: left recursion and left factoring (Canvas)
Slides- Syntactic Analysis
6 (2/23, 2/25) Parsing algorithms (continued)
Project 2 out
1. LL(1) parser generator
2. Prof. Irfan's class notes on LL(1) parsing
7 (3/2, 3/4) 1. Names
2. Types
Ch 4, 5, 6 Slides- Names
Slides- Types
Spring Break      
8 (3/23, 3/25) 1. Type systems (continued)
2. Semantics and semantic analysis
Project 3 out
Ch 7, 8 Slides- Semantics
9 (3/30, 4/1) Control flow semantics (continued)
Paradigms of PL:
1. Imperative vs Object-Oriented PL
2. OOP paradigm: Ruby
  1. Slides- OOP
2. Interview of Larry Wall (Designer of Perl)
10 (4/6, 4/8) OOP paradigm: Ruby
  Slides- Ruby
11 (4/13, 4/15) Web programming - Ruby on Rails
  Slides- Rails
12 (4/20, 4/22) Functional programming - Haskell
Final project out
  Slides- Haskell
13 (4/27, 4/29) AI program synthesis: Intro to LLM
Slides- LLM
14 (5/4, 5/6) AI program synthesis: LLM for code generation
Slides (continued)

Other topics (time permitting): Functions and memory management (Ch 9, 11)


Collaboration Policy

Each assignment will clearly specify the level of collaboration using the CS collaboration policy. With some exceptions, the labs and projects are individual assignments by default.

Students are expected to follow Bowdoin's Academic Honor Code.

For individual assignments, you are encouraged to discuss ideas and techniques broadly with your classmates, but not specifics of assigned problems. Discussions should be limited to questions that can be asked and answered without using any written medium (e.g., pencil and paper, board, or email). This means that at no time should a student read anything written by another student. Violation of this policy is grounds for me to initiate an action that would be filed with the Dean's office and would come before the Conduct Review Board. If you have any questions about this policy, PLEASE do not hesitate to contact me. This will be a zero-tolerance policy.

If in the future you provide your work to other students, this will also constitute a violation of the collaboration policy.


AI Policy

We will follow the DCS AI policy in this course.

What counts as Generative AI?

Generative AI refers to all the AI systems that can create new content like text, code, images, audio, and other types of media. This includes but is not limited to:

  • Large language models (ChatGPT, Claude, Gemini, etc.), apps and agents derived from them, and aggregator interfaces (Amplify, LibreChat, etc.)
  • Code generation tools (GitHub Copilot, Google Colab, Cursor, etc.)
  • Image generators (DALL-E, Midjourney, etc.)
  • AI-powered writing assistants and autocomplete features
  • NotebookLM, Quizlet AI features, and other AI-enhanced study tools

Always acknowledge what generative AI tools were used to help you complete assignments.

How can generative AI help you to learn in this course?

  • Converting slides and notes to study guides and podcasts (e.g., NotebookLM)
  • Creating practice materials like flashcards and mock quizzes or exams (e.g., Quizlet)
  • Proposing a study plan
  • Providing alternative explanations or examples
  • Suggesting refinements to grammar and corrections to spelling
  • A guide to debugging code

How can generative AI impair your learning in this course?

  • Often misses design layers in coding projects, making the code hard to debug
  • Reduces critical thinking and problem-solving abilities
  • Can limit creativity
  • Creates a sense of false confidence
  • Creates dependency
  • Reduces retention
  • Limits research skills
  • Denies you the possibility of self-expression in a constructive environment

Other costs of using AI

  • Environmental impact – large energy use
  • Labor exploitation – poorly paid workers for moderation and labeling
  • Digital colonialism – reinforces inequalities and Western perspectives
  • Digital divide – widens gaps in tech access
  • Aggregation – concentrated power in few companies
  • Privacy – inputs may be stored despite disclaimers

Why do we give you assignments?

"We don’t assign essays because the world needs more student essays." - Emily Bender

Assignments are designed to help you develop essential skills and ways of thinking that will serve you throughout your education and beyond. Each assignment is an opportunity to practice critical thinking, develop your unique voice, learn from struggle, engage with material, demonstrate learning, and prepare for future challenges.

Academic Integrity Expectations

  • Be transparent about AI use
  • When in doubt, acknowledge it
  • Submit your prompts with assignments
  • Understand that overreliance hinders learning
  • Violations will be treated as academic dishonesty

When is generative AI not allowed?

  • To generate code (unless you are an expert), for many reasons:
    • AI generated code lacks layers and context.
    • AI may generate spaghetti code with convoluted logic -- too complicated to debug (Prof. Irfan can give you many examples).
    • You lose your reasoning ability.
    So, you must write at least the initial draft of code yourself.
  • To generate text; e.g., to flesh out an outline, leading to an initial draft that you intend to revise
  • To brainstorm – your background is richer than AI’s
  • To solve problems – designed to strengthen critical thinking
  • As a search engine for facts – verify independently
  • To analyze data or interpret results without your own reasoning
  • To generate ideas for creative projects or research questions
  • To complete exams or quizzes unless permitted
  • To translate assignments or materials without permission

When can generative AI be used?

  • Getting help on understanding programming concepts (different from generating code by prompts)
  • Debugging your code by understanding cause of the faults
  • Testing your code by generating test cases
  • Getting help on a software tool (e.g., how do I resize nodes in Gephi?)
  • Polishing text by checking for grammar, spelling, and styling suggestions
  • Outlining, i.e., preparing an initial structure with AI to be expanded with your own perspective (note that the opposite is not allowed)
  • Finding resources to support research
  • Testing discussion questions for class
  • Checking your work and getting preliminary feedback


Screen Policy

We will follow the DCS screen policy.

No screen use is permitted in class unless explicitly stated by the instructor or in cases of learning accommodations. This includes phones, tablets, and computers. Most courses will display a symbol during presentations that indicates when screen use is allowed. When screens are not permitted, all devices should be put away and out of sight.

If you have a documented accommodation that allows the use of a laptop or tablet for note-taking, please make sure to submit the appropriate materials to the professor.


Github Policy

Making assignment solutions publicly available through Github or other media will constitute a violation of the honor code for this course.

If Winter comes, can Spring be far behind? -- Percy Bysshe Shelley