CSCI 310 Organization of Programming Languages

Spring 2010

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

Prolog assignment due

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

Python assignment due

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)

Language Design project due

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

Ada for Experienced Programmers, A. Nico Habermann, 1983, QA76.73.A35 H3 1983

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.