Computing Science Course Outlines

Course Outline - CMPT 383 - Comparative Programming Languages

Information

Subject

Catalog Number

Section

Semester

Title

Instructor(s)

Campus

CMPT

383

D100

2010 Fall (1107)

Comparative Programming Languages

Ted Kirkpatrick   

Burnaby Mountain Campus

Calendar Objective/Description

Various concepts and principles underlying the design and use of modern programming languages are considered in the context of procedural, object-oriented, functional and logic programming languages. Topics include data and control structuring constructs, facilities for modularity and data abstraction, polymorphism, syntax, and formal semantics.

Instructor's Objectives

THIS IS AN EXPERIMENTAL VERSION OF THE COURSE THAT WILL NOT FOLLOW THE SUBJECTS LISTED IN THE CALENDAR EXCERPT ABOVE. Today's programming language environment is richer than at any time in the history of computing, with more languages in common use than ever before. Yet programming languages are becoming more similar rather than more distinct. Modern designs are syncretic, borrowing ideas pioneered in other languages. Even the designs that try to sustain some purity of concept offer well-defined gateways for calling other languages with very different approaches to programming (for example, both Haskell and Java have standard interfaces to C). It makes little sense any more to try to characterize each programming language by its supposed "paradigm". Rather than characterizing programming languages, this course focus on two big principles: 1. Static versus dynamic: Is a language feature evaluated exactly once before the first execution of the statement (static) or is it evaluated every time the statement is executed (dynamic)? 2. Storage layout: How is data represented in memory? These two principles recur throughout programming. If you understand them, you can understand why Python programs are faster to write but slower to execute than C programs, what kind of limits might exist to how large a program you can write with a scripting language, and why certain Java programs won't work without a command-line parameter to increase their stack allocation. You'll be prepared to understand seemingly odd choices in language design (why does Java have those odd rules about variables accessible by local classes?), why one code sequence executes much faster than another sequence that superficially does the same thing, and the methods of many of the new verifiers (Coverity), bug-catchers (Purify), and bug-fixers (Exterminator). We won't cover all these tools, but we'll cover at least one and you'll learn the principles underlying the others. HOW THE COURSE WILL BE TAUGHT We will explore the above concepts using two languages: Python and C#. Both languages are easy to learn and no previous knowledge of either will be assumed. (C# note: Although originally a Microsoft-only language, an excellent open source version of the C# language and runtime is now available for Mac OS and several Linux distributions. This is the version the instructor will be using; if you choose it for homework you won't be stuck with an "orphan" version.) Each three-hour class session will be organized around a motivating question. Students will work in groups to answer the question in several steps over the course of the session. Bringing a network-enabled laptop to class will be a big help. Although class work will make large use of small groups, all exercises and assignments done outside class will be individual work. The final project, however, will be done in groups.

Prerequisites

CMPT 225, MACM 101.

Grading

There will be one midterm (20%) and one final exam (40%), together with several assignments and in-class exercises (20%) and a final group project (20%). These proportions are approximate. Exact proportions will be announced the first week of class.

Students must attain an overall passing grade on the weighted average of exams in the course in order to obtain a clear pass (C- or better).

Academic Honesty Statement

Academic honesty plays a key role in our efforts to maintain a high standard of academic excellence and integrity. Students are advised that ALL acts of intellectual dishonesty will be handled in accordance with the SFU Academic Honesty and Student Conduct Policies ( http://www.sfu.ca/policies/Students/index.html ). Students are also encouraged to read the School's policy information page ( http://www.cs.sfu.ca/undergrad/Policies/ ).

Data Last Updated: