Bryn Mawr College
CMSC 245 Principles of Programming Languages
Fall 2024
Course Materials
Prof. Deepak Kumar

General Information

Instructor(s)
Deepak Kumar
202 Park Science Building
526-7485
dkumar at brynmawr dot edu
https://cs.brynmawr.edu/~dkumar/

Lecture Hours: Tuesdays & Thursdays from 10:10a to 11:30a
Office Hours: TBA
Lecture Room: Park Room 300
Lab: Tuesdays from 1:10p to 2:30p in Room 230 Park

Note: No Labs in Week#1. Labs will start in Week#2.

Laboratories


Texts & Software

Main Text: None. Lecture notes will be provided.

Software: We will write programs in several programming languages (Java, C, Python, Go, etc.). All software will be installed on lab machines and can also be installed on your own computers.

Syllabus

Course Description: An introduction to the study of programming languages. Where do programming languages come from and how do they evolve? And why should a programmer choose one over another? This course explores these topics by covering several different programming language features and paradigms, including object-oriented, functional, and dynamic. It also looks at the history and future of programming languages by studying the active development of several real-world languages. The course has a weekly lab component where students explore several programming languages with hands-on exercises.

Topics


The world of Programmin Languages
Compilers & Interpreters
The Compilation Process
Objects in a Program
Binding Time
Object Lifetime
Storage Allocation Schemes
Stack Frames
Heap
Scope: Static & Dynamic Referencing Environment
Aliasing
Overloading Polymorphism
First Class Objects
Higher Order Functions
Lambda Calculus
Control Flow
Expressions
Variables
Value & Reference Models
Orthogonality
Types
Mutable and Immutable objects
Assignment
Sequencing
Selection (Conditionals )
Repetition/Loops
Type Systems
Type Equivalence
Subroutines/Functions
Parameter Passing Schemes
Exceptions & Exception Handling
Data Abstraction & OOP 

Important Dates

September 3  First Class Meeting
October 3  Exam 1
November 12  Exam 2
December 12  Exam 3

Creating a Welcoming Environment

All members of the Instruction Staff are dedicated to the cause of improving diversity, equity, and inclusion in the field of computing, and to supporting the wellness and mental health of our students.

Diversity and Inclusion

It is essential that all members of the course community – the instructor, TAs, and students – work together to create a supportive, inclusive environment that welcomes all students, regardless of their race, ethnicity, gender identity, sexuality, or socioeconomic status. All participants in this course deserve to and should expect to be treated with respect by other members of the community.

Class meetings, lab sessions, office hours, and group working time should be spaces where everyone feels welcome and included. In order to foster a welcoming environment, students of this course are expected to: exercise consideration and respect in their speech and actions; attempt collaboration and consideration, including listening to opposing perspectives and authentically and respectfully raising concerns, before conflict; refrain from demeaning, discriminatory, or harassing behavior and speech.


Assignments

  1. Assignment#1: (Due by the start of class on Tuesday, September 10):  Pick two programming languages that are completely new to you. Something other than Java, C, Python. At the start od class, you will do a short, oral presentation (no longer than 1-2 mins) telling us what languages you picked and why. No written work is required.  
  2. Assignment#2: (Due by the start of class on Tuesday, September 24): Write a short (1-page) summary of the programming language assigned to you. You will make a 5-minute presentation on this to the class on Tuesday, September 24. What to include in the summary: Name of the programming language, when designed, by whom, purpose for its existence (highlight key features). Show two example programs in the language: The "Hello World" program, and a program to compute the GCD of two numbers using Euclid's algorithm. 
  3. Assignment#3: (Due by the start of class on Thursday, October 31):  Write a report that summarizes the built-in types, variables, and control structures in the programming language assigned to you. Your report should be no longer than 5-6 printed pages. You can use the structure from the Python labs. In class, on Thursday, October 31, you will do a 10 min presentation.
  4. Assignment#4: (Due by start of class on Thursday, November 7): Do Lab#4 and complete the Exercise at the end. Submit a printout of your program along with the requested outputs.
  5. Assignment#5 is posted (Due by start of class on November 14): Click here.
  6. Assignment#6 (Due by start of class on December 10): Write a final report summarizing the programming language assigned to you. Build on the previous presentations. Focus on subroutines and parameter passing, exception handling, and data abstraction.

Lectures