Programming Languages
Purpose of Course showclose
Course Information showclose
Course Designer: Ha Nguyen
Primary Resources: This course is composed of a variety of free, online materials. However, the course makes primary use of the following source(s):
- Johns HopkinsUniversity: Scott F. Smith’s “Principles of Programming Languages”
- Stanford University: Professor John Mitchell: Lecture Notes of “CS 242: Programming Languages”
- William & Mary College: Professor Thomas Dillig: “CS 312 Programming Languages” Lecture Notes
Time Commitment: This course should take you a total of 107 hours to complete. Each unit includes a “time advisory” that lists the amount of time you are expected to spend on each subunit. These should help you plan your time accordingly. It may be useful to take a look at these time advisories and to determine how much time you have over the next few weeks to complete each unit, and then to set goals for yourself. For example, unit 1 should take 17 hours to complete. Perhaps you can sit down with your calendar and decide to complete subunit 1.1 on Monday night; subunit 1.2 on Tuesday night; etc.
Tips: The resources for this course came from diverse sources. Don’t be surprised if you find the notations in different readings and lecture notes to be inconsistent. Focus on the principal ideas presented in the readings instead. Unlike other computer science courses, this course focuses more on conceptual design than implementation. However, completing the assignments will help you to understand the concepts better. After every unit, take the quiz for the unit to test your knowledge.
Learning Outcomes showclose
- Identify the common concepts used to create programming languages.
- Compare and contrast factors and commands that affect the programming state.
- Explain the evolution and key features of the major programming languages.
- Analyze and evaluate new programming languages and new language features.
- Illustrate how execution ordering affects programming.
- Identify the basic objects and constructs in Object-Oriented Programming.
- Explain the characteristics of pure functional functions in functional programming.
- Describe the structures and components utilized in logical programming.
Course Requirements showclose
´√ Have completed CS101, CS102, CS107, CS201, CS202, and CS301 from “The Core Program” in the Computer Science discipline.
√ Have completed CS103/MA101 and CS104/MA102 from the math requirements for “The Core Program.”
√ Have access to a computer.
√ Have continuous broadband internet access.
√ Have the ability/permission to install plug-ins or software (e.g. Adobe Reader of Flash).
√ Have the ability to download and save files and documents to a computer.
√ Have the ability to open Microsoft files and documents (.doc, .ppt, .xls, etc.).
√ Be competent in the English language.
√ Have read the Saylor Student Handbook.
Unit Outline show close
Expand All Resources Collapse All Resources
-
Unit 1: Introduction to Programming Languages
Programming languages are not very different from spoken languages. Learning any language requires an understanding of the building blocks and the grammar that govern the construction of statements in that language. This unit will serve as an introduction to programming languages, taking you through the history of programming languages. We will also learn about the various universal properties of all programming languages and identify distinct design features of each programming language. By the end of this unit, you will have a deeper understanding of what a programming language is and the ability to recognize the properties of programming languages.
Unit 1 Time Advisory show close
Unit 1 Learning Outcomes show close
-
1.1 Evolution of Programming Languages
- Reading: Wright State University: Professor T.K. Prasad’s CS-480/680 Comparative Languages Lecture Notes: “Evolution of Programming Languages”
Link: Wright State University: Professor T.K. Prasad’s CS-480/680 Comparative Languages Lecture Notes: “Evolution of Programming Languages” (PDF)
Instructions: Please click on the link above. Browse to the “Class Schedule and Syllabus” section. Download the PDF file for Class 1 “Evolution and Programming Languages.” Read the entirety of the file. This reading will provide you an overview of the history of development of programming languages along the three major paradigms: Imperative, Functional, and Object-oriented. It will also briefly discuss modern scripting languages.
This resource should take approximately 30 minutes to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: Johns Hopkins University: Scott F. Smith’s “Principles of Programming Languages”
Link: Johns Hopkins University: Scott F. Smith’s “Principles of Programming Languages” (PDF)
Instructions: Download the PDF of the book. You will use this book thorough the course. Read the entire Chapter 1 of the book. This reading will provide an overview of the pre-history and the early history of programming languages. You will also learn briefly about lambda calculus. You will revisit the topic of lambda calculus in the next subunit.
This resource should take approximately 30 minutes to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Lecture: YouTube: IIT Delhi: Dr.S.Arun Kumar’s “Lecture - 1 Introduction to programming languages”
Link: YouTube: IIT Delhi: Dr.S.Arun Kumar’s “Lecture - 1 Introduction to programming languages” (YouTube)
Instructions: Click on the link above, which will take you to the Lecture Series on Programming Languages by Dr.S.Arun Kumar, Department of Computer Science & Engineering, IIT Delhi. Click on “Lecture - 1 Introduction to programming languages.” Please view the video in its entirety (50:12 minutes), which provides a detailed introduction to programming languages.
This resource should take approximately 1 hour to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Assignment: The Saylor Foundation’s “Impacts of Internet on the Evolution of Programming Languages”
Link: The Saylor Foundation’s “Impacts of Internet on the Evolution of Programming Languages”
Instructions: Write a few paragraphs describing the impacts of Internet on the evolution of programming languages. Which programming languages were developed specifically for the Web?
This assignment should take approximately 1 hour to complete.See a broken link? Please let us know!
- Assignment: “99 Bottles of Beer”
Link: “99 Bottles of Beer” (HTML)
Instructions: This website collects the codes for the song “99 bottles of beer” in 1500 different programming languages and variations. Write your own code to generate the lyrics for the song in a programming language that you know (for example, C or Java). The lyrics of the song can be found here (HTML). Check your code against what was submitted to the library for the language that you used. Compare that code with what was written for Prolog, Pascal, Scala, Scheme, Lisp, ML, C#, F#, and Haskel.
This assignment should take approximately 1 hour to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: Wright State University: Professor T.K. Prasad’s CS-480/680 Comparative Languages Lecture Notes: “Evolution of Programming Languages”
-
1.2 Lambda Calculus
- Reading: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Lecture 1: Introduction/Basic Lambda Calculus I”
Link: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Lecture 1: Introduction/Basic Lambda Calculus I” (PDF)
Instructions: Please click on the link above. Browse to the “Syllabus” section. Download the PDF file for Lecture 1 “Introduction/Basic Lambda Calculus I.” Read the entirety of the file. This reading will introduce you to lambda calculus. Skip the first 8 slides, which are about the organization of the CS 312 course. What are the four expressions in lambda calculus?
This resource should take approximately 1.5 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: Reading: Stanford University: Professor John Mitchell’s Lecture Notes for CS 242: Programming Languages: “Fundamentals”
Link: Stanford University: Professor John Mitchell’s Lecture Notes for CS 242: Programming Languages: “Fundamentals” (PDF)
Instructions: Please click on the link above. Locate the lecture named “Foundations” and download the PDF file titled “Fundamentals.” Read the entirety of the file. This reading will provide you with an overview of some programming language foundations, including lambda calculus and structured operational semantics. For this subunit, focus on pages 2-4, but feel free to explore the rest of the lecture notes.
This resource should take approximately 30 minutes to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Assignment: New York University: Professor Chris Baker’s “Lambda Tutorial”
Link: New York University: Professor Chris Baker’s “Lambda Tutorial” (HTML)
Instructions: This is a great tutorial on lambda calculus. Browse to “Examples and practice,” which have several exercises on lambda calculus. Guess the result of each expression before clicking “Reduce.” Feel free to explore the rest of the webpage as well as the various resources on lambda calculus recommended by Professor Chris Baker.
This assignment should take approximately 2 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Lecture 1: Introduction/Basic Lambda Calculus I”
-
1.3 Syntax as a Language’s Form
- Reading: Wright State University: Professor T.K. Prasad’s CS-480/680 Comparative Languages Lecture Notes: “Syntax Specification: Grammars”
Link: Wright State University: Professor T.K. Prasad’s CS-480/680 Comparative Languages Lecture Notes: “Syntax Specification: Grammars” (PDF)
Instructions: Please click on the link above. Browse to the “Class Schedule and Syllabus” section. Download the PDF file for Class 2 “Syntax Specification: Grammars.” Read the entirety of the file. This reading will introduce you to syntax as a language. The first few slides provide an overview of compiler, interpreter, and lexical analyzer.
This resource should take approximately 2 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Lecture: YouTube: IIT Delhi: Dr.S.Arun Kumar’s “Lecture - 2 Syntax”
Link: YouTube: IIT Delhi: Dr.S.Arun Kumar’s “Lecture 2 - Syntax” (YouTube)
Instructions: Click on the link above, which will take you to the Lecture Series on Programming Languages by Dr.S.Arun Kumar, Department of Computer Science & Engineering, IIT Delhi. Click on “Lecture - 2 Syntax.” Please view the video in its entirety (52:28 minutes).
This resource should take approximately 1 hour to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Lecture: YouTube: IIT Delhi: Dr.S.Arun Kumar’s “Lecture - 3 Grammar”
Link: YouTube: IIT Delhi: Dr.S.Arun Kumar’s “Lecture - 3 Grammar” (YouTube)
Instructions: Click on the link above, which will take you to the Lecture Series on Programming Languages by Dr.S.Arun Kumar, Department of Computer Science & Engineering, IIT Delhi. Click on “Lecture - 3 Grammars.” Please view the video in its entirety (50:48minutes).
This resource should take approximately 1 hour to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: Wright State University: Professor T.K. Prasad’s CS-480/680 Comparative Languages Lecture Notes: “Syntax Specification: Grammars”
-
1.4 Semantics as the Meaning
- Reading: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Lecture 7: Operational Semantics I” and “Lecture 8: Operational Semantics II”
Link: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Lecture 7: Operational Semantics I” and “Lecture 8: Operational Semantics II” (PDF)
Instructions: Please click on the link above. Browse to the “Syllabus” section. Download the PDF file for “Lecture 7: Operational Semantics I” and “Lecture 8: Operational Semantics II.” Read the entirety of these files. While there are several forms of language semantics (axiomatic, denotational, and operational), we will focus on operational semantics in this course. Make sure that you understand the difference between eager versus lazy evaluation, and call-by-name vs call-by-value.
This resource should take approximately 4 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Lecture: YouTube: IIT Delhi: Dr.S.Arun Kumar’s “Lecture - 6 Semantics”
Link: YouTube: IIT Delhi: Dr.S.Arun Kumar’s “Lecture - 6 Semantics” (YouTube)
Instructions: Click on the link above, which will take you to the Lecture Series on Programming Languages by Dr.S.Arun Kumar, Department of Computer Science & Engineering, IIT Delhi. Click on “Lecture - 6 Semantics.” Please view the video in its entirety (50:48 minutes). In this video, Dr.S.Arun Kumarexplained semantics and highlighted several basic principles underlying semantics. Use this lecture to supplement the readings from Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes.
This resource should take approximately 1 hour to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Lecture 7: Operational Semantics I” and “Lecture 8: Operational Semantics II”
-
Unit 1 Assessment
- Assessment: Unit 1 Assessment
Link: The Saylor Foundation’s “Unit 1 Assessment” (PDF)
Instructions: Complete the assessment linked above. When you have finished, you may check your answers against the Saylor Foundation’s “Unit 1 Assessment – Answer Key” (PDF).See a broken link? Please let us know!
- Assessment: Unit 1 Assessment
-
Unit 2: Types
In this unit, you will learn about types, a method of enforcing levels of abstraction in programs. Data in programs come in many types: real number, integers, characters, lists, etc. A type error occurs when an operation is applied to an inappropriate data type. A type system consists of a set of types, and a set of programs to analyze types and type judgment. You will also learn about the basics of static typing, type checking and type inference.
Unit 2 Time Advisory show close
Unit 2 Learning Outcomes show close
-
2.1 Principal of Typing
- Reading: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Lecture 9: Principles of Typing”
Link: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Lecture 9: Principles of Typing” (PDF)
Instructions: Please click on the link above. Browse to the “Syllabus” section. Download the PDF file for “Lecture 9: Principles of Typing” and read the entire lecture. The lecture will define typing, and explain why we need typing and how types compute. What is the difference between dynamic and static typing? Do you know any language with dynamic typing?
This resource should take approximately 1 hour to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: Stanford University: Professor John Mitchell’s Lecture Notes for CS 242: Programming Languages: “Types and Polymorphism”
Link: Stanford University: Professor John Mitchell’s Lecture Notes for CS 242: Programming Languages: “Types and Polymorphism” (PDF)
Instructions: Please click on the link above. Scroll down to lecture “Types and Polymorphism” and download the PDF file titled “Types and Polymorphism.” Read the entirety of the file. This reading covers the content of subunits 2.1, 2.2 and 2.3. Use this reading to supplement Professor Dillig’s lecture notes. This lecture will discuss several examples of typing in the context of the Haskell language.
This resource should take approximately 2 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: Stanford University: Professor John Mitchell’s Concepts of Programming Languages: “Chapter 6: Type Systems, Type Inference, and Polymorphism”
Link: Stanford University: Professor John Mitchell’s Concepts of Programming Languages: “Chapter 6: Type Systems, Type Inference, and Polymorphism” (PDF)
Instructions: Please download Chapter 6 and read the entirety of the file. Use this reading to supplement Professor John Mitchell’s Lecture Notes for CS 242: Programming Languages. This reading covers the content of subunits 2.1, 2.2 and 2.3. More specifically, section 6.1 covers the content of subunit 2.1, section 6.1 covers the content of subunit 2.2, and sections 6.3 and 6.4 covers the content of subunit 2.3.
This resource should take approximately 3 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Optional Reading: Johns Hopkins University: Scott F. Smith’s Principles of Programming Languages: “Chapter 6: Type Systems”
Link: Johns Hopkins University: Scott F. Smith’s Principles of Programming Languages: “Chapter 6: Type Systems” (PDF)
Instructions: Note that this chapter is optional, but you may use it to supplement the lecture notes above. This chapter provides the mathematical foundations for typing. It covers the content of subunits 2.1, 2.2 and 2.3.
This resource should take approximately 3 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Lecture 9: Principles of Typing”
-
2.2 Type Checking
- Reading: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Lecture 10: Basic Typing Rules and Proofs”
Link: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Lecture 10: Basic Typing Rules and Proofs” (PDF)
Instructions: Please click on the link above. Browse to the “Syllabus” section and download the PDF file for “Lecture 10: Basic Typing Rules and Proofs.” Read the entirety of these files. You will learn how to construct type systems for multiple languages and prove/show soundness of a type system.
This resource should take approximately 2 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: University of Virginia: Wes Weimer’s “Type Checking and Static Semantics”
Link: University of Virginia: Wes Weimer’s “Type Checking and Static Semantics” (PDF)
Instructions: Click on the link above, scroll down to lecture 11 (Mon Mar 12), and select the hyperlink under the topic column entitled, “Type Checking & Static Semantics.” Please read the entirety of this webpage for an additional understanding of typed programming languages.
This resource should take approximately 1 hour to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Lecture: YouTube: IIT Delhi: Dr.S.Arun Kumar’s “Lecture - 34 Type Checking”
Link: YouTube: IIT Delhi: Dr.S.Arun Kumar’s “Lecture - 34 Type Checking” (YouTube)
Instructions: Click on the link above, which will take you to the Lecture Series on Programming Languages by Dr. S. Arun Kumar, Department of Computer Science & Engineering, IIT Delhi. Browse down and click on “Lecture - 34 Type Checking.” Please view the video in its entirety (53:12 minutes), which introduces you to type checking.
This resource should take approximately 1 hour to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Lecture 10: Basic Typing Rules and Proofs”
-
2.3 Polymorphic Typing and Type Inference
- Reading: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Lectures 11-14”
Link: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Lectures 11-14” (PDF)
Instructions: Please click on the link above. Browse to the “Syllabus” section and download and read the PDF files for lectures 11-14.
This resource should take approximately 4 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: Johns Hopkins University: Scott F. Smith’s Principles of Programming Languages: “Chapter 6: Type Systems”
Link: Johns Hopkins University: Scott F. Smith’s Principles of Programming Languages: “Chapter 6: Type Systems” (PDF)
Instructions: Read section 6.6 and 6.7 of the book. Use this reading to supplement the other readings above.
This resource should take approximately 2 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Lectures 11-14”
-
Unit 2 Assessment
- Assessment: The Saylor Foundation’s “Unit 2 Assessment”
Link: The Saylor Foundation’s “Unit 2 Assessment” (PDF)
Instructions: Complete the assessment linked above. When you have finished, you may check your answers against the Saylor Foundation’s “Unit 2 Assessment – Answer Key” (PDF).See a broken link? Please let us know!
- Assessment: The Saylor Foundation’s “Unit 2 Assessment”
-
Unit 3: Functional Programming
Functional programming is not used very frequently in the industry, yet it is very powerful. Functional programming treats computation as the evaluation of mathematical functions. Functional programming languages are deeply rooted in lambda calculus. Make sure that you review the material in subunit 1.2 to prepare for this unit.
Unit 3 Time Advisory show close
Whereas older Functional Programming languages were typically designed with a specific purpose in mind, newer Functional Programming languages are more “general purpose” and are more widely applicable. In this unit, we will discuss Functional Programming’s place in the programming languages world, first taking a look at exactly what constitutes a Functional Programming language. We will conclude the unit with a discussion of some of the more prevalent features in Functional Programming. By the end of this unit, you will be able to identify Functional Programming languages and, more importantly, instances in which a Functional Programming language would be most beneficial.
Unit 3 Learning Outcomes show close
-
3.1 Overview
- Reading: Haskell.org’s “Functional Programming”
Link: Haskell.org’s “Functional Programming” (HTML)
Instructions: Please click on the link above. Read the entire webpage, which provides an overview of functional programming.
This resource should take approximately 2 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Lecture: University of California, Berkeley: Brian Harvey’s “Functional Programming 1”
Link: University of California, Berkeley: Brian Harvey’s “Functional Programming 1” (YouTube)
Instructions: Please view the following video presentation in its entirety (51:32 minutes) for an overview of functional programming.
This resource should take approximately 1 hour to complete.
Terms of Use: The above video is reposted from the University of California – Berkeley’s Webcast.Berkeley. It is attributed to Brian Harvey, and the original version can be found here. This video is released under a Creative Commons Attribution-Noncommercial-No Derivs 2.5 General License.See a broken link? Please let us know!
- Lecture: University of California, Berkeley: Brian Harvey’s “Functional Programming 2”
Link: University of California, Berkeley: Brian Harvey’s “Functional Programming 2” (YouTube)
Instructions: Please view the following video presentation in its entirety (51:32 minutes).
This resource should take approximately 1 hour to complete.
Terms of Use: The above video is reposted from the University of California – Berkeley’s Webcast.Berkeley. It is attributed to Brian Harvey, and the original version can be found here. This video is released under a Creative Commons Attribution-Noncommercial-No Derivs 2.5 General License.See a broken link? Please let us know!
- Reading: Haskell.org’s “Functional Programming”
-
3.2 Higher-order Functions
- Lecture: YouTube: University of California, Berkeley: Brian Harvey’s “Lecture 4: Higher-Order Procedures”
Link: YouTube: University of California, Berkeley: Brian Harvey’s “Lecture 4: Higher-Order Procedures” (YouTube)
Instructions: Please view the following presentation in its entirety (42:56 minutes) for a detailed understanding and examples of Higher-Order Functions and Procedures in Functional Programming.
This resource should take approximately 1 hour to complete.
Terms of Use: The above video is reposted from the University of California – Berkeley’s Webcast.Berkeley. It is attributed to Brian Harvey, and the original version can be found here. This video is released under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.See a broken link? Please let us know!
- Lecture: YouTube: University of California, Berkeley: Brian Harvey’s “Lecture 4: Higher-Order Procedures”
-
3.3 Pure Functional Functions
- Reading: Haskell.org: Paul Hudak, John Peterson, and Joseph Fasel’s A Gentle Introduction to Haskell Version 98: “Values, Types, and Other Goodies” and “Functions”
Links: Haskell.org: Paul Hudak, John Peterson, and Joseph Fasel’s A Gentle Introduction to Haskell Version 98: “Values, Types, and Other Goodies” (HTML) and “Functions” (HTML)
Instructions: Please click on the hyperlinks above for 1) “Values, Types, and Other Goodies” and 2) “Functions,” and read each of these webpages in their entirety. This resource should take approximately 4 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: Haskell.org: Paul Hudak, John Peterson, and Joseph Fasel’s A Gentle Introduction to Haskell Version 98: “Values, Types, and Other Goodies” and “Functions”
-
3.4 Real Languages: Haskell
- Reading: Stanford University: Professor John Mitchell’s Lecture Notes of CS 242: Programming Languages: “Haskell”
Link: Stanford University: Professor John Mitchell’s Lecture Notes of CS 242: Programming Languages: “Haskell” (PDF)
Instructions: Please click on the link above, download the PDF file titled “Haskell,” and read the entirety of the file. This reading will provide you an overview of Haskell a major functional programming language.
This resource should take approximately 8 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: Stanford University: Professor John Mitchell’s Lecture Notes of CS 242: Programming Languages: “Haskell”
-
3.5 OPTIONAL: MapReduce
- Reading: Microsoft Corporation: Ralf Lammel’s “Google’s MapReduce Programming Model – Revisited”
Link: Microsoft Corporation: Ralf Lammel’s “Google’s MapReduce Programming Model – Revisited” (PDF)
Instructions: Please click on the link above and download the PDF file at the bottom of the webpage. Read the entirety of the file. This reading will provide you an overview of the famous MapReduce algorithm invented by Google and its implementation in Haskell.
This resource should take approximately 4 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: Microsoft Corporation: Ralf Lammel’s “Google’s MapReduce Programming Model – Revisited”
-
Unit 3 Assessment
- Assignment: The Saylor Foundation’s “Unit 3 Assessment”
Link: The Saylor Foundation’s “Unit 3 Assessment” (PDF)
Instructions: Complete the assessment linked above. When you have finished, you may check your answers against the Saylor Foundation’s “Unit 3 Assessment – Answer Key” (PDF).See a broken link? Please let us know!
- Assignment: The Saylor Foundation’s “Unit 3 Assessment”
-
Unit 4: Imperative Programming
An imperative language uses a series of statements, contained in blocks or functions, to control a created state and, ultimately, produce a desired output. Imperative languages and, by extension, procedural languages, are extremely common and are frequently used to teach novices how to program. This unit will define Imperative Programming and identify the language’s key properties before moving on to address common control structures such as conditionals, loops, and case statements. By the end of this unit, you will understand how imperative programming languages work and be able to identify their common properties (and the ways in which those properties are employed in imperative programming).
Unit 4 Time Advisory show close
Unit 4 Learning Outcomes show close
-
4.1 Introduction to Imperative Programming
- Reading: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Introduction to imperative languages”
Link: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Introduction to imperative languages” (PDF)
Instructions: Please click on the link above. Browse to the “Syllabus” section and download the PDF file for Lecture 15 “Introduction to imperative languages.” Read the entirety of the file. What are the advantages and disadvantage of GOTO statements?
This resource should take approximately 2 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Introduction to imperative languages”
-
4.2 Pointers
- Reading: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Operational semantics of an imperative language with pointers”
Link: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Operational semantics of an imperative language with pointers” (PDF)
Instructions: Please click on the link above. Browse to the “Syllabus” section and download the PDF file for Lecture 16 “Operational semantics of an imperative language with pointers.” Read the entirety of the file.
This resource should take approximately 2 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Operational semantics of an imperative language with pointers”
-
Unit 5: Object-Oriented Programming
Object-Oriented programming languages are widely used in both government and industry, thanks to the popularity of Java and its older brethren, C++. Object-Oriented Programming has many practical advantages over other programming paradigms. It is considered an upgrade over the once-dominant Procedural Programming scheme. This unit will present an overview of Object-Oriented Programming, including examples of the two most popular languages mentioned above. Next, we will discuss some of the distinctive properties of Object-Oriented Programming, discussing the ways in which it differs from other schemes and why it is considered an improvement over older designs. By the end of this unit, you will be able to describe Object-Oriented Programming and identify the main properties of and advantages to using Object-Oriented Programming.
Unit 5 Time Advisory show close
Unit 5 Learning Outcomes show close
-
5.1 Introduction and Fundamental Features of Object Oriented Programming
- Reading: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Object-Oriented Languages”
Link: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Object-Oriented Languages” (PDF)
Instructions: Please click on the link above. Browse to the “Syllabus” section and download the PDF file for Lecture 17 “Object-Oriented Languages.” Read the entirety of the file.
This resource should take approximately 3 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: Stanford University: Professor John Mitchell’s Lecture Notes for CS 242: Programming Languages: “Objects”
Link: Stanford University: Professor John Mitchell’s Lecture Notes for CS 242: Programming Languages: “Objects” (PDF)
Instructions: Please click on the link above. Scroll down to lecture “Objects” and download the PDF file titled “Objects.” Read the entirety of the file. This reading will introduce you to basic concepts of object-oriented programming (i.e. dynamic lookup, encapsulation, inheritance and subtyping), as well as basic principles of program organization (e.g. work queue, design patterns). The lecture also provides historical perspectives on object-oriented programming languages, with examples from SmallTalk, C++, Self and JavaScript.
This resource should take approximately 2 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Optional Reading: Johns Hopkins University: Scott F. Smith’s Principles of Programming Languages: “Chapter 5 : Object Oriented Language Features”
Link: Johns Hopkins University: Scott F. Smith’s Principles of Programming Languages: “Chapter 5: Object Oriented Language Features” (PDF)
Instructions: Note that this chapter is optional. The first three pages explain what makes object-oriented programming so popular. This chapter covers the content of subunits 5.1 and 5.2.
This resource should take approximately 6 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Lecture: YouTube: University of California, Berkeley: Brian Harvey’s “Object-Oriented Programming I”
Link: YouTube: University of California, Berkeley: Brian Harvey’s “Object-Oriented Programming I” (YouTube)
Also available in:
iTunes (Audio only)
Instructions: Please view the following presentation in its entirety (51:11 minutes) for a detailed introduction to Object-Oriented Programming.
This resource should take approximately 1 hour to complete.
Terms of Use: The above video is reposted from the University of California – Berkeley’s Webcast.Berkeley. It is attributed to Brian Harvey, and the original version can be found here. This video is released under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.See a broken link? Please let us know!
- Lecture: YouTube: University of California, Berkeley: Brian Harvey’s “Object-Oriented Programming II”
Link: YouTube: University of California, Berkeley: Brian Harvey’s “Object-Oriented Programming II” (YouTube)
Also available in:
iTunes (Audio only)
Instructions: Please view the following presentation in its entirety (51:29 minutes). In this lecture, you will also learn about implementation of object-oriented programming in SmallTalk. You will also for learn about several basic concepts in Object-Oriented Programming languages, such as inheritance, class, superclass, exceptions, simulation, message sending and type declaration.
This resource should take approximately 1 hour to complete.
Terms of Use: The above video is reposted from the University of California – Berkeley’s Webcast.Berkeley. It is attributed to Brian Harvey, and the original version can be found here. This video is released under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.See a broken link? Please let us know!
- Lecture: YouTube: University of California, Berkeley: Brian Harvey’s “Object-Oriented Programming III”
Link: YouTube: University of California, Berkeley: Brian Harvey’s “Object-Oriented Programming III” (YouTube)
Instructions: Please view the following presentation in its entirety (43:02 minutes) for a detailed understanding the specific and fundamental features in Object-Oriented Programming languages.
This resource should take approximately 1 hour to complete.
Terms of Use: This video is released under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.See a broken link? Please let us know!
- Reading: William & Mary College: Professor Thomas Dillig’s CS 312 Programming Languages Lecture Notes: “Object-Oriented Languages”
-
5.2 Object Types and Subtyping
- Reading: Stanford University: Professor John Mitchell’s Lecture Notes for CS 242: Programming Languages: “Object types and subtyping”
Link: Stanford University: Professor John Mitchell’s Lecture Notes for CS 242: Programming Languages: “Object types and subtyping” (PDF)
Instructions: Please click on the link above. Scroll down to lecture “Object types and subtyping” and download the PDF file titled “Object types and subtyping.” Read the entirety of the file. This reading will provide an in-depth discussion of statically-typed object-oriented languages. You will learn about the similarities and differences between C++ and Java implementations of object system.
This resource should take approximately 2 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: Stanford University: Professor John Mitchell’s Lecture Notes for CS 242: Programming Languages: “Object types and subtyping”
-
5.3 Java Virtual Machine
- Reading: Stanford University: Professor John Mitchell’s Lecture Notes for CS 242: Programming Languages: “Implementation Structures”
Link: Stanford University: Professor John Mitchell’s Lecture Notes for CS 242: Programming Languages: “ImplementationStructures” (PDF)
Instructions: Please click on the link above. Download the PDF file titled “Object_implementation.pdf”, under the lecture titled “Implementation structures”. Read the entirety of the file. This reading will provide an overview of Java Virtual Machine. You will also learn about method lookup, verifier analysis and Java security. What is the difference between a complier and a virtual machine?
This resource should take approximately 2 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: Stanford University: Professor John Mitchell’s Lecture Notes for CS 242: Programming Languages: “Implementation Structures”
-
5.4 Templates and Generics
- Reading: Stanford University: Professor John Mitchell’s Lecture Notes for CS 242: Programming Languages: “Templates and Generics”
Link: Stanford University: Professor John Mitchell’s Lecture Notes for CS 242: Programming Languages: “Templates and Generics” (PDF)
Instructions: Please click on the link above. Download the PDF file titled “Templates and Generics.pdf”, under the lecture titled “Templates and Generics”. Read the entirety of the file. This reading will introduce you to parametric polymorphism for object-oriented programming through in-depth analysis of C++ Templates and Java Generics.
This resource should take approximately 2 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: Stanford University: Professor John Mitchell’s Lecture Notes for CS 242: Programming Languages: “Templates and Generics”
-
Unit 5 Assessment
- Assessment: The Saylor Foundation’s “Unit 5 Assessment”
Link: The Saylor Foundation’s “Unit 5 Assessment” (PDF)
Instructions: Complete the assessment linked above. When you have finished, you may check your answers against the Saylor Foundation’s “Unit 5 Assessment – Answer Key” (PDF).See a broken link? Please let us know!
- Assessment: The Saylor Foundation’s “Unit 5 Assessment”
-
Unit 6: Scripting Languages
Scripts are everywhere in computer science. Any job in the computer science field will require you to write a script at some point or another, whether that script sets up the runtime environment for an application or automates the build process. Scripting languages are primarily designed for “gluing”, i.e. connecting components. We will first learn the basics of scripting, learning in particular how scripts are useful. You will then learn about the wide-ranging family of scripting languages and the properties that those languages tend to share. By the end of this unit, you will be able to define scripting and identify situations in which a script would be most useful.
Unit 6 Time Advisory show close
Unit 6 Learning Outcomes show close
-
6.1 What Is a Scripting Language?
- Reading: TCL Developer Xchange: John K. Ousterhout’s “Scripting: Higher Level Programming for the 21st Century”
Link: TCL Developer Xchange: John K. Ousterhout’s “Scripting: Higher Level Programming for the 21st Century” (HTML)
Instructions: Please click on the above link, and read the entire webpage. This is an excellent introduction to scripting languages, although it was written almost 15 years ago. You will learn to distinguish between system programming languages and scripting languages (e.g strong versus weak typing, compiled versus interpreted). This reading prepares you for the rest of the unit.
This resource should take approximately 2 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: University of Hawaii: Nancy Reed’s “Lecture #13: Scripting Languages”
Link: University of Hawaii: Nancy Reed’s “Lecture #5: Scripting Languages” (PDF)
Instructions: Please click on the above link, and scroll down the webpage to the section titled “Scripting Languages and Perl.” Click on the “pdf” hyperlink next to the title “Lecture #13: Scripting Languages (Chapter 13)” to download the PDF file. Please read the entire presentation (6 pages).
This resource should take approximately 1 hour to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: University of Maryland, Baltimore County: Professor Daniel J. Hood’s Lecture Notes for CMSC 433-Scripting Languages: “Introduction”Link: University of Maryland, Baltimore County: Professor Daniel J. Hood’s Lecture Notes for CMSC 433-Scripting Languages: “Introduction” (HTML)
Instructions: Please click on the above link, and read the entire webpage. The reading provides a brief overview of scripting languages. It also provides examples of short scripts in major scripting languages including Ruby, Perl, JavaScript, PHP and Python.
This resource should take approximately 2 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: TCL Developer Xchange: John K. Ousterhout’s “Scripting: Higher Level Programming for the 21st Century”
-
6.2 Regular Expressions
- Reading: University of Maryland, Baltimore County: Professor Daniel J. Hood’s Lecture Notes for CMSC 433-Scripting Languages: “Regular Expressions”Link: University of Maryland, Baltimore County: Professor Daniel J. Hood’s Lecture Notes for CMSC 433-Scripting Languages: “Regular Expressions” (HTML)Instructions: Please click on each link under the “Notes” section on the University of Maryland webpage, and read each of these five webpages related to regular expressions. The five pages to be reviewed include: “00. Introduction,” “01. Pattern Matching,” “02. Pattern Substitution,” “03. Miscellaneous,” and “04. Regular Expression Helper Package.” Regular expressions are sets of symbols and syntactic elements used to match patterns of text.
This resource should take approximately 4 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: University of Maryland, Baltimore County: Professor Daniel J. Hood’s Lecture Notes for CMSC 433-Scripting Languages: “Regular Expressions”
-
6.3 Ruby
- Reading: University of Maryland, Baltimore County: Daniel J. Hood’s “Ruby”
Link: University of Maryland, Baltimore County: Daniel J. Hood’s “Ruby” (HTML)
Instructions: Please click on all 18 hyperlinks related to Ruby listed under the “Notes” section. Please read each of the 18 webpages for a detailed overview of examples relating to Ruby, a popular programming language.
This resource should take approximately 2 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: University of Maryland, Baltimore County: Daniel J. Hood’s “Ruby”
-
6.4 Python
- Reading: University of Maryland, Baltimore County: Professor Daniel J. Hood’s Lecture Notes for CMSC 433-Scripting Languages: “Python”
Link: University of Maryland, Baltimore County: Professor Daniel J. Hood’s Lecture Notes for CMSC 433-Scripting Languages: “Python” (HTML)
Instructions: Please click on the first 11 hyperlinks listed under the “Notes” section, and read each of these webpages for a detailed overview of examples relating to the Python scripting language.
This resource should take approximately 8 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: University of Maryland, Baltimore County: Professor Daniel J. Hood’s Lecture Notes for CMSC 433-Scripting Languages: “Python”
-
6.5 JavaScript
- Reading: University of Maryland, Baltimore County: Daniel J. Hood’s “JavaScript”
Link: University of Maryland, Baltimore County: Daniel J. Hood’s “JavaScript” (HTML)
Instructions: Please click on all 21 hyperlinks related to JavaScript listed under the “Notes” section. Please read each of the 21 webpages for a detailed overview of examples relating to JavaScript.
This resource should take approximately 8 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: University of Maryland, Baltimore County: Daniel J. Hood’s “JavaScript”
-
Unit 6 Assessment
- Assessment: The Saylor Foundation’s “Unit 6 Assessment”
Link: The Saylor Foundation’s “Unit 6 Assessment” (PDF)
Instructions: Complete the assessment linked above. When you have finished, you may check your answers against the Saylor Foundation’s “Unit 6 Assessment – Answer Key” (PDF).See a broken link? Please let us know!
- Assessment: The Saylor Foundation’s “Unit 6 Assessment”
-
Unit 7: Logical Programming
The relationship between mathematical logic and computer science runs deep. As such, there are a number of programming language tools that enable you to rapidly code efficient logic systems for deployment in a variety of high-tech arenas, such as Artificial Intelligence, Textual Analysis, and so on.
Unit 7 Time Advisory show close
In this unit, you will learn about Logical Programming (also known as Declarative Programming) and why you would use it to solve these sorts of problems. We will discuss the fundamental features of Logical Programming and identify what distinguishes Logical Programming from other programming paradigms. By the end of this unit, you will be able to identify the problem domain that Logical Programming covers and recognize when you should take advantage of Logical Programming’s considerable power.
Unit 7 Learning Outcomes show close
-
7.1 Overview
- Reading: University of Oxford: Michael Spivey’s An Introduction to Logic Programming through Prolog: “Chapter 1: Introduction”
Link: University of Oxford: Michael Spivey’s An Introduction to Logic Programming through Prolog: “Chapter 1: Introduction” (PDF)
Instructions: Click on the “full text” link to download the book and save the book on your computer. Read the entire Chapter 1 of the book. This reading will introduce you to logic programming.
This resource should take approximately 2 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Lecture: YouTube: Indian Institute of Technology: Kharagpur: P. Dasgupta’s “Lecture 13 - Logic Programming: Prolog”
Link: YouTube: Indian Institute of Technology: Kharagpur: P. Dasgupta’s “Lecture 13 - Logic Programming: Prolog” (YouTube)
Instructions: Please view the following presentation in its entirety (59:50 minutes) for a detailed understanding and overview of logic programming using prolog as an example.
This resource should take approximately 1 hour to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: University of Oxford: Michael Spivey’s An Introduction to Logic Programming through Prolog: “Chapter 1: Introduction”
-
7.2 Basic Features and Examples
- Reading: University of Hawaii: Nancy Reed’s “Lecture #11 - Logic Programming Languages, Prolog (Chapter 11)”
Link: University of Hawaii: Nancy Reed’s “Lecture #11 - Logic Programming Languages, Prolog (Chapter 11)” (PDF)
Instructions: Please click on the above link, and scroll down the webpage to the section titled “Logic Programming and Prolog.” Click on the “pdf” hyperlink next to the title “Lecture #11 - Logic Programming Languages, Prolog (Chapter 11)” to download the PDF file. Please read the entire presentation. This reading will provide you the insights into symbolic logic, predicate calculus and semantics of logic programming.This resource should take approximately 2 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Lecture: YouTube: University of California, Berkeley: Brian Harvey’s “Logic Programming I”
Link: YouTube: University of California, Berkeley: Brian Harvey’s “Logic Programming I” (YouTube)
Instructions: Please view the following video presentation in its entirety (50:40 minutes) for an overview on the fundamental features of logic programming. You will learn about logic programming through several Scheme examples. Use this video lecture to supplement the reading above.
This resource should take approximately 1 hour to complete.
Terms of Use: The above video is reposted from the University of California – Berkeley’s Webcast.Berkeley. It is attributed to Brian Harvey, and the original version can be found here. This video is released under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.See a broken link? Please let us know!
- Lecture: YouTube: University of California, Berkeley: Brian Harvey’s “Logic Programming II”
Link: YouTube: University of California, Berkeley: Brian Harvey’s “Logic Programming II” (YouTube)
Instructions: Please view the following video presentation in its entirety (50:05 minutes). This lecture will provide further discussions on logic programming.
This resource should take approximately 1 hour to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: University of Hawaii: Nancy Reed’s “Lecture #11 - Logic Programming Languages, Prolog (Chapter 11)”
-
7.3 Prolog
- Reading: University of Hawaii: Nancy Reed’s “Lecture #12A - Prolog introduction”
Link: University of Hawaii: Nancy Reed’s “Lecture #12 – Prolog introduction” (PDF)
Instructions: Please click on the above link, and scroll down the webpage to the section titled “Logic Programming and Prolog.” Click on the “pdf” hyperlink next to the title “Lecture #12A - Prolog introduction” to download the PDF file. Please read the entire presentation. This reading will introduce you to Prolog. Feel free to download and read all other PDF files in the “Logic Programming and Prolog” section.This resource should take approximately 2 hours to complete.
Terms of Use: Please respect the copyright and terms of use displayed on the webpage above.See a broken link? Please let us know!
- Reading: University of Hawaii: Nancy Reed’s “Lecture #12A - Prolog introduction”
-
Final Exam
- Final Exam: The Saylor Foundation's CS404 Final Exam
Link: The Saylor Foundation's CS404 Final Exam
Instructions: You must be logged into your Saylor Foundation School account in order to access this exam. If you do not yet have an account, you will be able to create one, free of charge, after clicking the link.See a broken link? Please let us know!
- Final Exam: The Saylor Foundation's CS404 Final Exam
Questions? Consult the FAQ's!


