Meeting Time/Place: MWF 12-12:50pm Fitzelle
300
Prerequisites: CSCI 203
Instructor:
Don Allison
Office: 225 Fitzelle
Hall
Phone: 436-3439
Email: allisodl@oneonta.edu
Office Hours: Tuesday 2-3pm
Thursday
2-5pm
Friday
3-4pm
Others
by appointment (or just drop by)
Text and Software: The text for this course is Programming
Languages: Principles and Paradigms, by Tucker and Noonan, ISBN 0-07-238111-6,
published by McGraw-Hill in 2002. 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 14-Jan 18 |
|
Last day
to register |
Classes
begin Add/drop
begins Read Chapter 1 Overview and History |
|
(send as
attachment) |
|
Jan 21-Jan 25 |
Martin
Luther King Day – admin offices open |
Add/drop
ends Last day
to sign up for P/F |
Read
Chapter 8 Functional
Programming & Lisp |
|
|
|
Jan 28-Feb 1 |
|
Last day
to add a full semester course Groundhog
Day |
|
|
May
graduation application deadline |
|
Feb 4-Feb 8 |
|
Mardi
Gras |
|
|
TAP
Certification begins Lisp assignment due |
|
Feb 11-Feb 15 |
Read
Chapter 9 Logic
Programming & Prolog |
|
MIDTERM EXAM #1 |
Valentine’s
Day |
College
closes after last class |
|
Feb 18-Feb 22 |
President’s
Day Break |
Break |
Break |
Break |
Washington’s
Birthday Break |
|
Feb 25-Feb 29 |
Classes
resume Graduate
admissions applications due |
|
|
|
Leap Day |
|
Mar 3-Mar 7 |
|
Read
Chapter 2 Syntax |
|
||
|
Mar 10-Mar 14 |
|
|
Interim
grades due from faculty |
|
|
|
Mar 17-Mar 21 |
St. Patrick’s Day Read Chapter 3 Types & Semantics |
|
MIDTERM
EXAM #2 Purim |
|
LAST DAY
TO DROP A CLASS College
closes after last class Good Friday Baha’i New Year |
|
Mar 24-Mar 28 |
Break |
Break |
Break |
Break |
Break |
|
Mar 31-Apr 4 |
Classes
resume |
|
Read
Chapter 4 Imperative
Programming |
|
|
|
Apr 7-Apr 11 |
|
|
|
|
Read
Chapter 5 Memory
Management |
|
Apr 14-Apr 18 |
Last day
for students to make up I or P grades from fall 2007 |
|
|
|
|
|
Apr 21-Apr 25 |
Begin
fall pre-enrollment Read
Chapter 6 Exceptions |
Earth
Day |
|
Last day
to withdraw from college |
|
|
Apr 28-May 2 |
Last day
for faculty to turn in grades to replace I/P grades Read
Chapter 7 OO
Programming |
|
|
Holocaust
Remembrance Day |
|
|
May 5-May 9 |
Cinco de
Mayo Presentation of Language Design Projects |
Last day
of class |
STUDY
DAY, no classes |
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 FINAL EXAM 2pm |
|
May 12-May 16 |
Mother’s
Day was yesterday—did you remember?? 8-10:30am
MWF9 11am-1:30pm
MWF1 2-4:30pm
MWF11 |
8-10:30am
TR8 11am-1:30pm
TR2 |
8-10:30am
MWF8 11am-1:30pm
MWF3 Final
Exams End |
|
Commencement,
Saturday May 17 |
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 2008
! Program #1:
Functional Programming
! Author: Don
Allison
! Date Due: 8
February 2008
!
! 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 13 |
|
Midterm Exam #2 |
15% |
March 19 |
|
Final Exam |
20% |
May 9, 2pm |
|
Lisp Programs |
10% |
February 8 |
|
Prolog Programs |
10% |
March 3 |
|
Python Programs |
10% |
April 4 |
|
Language Design
Project |
15% |
May 2 |
|
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