CSSE 304 Syllabus and Policies

Rose-Hulman Institute of Technology
Department of Computer Science and Software Engineering
Winter 2018 (a.k.a. 201920)
This syllabus has been updated for Winter, 2018-19.
There may be a few minor changes/corrections in the future.

Please report anything that appears to be an error or a broken link

 

Table of Contents

Instructor RHIT Catalog Course Description Prerequisites/Background
Required Texts Other Possible Resources Software
Grade Components and Attendance Policy Course Schedule Page Exams
Homework, programs, quizzes, etc. Policy on Late Work Suggestion Box
Academic Integrity Classroom Etiquette Email and the Discussion Forums
Other Sources of Help Fun Course materials online

Instructor: Claude Anderson

Office Phone: (812) 877-8331 (8331 from campus phones)
Campus Mail #98
Office F-210 (northeast corner of the top floor of Moench Hall). 
Whenever I am in my office (except during 1st hour on class days) I am happy to talk with you. 
The most likely times to find me there are MTRF periods 5-7, and Wednesday hours 4, 5, and 7,   
In most days' in-class announcements, I will list my expected available hours for that day.  
Feel free to make an appointment or to just drop in. 
I also try hard to keep my online schedule up-to-date.
Email: anderson at rose-hulman.edu (please see my note below about including 304 in your email subject lines)

Better electronic contact info for this course
Better Email: csse304-staff@rose-hulman.edu (goes to me and all of the student assistants)
Better still for questions about assignments, Scheme, etc. CSSE 304 on Piazza (https://piazza.com/rose-hulman/fall2018/csse304)

Where to find Online Course Materials

General course information (schedule, assignments, PowerPoint slides, resources) will be posted on the web at http://www.rose-hulman.edu/class/csse/csse304, which redirects to the schedule page.  I suggest that you bookmark that page in your browser so you can go directly to it without having to log into Moodle. You will go there often! Note that the schedule page, PowerPoint slides, assignments, etc. will be updated as the term progresses. The course's dynamic content (e.g. surveys, solutions, grades) will be on Moodle, but your main sources of information about the course are the Schedule Page and things that are linked from it.

Q&A and course announcements made between class sessions will mostly be on Piazza and/or the announcements page.
Recommendation: go to Piazza's "Edit Email Notifications" for this course and set your preferences for "real-time" and "automatically follow ..."

Back to Table of Contents

RHIT 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.

Instructor commentary:
This course presents an implementation approach to the study of programming language concepts. Rather than looking at several programming language features "from the outside" — only a user's perspective — I will instead get an inside view by implementing many of the features ourselves, via a series of interpreters (the languages will mostly be subsets of Scheme). I will use the Scheme programming language to provide a laboratory environment in which to write the interpreters and to illustrate various programming paradigms and concepts.

In the first part of the course, you will become familiar with the laboratory equipment (the Scheme language and environment), while encountering some new concepts and programming paradigms. In the second part of the course you will encounter several more new concepts, along with their implementations.  In the final part of the course, you will (with a partner) write your own interpreters for some small programming languages (mostly subsets of Scheme). I will also examine continuations, syntactic extensions, dynamic binding, engines, and coroutines, plus various scope and parameter-passing rules.

My main goals for the course are to

Back to Table of Contents

Prerequisites/Background

Official prerequisites: CSSE 230, or permission of the instructor.

My actual initial expectations of you: I hope that each student coming into this course

Back to Table of Contents

Required Texts

You should plan to do a significant amount of reading for this course, especially during the first two or three weeks.

Back to Table of Contents

Other Possible Resources

Back to Table of Contents

Software

SCHEME

We will use Chez Scheme, authored by R. Kent Dybvig.  Note that chez is a French word that rhymes with way.  I will be using version 9.5 in class, and you may want to do the same thing,  But you probably also want to install Petite Chez Scheme version 8.4 (32-bit non-threaded version), since that version is used by the PLC grading server.  If the server rejects code that you wrote using version 9.5, you may want to try it in version 8.4 on your computer.

The Assignment 0 document has brief instructions for Scheme installation.

EDITORS

When using Chez Scheme on your laptop or another computer, you may use any text editor  to create your Scheme code. Examples:

Editor Comments
SWL This rudimentary IDE comes with Petite Chez Scheme. It's an easy editor to learn to use, so I recommend that you use it for day 1 of the course. Then find a better editor as soon as you can.
Gnu Emacs This is my favorite editor for Scheme. It has keyboard shortcuts for many Scheme related operations (such as cutting and pasting the next Scheme expression), or transferring code from your editing window to a Scheme window.
Emacs has a fairly steep learning curve. If you'll invest a few hours in discovering and practicing approximately 30 keyboard shortcuts, it will be a great editor for you, especially if you like to avoid using the mouse or trackpad. (Curiosity: Have you ever noticed that in most movies people, especially the hacker types, who are using a computer only use the keyboard?)
Don't want to invest that time? Try one of the editors below.
Sublime Text with SublimeREPL I have seen several students using this, and they seem to like it.
As far as I know, none of the editors below support running Scheme directly in the editor, but that is not essential.
Notepad++ My favorite general editor (I am using it to edit this document). It also does a decent job of highlighting and indenting Scheme code.
Visual Studio Code Growing in popularity at RHIT. Has at least one Scheme plugin. I have seen at least one 304 student use it for Scheme editing.
Notepad Don't go there. Just don't!

Back to Table of Contents

Grade Components and Attendance Policy

30% Homework, programs, quizzes, in-class exercises, interpreter project
70%Exams
  Exam1  20% (Tuesday, Dec 18, 7:00-9:30 PM  G308, G310, G315, G317) . 
                        There will be a regular class meeting on Tuesday morning.  Class will be canceled on a different day.
  Exam2  25% (Tuesday, Jan 22, 7:00-9:30 PM,  G308, G310, G315, G317) .   
                       There will be a regular class meeting on Tuesday morning.
                       It is likely that the Environments and Closures part of the exam will happen during a regular class meeting
  Final   30% (during exam week, time and place to be announced by the registrar). 
                       Even if the final happens on Thursday afternoon, you must be there,
                       so do not buy early plane tickets before exam dates are announced.

 Everyone must take the final exam.
Professor's judgment: Your numeric average is the starting point for your grade. For almost all students, it is also the ending point, but I reserve the right to use my judgment in cases where it is clearly appropriate to do so: adjustment for poor attendance, for excellent participation, or for other instructor knowledge of what the student can do.  Usually those adjustments are in the upward direction.  Here is an example where the adjustment may be downward: a student gets near-perfect scores on most homework assignments but bombs every exam.  Further investigation reveals that the student got homework answers from someone (or somewhere) else.
In order to receive a passing grade in this course, both your homework average and exam average must be within 5 points of the passing level.
In order to receive a C in the course, your exam average must be at the D level or better.
In order to receive an A in the course, Your exam average must be at the B level or better.
Attendance is required: If you will not be able to be in class, please send me an email in advance. I have observed that frequent absences from class usually involve the students who can least afford to miss class. If you think you are an exception to this rule, please discuss it with me. I reserve the right to give a failing grade for the course to any student who (at any time during the term) has missed or been significantly late for 20% or more of the class meetings so far. The Stipulation section of the Rose-Hulman Academic Rules and Procedures says A student whose total absences in a course, excused or unexcused, exceed two per credit is liable to fail the course.

What the Rose-Hulman Academic Polices manual says about grades that are B or higher:  "B" and "B+" indicate very good performance, definitely above a satisfactory level, but not as good in analytical thinking and originality as that required for the grade of "A." Thorough competence to do excellent work in the field is required for the grades of "B" and "B+" which will not be given for mere compliance with the minimum essential standards of the course.

Extra credit: Bounty for discovering new textbook errata or errors in course documents:
If you are the first to report an error or broken link, you will receive some bonus homework points. The number of points will be based on the importance and subtlety of the error. Even spelling errors will count for something.  If the error is substantial and likely to affect other students until it is fixed, report it in the Piazza csse304 Bug Reports folder. If it is a minor error, send an email message to me (don't forget to include 304 in your subject line). 

Extra credit points may also be given to students who frequently ask/answer questions on Piazza.

Back to Table of Contents

Exams

These will cover material from the lectures, readings, and homework. Exams will usually contain written questions on concepts and some pencil-and-paper code exercises, plus programming problems that you must implement on your computer and debug during the exam. Many exam questions will be intended to check your understanding and ability to apply concepts, rather than simple memorization.

The first exam (Tuesday evening, December 18) 7:00-9:30 PM  308, G310, G315, G317) is primarily on the basics of Scheme, recursive programming, abstraction, and first-class procedures; it will include a few other concepts from class, such as box-and-pointer diagrams.  There will be a written part and a Get-your-code-working-on your-computer part.

The second exam (Tuesday evening, January 22) 7:00-9:30 PM  G308, G310, G315, G317) will also involve a significant amount of programming, but it will focus more on concepts than the first exam does. Environments and closures will be one emphasis; that part may be tested during a class meeting that comes before the break.

The final exam (the registrar will schedule it sometime during exam week) will be comprehensive, but with a major emphasis on the later course concepts, especially continuations, call/cc, and the interpreter project.  All students must take the final exam at the scheduled time. 

If you have a conflict with one of the exam times, please let me know by the end of Day 2 of the course. Otherwise, you should keep these times free in your schedule. 
If you have an accommodation that allows you extra exam time, please let me know a week or more before the first exam, so we can make arrangements.

The written parts of the exams will be closed book and notes. For the computer part, you may use EoPL, EoPL-1, The Scheme Programming Language book, class examples, and any code that you have written, but no other internet resources other than the grading server.

Warning: It is unusual for students who do poorly on an early exam to do significantly better on later exams.  Why? The material is quite cumulative, and if you have not mastered the earlier material, it is hard to grasp the later material.  If you do poorly on exam 1 or 2, you need to significantly increase your effort in the course. But the best thing to do is to get off to a good start so this does not become an issue.

Back to Table of Contents

Homework, in-class quizzes (not)

When I give a reading assignment, I seriously expect you to read it. Some in-class discussions will assume that you have done the reading and understood the "easy stuff" before class. You should ask about any details that you do not understand.

The textbooks, especially EoPL, contain many useful exercises. Some of them will be assigned to be turned in; it is a good idea for you to look at and give some thought to others. I sometimes use unassigned exercises from the textbooks as exam questions.

This course will not have regular in-class daily quizzes. The main purpose of such quizzes in lower-level courses is "glorified note-taking for credit". Many students find that these help them to pay attention in class, and to know what I consider most important from that day's class. But some students find that trying to keep up with the quiz is a distraction from being involved with what is happening next in the classroom. Most days I will instead provide notes pages that serve a similar purpose but will not be collected.  Use them if they help you. 

There may occasionally be an unannounced quiz at the beginning of a class period.  The biggest clue that such a quiz may happen soon is when I say at the end of a class meeting, "Before the next class meeting ..."

Unless I specify differently for a particular assignment (such as the A0 Handin Sheet and A12), all assignments will be due online at 11:59 PM.

During the first 2.5 weeks or so (I call it Scheme-a-thon), a new assignment will be due almost every day (including some Wednesdays)  to encourage you to quickly learn the CSSE 304 lab environment (Scheme). After that there will typically be two programming assignments per week, the most common due dates will be Monday and Thursday.

Each early assignment will require writing several short (and mostly independent) procedures; some later assignments will require writing complex programs that involve many interacting procedures. Some assignments may contain written problems in addition to the programming problems. In order to understand the course material, it is important that you do significant hands-on work with it. Don't let yourself get behind at the beginning of the course.  There will be about 24 assignments, totaling about 120-140 assigned procedures (some of which require helper procedures), the interpreter milestones, and a few written problems.

Most of the early homeworks will be individual assignments. You are of course allowed to talk to other people about the concepts and even the Scheme mechanisms needed for an assignment, but the code you turn in should be yours, done without copying other people's solutions (including solutions from previous terms or solutions posted on the internet). You should be prepared to explain your solutions to both individual and pair-programming problems if you are asked to do so.

Every submitted file should begin with comments that include your name(s) and a description of the file's contents. Procedures for each problem should begin with a comment that includes the problem number. All procedures should have reasonable and consistent variable names, comments, style, and indentation. Your code should generally not contain lines that are more than 80 characters long (causing wraparound and general unreadability of the grading server's output).   Please follow these guidelines for indentation.

Your solutions should be ordered by problem number.

Most programming assignments will be submitted using the PLC grading server, https://plc.csse.rose-hulman.edu/

The assignments are cumulative: Many of the assignments depend heavily on understanding the previous assignments; several assignments will involve various stages of writing an interpreter for a small programming language.

Grades for programming problems will be based primarily on correctness, but style and efficiency may also be considered for some assignments.

Get started early on the programming assignments! Some of the problems may need a day or two of "incubation time" between when you first start thinking about them and when the "lights come on" in your head. Even during Scheme-a-thon, you should try to get ahead by a day or so by the end of the first week.

If you are retaking the course, you may already have written solutions to some of the exercises. I recommend that you do not use those solutions but instead redo those problems, or at least make sure that you still understand them.

If you have a friend who took this course in the past, they may offer you homework solutions, or you may find solutions online.  Don't give in to that temptation.  It will not help your learning in the course.  And it may lead to an academic misconduct violation.

Back to Table of Contents

Policy on Late Work (programming assignments only)

All writtenproblems must be turned in on time if you want credit for them. But ...

...we all have occasional days when we are extremely busy, or times when a program takes longer to debug than we expect it will. To account for this, each student has a “late day bank account” for programming assignments. Your account will start with four late days.

  1. Using (withdrawing) a late day allows you to turn in any programming assignment up to 24 hours after the time it is due.  There will be no credit deduction.
  2. You will earn (deposit) an additional late day if your last submission for an assignment happens at least 24 hours before it is due, provided that you earn at least 70% of the possible points for that assignment. There is no limit to the number of late days you can save up.
  3. Unless I specify otherwise for a particular assignment, at most one late day may be used or earned on any one programming assignment.
    After that one late day has passed, you may not submit that assignment for credit.
  4. Overdrafts are not allowed. If your late day account is nearly 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.  Historically, most students whose late day balance goes to zero before the end of Scheme-a-thon end up dropping the course, because they have not established a good pattern for getting the work done.
  5. Some particular assignments may be designated as "no late days may be used" assignments. This might happen because:
    1. there is an exam the next day, or
    2. the topic of the next class meeting depends heavily on this assignment, or
    3. some other reason that I will explain at the time.

How to notify me of a late day deposit or withdrawal: You do not have to do anything. I will keep track of late days and post everyone's balance on the web. I can think of no better way to notify you.  If you do not want to participate in the late day bank because you do not want your balance to be public, let me know. But then you will not be able to submit any late assignments for credit.

What if you earn a lot of late days by submitting assignments early? Accumulated late days will be worth something at the end of the term.  I will add (# remaining late days)*4  extra-credit homework points.

Academic Integrity

See the CSSE Department statement on academic honesty.

Note that copying from a previous CSSE 304 student's work or from something posted on the web is "dishonesty equivalent" to copying from a current student.

You are encouraged 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 pair if it is a pair-programming assignment). Especially 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 (including code from a previous term PLC course) in your solution (or any other work that you do anywhere), you should

Beginning the process of producing your solution with an electronic copy of work done by other students is never appropriate.

On exams All work on exams is to be individual. Of course you may not copy work done by other people who are taking or who have taken that exam.

Penalties: The minimum penalty for a first homework offense is twice the value of the assignment. 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. 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 cheat on an exam, your course grade will be F.

If you get into a position where you can't complete an assignment legitimately, the correct approach is not submit the assignment, and then to discuss with me how to improve your situation for future assignments.

If in any situation, you are not sure whether a certain kind of collaboration is appropriate, you should ask me beforehand. This is a very serious matter that I do not take lightly. Nor should you.

Back to Table of Contents

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, coming to class without bathing for a few days, using your computer for things that will distract others around you, refusing to work with a partner on an in-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. There will be times in class when I will say, "You should not use your laptop now," and some entire class periods may be designated as non-laptop days. Please comply.

The other rule is: Do things that will enhance your (and everyone's) learning. In general, no question is too dumb. Ask questions; other students will generally be grateful that you did. I will often ask  questions in class. You should try answering them aloud. Sometimes your incorrect guesses may even lead to a more useful discussion than if someone gives a correct answer right away! 

When I give a short in-class exercise and say "talk with someone near you about this question" what I mean is, "talk with someone near you about this question"  I do not mean "think about it by yourself."  If I subsequently ask, "Who are you talking with?", I am trying to help you.  If you find that you are usually sitting by yourself or beside someone who will not talk with you, perhaps it is time to choose a different seat!

Back to Table of Contents

Email and Piazza Discussion forums

When there are announcements that you need to know about before the next class meeting, Piazza will be the usual venue. Be sure to check out the CSSE 304 Piazza course.   You probably want to set your email notifications to "real-time" and "follow all".  I will occasionally send more urgent announcements via Rose-Hulman email.

When you send course-related email to me, please begin the Subject: line with 304: , so that I can quickly pick it out from among the dozens of daily email messages. Also, please make the Subject line as specific as you can.
     For example: 304: Error in the specification of problem 1 on assignment 3 ?

If your question is not personal and if it contains no "spoilers" for pending HW problems, please post it to one of the Q&A folders on Piazza. First of all, you may get an answer more quickly than if you send email to only me. Second, you may get multiple people's perspectives. Third, you will contribute to an active learning community. Piazza can be valuable, but only if you and others participate.

Another alternative is to email me and all of the CSSE 304 assistants mailto:csse304-staff@rose-hulman.edu

If there are issues with the PLC grading server:  mailto:plc-developers@rose-hulman.edu

Back to Table of Contents

Other Sources of Help

Student assistant lab hours in F-217.   A link to the schedule will be posted on the schedule page as soon as the schedule is set.

In addition to the course assistants, other students in the course can be one of your best sources of help. And they will also learn more if they explain things to you. Don't try to be the Lone Ranger in this course, especially if you find the course material difficult. If you find that you have worked on something for 30 minutes since the last time you made any progress, it's probably time to seek help.

Assistants:

Ayyssa Crawford
crawfoaj
        Ev Maquelin
maquelea
        Mitchell Schmidt
schmidmj
       
Qiuyun li
liq1

        Xiao Xin xinx             

Back to Table of Contents

Fun

I do hope you'll enjoy what you will learn and do in this course. If not, feel free to talk with me about the reasons.

Back to Table of Contents

Anonymous Suggestion Boxes

I want your feedback on how the course is going and how it could be improved. While "nonymous" suggestions are even more useful than anonymous ones, I'd like to know what you are thinking even if you do not feel comfortable with letting me know who made the suggestion. Thus the CSSE304 Moodle course page contains a link to an anonymous suggestion box. All I ask is that you will use it for serious suggestions, not just to vent when you are momentarily frustrated. Take a deep breath, count to 10, and if you still have something to say, by all means say it. Sometimes suggestions that students make seem so obvious once I read them, but I would have missed the idea on my own. And of course you can also use the suggestion box to tell me about things you like in the course and don't want me to change them.

In addition to the general anonymous feedback survey, there is another anonymous survey where you can give me feedback about the course assistants.  Are they knowledgeable, friendly, helpful, good communicators, in the lab when they are supposed to be, etc?  I will appreciate your feedback, both positive and negative, and also your suggestions for ways of improving the CSSE 304 TA system.
 

Back to Table of Contents