Edinboro University of Pennsylvania

Department of Mathematics and Computer Science

CSCI 410 - Programming Languages

Spring Semester 2010

Welcome

This is the course syllabus for CSCI 410 - Programming Languages. The purpose of the syllabus is to spell out course guidelines, requirements, and expectations. Read the syllabus carefully and save it for future reference. If you have any questions, be sure to ask me.

Contents (The following are internal hyperlinks; Alt+ß returns to Contents)

Class meetings, 1

Instructor, 1

Textbook, 1

Course resources, 2

Course prerequisite, 2

Course description and objectives, 2

Course organization, 2

Course delivery, 3

Student evaluation, 3

Instructor and student responsibility, 4

Academic integrity (honesty), 4

General guidelines, 5

Class meetings: MWF 9-9:50 pm, 215 Doucette Hall

The final exam is Friday, May 7, 8-10 am.

Instructor: Timothy S. Meyer

Office location: 203D Doucette Hall

Office hours: MWF 10-10:45 am and 2-3 pm

In addition to the listed hours, I am often in my office. Feel welcome to just drop in and see me. Furthermore, an appointment can be scheduled.

Contact: Email

Phone (814) 732-1175

I check my email fairly often, so this is usually the fastest way to contact me. To ensure that your email does not get caught in my spam box, use your University account. If you call and I am not in my office, you can call the Department of Mathematics and Computer Science at 732-2760 and leave a message.

Textbook

Scott, Michael L. Programming Language Pragmatics, 3rd ed. (including CD-ROM). Morgan Kaufman, 2009.

Course resources

The instructor web site can be found via http://users.edinboro.edu/tsmeyer. Only the syllabus will be here since Blackboard is used. Course materials are available via Blackboard. Blackboard is accessed at http://blackboard.edinboro.edu. Your Blackboard username is the same as your University email account, and the password is initially mmddyy of your birth date. There is no student-specific web site for the text. But, there is a CD-ROM with more resources.

Course prerequisite

The prerequisite to the course is satisfactory completion of CSCI 330 - Object-Oriented Programming.

Course description and objectives

This course provides an extensive overview of programming languages with emphasis on language translation, language design, and alternative programming paradigms. In addition to the broader topics of syntax, semantics, translation to machine architecture, and building runnable programs, language design issues in control models, data typing, and abstraction will be covered. An exposure to one or more programming languages representative of different paradigms besides object-oriented programming, such as functional, logic, and scripting, will also be provided.

The broad objective of the course is to introduce programming languages. While programming itself will be part of the course, the subject of programming languages leans more toward understanding language design. Specific objectives include:

ü  Recognizing language paradigms

ü  Understanding the language translation process

·  Syntax and semantics

·  Target architectures

·  Runnable programs

ü  Understanding language design issues

·  Control models and abstraction

·  Data models, types, and abstraction

ü  Learning alternative paradigms

·  Functional (Lisp/Scheme)

·  Logic (Prolog)

·  Script programming (Python, Bash)

ü  Introducing concurrency and virtual machines

Note that C++ underlies many of the examples we will see in language design.

Course organization

The following table shows a broad outline of the topics to be covered over the semester.

Topic / Week
Intro / 1
Language fundamentals and paradigms / 1
Syntax / 1, 2
Scheme / 2
Names, scopes, and bindings / 3, 4
Semantics / 4, 5
Target architecture / 6
Runnable programs / 7
Prolog / 7
Control flow / 8
Data types / 9, 10
Python / 10
Control abstraction / 11, 12
Bash / 12
Data abstraction / 13
Concurrency, Virtual machines / 14

Except for alternative paradigms, covered topics generally follow the same order as in the textbook. We will not be covering all of each chapter—there is simply too much to cover in one semester. Instead, we will take a broad look at each topic and then delve into enough detail to gain a deeper appreciation of it.

Alternative paradigms are covered throughout the semester. For example, Scheme is introduced in week 2. Then we will write programs in Scheme to attain exposure to the functional paradigm. We will then cover Prolog, (logic programming paradigm) and Python and Bash (scripting languages) in a similar way.

All reading assignments are given in class. For a given reading assignment, perhaps the best approach is to read the assignment without pressing the fine details. Then, we’ll talk about the material in class. Then, you can go back and reread the material we focused on. If something is still not meaningful, let me know.

Course delivery

Our classes meet entirely in the classroom with perhaps one or two trips to the lab to demonstrate different languages. While the course title contains “programming” in it, this course is about language principles and not programming per se. The exception to this is the exposure to the different paradigms.

Student evaluation

Your grade will be based on a possible score of 100 as follows:

Work Points

Homework 20

Programs 15

Paper review 3

Project 18

Presentation 4

Exam 1 10

Exam 2 10

Final exam 20

Homework is assigned in class and is typically due the following class or in a week’s time. Programs will be written in Scheme, Prolog, Python, and Bash. Of these, more time will be devoted to Scheme in keeping with the programming languages community assessment that the functional paradigm is more important than the other alternatives that we will cover.

You will be required to write a review of a paper. This will assess your ability to use what you learn in this course to critique a paper on programming languages. There is also a project, which is a semester-long one. You will be given the choice of either developing a language translator or writing a paper on the design of a programming language. More info about the project will be provided early in the semester. The presentation is that of your project.

Exam dates will be announced in class. Note that the final exam is cumulative. Furthermore, should you score better on that part of the final corresponding to one of the first two exams, then the better score from the final will be used in calculating your total score. This is applied to just one exam, whichever results in the best total score.

Your grade is decided by:

Score Grade Score Grade

90-100 A 70-77 C

88-89 B+ 68-69 D+

80-87 B 60-67 D

78-79 C+ 0-59 F

Make-up work is not permitted. In the case of hardship, you may be excused from a work. (Note that hardship refers to things that are out of your control.) This is left to the instructor’s discretion. You are responsible for any missed material.

Instructor and student responsibility

A college education is challenging and full of opportunity. My responsibility is to teach an introduction to programming languages. This includes teaching effectively, being fair and consistent with all students, and returning graded work in a timely fashion. I very much enjoy being a teacher and interacting with you as we look at what programming languages is all about. Your responsibility is to be prepared for class and to complete work assigned to you. Always feel free to see me for assistance when you need it: a few minutes and you will feel a lot more comfortable with the material.

Academic integrity (honesty)

You are expected to abide by course guidelines. Furthermore, plagiarism and cheating are dishonest. It is one of the basic tenets of education that we further our own knowledge and not copy the work of others. You are expected to be honest with me in all aspects of the course. See http://issuu.com/edinboro/docs/8315, page 35, for the University’s policy concerning plagiarism. Cheating is receiving assistance from others or using resources not allowed in the course. Cheating also includes assisting others in assigned work. A violation of academic integrity will result in either a zero score for a work or a course failure.

One example of cheating that occurs is with homework. While it is often well intentioned, helping someone with their homework while sitting at adjacent computers or by sharing files is fraught with the potential for cheating. Simply avoid doing this.

If you do not understand material or have difficulty doing any work, don’t hesitate to see me for assistance. While I won’t give you the answers, I will show you how to find answers.

General guidelines

The University requires that attendance be taken (see http://issuu.com/edinboro/docs/8315, page 36). Class attendance is not factored directly into grades. Attendance, though, does affect grades—regular attendance ensures that you are aware of all material and assignments. Class starts at the assigned time. If you are going to be late, try to be discrete on your arrival to ensure as little disruption of class as possible. Also, when in class, act professionally and respect others.

Class notes will be posted in Blackboard. While these notes are in outline form, they will show what material is being covered. You are still responsible for all material actually presented in class. Reading assignments and other assignments are included in the notes as well.

Make-up work will not be given. An excuse, though, may be given due to an extreme hardship. (You are still responsible for all material.) Inform me that an assignment will be missed. Furthermore, there needs to be documented evidence supporting why the work was not done. While this may seem a rigorous policy, it’s important that everyone be given a consistent and fair policy. If you do miss a work and are not sure if it falls under hardship, ask me. Examples that are not hardship include not being aware of an assignment, not knowing where the files you need are, not handing in an assignment properly, oversleeping, missing a ride to school, forgetting to bring an assignment with you to class, your printer not working, and similar reasons. Plan ahead and don’t wait until the last minute. As will be explained in class, there is a way to ensure that homework is handed in on time if you will be absent.

Do not email assignments to me. After grading your work, I will return it. If you do not get your work back, see me and I will give it to you. You are responsible for keeping all graded work until the end of the semester.

If you have a disability or a situation that may affect your ability to successfully complete this course, let me know. Hopefully we’ll be able to address any concerns. I have a hearing problem, which limits my ability in class discussions. You are welcome to ask questions in class, but I need to be nearby and you’ll need to speak clearly. Other effective ways of communicating with me include email, talking with me before or after class, and in person, either in the hallway or my office. For a similar reason, I have difficulty using the telephone. If you call, go slow and make sure that I understand you are a student of mine in this course.

We are all expected to conduct ourselves professionally in the classroom. Be sure to respect others. This includes avoiding distractions such as talking to others and arriving late to class or getting up during class. Be sure that cell phones, pagers, and similar devices are turned off and put away.

The University calendar for the spring semester 2010 is at http://www.edinboro.edu/calendar (you may have to scroll down a bit – the link is at the left: Academic Calendar). Included in the calendar are the last days to add, drop, or withdraw from a course. Also, there are no classes March 8, 10, and 12 (Spring Break).

And, finally, although this syllabus is accurate as we begin the semester, I may make changes as needed. Any changes will be announced in class.

Page 5 of 6

CSCI 410 : Spring 2010