CSSE 304 Syllabus and Policies
Rose-Hulman Institute of Technology
Department of Computer Science and Software Engineering
Spring 2013
Catalog Course Description
Syntax and semantics of programming languages. Grammars, parsing, data
types, control flow, parameter passing, run-time storage management,
binding times, functional programming and procedural abstraction,
syntactic extensions, continuations, language design and
evaluation. Students will explore several language features by writing
an interpreter that implements them.
Course Description: Programming Language Concepts
In this course, you will:
- learn how to develop software in a functional programming
language. To this effect, we will introduce and explore the major
features and techniques of the Scheme programming language.
- develop an interpreter for major portions of the Scheme
programming language, using Scheme to implement it.
This will provide you with a behind-the-scenes view of a programming
language.
Prerequisites
CSSE 230 and MA 275
Instructor
Michael Wollowski
wollowski@rose-hulman.edu
(812) 877-8650
Office F-218
Teaching Assistants
- Andrew Hopkins
- Jeremy Tramm
- Corey Alexander
- Robert Wagner
- Kurtis Zimmerman
Schedule of lab hours
Required Texts
- Essentials of Programming Languages, SECOND Edition by Friedman and
Wand.. I'll often refer to this book as EPL or EoPL. This is the
main textbook. It is fairly terse, so you will have to read it
carefully. Some sections should probably be read at least twice, with
a few days for "sink in" time and experience between the two readings.
As you are reading, you should try out things with a Scheme
interpreter. An errata
file and most of the code
from the book are available on-line. We will deal with most of the
material from chapters 1-4, and parts of 5-8.
-
The Scheme Programming Language, Fourth Edition by R. Kent
Dybvig. (I'll often refer to this book as TSPL) This book serves
primarily as an introduction to (and reference manual for) Scheme.
The author of Chez Scheme (which we will use for the course) is
also the author of this book. It is full of enlightening examples.
Ideally, as you are reading it, you should be trying variations on
some of the book's examples "live" in Scheme.
The Summary
of Forms at the end of the book is especially useful when you need
to look up Scheme procedures and syntax.
The following
sections are advanced and perhaps should be skipped the first time you
read the book: 3.3, 3.4, 3.5, 5.6, 5.7, 5.8, 5.9, Chapter 8, 9.3, 9.7,
9.10, 9.11. Try reading them later (perhaps after we have talked
about the topics in class).
The book is available on-line at
http://www.scheme.com/tspl4/; Paper copies my be obtined in the
bookstore. You don't need to buy the book if the online works well
enough for you.
-
You should plan to do a lot of reading for this course,
especially during the first two or three weeks.
- How to Design Programs by
Felleissen, et al. This on-line book (you can also buy it in
paperback) is about program design, and about Scheme. If you need a
bit slower introduction than TSPL, or if you'd like to see a
"Schemish" perspective on elementary programming, this book may be for
you.
- Chez Scheme System Manual by Cadence Research Systems.
This is not strictly a textbook for the course, but you may find it
helpful if you want to go deeper with Scheme. This manual describes a
number of Chez Scheme procedures that go beyond the standard
Scheme procedures. Available on the web at http://www.scheme.com/csug8
(also on your hard drive after you install Chez Scheme Petite).
You will need a Scheme interpreter. The official Scheme
interpreter/compiler for CSSE 304 is Chez Scheme. You may use
another Scheme environment if you wish, but I will use Chez to
test your code, so make sure that anything you submit works there.
The full commercial Version 7 of Chez Scheme is available
on acadcomp-cra.rose-hulman.edu, abacus.csse.rose-hulman.edu, and
sliderule.csse.rose-hulman.edu. Simply type
scheme
or
scheme
filename.ss
to start the Scheme interpreter. You can
comnnect to these machines using SecureCRT (which should be on your
laptop) or any other ssh client (such as puTTY - http://www.putty.org.
The "petite" (interpreter-only)
version of Chez Scheme is available for download for a Microsoft
Windows or Linux machine from http://www.scheme.com. You should
install it on your laptop computer. On exams, I may require you to
write some Scheme code and get it working; you may not be allowed to
connect to the network.
You may use any text editor to create your Scheme code. The one that
I recommend is Emacs. It has a steep learning curve, but a big
payoff. In class, I will show you some good reasons for choosing
Emacs as your Scheme editor. Gnu Emacs is available from
http://www.gnu.org/software/emacs/
The Emacs and Scheme document
describes the use of emacs with Scheme.
Point Distribution and Attendance Policy
45% | Homework, Programs, Quizzes, in-class exercises |
15% | Exam 1 (primarily on Scheme) |
20% | Exam 2 |
20% | Final Exam |
Regardless of your overall course average:
- you will not pass the course unless you have a score on at
least one of the three exams that is better than marginally passing.
- if your score on the Final Exam is outstanding, I may give you a grade that is higher than your average would
indicate. Some people who start slowly do finally "get it" by the
end of the course.
- if your final exam score is disastrous (e.g., class average is 70,
your score is 30), I may give you a grade that is lower than your
average would indicate.
- if you choose not to participate in a reasonable way with partners
and groups on exercises that are so designated (thus lessening the
learning experience of others in the course as well as your own), I may assign you a
grade that is lower than your average alone indicates. Special note:
Shutting out other willing group members and doing everything yourself
does not constitute "participating in a reasonable way".
In summary,
your average is the starting point for your grade. In most cases, it
is also the ending point, but I reserve the right to use my judgment
in cases where it is clearly appropriate.
Students with more than two unexcused absences from class may be
asked to drop the class. A fourth unexcused absence will usually
result in a grade of F for the course. It has been my experience that
absences from class usually involve the students who can least afford
to miss class. If you think you are the exception to this rule,
please discuss it with me.
Policy on Late Work
Written problems and quizzes must be turned in on time if you want
credit for them.
We all have days when we are extremely busy, or times when a
program takes longer to complete than we expect it will. To account
for this, I give each student a “late day bank
account” that starts with three late
days.
- Using (withdrawing) a late day allows you to turn in
any programming assignment up to 24 hours after the
time it is due.
- You may earn (deposit) a late
day by turning in an assignment at least 24 hours early. There is no
limit to the number of late days you can save up.
-
Only one late day may be used or earned on any one assignment.
- Overdrafts are not allowed. If your late
day account is empty, you should take it as a sign that you need to
change your approach to the course. If your account is empty and
you submit an assignment late, you will receive no credit.
-
Unused late days are not redeemable at the end of the term.
Notification for a deposit or withdrawal: You do
not have to do anything for deposit. To withdraw, you need to email
me before the assignment due date.
Some particular assignments may be designated as ”no late
days“ assignments. This might happen because:
-
there is an exam the next class day or the day after, so I want to
discuss some solutions right away; or
- what we will do in
the next class depends heavily on this assignment.
Academic Integrity
See the CSSE
department
statement on academic honesty. Dishonesty on assignments or exams may
result in a lowered course grade (possibly an F), and/or
disciplinary action.
I encourage you to discuss the problems and general approaches to
solving them with other students. But when it comes to writing code,
it should be your own work (or the work of your group if it is a
group or partner assignment). If you are having trouble understanding
how some pre-defined Scheme procedure works or pinning down a run-time or logic
error in your program, by all means talk to someone about it.
If you
use someone else's ideas in your solution (or any other work that you
do anywhere), you should
- give credit to that person in the comment section of your
program, and
-
be sure that you understand it as well as if it were your
own.
- If you are ever in doubt about
whether some specific situation violates the policy, the best
approach is to discuss it with me beforehand. This is a very
serious matter that I do not take lightly. Nor should you.
In general, you should not look at another student's code to
get ideas of how to write your own code. Beginning the
process of producing your solution
with an electronic copy of work done by other
students is never appropriate.
On exams and quizzes:
Unless explicitly stated otherwise, all work on tests, quizzes, and exams is to be individual. Of course you may not copy work done by other people taking that test. Most exams will be open book and notes, but those notes must not include copies of previous years' tests or homework problems or their solutions (except those that I have posted on the course web site). Since you can use your computer for reference during the exams, you may not have these previous solutions in electronic form, either. The general rule is that you may not bring anything to the exams that will give you an advantage over someone else who is not as well-connected to the past as you are.
Penalties: My minimum penalty for a first offense is
twice
the value of the assignment or exam. Thus if you cheat on any part of
an assignment that
is worth a total of 60 points, your maximum score for that assignment will be -60.
If you cheat on a 100-point exam, your score for the exam will be
-100. The philosophy behind this is that if it comes down to a choice
between submitting someone else's work and submitting nothing, your
expected score should be higher if you submit nothing.
If you get into a position where you can't complete an assignment
legitimately,
the correct approach is to not submit the assignment and
then to discuss with me how to improve your situation.
Classroom Etiquette
The basic rule for the classroom is:
Don't do anything that will
detract from your learning or that of people around you.
Such things include missing class, talking to other people about
things unrelated to the course, chewing gum noisily, connecting your
computer to the network and using it for things unrelated to the
course, refusing to work with a partner on a class activity.
Your computer can be a great tool in class, or it can be a distraction
for you and for others around you. Please don't let it become the latter.
The other rule is: Do things that will enhance your (and everyone's)
learning. In general, no question is too dumb. Ask them; other
students will generally be grateful that you did. I will usually ask
a number of questions in class. You should try answering them aloud.
Sometimes your incorrect guesses may even lead to a more useful discussion
than if you give a correct answer right away!