Engineering Computing

Welcome to PI

General Information

Welcome to Programming Interactively!

This handout might possibly be a bit too bureaucratic, since it is drawn from one that was written for a less flexible and fluid and otherwise friendly institution than this one. Still, it's probably a good thing to have and to look at because it lays out the expectations for this course pretty thoroughly. You are, of course, responsible for its contents.

This handout -- as well as other course information -- is available on the web via the course web page,


  • Course Staff
  • Course Materials
  • Course Components
    • Course Meetings
    • Final Project
    • Grades
  • Laboratories
    • Pre-lab
    • In Lab
    • Post-lab
  • Expectations and Policies
    • Missed Meetings
    • Religious Holidays
    • Late work
    • Distribution of Handouts/Notices
    • Collaboration
  • Where to Find Additional Information

Course Staff

What an incredibly bureaucratic title! You've probably already figured out that the professor in this course is Lynn (Andrea Stein). I usually hang out in AC312 (the Computers and Cognition Lab) or occasionally in OC358 (Lynn's empty office). x2525 rings both places, and of course you can email me at las. I'm also happy for you to IM me (screen name available on request, I just don't really feel like posting it on the web).

Ben (Vandiver) is making a special encore appearance, trying to keep Lynn in line. It's an encore not only because you all had the pleasure of seeing Ben's work last semester, but also because once upon a long time ago, Ben taught a precursor to this course at that very same less flexible, fluid, etc. place. So he knows the ropes as well as anyone on campus except Lynn and maybe Gus (see below). Ben can be found in OC359 (sometimes), at x2530, or email at benmv or AIM metametagenie.

Behind the scenes, there are several other people who help to make this course run. Holly Bennett is the official course support person; Gus Heck works on the CCL research project that created this course and will be doing a lot of code support, etc., as well as maintaining the website; Dan Goessling and Linda March keep the CCL (computers and organization, respectively) running. Details on how to find everyone and what to blame us for are online here.

Course Materials

Text: The textbook for this course is a draft of Interactive Programming in Java (IPIJ). There are pros and cons to using a book that's not yet published, and I'm sure you'll run into both. Feedback on the text -- especially in the form of detailed comments or constructive suggestions -- are entirely welcome. We even have a bugzilla site (available off the root page of this server) if you really want to tell us what you think.

Reference: There is no required reference for this course; the textbook plus a web reference such as Java's API documentation should be sufficient. However, some people prefer to have a paper reference in addition to the on-line reference. We are currently evaluating copies of books for purchase by the library. Please let us know what you think of any books you try. More information will be available in class.

Course Components

Course Meetings

The class meets Tuesday and Thursday from 9:45am until 11:15am in AC318. See attached syllabus and the section on missed meetings, below.

In addition to lecture, each student will be assigned to a three-hour weekly laboratory session (Monday, between noon and 6pm). Your lab assignment will be decided on the first day of class. See the section on laboratories, below, for further information.

Assignments and Grades

During the term, there will be approximately seven regular laboratories, three written assignments, and a final team project involving software development as well as oral and written presentation. There will also be frequent peer assessment and a strong expectation of class participation. Finally, we reserve the right to hold up one or two examinations during the semester or final exam period.

Laboratory assignments have three parts: pre-lab preparation, in-lab programming work, and post-lab writeup. You should expect to spend up to 3 hours on the lab outside of class, but generally no more than your 3 scheduled lab hours on programming. Labs are designed to reinforce the programming concepts that you will be learning but also to build design and debugging skills and to familiarize you with software development as an ongoing process.

Examinations, if given, will cover Java programming and conceptual understanding in ways that may be difficult to assess during the laboratory sessions.

The final project will occupy the laboratory meetings during the last month of the course. All final projects will be group projects. The final project will include design and programming components as well as a substantial written document (such as a user's manual) and an oral presentation. Each of these components will be included in the project grade.

Your grade in this course will be a weighted mixture of the evaluated elements of the course (laboratories, written assignments, exam(s), and final project) together with the assessment of your understanding of course materials made by the course staff, e.g. in laboratory check-in and check-out interviews, participation in class meetings, etc.

To earn an A in this course, you should regularly demonstrate mastery of the material, have a strong understanding of and performance in laboratory work, be a valuable participant in course meetings and collaborations, and complete all portions of the course work in a timely fashion. For example, at the end of the course, you should be able to lead a team in designing and building a complex networked video game.

To earn a B in this course, you should demonstrate a solid grasp of most of the course material, competently perform laboratory work, participate in course meetings and collaborations, and complete all portions of the course work in a timely fashion. For example, at the end of the course, you should be able to independently design and build a simple networked video game.

To earn a C in this course, you should demonstrate a sufficient understanding of the course materials that you can go on to build on that understanding in subsequent courses or employment, participate in course meetings and collaborations, and complete all portions of the course work in a timely fashion. For example, at the end of the course, you should be a solid contributor to a team that designs and builds a networked video game.

If none of the three descriptions above fits you at the end of this course, there are two possibilities:

  1. Your understanding of the material and demonstrable performance of that understanding is inadequate to build on in subsequent coursework. In this case, you are ineligable for a passing final grade.
  2. Your understanding of the material and demonstrable performance is adequate to receive a C or higher, but you did not participate in course meetings and collaborations or you did not complete all portions of the course work in a timely fashion. In this case, your final grade will be adjusted to reflect this factor as follows:
    • Missing one laboratory or one assignment may cause the loss of a letter grade.
    • Missing three laboratories or assignments, or failure to complete the final project, may cause the loss of two letter grades.

Late work will not be accepted and may be treated as missing work. There is a laboratory assignment almost every week, and we will work with you to move on to the next assignment. Always turn in what you have completed on time rather than delaying in the hope that you will be able to do more.


Laboratory sessions are an essential part of the course. Each week, a laboratory assignment will be distributed to students. This assignment will generally have three parts: preparatory work, in-lab work, and post-lab work.


Students are expected to come to their assigned laboratory session having completed the preparatory work. When you arrive at the lab, we will check you in. (Typically, this will involve asking you questions about your preparatory work and/or asking to see your development plan for the laboratory.) In general, you are not expected to have begun the programming of the laboratory assignment before coming to lab; however, you are expected to have spent time outlining the program that you intend to write and to have planned the various steps that you will take during your three hour lab.

Students who do not prepare adequately for lab will be denied admission to the laboratory. There is a nice seating area nearby where you can go to work. However, time spent preparing during lab will cut into your supervised lab time and we do not have extra times available. Failure to check-in to your assigned lab will be reflected in your grade for that laboratory.


Each laboratory assignment is designed so that there is a range of work that might solve the problem. You should begin by implementing a simple piece or version of the solution. When this works to your satisfaction, you should build on additional features or behavior. The laboratory assignment will indicate a target portion to be completed in lab. Often, you will be asked to design test cases as a part of the pre-lab exercises or to share code and test cases with your classmates.

When you are done with your assignment, or when the lab session is nearing its end, you should ask us to check you out of lab. Check-out consists of a discussion between you and us about your work. During this discussion, you will probably be asked to show your code in operation; to discuss how your code works; to display part or all of your code; to answer some questions about how your code might behave; and to test some or all of these hypotheses. You may be left with some questions or issues to think about, including some possible modifications to your code.

As a rule, you are not expected to spend any time outside of the laboratory session at a computer, programming. Of course, you may do so if you would find it helpful at any point: to try out the programs and environments that we provide; to test hypotheses; to develop intuition; or just to have fun!

Your grade on the laboratory will be based on how well you complete the target portion of the assignment. In general, it is better to do this part well than to go beyond the target portion.

You may leave lab as soon as your work is done and you have been checked out. Please try to ensure that you are ready to leave (i.e., checked out) when your lab session ends or -- at least -- at 6pm.


After the laboratory session ends, you should write up and turn your completed assignment on the specified due date. Although the details of the post-lab writeup will vary from lab to lab (and from student to student), you can expect that it will generally include:

  • any written or "finger" exercises from the laboratory assignment;
  • a description of your lab development plan;
  • a discussion of what you did during the laboratory;
  • a written evaluation of your lab-work, including a comparison with your development plan;
  • answers to any questions that may have arisen during lab and check-out;
  • and of course any additional material indicated in the post-lab section of the laboratory assignment.

We may also ask you to include

  • a printout of the final version of any code that you wrote (including documentation),
  • information about the code running (e.g., transcripts or empirical description(s)),
  • a brief account of how much time you spent on which portions of the assignment (including any parts that were particularly problematic),
  • and a list of any collaboration. (See the course collaboration policy for details.)

Expectations and Policies

Missed Meetings

You are responsible for all material covered in each lecture and recitation unless otherwise indicated. This material may not be covered elsewhere, so if you miss a meeting, you are responsible for getting notes from a friend or otherwise making up the material. Handouts will not be distributed on paper outside of class, but all course handouts will be made available on the course web site.

Attendance at laboratory is mandatory. If for any reason you cannot attend your scheduled laboratory session, it is your responsibility to make alternate arrangements with us as far in advance as is reasonably possible. In particular, if you have travel plans or another scheduled conflict, we expect that you will discuss this with us as soon as the conflict is scheduled. We understand that unforseen events do arise (see below); however, your brother's wedding is (probably) not one of them.

The only exceptions to this policy (i.e., last-minute or after-the-fact rescheduling) will be in cases of significant and unanticipatable emergency. In these cases, we request a note from the Medical Department or the Dean's Office. In addition, we would appreciate it if you would make an effort to notify the course staff at the earliest possible opportunity so that we can adjust accordingly.

Religious Holidays

There are a few times during the term when a religious holiday conflicts with a course meeting. If this will cause difficulty for you, please let us know at the beginning of the term so we can make plans.

Late Work

Laboratories are due on Wednesday at 5pm in room AC312 unless otherwise specified. Other assignments will have due dates clearly indicated. Late work will not be accepted.


This section details the general course collaboration policy. Certain assignments require different kinds of, or restrictions on, collaboration. When the collaboration policy differs from that described here, it will be specified in the laboratory assignment.

We encourage you to work together on the pre-lab exercises. They are designed for working in small groups, allowing you to help each other learn and to balance your knowledge and strengths. Note that collaboration extends to discussion and problem-solving, but not to writeups. We expect that any written work you turn in will be your own, though it may reflect joint preparation.

Laboratory work is a more complex topic. It is often useful to discuss your program with peers or with course staff, and we strongly encourage this. It is particularly useful to do so as a means of debugging your program. Reading code written by others and having others critique your code are good ways to improve your programming style. However, it is of no benefit to you or to anyone else to have someone else actually do your laboratory work. We expect that the default assumption (i.e., unless specified otherwise) is that laboratory assignments are your own work, but may reflect input from others just as an essay edited by friends might. You should be the one who wrote the code you turn in.

Some labs, and the final project, will involve more explicit collaboration. In those cases, we will explicitly specify ways in which labs can be broken up, so that each person writes code but no one person writes the whole program, or indicate explicitly that a particular lab or portion of the lab may be programmed together, as a team. Even in this case, it is important that each team member have an opportunity to independently compose some code. Since the pre-lab will generally involve designing the code that you are going to write, it is best to also allocate responsibility for pieces of the code to members of the team at that time.

In each piece of work that you turn in, you must specify everyone with whom you have collaborated and each person's role in the collaboration (e.g., pre-lab, post-lab discussion and analysis, in-lab coding (specify which pieces or how responsibility was distributed), debugging, or advice). Failure to specify such collaboration will be interpreted as a statement that you have not collaborated with others in your work. While this is acceptable under course policy, it is probably ill-advised. (Really. We want you to work together and to learn from each other!)

Examinations are diagnostic in nature and as a consequence should represent independent work.

Of course, copying of the work of others is entirely unacceptable.

We also encourage you to make use of the course-wide mailing list and other communication mechanisms that we will set up.The course-wide mailing list is archived; you can read the archives by following the link from the course home page.

Where to Find Additional Information

The primary source of information for this course is the world-wide web. The home page for the course is located at Course materials will be made available there. Check this page regularly for news and updates.

Questions, comments, gripes and other communication to
This course is a part of Lynn Andrea Stein's Rethinking CS101 project at the Computers and Cognition Laboratory and the Electrical and Computer Engineering area at Franklin W. Olin College of Engineering. Olin College Logo