Please report (by email) anything that appears to be an error (including misspellings) or a broken link
At the top of the Moodle course page, there is a page that has links to the most important web pages for this course.
Day 1 of the Schedule Page also has many useful links.
Recommendation: go to the course Piazza page to "Edit Email Notifications" for this course and set your preferences for "real-time" and "automatically follow ..."
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). We 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
Official prerequisites: CSSE 230, or permission of the instructor.
My actual initial expectations of you: I hope that each student coming into this course
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 comes with SWL, a primitive IDE that many students use for the first part of the course.
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 version 8.5. 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; SWL is very limited. |
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 and not the mouse?) 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. |
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! |
40% | Homework, programs, quizzes, in-class exercises, interpreter project |
---|---|
60% | Exams
Exam1 15% (Monday, December 21, 6:30-9:00 PM) . Exam2 20% (Tuesday, Feb 2, 6:30-9:00 PM) . The Environments and Closures part of this exam may happen earlier in the term during a regular class time. Final 25% (during exam week, time to be announced by the registrar). |
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. | |
Attendance :
AN EXPERIMENT FOR THIS TERM: For the first part of the term (and probably beyond), I am trying a new policy. You will have a choice of attending the synchronous class meetings, or watching the video afterward. I will do my best to post each Zoom video before the end of the class meetings. If you come to the class meetings you will be able to interact with me and with other students, but the content will be there in the session videos (as long as there are no recording glitches. There may be some sessions that I designate as mandatory for all students. I will re-evaluate during the break and decide whether to continue this policy. |
What the Rose-Hulman Rules and Proceduress 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
hinder other students' course progress 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 with Subject line CSSE 304 bug report.
This term I am creating a lot of new documents and significantly revising old ones, so you are likely to have many opportunities to report errors.
Extra credit points may also be given to students who frequently ask/answer questions on Piazza (but not if what you write is anonymous).
These will cover material from the lectures, readings, and homework. Exams will usually contain written questions on concepts and some pencil-and-paper (or word processor) 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.
Winter, 2020-21: I plan to use the Respondus Lockdown Browser and Monitor for the Moodle portions of the exams. You will need a webcam and microphone, connected to a Windows machine or a Mac. You should try the practice quiz very early in the course, in case there are problems that you need to resolve before the exam.
If varsity athletes or members of courses or RHIT music groups have practice or class on Tuesday evenings, you can make arrangements with me to begin the exam later than 6:30.
The first exam (Monday evening, Dec 21 6:30-9:00 PM) 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 functional programming and box-and-pointer diagrams.
The second exam (Tuesday evening, February 2 6:30-9:00 PM) 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 evening exam. You will probably be asked to add a small enhancement to your interpreter project.
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 evening 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 entitles you to extra exam time,
please let me know during the first two weeks of the course, so we can make arrangements.
The "written" parts of the exams will be closed book and notes. For the computer parts, 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.
Warnings: It is unusual for students who do poorly on an 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 or refocus 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.
The material from the last three weeks of the course is considerably harder than the earlier course material,
which results in several problems on the final exam being significantly harder than the previous exam problems.
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. Some days I may instead provide notes pages that serve a similar purpose but will not be collected. Use them if they help you.
Unless I specify differently for a particular assignment, 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 weekday (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 of the early assignments (first half of the course) 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.
This term in our "partially flipped" environment, there will sometimes be in-class time to work on homework so that there is not so much to do outside of class
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.
You are, however, allowed to develop code together with an in-class group, and everyone in the group can use that code.
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 60 characters long (causing wraparound and general unreadability of the grading server's output). You should follow these style guidelines:
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.
All written problems 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.
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.
How to check your late day balance: There is a link near the top of the schedule page, just above the session quick links
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 to 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.
Most announcements will be posted on Piazza, so there will be a long-term record of them. Piazza is also a place for students to ask questions and answer other students' questions. Be sure to check out the CSSE 304 Piazza course. You probably want to set your email notifications to "real-time" and "follow all". When an announcement is about something that will happen that will happen within 24 hours, I will often tell Piazza to override your email settings so that everyone gets the message.
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
Student assistant lab hours. 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:
Omar Fayoumi (fayoumoa)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.
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.