Course Syllabus for "CS404: Programming Languages"
This course is an upper division computer science course that studies the design of programming languages. While most of the industry uses either procedural or object-oriented programming languages, there are entire families of other languages with certain strengths and weaknesses that make them attractive to a variety of problem domains. It is important to know about these less well-known yet powerful languages if you find yourself working in an area that could utilize their strengths. In this course, we will discuss the entire programming language family, starting with an introduction to programming languages in general and a discussion of the features and functionality that make up the modern programming language. From there, each unit will discuss a different family of programming languages, including Imperative, Object-Oriented, Functional, Scripting, and, Logical. For each language, you will learn about its computational model, syntax, semantics, and pragmatic considerations that shape the language. By the end of this course, you will be able to intelligently discuss each of these programming paradigms, their respective strengths and weaknesses, and the reasons why you would opt to use one over the others in a given situation. You will also have opportunities to delve into the details of the design and evolution of several specific programming languages, including Scheme, Haskel, Java, C++, C#, Perl, Python, and Prolog.
Upon successful completion of this course, the student will be able to:
- 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.
In order to take this course, you must:
√ Have completed MA101.
√ 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.
Welcome to CS404: Programming Languages. Below, please find general
information on this course and its requirements.
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
Requirements for Completion: In order to complete this course, you
will need to work through each unit and all of its assigned materials.
You will also need to complete all assignments, quizzes and the Final
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.