CSCI 310 Organization of Programming Languages

Spring 2020

Updates 3/26/2020

 

Meeting Time/Place:           MWF 1-1:50pm Fitzelle 254

Prerequisites:                       CSCI 203

Instructor:                             Dr. Don Allison

Office:                                    Fitzelle 231

Phone:                                    436-3439

Email:                                     allisodl(at)oneonta.edu

Office Hours:                        MF 4, MWF 5

                                                Others by appointment (or just drop by)

 

Text and Software: 

The textbook for this course is Concepts of Programming Languages, Robert Sebesta, 11th edition, Pearson, ISBN 978-0133943023.  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/

Haskell: http://hackage.haskell.org/platform/windows.html

Haskell tutorial: http:/learnyouahaskell.com/

SWI Prolog: http://www.swi-prolog.org/

Python: http://www.python.org/

Python tutorials: http://www.python.org/doc/

EiffelStudio: http://dev.eiffel.com/Downloads

Eiffel books: http://www.onlinecomputerbooks.com/free-eiffel-books.php

Google Go: http://golang.org/

Clojure: https://clojure.org/

Rust: https://www.rust-lang.org/

Kotlin: https://kotlinlang.org/

Erlang: https://www.erlang.org/

D: https://dlang.org/

Scala: https://www.scala-lang.org/

R: https://www.r-project.org/

Elixir: https://elixir-lang.org/

OCaml: https://ocaml.org/

 

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):

As you can tell, this description was written a LONG time ago if it is mentioning languages like SNOBOL and APL.  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.  To allow you to compare and contrast the three basic approaches, we will write programs in a representative example of each of the three types;  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:

 

 

 

 

 

Monday

Tuesday

Wednesday

Thursday

Friday

Jan 13-17

National Rubber Duckie Day

Last day to register

Dress Up Your Pet Day

 Classes begin

Add/drop begins

National Hat Day

National Nothing Day

Ditch New Year’s Resolutions Day

Introduction & History (CH 1&2)

Jan 20-24

Penguin Awareness Day

Add/drop ends

Squirrel Appreciation Day

National Blonde Brownie Day

National Pie Day

Beer Can Appreciation Day

Jan 27-31

Bubble Wrap Appreciation Day

Functional Programming (CH 15)

Last day to add

National Kazoo Day

Data Privacy Day

National Puzzle Day

National Inane Answering Message Day

Backward Day

Feb 3-7

The Day the Music Died

Create a Vacuum Day

National Weatherman’s Day

Lame Duck Day

Wave All Your Fingers at Your Neighbor Day

Feb 10-14

Clean Out Your Computer Day

Logic Programming (CH 16)

National Inventor Day

Make a Friend Day

TAP certification begins

National Lost Penny Day

Functional programming assignment due

Get a Different Name Day

Valentine’s Day

National Organ Donor Day

Feb 17-21

Random Acts of Kindness Day

National Battery Day

National Chocolate Mint Day

Love Your Pet Day

Hoodie Hoo Day

Cherry Pie Day

Card Reading Day

 Feb 24-28

Diploma application due

National Tortilla Chip Day

Procedural/O-O programming assignment

(Syntax & Semantics Ch 3)

Mardi Gras

Ash Wednesday

Logic programming assignment due

EXAM #1

No Brainer Day

Public Sleeping Day

Mar 2-6

Summer registration begins

Old Stuff Day

Lexical & Syntax Analysis Ch 4)

If Pets Had Thumbs Day

Hug a GI Day

Interim progress reports due from faculty

Multiple Personality Day

College closes after last class

National Frozen Food Day

World Day of Prayer

Mar 9-13

BREAK

Panic Day

Daylight Saving Time Started Yesterday…Did you set Your Clock Forward?

BREAK

Middle Name Pride Day

Purim

BREAK

Johnny Appleseed Day

Worship of Tools Day

BREAK

Popcorn Lovers Day

BREAK

Blame Someone Else Day

Mar 16-20

Classes resume

Everything You Do Is Right Day

Language Design project

(Names, Bindings & Scopes Ch 5)

Corned Beef & Cabbage Day

St Patrick’s Day

Supreme Sacrifice Day

Procedural/O-O programming assignment due

Poultry Day

Last day to drop

ET Abductions Day

Spring Equinox

Mar 23-27

National Puppy Day

National Melba Toast Day

(Data Types Ch 6)

National Chocolate Covered Raisin Day

Feast of Annunciation Day

Waffle Day

Make Up Your Own Holiday Day

National “Joe” Day

Mar 30-Apr  3

Fall registration begins

Take a Walk in the Park Day

(Expressions & Assignment Stmts Ch 7)

Bunsen Burner Day

National Crayon Day

April Fool’s Day

International Fun at Work Day

National PeanutButter & Jelly Day

Don’t Go to Work Unless It’s Fun Day

EXAM #2

Apr 6-10

Last day to make up an incomplete

New Beer’s Eve

(Stmt Lvl Control Structures Ch 8)

No Housework Day

World Health Day

Passover begins at Sundown

Zoo Lover’s Day

Name Yourself Day

Good Friday

National Siblings Day

Apr 13-17

Dyngus DayNational Peach Cobbler Day

(Subprograms Ch 9)

International Moment of Laughter Day

Income Taxes Due

That Sucks Day

Last day to withdraw

Passover ends

National Bean Counter Day

Bat Appreciation Day

National Cheeseball Day

Apr 20-24

Last day for faculty to turn in incomplete updates

Volunteer Recognition Day

(Implementing Subprograms Ch 10)

Kindergarten Day

Administrative Professionals’ Day

Ramadan

National Zucchini Bread Day

Take Your Daughter to Work Day

Arbor Day

Apr 27-May 1

National Prime Rib Day

Morse Code Day

Language Design project due

Last day of class

International Astronomy Day

STUDY DAY

National Shrimp Scampi Day

National Zipper Day

Exams start

(8:30 TR)

8-10:30am

(11:30TR)

11am-1:30pm

(2:30TR)

2-4:30pm

National Honesty Day

(8 MWF)

8-10:30am

(11 MWF)

11am-1:30pm

(2MWF)

2-4:30pm

CSCI 272

International Tuba Day

May 4-8

(9 MWF)

8-10:30am

(12 MWF)

11am – 1:30pm

CSCI 100

 

(3 MWF)

2-4:30pm

CSCI 232

National Candied Orange Peel Day

(10 TR)

8-10:30am

(1 TR) 11am-1:30pm

(4 TR)

2-4:30pm

Cinco de Mayo

National Teacher’s Day

(10 MWF)

8-10:30am

(1 MWF)

11am-1:30pm

CSCI 310

(4MW)

2-4:30pm

Exams End

No Diet Day

Beverage Day

National Tourism Day

No Socks Day

V-E Day

World Red Cross Day

https://suny.oneonta.edu/academics/college-calendar/spring-key-dates-deadlines

http://www.holidayinsights.com/moreholidays/

 

 

 

 

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 class 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 different programming paradigms and languages similar to those you might use 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 2020

! Program #1: Functional Programming

! Author: Don Allison

! Date Due: 12 February 2020

!

! This program illustrates the functional programming paradigm.

! This part of the project solves the Towers of Hanoi problem using tail recursion.

 

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 Your programs should take the input as shown in the assignment and give the output as shown, and should use the function names used in the sample input.  You should be able to cut the input and paste it into your program to get the output given.  The zip file should be emailed to me, allisodl(at)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) CSCI 310 Procedural Programming program turnin: Don Allison.  Make sure you turn in all the required parts!!!  Make sure you include the appropriate subject line!!!

 

Email:

Any time you need to communicate with me about the course via email, you MUST put “CSCI 310” in the subject line.  Otherwise it will get lost and I won’t see it.

 

 

Grading and Other Administrivia:

Exams: There will be a two midterm exams and a final experience.  Each midterm exam will contribute 25% of your grade, while the final experience will contribute 5%.  The final experience will be presenting your language design to the class.  There will also be three programming projects and the 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 10% towards your final grade.  The projects will be implemented in a functional programming language, a logic programming language, and a procedural or object-oriented language.

 

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 will have been studying throughout the semester.  You will present your language and discuss its design during the final exam.  The design documents for your language will contribute 15% of your grade, while the presentation will contribute another 5%.

 

Grade Computation:

 

 

Weight

Tentative Date

Midterm Exam #1

25%

26 Feb

Midterm Exam #2

25%

3 April

Final Exam Experience

5%

6 May, 11am-1:30pm

Functional Programs

10%

12 February

:Logic Programs

10%

26 February

Procedural/O-O Programs

10%

18 March

Language Design Project

15%

27 April

Total

100%

 

 

 

Make-up Test and Late Assignment Policy: 

Late assignments will be assessed a 50% penalty for the first week they are late and will not be accepted if they are over a week late.  Assignments are considered due by 11:59PM on their due date.  Note that breaks do not count in computing any penalty.  No assignment will be accepted after the last day of class, even if that is within the week long grace period, for them to count toward the course grade.  You should plan to be present for all the tests and the final exam.  Any makeup exams 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 outside, 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 IRC Lobby.  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.  For more information, see http://www.oneonta.edu/security/documents/EmergencyEvacuationProcedures.pdf.

 

Required ADA Statement:

Students Diagnosed with a Disability—All individuals who are diagnosed with a disability are protected under the Americans with Disabilities Act, and Section 504 of the Rehabilitation Act of 1973. As such, you may be entitled to certain accommodations within this class. If you are diagnosed with a disability, please make an appointment to meet with Accessibility Resources, 133 Milne Library, ext. 2137. All students with the necessary supporting documentation will be provided appropriate accommodations as determined by the Accessibility Resources Office. It is your responsibility to contact Accessibility Resources and concurrently supply me with your accommodation plan, which will inform me exactly what accommodations you are entitled to. You will only receive accommodations once you provide me with an Accessibility Resources accommodation plan. Any previously recorded grades will not be changed.

(Note: I have had cases where SDS told me they were no longer going to provide services that a student was entitled to, so be proactive and get all the paperwork done ASAP so that we can fight for your accommodations if we need to.)