Meeting
Time/Place: MWF 10-10:50pm
Fitzelle 218
Prerequisites:
CSCI 203
Instructor: Dr.
Don Allison
Office: 225
Fitzelle Hall
Phone: 436-3439
Email: drallison225@gmail.com
Office Hours: M 2-3, W 3-4, F 3-5
Others
by appointment (or just drop by)
Text and
Software:
No textbook. We will 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 |
|
January 18-22 Blood Donor month Glaucoma Awareness month Healthy Weight week |
MLK day—offices open Orientation & advisement |
Robert E. Lee day Last day to register |
Vasant Panchami Classes begin Introduction |
|
|
|
January 25-29 |
Add/drop ends |
History |
|
||
|
February 1-5 National Black History month American Heart month AMD/Low Vision Awareness month |
Last day to add a full semester course Groundhog day |
Functional Programming |
Rosa Parks birthday |
National Wear Red day Give Kids A Smile day |
|
|
February 8-12 Burn Awareness week |
February 7, Superbowl |
|
|
|
Lincoln’s birthday Maha Shivaratri |
|
February 15-19 Cardiac Rehabilitation week Child Passenger Safety week Condom week |
February 14, Valentine’s day February 14, Chinese/Lunar New Year President’s day Susan B. Anthony day Nirvana day Lisp assignment due |
Shrove Tuesday (Mardi Gras) |
TAP certification begins Ash Wednesday Logic Programming |
Last day to drop 1st mini
course |
College closes after last class |
|
February 22-26 |
Washington’s birthday BREAK |
BREAK |
BREAK |
BREAK |
Muhammad’s birthday BREAK |
|
March 1-5 National Chronic Fatigue Syndrome Awareness
month Women’s History month Deaf History month Mental Retardation Awareness month National Multiple Sclerosis Education
& Awareness month American Red Cross month Greek-American Heritage month Irish-American Heritage month Eating Disorders Awareness week |
February 28, Purim Holi Classes Resume |
Add/drop ends for 2nd mini 1st mini courses end |
EXAM 1 |
|
|
|
March 8-12 |
International Women’s day Summer registration begins |
|
|||
|
March 15-19 |
Daylight Saving Time began
yesterday…spring forward Ides of March |
Vaisaki |
St. Patrick’s day Describing Syntax & Semantics |
Interim progress reports due from faculty |
Add/drop ends for 2nd half 1st half courses end |
|
March 22-26 |
March 20, Vernal Equinox |
|
Ramanavami Last day to drop 2nd mini
course Lexical & Syntax Analysis |
|
Last day to drop a full semester course |
|
March 29-April 2 |
March 28, Palm Sunday |
Hanuman Jayanti Magha Puja Day First day of Passover |
Cesar Chavez day Names, Bindings, Type Checking, and
Scopes |
April Fool’s day |
College closes after last class Good Friday |
|
April 5-9 Alcohol Awareness month National Autism Awareness month National Occupational Therapy month National Parkinson’s Awareness month Poetry month |
April 4, Easter Sunday Easter Monday BREAK |
Last day of Passover BREAK |
BREAK |
Vesak—Buddha’s birth BREAK |
BREAK |
|
April 12-16 |
Classes resume |
Add/drop ends for 3rd mini 2nd mini courses end Thomas Jefferson’s birthday |
EXAM 2 Data Types |
Incomplete/pending grade deadline Emancipation day |
|
|
April 19-23 |
Patriot’s Day Yom Ha'Atzmaut |
Begin fall pre-enrollment |
Expressions & Assignment Statements |
Earth day Administrative Professionals day Secretaries day Take Your Kids To Work day |
St. Georges day |
|
April 26-30 |
Confederate Memorial day |
Last day to drop 2nd half
course |
Control Statements |
Arbor day Last day to withdraw from college |
Theravadin New Year |
|
May 3-7 National Mental Health month National Older Americans month Women’s Health Care month National Better Hearing & Speech
month Asian/Pacific American Heritage month Jewish-American Heritage month |
May 1, May day May 1, National Day of Prayer |
|
Cinco De Mayo Last day to drop 3rd mini
course Subprograms |
|
|
|
May 10-14 |
May 9, Mother’s day |
Last day of classes |
Study day |
Ascension Day FINALS 8am: 10TR 11am: 4TR 2pm: 12TR |
FINALS 8am: 10MWF (our final) Presentation
of Language Design Projects 11am: 2MWF 2pm: 12MWF |
|
May 17-21 |
FINALS 8am: 9MWF 11am: 1MWF 2pm: 11MWF |
FINALS 8am: 8TR 11am: 2TR |
Shavuot FINALS 8am: 8MWF 11am: 3MWF Full semester, 2nd half and 3rd
mini courses end |
|
Holocaust Memorial day Commencement, Saturday, May 22 |
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. This is even more important since there is no
textbook.
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 2010
! Program #1: Functional
Programming
! Author: Don Allison
! Date Due: 6 February 2010
!
! 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, drallison225ATgmail.com,
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 project. Each
midterm exam will contribute 15% of your grade, while the final will contribute
20%. The final will consist of
presenting your language design project.
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 15% 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 during the final
exam period. This will count as 20% of
your grade and will replace your final exam.
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% |
3 March |
|
Midterm Exam #2 |
15% |
14 April |
|
Final Exam
(Language Design Project) |
20% |
14 May, 8am |
|
Lisp Programs |
15% |
15 February |
|
Prolog Programs |
15% |
15 March |
|
Python Programs |
15% |
12 April |
|
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.
Emergency
Evacuation:
The Evacuation Assembly Area for
this course is in the quad, 50 feet from the building. In case a prolonged building evacuation
is required, you will be directed to the building Evacuation Site. The Evacuation Site for this class is
the Lobby of IRC. In any
case, if a building evacuation occurs, stay together as a class so that we can
determine that everyone has made it safely from the building. Evacuation is to occur any time the
fire alarm sounds, an evacuation announcement is made, or a university official
orders you to evacuate the building. After
the building has been evacuated, it is not to be re-entered until University
Police gives permission.