CS 510 Administration

Instructor:

Dave Naumann with office hours: Mon 10-11, Mon 3-5, and by appointment.

Teaching Assistant:

Hardikkumar Rameshchandr Akhani, office hours: Wed 2-3

Prerequisite:

CS 590 and MA 502.

Meetings:

Monday 6:15-8:45PM, Pierce 120

Required textbooks:

Software:

We will use the DrScheme system which is available on the CS Lab machines and can be downloaded here for other platforms. Much of the code used in EOPL can be downloaded from the EOPL home page.

Mailing list:

cs510

Perspective:

The currently popular computer language is constantly changing. Fifteen years ago it might have been Pascal or C; 10 years ago it was probably C++; today it is probably Java (or C#). Now it seems time for another change. There are a host of other languages (Perl, PHP, Visual Basic, JavaScript, Python, Ruby, Haskell, Mercury, etc...) that are popular for their own classes of problems and programming styles. Therefore, to have a career in software engineering means having to learn new programming languages.

To meet your need to learn new programming languages quickly, and to help you work better with the languages you do use, this course seeks to provide a forum where you can develop an understanding of the basic design decisions that are part of every programming language. Things like:

Our technique for studying these questions will be two-fold. First we will learn the functional programming language Scheme. Functional programming is much different from the imperative programming that most of us are used to from languages like C++, Visual Basic, or Java. Learning functional programming helps one to develop a more thorough understanding of the various ways of organizing programs.

After we have developed some experience with Scheme we will develop a series of interpreters for various small programming languages. These interpreters allow us to experiment with various design decisions, how those decisions interact, and how different language features are implemented.

Objectives:

These essential objectives will be helpful for your career as a software engineer or computer scientist; hence we want to help you to master them. In one sentence, the main objective is that you will have a deep, working knowledge of the functional paradigm and the key ideas used in modern programming languages. In more detail the essential objectives for this course are that you will be able to:

In particular you will be able to

Acknowledgement:

In order to provide the highest quality course, I am using material from the course of Gary Leavens at Iowa State, with permission. Additional material was also provided by Prof. Adriana Compagnoni, who in turn credits Gary Leavens and John Hatcliff.



David Naumann 2006-12-08