Meeting Time/Place: MWF 11-11:50pm Fitzelle
218
Prerequisites: CSCI 203
Instructor:
Don Allison
Office: 225 Fitzelle
Hall
Phone: 436-3439
Email: allisodl@oneonta.edu
Office Hours: Wednesday 1:40-4pm
Friday
2:15-5pm
Others
by appointment (or just drop by)
Text and Software: The text for this course is Concepts of
Programming Languages, by Robert Sebesta, 8th
edition, ISBN 0-321-49362-1, published by McGraw-HAddison-Wesley
in 2008. We will also be using several
different computer languages for various programming projects. These will be available in the department
lab. If you want to install them on your
personal computer, you can find them at the following sites:
GNU
Common Lisp: http://clisp.cons.org/
SWI
Prolog: http://www.swi-prolog.org/
Python:
http://www.python.org/
Python
tutorials: http://www.python.org/doc/
Course Description (from the
catalog): Analyzes programming languages
in terms of their features and limitations based on run-time behavior. Presents two or three languages
for in-depth study. These may
include, for example, SNOBOL, LISP, Prolog, APL, and PL/1. Students complete applications projects
chosen specifically to exhibit the power and limitations of languages
presented.
Course Description (the inside scoop):
The purpose of this course is to examine the features of programming languages,
why they were designed the way they were, and how they are implemented. We will examine three main programming
paradigms: functional programming, logic programming, and procedural/object-oriented
programming, spending the most time on the latter. The current programming language landscape
will also be placed in historical perspective so that students may appreciate
how hardware and programming language capabilities evolved together and how
software engineering has driven and been driven by programming language
development.
Course Goals By the end of the course students should be conversant with the different
programming paradigms, and should have experienced the process of learning a
new language on the fly while also using it to complete a project. Students should have a reasonable grasp of
the basic features of programming languages, and how each feature affects the
implementation of that language.
Tentative Schedule:
|
Date |
Monday |
Tuesday |
Wednesday |
Thursday |
Friday |
|
Jan 12-Jan 16 |
|
Last day
to register |
Classes
begin Add/drop
begins |
|
Read
Chapter 1 Preliminaries |
|
Jan 19-Jan 23 |
Martin
Luther King Day – admin offices open |
Add/drop
ends Last day
to sign up for P/F Inauguration
Day |
|
Read
Chapter 2 Evolution of the Major Programming Languages |
|
|
Jan 26-Jan 30 |
Chinese
New Year |
Last day
to add a full semester course |
|
Read
Chapter 15 Functional Programming Languages |
|
|
Feb 2-Feb 6 |
Superbowl was
yesterday Groundhog
Day May
graduation application deadline |
|
|
Lisp assignment due |
|
|
Feb 9-Feb 13 |
|
|
TAP
Certification begins |
Read
Chapter 16 Logic Programming Languages |
|
|
Feb 16-Feb 20 |
President’s
Day |
College closes
after last class MIDTERM EXAM #1 |
|||
|
Feb 23-Feb 27 |
Graduate
admissions applications due Break |
Mardi
Gras Break |
Ash
Wednesday Break |
Break |
Break |
|
Mar 2-Mar 6 |
Classes
resume Summer
session registration begins Dr. Suess birthday Read Across
America Day |
|
|
|
Read
Chapter 3 Describing Syntax and Semantics |
|
Mar 9-Mar 13 |
Daylight
Savings Time started yesterday morning…did you set your clock ahead? |
Purim |
Interim
grades due from faculty |
|
Read
Chapter 4 Lexical and Syntax Analysis |
|
Mar 16-Mar 20 |
St. Patrick’s Day |
|
LAST DAY
TO DROP A CLASS First
day of spring Read
Chapter 5 Names, Bindings, Type Checking, and Scopes |
||
|
Mar 23-Mar 27 |
Read
Chapter 6 Data Types |
||||
|
Mar 30-Apr 3 |
|
April
Fools |
|
College closes
after last class |
|
|
Apr 6-Apr 10 |
Break |
Break |
Break |
Break Passover |
Break Good
Friday |
|
Apr 13-Apr 17 |
Easter
Monday |
Last day
for students to make up I or P grades from fall 2008 Classes
resume |
Income
Taxes Due |
|
Last day
for faculty to turn in grades to replace I/P grades Read
Chapter 7 Expressions and Assignment Statements MIDTERM
EXAM #2 |
|
Apr 20-Apr 24 |
Begin
fall pre-enrollment Earth
Day Administrative
Professional’s Day |
Last day
to withdraw from college |
Arbor
Day Read
Chapter 8 Statement Level Control Structures |
||
|
Apr 27-May 1 |
|
|
May Day Read
Chapter 9 Subprograms Read
Chapter 10 Implementing Subprograms |
||
|
May 4-May 8 |
Presentation of Language Design Projects |
Cinco de
Mayo National Teachers’ Day |
Last day
of class |
Final
Exams Begin 8-10:30am
TR10 11am-1:30pm
TR4 2-4:30pm
TR12 |
8-10:30am
MWF10 11am-1:30PM
MWF2 2-4:30pm
MWF12 |
|
May 11-May 15 |
Mother’s
Day was yesterday—did you remember?? 8-10:30am
MWF9 11am-1:30pm
MWF1 2-4:30pm
MWF11 Final Exam 2pm |
Nurses’
Day 8-10:30am
TR8 11am-1:30pm
TR2 |
8-10:30am
MWF8 11am-1:30pm
MWF3 Final
Exams End |
|
Commencement,
Saturday May 16 Armed
Forces Day Saturday May 16 |
Attendance Policy: Attendance is STRONGLY
encouraged. Attendance will be taken at
random class meetings. All college
policies regarding attendance will be followed.
You will be responsible for material covered in the as well as the
material in the text. In addition, we
will be discussing the exams and programming projects in class, writing sample
code for them, and so on, as well as answering questions about the assigned
material, so it is in your best interest to attend class as much as possible.
Collaboration
Policy: Cheating or other
academic dishonesty hurts others as well as yourself and will not be
tolerated! Since one goal of this class
is to provide you with experience with larger programming projects similar to
those in the real world, like the real world it IS acceptable to collaborate
with your classmates, under certain conditions. All work submitted on the exams should be
yours and yours alone. It IS acceptable
to discuss the programming projects among yourselves, AS LONG AS any code you
turn in you have written yourself! You
should also be able to answer any questions I have about your code—in other
words, you should be able to explain the algorithms and data structures you are
using in your program if I ask.
Plagiarism can get you in trouble in the “real world”, and it will
get you in trouble in this class. You
should credit any code that you did not write yourself, and you should provide
references to algorithms and data structures you use!
Programming Style
Guidelines: Since this is an upper division course, it is
expected that your programs will follow good programming style conventions for
the language you are using. You should
indent your code to reflect its internal structure. You should use block comments to explain what
your code is doing at a high level. Each
function should have a header that gives the function name, the inputs, the
output(s), and lists any side effects, as well as providing a two or three
sentence summary of what the function does.
In addition, your main program file should have a block header similar
to the following:
! CSCI 310
Organization of Programming Languages, Spring 2009
! Program #1:
Functional Programming
! Author: Don
Allison
! Date Due: 6
February 2009
!
! This program
illustrates the functional programming paradigm.
Your header should
include the course name and number, the assignment number, your name, the
program due date, and a two or three sentence description of the purpose and
function of the program.
Program Turn-in
Procedure:
You should zip up your source files, include files,
and any data files needed to run your program.
In addition, you should
create a README file that describes the steps I’ll need to take to compile and
run your program. The zip file should be
emailed to me, allisodl@oneonta.edu,
as an attachment, with a subject line such as (if your name
were Don Allison and you were turning in the Procedural Programming program)
Procedural Programming program turnin: Don
Allison. Make sure you turn in all the
required parts!!!
Grading
and Other Administrivia:
Exams: There will be a two
midterm exams and a final. Each midterm
exam will contribute 15% of your grade, while the final will contribute 20%.
Programming Projects: The programming
projects are an integral part of the course.
There will be three large projects, each of which will be composed of
several smaller programs. Each of these
projects will count 10% towards your final grade. The projects will be implemented in Lisp,
Prolog, and Python.
Language Design Project: There will be a
semester long language design project.
In this project, you will take a problem and solve it by designing a
special purpose language for it, using the concepts we have been studying
throughout the semester. You will
present your language and discuss its design the last day of class. This will count as 15% of your grade.
Homework, etc: The
remaining 5% of your grade will be determined by your grades on homework
assignments, class participation, etc.
Grade Computation:
|
|
Weight |
Tentative Date |
|
Midterm Exam #1 |
15% |
February 20 |
|
Midterm Exam #2 |
15% |
April 17 |
|
Final Exam |
20% |
May 11, 2pm |
|
Lisp Programs |
10% |
February 6 |
|
Prolog Programs |
10% |
March 16 |
|
Python Programs |
10% |
April 3 |
|
Language Design
Project |
15% |
April 27 |
|
Class Participation
/ Homeworks |
5% |
|
|
Total |
100% |
|
Make-up Test and Late
Assignment Policy: Late assignments will
be assessed a 10% penalty for each day that they are late. Assignments are considered due by 11:59PM on
their due date, and any turned in after that time but before 11:59PM the next
day will be assessed a 10% penalty.
After 11:59PM of the next day, the penalty will be increased to 20%, and
so on up to a maximum penalty of 100%. Note that weekends count as a single day, ie
Saturday and Sunday together just add a 10% penalty. All assignments must be turned in by the last
day of classes for them to count toward the course grade. You should plan to be present for all the
tests and the final exam. Any makeups will be allowed only for legitimate,
school-approved excuses, and should be arranged with the instructor as soon as
possible after you discover you can’t attend the exam (before the exam is given
whenever possible). In any case, all
work must be completed by the last class, including any makeup exams. Exams missed for unexcused absences, or exams
not made up by the last day of classes will be recorded as a zero grade.
Additional resources: for students wishing to explore further or to
find answers to questions not covered in the text, there are many books and
journals available. The following books
are just a sampling of the wide diversity out there (these are some that happen
to be in the campus library):
A
Programming Language,
Kenneth Iverson, 1962, QA 76.5 .I9 (covers APL)
The
Little LISPer, Daniel Friedman, 1987, QA76.73.L23 F74 1987
(gentle intro to Lisp)
Common
LISP,
Guy Steele, 1984, QA76.73.L23 S73 1984 (definition of Common Lisp language)
LISP, David Touretzky, 1984, QA76.73.L23 T67 1984 (intro Lisp textbook)
LISP, Patrick Henry
Winston, 1984, QA76.73.L23 W56 1984 (intro Lisp textbook)
A
Programmer’s Guide to Common LISP, Deborah Tatar, 1987, QA76.73.C28 T38 1987
(slightly more advanced Lisp textbook)
Artificial
Intelligence Programming, Eugene Charniak, 1980, Q336
.C48 1980 (using Lisp to develop AI applications)
Programming
in Prolog,
William F. Clocksin, 1985, QA76.73.P76 C57 1985
(standard Prolog description)
Prolog
Programming for Artificial Intelligence, Ivan Bratko,
1986, Q336 .B74 1986 (using Prolog to develop AI applications)
The Art
of Prolog,
Leon Sterling, 1986, QA76.73.P76 S74 1986 (intro Prolog text)
Structured
COBOL,
Tyler Welburn, 1981, QA76.73.C25 W44
The
SNOBOL 4 Programming Language, Ralph E. Griswold, 1971, QA76.73.S6 G75
1971
Pascal
Applications for the Sciences, Richard E. Crandall, 1984, Q183.9 .C73 1984
Software
Tools in Pascal,
Brian W. Kernighan, 1981, QA76.6 .K493
An
Introduction to Programming and Problem Solving with Pascal, Michael G.
Schneider, QA76.73.P2 S36 1982
Programming
in Modula-2,
Niklaus Wirth, 1983, QA76.73.M63 W5713 1983
A Guide
to ALGOL Programming,
Daniel D. McCracken, 1962, QA76.5 .M186
The
Annotated C++ Reference Manual, 1990, Margaret A. Ellis, QA76.73.C153 E35
1990
Comparing
and Assessing Programming Languages, Alan R. Feuer,
1984, QA76.73.A35 C66 1984
Principles
of Programming Languages, Bruce J. MacLennan, 1987, QA76.7 .M33 1987
Fundamentals
of Programming Languages, Ellis Horowitz, 1984, QA76.7 .H67 1984
Programming
Languages,
Terrence W. Pratt, 1984, QA76.7 .P7 1984
The Definition
of Programming Languages, Andrew D. McGettrick, 1980,
QA76.7 .M28
If you have any
particular areas you would be interested in for further reading and study,
please ask me and I can recommend a range of books for you to consider.
Additional unique
aspects of the course: Unlike more
traditional memorize and regurgitate courses, this course has a strong hands-on
learning, or learning by doing component, represented by the programming
projects. This enhances retention,
reinforces understanding, and ensures that the student masters the material
well enough to be able to use it in other projects. By forcing the student to learn three new
programming languages and two or three new programming paradigms, this course
will help students get beyond the rut of being a Java or C++ programmer, and
move them towards the goal of becoming a computer scientist.