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/
Scala: https://www.scala-lang.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 |
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 |
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 (Names, Bindings & Scopes Ch 5) |
Corned Beef & Cabbage Day St Patrick’s Day |
Supreme Sacrifice Day |
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 |
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 |
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
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.
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.)